Skip to content

Commit ce2f183

Browse files
committed
Clarify Claude tmux bridge tool guidance
1 parent ff82259 commit ce2f183

2 files changed

Lines changed: 21 additions & 12 deletions

File tree

src/loop/tmux.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,7 @@ import {
1212
legacyClaudeChannelServerName,
1313
resolveClaudeChannelServerName,
1414
} from "./bridge-config";
15-
import {
16-
bridgeToolName,
17-
receiveMessagesStuckGuidance,
18-
sendProactiveCodexGuidance,
19-
} from "./bridge-guidance";
15+
import { bridgeToolName } from "./bridge-guidance";
2016
import { getCodexAppServerUrl, getLastCodexThreadId } from "./codex-app-server";
2117
import {
2218
CODEX_TMUX_PROXY_SUBCOMMAND,
@@ -160,16 +156,20 @@ const quotedBridgeTool = (
160156
tool: "bridge_status" | "receive_messages" | "send_message"
161157
): string => `"${bridgeToolName(agent, tool)}"`;
162158

159+
const quotedClaudeTmuxBridgeTool = (
160+
serverName: string,
161+
tool: "bridge_status" | "receive_messages" | "send_message"
162+
): string => `"mcp__${serverName}__${tool}"`;
163+
163164
const pairedBridgeGuidance = (
164165
agent: Agent,
165166
_runId: string,
166167
serverName: string
167168
): string => {
168169
if (agent === "claude") {
169170
return [
170-
`Your bridge MCP server is "${serverName}". All bridge tool calls must use the mcp__${serverName}__ prefix.`,
171-
sendProactiveCodexGuidance(),
172-
receiveMessagesStuckGuidance,
171+
`Your bridge MCP server is "${serverName}". Use ${quotedClaudeTmuxBridgeTool(serverName, "send_message")} with target: "codex" for Codex-facing messages, including replies to inbound Codex channel messages; do not send Codex-facing responses as a human-facing message.`,
172+
`Use ${quotedClaudeTmuxBridgeTool(serverName, "bridge_status")} or ${quotedClaudeTmuxBridgeTool(serverName, "receive_messages")} only if delivery looks stuck.`,
173173
].join("\n");
174174
}
175175

tests/loop/tmux.test.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -799,10 +799,14 @@ test("tmux prompts keep the paired review workflow explicit", () => {
799799
expect(peerPrompt).toContain("Wait for Codex to send you a targeted request");
800800
expect(peerPrompt).not.toContain('"reply"');
801801
expect(peerPrompt).toContain(
802-
'Use "send_message" with target: "codex" for Codex-facing messages, including replies to inbound Codex channel messages; do not send Codex-facing responses as a human-facing message.'
802+
'Use "mcp__loop-bridge-repo-123-1__send_message" with target: "codex" for Codex-facing messages, including replies to inbound Codex channel messages; do not send Codex-facing responses as a human-facing message.'
803803
);
804804
expect(primaryPrompt).not.toContain("mcp__loop-bridge-repo-123-1__ prefix");
805-
expect(peerPrompt).toContain("mcp__loop-bridge-repo-123-1__ prefix");
805+
expect(peerPrompt).not.toContain("mcp__loop-bridge-repo-123-1__ prefix");
806+
expect(peerPrompt).toContain('"mcp__loop-bridge-repo-123-1__bridge_status"');
807+
expect(peerPrompt).toContain(
808+
'"mcp__loop-bridge-repo-123-1__receive_messages"'
809+
);
806810
});
807811

808812
test("interactive tmux prompts tell both agents to wait for the human", () => {
@@ -839,13 +843,18 @@ test("interactive tmux prompts tell both agents to wait for the human", () => {
839843
expect(peerPrompt).toContain("human clearly assigns you separate work");
840844
expect(peerPrompt).not.toContain('"reply"');
841845
expect(peerPrompt).toContain(
842-
'Use "send_message" with target: "codex" for Codex-facing messages, including replies to inbound Codex channel messages; do not send Codex-facing responses as a human-facing message.'
846+
'Use "mcp__loop-bridge-repo-123-1__send_message" with target: "codex" for Codex-facing messages, including replies to inbound Codex channel messages; do not send Codex-facing responses as a human-facing message.'
847+
);
848+
expect(peerPrompt).not.toContain("mcp__loop-bridge-repo-123-1__ prefix");
849+
expect(peerPrompt).toContain('"mcp__loop-bridge-repo-123-1__bridge_status"');
850+
expect(peerPrompt).toContain(
851+
'"mcp__loop-bridge-repo-123-1__receive_messages"'
843852
);
844853
expect(peerPrompt).toContain(
845854
"If you are answering Codex, use the bridge tools instead of a human-facing reply."
846855
);
847856
expect(primaryPrompt).not.toContain("mcp__loop-bridge-repo-123-1__ prefix");
848-
expect(peerPrompt).toContain("mcp__loop-bridge-repo-123-1__ prefix");
857+
expect(peerPrompt).not.toContain("mcp__loop-bridge-repo-123-1__ prefix");
849858
});
850859

851860
test("runInTmux auto-confirms Claude startup prompts in paired mode", async () => {

0 commit comments

Comments
 (0)