From 00eaf9a476917056dbe50a09e33b8f1265714526 Mon Sep 17 00:00:00 2001 From: Lily Shen <115414357+lilyshen0722@users.noreply.github.com> Date: Sun, 25 Oct 2026 20:03:50 -0700 Subject: [PATCH 1/5] fix(scout): propose the connect card once the tool and OS are known, however the person arrived The stranger-journey probe passed its card step in 40 of 46 runs. All six failures split at the same turn: after the person answered "macOS", Scout typed the Terminal steps out (5) or offered `agent init` (1) instead of proposing the card. The card rule was tied to the welcome button, so a person who asked in their own words fell through to the "both halves" rule and its inline command. The card rule now fires on the facts, not the entry point: once Scout knows the person runs Claude Code or Codex on an OS where it can join, it proposes the card in that reply. Any other tool or OS never gets a card and gets a plain text answer. The both-halves rule now treats the card as the Terminal half. Native Windows answers match the Connect page: for Claude Code, the MCP line (two PowerShell lines) plus "Run it here"; for Codex, "Run it here" or a Mac or Linux machine. Prompt only; the model is unchanged. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_013ENddpGzhE7S8qjDSYAMuu --- .../nativeAgents.scoutKnowledge.test.js | 23 ++++++++++++++++++- backend/config/native-agents/scout.ts | 22 ++++++++++++++---- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js b/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js index dc744441ac..196d2febbc 100644 --- a/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js +++ b/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js @@ -126,7 +126,7 @@ describe('Scout onboarding knowledge', () => { expect(prompt).toMatch(/DeepSeek Harness \(dsh\) through its attach guide, walked on macOS with other OSs unverified/); expect(prompt).not.toMatch(/On Linux \(WSL included\), Codex only/); expect(prompt).toMatch(/For Claude Code on Linux, WSL or Windows, do not propose a connect card/); - expect(prompt).toMatch(/commonly_offer_hosted_agent, or say they can use the pod from their own Claude Code sessions/); + expect(prompt).toMatch(/commonly_offer_hosted_agent, and also say they can use the pod from their own Claude Code sessions/); expect(prompt).not.toMatch(/Windows is not verified yet/); }); @@ -139,6 +139,27 @@ describe('Scout onboarding knowledge', () => { test('gives both halves when their tool can call agents: the listener and the MCP line', () => { expect(prompt).toMatch(/give both halves: the Terminal command/); expect(prompt).toMatch(/and the MCP line/); + expect(prompt).toMatch(/When the connect card can work for them, the card is the Terminal half: propose it and give the MCP line in the same reply/); + }); + + // Stranger journey 2026-10-20..26: after "Claude Code" and "macOS" in the + // person's own words, Scout typed the Terminal steps out in 6 of 46 runs and + // the card never came. + test('proposes the connect card once the tool and a supported OS are known, however the person arrived', () => { + expect(prompt).toMatch(/once you know they run Claude Code or Codex and their OS is one where that tool can join/); + expect(prompt).toMatch(/propose the card in that same reply, whether they came from the welcome button or asked in their own words/); + expect(prompt).toMatch(/Do not type out the Terminal steps, and do not ask whether they want it set up, in its place/); + }); + + // The answer matches what the Connect page itself offers on that OS + // (agentByo.listen.unavailableClaude / unavailableCodex). + test('never proposes the card for a tool or OS it cannot set up, and offers what the Connect page does', () => { + expect(prompt).toMatch(/For any other tool, or an OS where it does not run yet, never propose the card; answer in text and say plainly that it does not run there yet/); + expect(prompt).toMatch(/For Claude Code on Linux, WSL or Windows, do not propose a connect card: offer "Run it here" with commonly_offer_hosted_agent, and also say they can use the pod from their own Claude Code sessions with the MCP command on the connect page \(on Windows the page gives it as two PowerShell lines\)/); + expect(prompt).toMatch(/For Codex on native Windows, do not propose a connect card either: offer "Run it here", or running Codex on a Mac or Linux machine/); + const en = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../../../frontend/src/i18n/locales/en.json'), 'utf8')); + expect(en.agentByo.listen.unavailableClaude).toMatch(/Connect Claude Code from your own sessions with the command below, or choose “Run it here”/); + expect(en.agentByo.listen.unavailableCodex).toMatch(/Choose “Run it here” for a hosted agent, or run the command on a Mac or Linux machine/); }); // Stranger journey 2026-10-26: Scout wrote the Terminal steps and asked diff --git a/backend/config/native-agents/scout.ts b/backend/config/native-agents/scout.ts index 2f22c35e8b..493ee6d69b 100644 --- a/backend/config/native-agents/scout.ts +++ b/backend/config/native-agents/scout.ts @@ -148,9 +148,12 @@ export const scoutApp = { + 'other OSs unverified. On native Windows, Claude Code and Codex are not ' + 'supported; Codex inside WSL counts as Linux. For ' + 'Claude Code on Linux, WSL or Windows, do not propose a connect card: offer ' - + '"Run it here" with commonly_offer_hosted_agent, or say they can use the pod ' + + '"Run it here" with commonly_offer_hosted_agent, and also say they can use the pod ' + 'from their own Claude Code sessions with the MCP command on the connect ' - + 'page. Say plainly why: it does not run there yet.\n' + + 'page (on Windows the page gives it as two PowerShell lines). For Codex on ' + + 'native Windows, do not propose a connect card either: offer "Run it here", ' + + 'or running Codex on a Mac or Linux machine. Say plainly why: it does not ' + + 'run there yet.\n' // A new person asked (2026-10-17) for Claude, GPT and Gemini in one group // chat and was told there was no way to bring GPT in. Codex runs GPT. // Gemini has no verified path yet: the Bring your own page does not offer @@ -189,8 +192,19 @@ export const scoutApp = { + '- Hiring a ready-made agent from the catalog ("Hire an agent") needs an ' + 'invitation code during beta ("Have an invitation code?" on the Agents ' + 'page). That is separate from "Run it here", which is open to everyone.\n' - + '- You can SET UP their own agent for them: when the user wants their local ' - + 'agent in the workspace, commonly_propose_action with actionType ' + // Stranger journey, 2026-10-20..26: 6 of 46 runs got the Terminal steps + // typed out (or `agent init`) after "macOS" instead of a card, because the + // question arrived in the person's own words, not from the welcome button. + + '- You can SET UP their own agent for them, and the connect card is the ' + + 'answer whenever it can work: once you know they run Claude Code or Codex ' + + 'and their OS is one where that tool can join (see where their own agent ' + + 'can be connected, above), propose the card in that same reply, whether ' + + 'they came from the welcome button or asked in their own words. Do not ' + + 'type out the Terminal steps, and do not ask whether they want it set up, ' + + 'in its place: the card opens the page with the command filled in. For ' + + 'any other tool, or an OS where it does not run yet, never propose the ' + + 'card; answer in text and say plainly that it does not run there yet. ' + + 'The card is commonly_propose_action with actionType ' + 'connect_local_agent, a short lowercase name made from THEIR username and ' + 'what they run, e.g. "sams-claude" or "lee-codex", and adapter "claude" or ' + '"codex" for what they run, so the page opens on that command. Never a ' From 1274b5decb2b87adaef1409d67d07982147dd526 Mon Sep 17 00:00:00 2001 From: Lily Shen <115414357+lilyshen0722@users.noreply.github.com> Date: Sun, 25 Oct 2026 20:22:29 -0700 Subject: [PATCH 2/5] fix(scout): the card waits for the person to name Claude Code or Codex, and goes out only on the listed OSes Rhea's hold on #2765. The prompt is the only guard before the card (approvalActionService checks name and adapter only), so: - The card may go out for exactly Claude Code on macOS and Codex on macOS, Linux or WSL. Every other OS, ChromeOS, iPad, Android and FreeBSD named, gets text and no card. - The Claude app and claude.ai are not Claude Code; the ChatGPT app and chatgpt.com are not the Codex CLI. A bare "Claude" or "ChatGPT" never settles the tool: Scout asks first, and checks the person's own messages, not its own, for "Claude Code" or "Codex" before proposing the card. App-only users are offered "Run it here". - The welcome's connect start proposes the card only when this rule allows it. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_013ENddpGzhE7S8qjDSYAMuu --- .../nativeAgents.scoutKnowledge.test.js | 19 ++++++++++++++- backend/config/native-agents/scout.ts | 24 +++++++++++++++---- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js b/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js index 196d2febbc..cb1b2a7b93 100644 --- a/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js +++ b/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js @@ -146,11 +146,28 @@ describe('Scout onboarding knowledge', () => { // person's own words, Scout typed the Terminal steps out in 6 of 46 runs and // the card never came. test('proposes the connect card once the tool and a supported OS are known, however the person arrived', () => { - expect(prompt).toMatch(/once you know they run Claude Code or Codex and their OS is one where that tool can join/); + expect(prompt).toMatch(/Once they have named Claude Code or Codex and an OS on that list, propose the card in that same reply/); + expect(prompt).toMatch(/then propose the connect card when the card rule below allows it/); expect(prompt).toMatch(/propose the card in that same reply, whether they came from the welcome button or asked in their own words/); expect(prompt).toMatch(/Do not type out the Terminal steps, and do not ask whether they want it set up, in its place/); }); + // Rhea on #2765: the prompt is the only guard before the card, so the pairs + // it may go out for are listed, not inferred. + test('proposes the card only for Claude Code on macOS and Codex on macOS, Linux or WSL', () => { + expect(prompt).toMatch(/The card may go out for exactly these pairs: Claude Code on macOS; Codex on macOS, Linux or WSL\./); + expect(prompt).toMatch(/Any other OS, such as native Windows, ChromeOS, iPad or iPhone, Android or FreeBSD, gets a text answer and no card/); + ['ChromeOS', 'iPad', 'Android'].forEach((os) => expect(prompt).toContain(os)); + }); + + test('does not take the Claude app or ChatGPT for the command-line tool', () => { + expect(prompt).toMatch(/the Claude app \(desktop or phone\) and claude\.ai are not Claude Code, and the ChatGPT app and chatgpt\.com are not the Codex CLI/); + expect(prompt).toMatch(/When they say "Claude" or "ChatGPT" without saying which, ask whether they run Claude Code or the Codex CLI in a terminal, and propose no card until they say they do/); + expect(prompt).toMatch(/A bare "Claude" or "ChatGPT" never settles it, on macOS too, and even when you had asked "Claude Code or Codex": ask that one question first, with no card in that reply/); + expect(prompt).toMatch(/Before you propose the card, check their own messages, not yours: one of them must say "Claude Code" or "Codex"\. If none does, ask instead/); + expect(prompt).toMatch(/If they only use the app, there is nothing of theirs to connect: offer "Run it here"/); + }); + // The answer matches what the Connect page itself offers on that OS // (agentByo.listen.unavailableClaude / unavailableCodex). test('never proposes the card for a tool or OS it cannot set up, and offers what the Connect page does', () => { diff --git a/backend/config/native-agents/scout.ts b/backend/config/native-agents/scout.ts index 493ee6d69b..cd6bddfc7b 100644 --- a/backend/config/native-agents/scout.ts +++ b/backend/config/native-agents/scout.ts @@ -73,7 +73,7 @@ export const scoutApp = { + `"${SCOUT_STARTS[0].label}" and "${SCOUT_STARTS[1].label}". For ` + `"${SCOUT_STARTS[0].label}", find out which tool they run ` + '(Claude Code or Codex) and their operating system, one question per turn, ' - + 'then propose the connect card; in that first reply, also say in one short ' + + 'then propose the connect card when the card rule below allows it; in that first reply, also say in one short ' + 'clause that if they would rather install nothing, Commonly can run one here. ' + `For "${SCOUT_STARTS[1].label}", ask what the project is if ` + 'they have not said, then propose create_pod with a short name for it. ' @@ -195,10 +195,26 @@ export const scoutApp = { // Stranger journey, 2026-10-20..26: 6 of 46 runs got the Terminal steps // typed out (or `agent init`) after "macOS" instead of a card, because the // question arrived in the person's own words, not from the welcome button. + // Rhea on #2765: the OS list and the app-vs-CLI check are spelled out, since + // nothing after the card checks either (approvalActionService checks name + // and adapter only). + '- You can SET UP their own agent for them, and the connect card is the ' - + 'answer whenever it can work: once you know they run Claude Code or Codex ' - + 'and their OS is one where that tool can join (see where their own agent ' - + 'can be connected, above), propose the card in that same reply, whether ' + + 'answer whenever it can work. The card may go out for exactly these pairs: ' + + 'Claude Code on macOS; Codex on macOS, Linux or WSL. Any other OS, such as ' + + 'native Windows, ChromeOS, iPad or iPhone, Android or FreeBSD, gets a text ' + + 'answer and no card. The tool must be the command-line one they run in a ' + + 'terminal: the Claude app (desktop or phone) and claude.ai are not Claude ' + + 'Code, and the ChatGPT app and chatgpt.com are not the Codex CLI. When they ' + + 'say "Claude" or "ChatGPT" without saying which, ask whether they run Claude ' + + 'Code or the Codex CLI in a terminal, and propose no card until they say ' + + 'they do. A bare "Claude" or "ChatGPT" never settles it, on macOS too, and ' + + 'even when you had asked "Claude Code or Codex": ask that one question ' + + 'first, with no card in that reply. Before you propose the card, check ' + + 'their own messages, not yours: one of them must say "Claude Code" or ' + + '"Codex". If none does, ask instead. If they only use the app, there is ' + + 'nothing of theirs to connect: offer "Run it here". Once they have named ' + + 'Claude Code or Codex and an OS on that list, ' + + 'propose the card in that same reply, whether ' + 'they came from the welcome button or asked in their own words. Do not ' + 'type out the Terminal steps, and do not ask whether they want it set up, ' + 'in its place: the card opens the page with the command filled in. For ' From a2605d9a5de00bb3c96a1136a01a1d3d368c6fc7 Mon Sep 17 00:00:00 2001 From: Lily Shen <115414357+lilyshen0722@users.noreply.github.com> Date: Sun, 25 Oct 2026 20:30:51 -0700 Subject: [PATCH 3/5] fix(scout): Codex in ChatGPT gets a question, not the card; a plain "Codex" stays the CLI Rhea's second hold on #2765: "I use Codex in ChatGPT" on a Mac passed every check and got the connect card. Per CTO's ruling, the fix is narrow: Codex said with ChatGPT, the web, the cloud or an app gets a question about the CLI and no card in that reply. A plain "Codex" answers the welcome's "Claude Code or Codex" question and still gets the card. Both directions are pinned. Replay r7: codex-in-chatgpt 0/10 cards (was 10/10), codex-plain-mac 10/10, fail-mac 10/10 with no typed steps. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_013ENddpGzhE7S8qjDSYAMuu --- .../unit/config/nativeAgents.scoutKnowledge.test.js | 7 ++++++- backend/config/native-agents/scout.ts | 9 +++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js b/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js index cb1b2a7b93..a1cff4295f 100644 --- a/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js +++ b/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js @@ -160,8 +160,13 @@ describe('Scout onboarding knowledge', () => { ['ChromeOS', 'iPad', 'Android'].forEach((os) => expect(prompt).toContain(os)); }); + test('asks about Codex in ChatGPT, and takes a plain "Codex" as the CLI', () => { + expect(prompt).toMatch(/A plain "Codex" answers that question and counts as the CLI/); + expect(prompt).toMatch(/When they say Codex together with ChatGPT, the web, the cloud or an app, as in "I use Codex in ChatGPT", ask whether they run the Codex CLI in a terminal, with no card in that reply/); + }); + test('does not take the Claude app or ChatGPT for the command-line tool', () => { - expect(prompt).toMatch(/the Claude app \(desktop or phone\) and claude\.ai are not Claude Code, and the ChatGPT app and chatgpt\.com are not the Codex CLI/); + expect(prompt).toMatch(/the Claude app \(desktop or phone\) and claude\.ai are not Claude Code, and the ChatGPT app, chatgpt\.com and Codex in ChatGPT are not the Codex CLI/); expect(prompt).toMatch(/When they say "Claude" or "ChatGPT" without saying which, ask whether they run Claude Code or the Codex CLI in a terminal, and propose no card until they say they do/); expect(prompt).toMatch(/A bare "Claude" or "ChatGPT" never settles it, on macOS too, and even when you had asked "Claude Code or Codex": ask that one question first, with no card in that reply/); expect(prompt).toMatch(/Before you propose the card, check their own messages, not yours: one of them must say "Claude Code" or "Codex"\. If none does, ask instead/); diff --git a/backend/config/native-agents/scout.ts b/backend/config/native-agents/scout.ts index cd6bddfc7b..107f1d3717 100644 --- a/backend/config/native-agents/scout.ts +++ b/backend/config/native-agents/scout.ts @@ -204,12 +204,17 @@ export const scoutApp = { + 'native Windows, ChromeOS, iPad or iPhone, Android or FreeBSD, gets a text ' + 'answer and no card. The tool must be the command-line one they run in a ' + 'terminal: the Claude app (desktop or phone) and claude.ai are not Claude ' - + 'Code, and the ChatGPT app and chatgpt.com are not the Codex CLI. When they ' + + 'Code, and the ChatGPT app, chatgpt.com and Codex in ChatGPT are not the ' + + 'Codex CLI. When they ' + 'say "Claude" or "ChatGPT" without saying which, ask whether they run Claude ' + 'Code or the Codex CLI in a terminal, and propose no card until they say ' + 'they do. A bare "Claude" or "ChatGPT" never settles it, on macOS too, and ' + 'even when you had asked "Claude Code or Codex": ask that one question ' - + 'first, with no card in that reply. Before you propose the card, check ' + + 'first, with no card in that reply. A plain "Codex" answers that question ' + + 'and counts as the CLI. When they say Codex together with ChatGPT, the ' + + 'web, the cloud or an app, as in "I use Codex in ChatGPT", ask whether ' + + 'they run the Codex CLI in a terminal, with no card in that reply. ' + + 'Before you propose the card, check ' + 'their own messages, not yours: one of them must say "Claude Code" or ' + '"Codex". If none does, ask instead. If they only use the app, there is ' + 'nothing of theirs to connect: offer "Run it here". Once they have named ' From 7c43ed2b173dbc6604a73c3c3ea0636a0a6f3062 Mon Sep 17 00:00:00 2001 From: Lily Shen <115414357+lilyshen0722@users.noreply.github.com> Date: Sun, 25 Oct 2026 20:45:09 -0700 Subject: [PATCH 4/5] fix(scout): the no-card rule points OpenCode, Hermes and dsh to their paths, not a denial CodeRabbit on #2765: "For any other tool ... say plainly that it does not run there yet" told OpenCode, Hermes and DeepSeek Harness users their tool does not run, though the prompt gives each a documented path. They still get no card, and are pointed to that path; only a tool with no path, or an OS its path does not cover, is told it does not run there yet. A test pins the new sentence and that the old denial is gone. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_013ENddpGzhE7S8qjDSYAMuu --- .../unit/config/nativeAgents.scoutKnowledge.test.js | 4 +++- backend/config/native-agents/scout.ts | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js b/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js index a1cff4295f..ac71f116ed 100644 --- a/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js +++ b/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js @@ -176,7 +176,9 @@ describe('Scout onboarding knowledge', () => { // The answer matches what the Connect page itself offers on that OS // (agentByo.listen.unavailableClaude / unavailableCodex). test('never proposes the card for a tool or OS it cannot set up, and offers what the Connect page does', () => { - expect(prompt).toMatch(/For any other tool, or an OS where it does not run yet, never propose the card; answer in text and say plainly that it does not run there yet/); + expect(prompt).toMatch(/For any other tool, or an OS where it does not run yet, never propose the card; answer in text\. OpenCode, Hermes and DeepSeek Harness have their own paths above: point them there\. Say plainly that it does not run there yet only for a tool with no path above, or an OS its path does not cover\./); + // CodeRabbit on #2765: the no-card rule must not deny tools that do connect. + expect(prompt).not.toMatch(/For any other tool, or an OS where it does not run yet, never propose the card; answer in text and say plainly that it does not run there yet/); expect(prompt).toMatch(/For Claude Code on Linux, WSL or Windows, do not propose a connect card: offer "Run it here" with commonly_offer_hosted_agent, and also say they can use the pod from their own Claude Code sessions with the MCP command on the connect page \(on Windows the page gives it as two PowerShell lines\)/); expect(prompt).toMatch(/For Codex on native Windows, do not propose a connect card either: offer "Run it here", or running Codex on a Mac or Linux machine/); const en = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../../../frontend/src/i18n/locales/en.json'), 'utf8')); diff --git a/backend/config/native-agents/scout.ts b/backend/config/native-agents/scout.ts index 107f1d3717..3b63a15c02 100644 --- a/backend/config/native-agents/scout.ts +++ b/backend/config/native-agents/scout.ts @@ -224,7 +224,10 @@ export const scoutApp = { + 'type out the Terminal steps, and do not ask whether they want it set up, ' + 'in its place: the card opens the page with the command filled in. For ' + 'any other tool, or an OS where it does not run yet, never propose the ' - + 'card; answer in text and say plainly that it does not run there yet. ' + + 'card; answer in text. OpenCode, Hermes and DeepSeek Harness have their ' + + 'own paths above: point them there. Say plainly that it does not run ' + + 'there yet only for a tool with no path above, or an OS its path does ' + + 'not cover. ' + 'The card is commonly_propose_action with actionType ' + 'connect_local_agent, a short lowercase name made from THEIR username and ' + 'what they run, e.g. "sams-claude" or "lee-codex", and adapter "claude" or ' From 2baafb09fa319c80f0163677c2a09083b64c96d2 Mon Sep 17 00:00:00 2001 From: Lily Shen <115414357+lilyshen0722@users.noreply.github.com> Date: Sun, 25 Oct 2026 23:41:09 -0700 Subject: [PATCH 5/5] test(scout): drop the card-half assertion that #2778 now covers #2778 settled that prompt line on main ("give only the MCP line in your text") and asserts it there, so this branch keeps main's line and no longer asserts its own earlier wording. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_013ENddpGzhE7S8qjDSYAMuu --- .../__tests__/unit/config/nativeAgents.scoutKnowledge.test.js | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js b/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js index ac71f116ed..75efac5428 100644 --- a/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js +++ b/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js @@ -139,7 +139,6 @@ describe('Scout onboarding knowledge', () => { test('gives both halves when their tool can call agents: the listener and the MCP line', () => { expect(prompt).toMatch(/give both halves: the Terminal command/); expect(prompt).toMatch(/and the MCP line/); - expect(prompt).toMatch(/When the connect card can work for them, the card is the Terminal half: propose it and give the MCP line in the same reply/); }); // Stranger journey 2026-10-20..26: after "Claude Code" and "macOS" in the