Skip to content

fix(codex): keep message-tool replies final-only#100156

Closed
ooiuuii wants to merge 1 commit into
openclaw:mainfrom
ooiuuii:fix/message-tool-final-reply-instructions
Closed

fix(codex): keep message-tool replies final-only#100156
ooiuuii wants to merge 1 commit into
openclaw:mainfrom
ooiuuii:fix/message-tool-final-reply-instructions

Conversation

@ooiuuii

@ooiuuii ooiuuii commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Fixes #100153

What Problem This Solves

Fixes an issue where Codex-backed source-channel turns using message_tool_only delivery could stop after sending a progress/status line through message(action=send). In the observed Telegram turn, the assistant sent a visible "I'll check..." style status message, OpenClaw treated that delivered message call as terminal, and no GitHub/web/tool lookup happened afterward.

Why This Change Was Made

This keeps the existing terminal-delivery behavior for real message_tool_only replies, but makes the Codex developer instruction explicit about the ordering contract: complete required tool work first, then use message(action=send) for the current source conversation only as the final user-visible source-channel output. It also distinguishes explicit non-source/out-of-band message(action=send) calls, which remain ordinary tool work, from sends that target the current source conversation.

No delivery receipt, route matching, channel integration, config, or tool execution behavior changes.

User Impact

Users in Telegram/Discord-style source-channel sessions should see fewer turns where the agent says it will check something and then silently stops. Codex is steered to do the work first and send one final visible reply to the current source conversation at the end of the turn, while still allowing explicit out-of-band sends to other conversations during the work.

Evidence

Before-fix real incident, redacted:

  • Environment: Windows OpenClaw gateway, Telegram source conversation, Codex app-server runtime, message_tool_only source replies.

  • The user asked the agent to inspect PR titles/labels.

  • The assistant called message(action=send) with a progress/status message equivalent to "I'll check the PR titles/labels first."

  • The message tool returned {"ok":true,"messageId":"<redacted>"}.

  • The app-server log immediately recorded:

    codex app-server turn released after terminal dynamic tool result
    tool=message
    
  • The persisted session contained the user message, the assistant progress text, the message tool call/result, and then no web_search, web_fetch, bash, GitHub, or other tool calls afterward.

Focused after-fix verification:

node scripts/run-vitest.mjs extensions/codex/src/app-server/run-attempt.test.ts --testNamePattern="scopes Codex developer reply instructions to message-tool-only delivery"

Result:

Test Files  1 passed (1)
Tests  1 passed | 115 skipped (116)

Whitespace check:

git diff --check HEAD~1..HEAD

Result: exit 0.

Prompt snapshot formatting check:

.\node_modules\.bin\oxfmt.cmd --check test\fixtures\agents\prompt-snapshots\codex-runtime-happy-path\telegram-direct-codex-message-tool.md test\fixtures\agents\prompt-snapshots\codex-runtime-happy-path\discord-group-codex-message-tool.md test\fixtures\agents\prompt-snapshots\codex-runtime-happy-path\telegram-heartbeat-codex-tool.md

Result:

All matched files use the correct format.

Autoreview:

$env:PYTHONUTF8='1'; python .agents\skills\autoreview\scripts\autoreview --mode commit --commit HEAD --base origin/main --no-web-search --output C:\Users\Administrator\Documents\Codex\2026-06-24\6-10-bug-issue-pr\openclaw-message-tool-progress-autoreview.txt

Result:

autoreview clean: no accepted/actionable findings reported
overall: patch is correct (0.88)

Live Telegram proof (after-fix):

What the proof shows:

  • The Telegram prompt asks the agent to use Bash to run node -v, then send exactly one final visible reply with the Node version.
  • The agent performs the Bash tool call before the visible final reply.
  • The Bash output is v22.22.0.
  • The current-source visible reply is a single final answer: Node version: v22.22.0.
  • The capture is cropped to the Telegram conversation pane and excludes the private chat list/sidebar.

Runtime note: the proof was recorded on the current Windows OpenClaw 2026.7.1-beta.2 install with this PR's Codex developer-instruction change applied to the installed runtime file. I did not run the older PR branch binary directly against the current user config because OpenClaw correctly refuses older automatic gateway migrations.

What was not tested:

  • A packaged release build from this exact PR branch was not run directly against the current user config because OpenClaw refused the older binary/config version; the live Telegram proof used the current install with this PR's instruction change applied.
  • Full pnpm prompt:snapshots:check on Windows is blocked locally by a Node execFile/oxfmt.cmd spawn EINVAL; the prompt snapshot check runs on Linux CI for this PR.

@clawsweeper

clawsweeper Bot commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed July 6, 2026, 5:38 AM ET / 09:38 UTC.

Summary
The branch tightens Codex app-server message_tool_only developer instructions and updates the focused assertion plus three Codex prompt snapshots.

PR surface: Source 0, Tests +10. Total +10 across 5 files.

Reproducibility: yes. I did not rerun the full production Telegram failure locally, but current main’s ambiguous instruction plus the terminal message-tool classifier match the reported trace in #100153.

Review metrics: 1 noteworthy metric.

  • Prompt token delta: +152 to +153 rough tokens in affected message-tool-only snapshots. The added guidance runs on eligible Codex source-channel turns, so maintainers should notice the recurring prompt-cost tradeoff before merge.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #100153
Summary: This PR is the focused implementation candidate for the open Codex message-tool-only progress-send terminality issue; related message-loss reports share surfaces but either already merged a classifier fix or track distinct remaining behavior.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge readiness
Overall: 🦞 diamond lobster
Proof: 🦞 diamond lobster ✨ media proof bonus
Patch quality: 🦞 diamond lobster
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Risk before merge

  • [P1] The fix is prompt steering rather than a runtime guarantee, so maintainers are still accepting model-instruction compliance as the right lever for final-only source replies; the related long-tool-chain reminder decay remains tracked separately.

Maintainer options:

  1. Land the focused prompt fix (recommended)
    Merge after maintainers accept the instruction-level delivery contract; exact-head CI and Telegram proof are already positive.
  2. Tighten wording before merge
    Ask for a shorter equivalent instruction if maintainers want lower recurring prompt-token cost without changing the current-source versus out-of-band distinction.
  3. Pause for runtime semantics instead
    Pause only if maintainers want progress/final delivery to become a runtime API or recovery design rather than model-facing guidance.

Next step before merge

  • No ClawSweeper repair is needed; this open PR is mergeable, proof-positive, and has no actionable review findings.

Security
Cleared: Cleared: the diff changes a Codex developer-instruction string, a focused assertion, and prompt snapshot fixtures, with no dependency, workflow, secret, package, or executable supply-chain surface.

Review details

Best possible solution:

Land the focused instruction, assertion, and snapshot update if maintainers accept prompt-level enforcement here, while leaving long-chain reinforcement or recovery work to #100367.

Do we have a high-confidence way to reproduce the issue?

Yes. I did not rerun the full production Telegram failure locally, but current main’s ambiguous instruction plus the terminal message-tool classifier match the reported trace in #100153.

Is this the best way to solve the issue?

Yes. Because upstream Codex emits dynamic tool completions during the turn and OpenClaw intentionally treats delivered current-source message-tool sends as terminal, steering Codex to use the current-source message send only as the final visible reply is the narrowest maintainable fix for this bug.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 22dfb150488d.

Label changes

Label changes:

  • add rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • remove rating: 🐚 platinum hermit: Current PR rating is rating: 🦞 diamond lobster, so this older rating label is no longer current.

Label justifications:

  • P1: The PR targets a real source-channel workflow where users can receive only a progress line and never get the requested result.
  • merge-risk: 🚨 message-delivery: The changed developer instruction controls when Codex sends, withholds, or finalizes visible source-channel replies in message-tool-only turns.
  • rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (screenshot): Sufficient: the inspected Telegram contact sheet shows the requested Bash tool call/output before a single final visible Node-version reply, which directly demonstrates the changed ordering behavior after the fix.
  • proof: sufficient: Contributor real behavior proof is sufficient. Sufficient: the inspected Telegram contact sheet shows the requested Bash tool call/output before a single final visible Node-version reply, which directly demonstrates the changed ordering behavior after the fix.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. Sufficient: the inspected Telegram contact sheet shows the requested Bash tool call/output before a single final visible Node-version reply, which directly demonstrates the changed ordering behavior after the fix.
  • mantis: telegram-visible-proof: Mantis should capture Telegram visible proof. The change affects visible Telegram source-channel reply ordering, and the included proof demonstrates that behavior in a short Telegram conversation capture.
Evidence reviewed

PR surface:

Source 0, Tests +10. Total +10 across 5 files.

View PR surface stats
Area Files Added Removed Net
Source 1 1 1 0
Tests 4 36 26 +10
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 5 37 27 +10

What I checked:

  • Current main still has the ambiguous instruction: On current main, buildVisibleReplyInstruction tells Codex to use message(action=send) for user-visible source-channel output without saying that current-source sends are final-only in message_tool_only mode. (extensions/codex/src/app-server/thread-lifecycle.ts:1752, 22dfb150488d)
  • PR diff changes only the prompt contract and matching snapshots/tests: The PR replaces the single visible-reply instruction with final-only current-source guidance, adds assertions for current-source and out-of-band wording, and refreshes the three affected prompt snapshots. (extensions/codex/src/app-server/thread-lifecycle.ts:1752, 787d668081a5)
  • OpenClaw runtime treats delivered current-source message sends as terminal: dynamic-tools.ts marks delivered current-source message-tool replies as terminal for message_tool_only, and isDeliveredMessageToolOnlySourceReplyResult distinguishes implicit or explicit source replies from explicit out-of-band sends. (extensions/codex/src/app-server/dynamic-tools.ts:600, 22dfb150488d)
  • Codex dependency contract supports instruction-level steering: Upstream Codex maps dynamic tool call responses into item/completed notifications and treats ItemCompleted / TurnCompleted as lossless events, so OpenClaw cannot rely on a protocol-level hold-until-turn-end for mid-turn message sends. (../codex/codex-rs/app-server-protocol/src/protocol/event_mapping.rs:38, be33f80bc651)
  • Real behavior proof is inspectable: The downloaded contact sheet shows the Telegram prompt asking for node -v, the Bash tool call/output, and one final visible Node version: v22.22.0 reply after the tool output; the prepared manifest reported ffprobe unavailable, so the contact sheet was the decisive inspected artifact.
  • History points to the current terminal-delivery classifier: Merged Fix Codex message-tool-only source reply completion #95942 added the current message-tool-only source-reply terminal recognition that this PR’s instruction now describes to Codex. (src/agents/embedded-agent-message-tool-source-reply.ts:545, 9b9a124cc520)

Likely related people:

  • omarshahine: Authored the merged message-tool-only source-reply completion work that added the current terminal classifier this PR’s instruction aligns with. (role: introduced related current behavior; confidence: high; commits: 9b9a124cc520, 08add5320a47, f6a06ae5e422; files: src/agents/embedded-agent-message-tool-source-reply.ts, extensions/codex/src/app-server/dynamic-tools.ts)
  • vincentkoc: Recent commits touched Codex app-server lifecycle and dynamic-tool protocol surfaces near the reviewed behavior. (role: recent Codex app-server contributor; confidence: medium; commits: ab1e5832d2fb, 10b8b32380ea, 77012f980785; files: extensions/codex/src/app-server/thread-lifecycle.ts, extensions/codex/src/app-server/dynamic-tools.ts)
  • steipete: Recent merged work touched Codex app-server versioning and dynamic-tool surfaces that share the same runtime boundary. (role: recent adjacent contributor; confidence: medium; commits: c52583a02270, f53103de72da; files: extensions/codex/src/app-server/thread-lifecycle.ts, extensions/codex/src/app-server/dynamic-tools.ts)
  • AmirF194: Reviewed this PR against OpenClaw’s runtime classifier and upstream Codex protocol, and identified the rebase/snapshot refresh that the author later addressed. (role: recent reviewer; confidence: medium; files: extensions/codex/src/app-server/thread-lifecycle.ts, src/agents/embedded-agent-message-tool-source-reply.ts, ../codex/codex-rs/app-server-protocol/src/protocol/common.rs)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.
Review history (7 earlier review cycles)
  • reviewed 2026-07-05T03:01:36.496Z sha 21b5f45 :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-05T03:17:18.002Z sha 20e9c95 :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-05T03:24:18.540Z sha 20e9c95 :: needs real behavior proof before merge. :: [P2] Regenerate prompt snapshots from the new instruction
  • reviewed 2026-07-05T03:55:14.156Z sha 07715f3 :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-05T06:11:31.496Z sha ddd7202 :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-05T12:51:26.391Z sha ddd7202 :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-05T13:29:04.463Z sha ddd7202 :: needs maintainer review before merge. :: none

@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. mantis: telegram-visible-proof Mantis should capture Telegram visible proof. P1 High-priority user-facing bug, regression, or broken workflow. labels Jul 5, 2026
@ooiuuii
ooiuuii force-pushed the fix/message-tool-final-reply-instructions branch 2 times, most recently from 20e9c95 to 07715f3 Compare July 5, 2026 03:50
@ooiuuii
ooiuuii force-pushed the fix/message-tool-final-reply-instructions branch from 07715f3 to ddd7202 Compare July 5, 2026 04:02
@clawsweeper clawsweeper Bot removed mantis: telegram-visible-proof Mantis should capture Telegram visible proof. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jul 5, 2026
@ooiuuii

ooiuuii commented Jul 5, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. mantis: telegram-visible-proof Mantis should capture Telegram visible proof. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. labels Jul 5, 2026
@ooiuuii

ooiuuii commented Jul 5, 2026

Copy link
Copy Markdown
Contributor Author

Superseding my previous proof artifact for now.

The first uploaded video is not good enough as review proof: most of the clip stays on one static tool-output frame, and the final visible section can be read as ambiguous ordering. I am rerunning a cleaner Telegram proof with the chat pinned to the bottom so the tool-output-then-final-reply ordering is visible in one continuous capture.

@ooiuuii

ooiuuii commented Jul 5, 2026

Copy link
Copy Markdown
Contributor Author

Focused English Telegram proof for @clawsweeper:

Video: https://raw.githubusercontent.com/ooiuuii/openclaw/proof/pr-100156-telegram-20260705/pr-100156-telegram-proof-english-focused-20s.mp4

What the video shows:

  • The Telegram prompt asks the agent to use Bash to run node -v, then send exactly one final visible reply with the Node version and no progress/status reply first.
  • The agent performs the Bash tool call before the visible final reply.
  • The Bash output is v22.22.0.
  • The current-source visible reply is a single final answer: Node version: v22.22.0.
  • The capture is cropped to the Telegram conversation pane and excludes the private chat list/sidebar.

This replaces my earlier proof artifact, which was too long/static and ambiguous for review.

@clawsweeper re-review

@ooiuuii

ooiuuii commented Jul 5, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. labels Jul 5, 2026
@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jul 5, 2026
@AmirF194

AmirF194 commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Reviewed at head ddd7202c against main and the sibling Codex app-server protocol.

The change is instruction-only — it rewrites the message_tool_only visible-reply guidance in buildVisibleReplyInstruction (extensions/codex/src/app-server/thread-lifecycle.ts:1752), updates the matching assertion in run-attempt.test.ts, and regenerates the three codex-runtime prompt snapshots. No runtime path changes.

I checked the two things that decide whether this is the right lever:

  1. It has to be instruction-level, not runtime enforcement. In the Codex app-server, each tool call — including OpenClaw's message dynamic tool — surfaces as a ThreadItem streamed via item/completed during the turn, and turn/completed only marks the end (codex-rs/app-server-protocol/src/protocol/common.rs:1625/1632, .../protocol/v2/item.rs:221). ItemCompleted is in the lossless-delivery tier (codex-rs/app-server-client/src/lib.rs:150-175), so a mid-turn message(action=send) to the source is delivered immediately — there's no protocol-level hold-until-turn-end to lean on. Steering the model to send only the final source reply is therefore the correct mechanism.

  2. The new wording matches the real runtime classifier. isDeliveredMessageToolOnlySourceReplyResult (src/agents/embedded-agent-message-tool-source-reply.ts:546) treats an implicit-route (or explicit source-route) message.send as the source reply and an explicit out-of-band send to another conversation as ordinary tool work — exactly the distinction the new instruction draws. So the guidance is accurate, not aspirational.

Two things before it lands:

  • The branch is currently CONFLICTING against main; needs a rebase.
  • After rebasing, regenerate the three prompt snapshots on Linux/Node 24 (CI truth) rather than trusting a local macOS run, or the snapshot lane can drift.

Minor, non-blocking: the instruction roughly quadruples in length (~+150 rough tokens per applicable run, scoped to message_tool_only + message-tool-available Codex runs). The win — no duplicate/premature source messages — justifies it, but a tightening pass would keep the behavior at lower token cost.

@ooiuuii
ooiuuii force-pushed the fix/message-tool-final-reply-instructions branch from ddd7202 to 787d668 Compare July 6, 2026 08:36
@ooiuuii

ooiuuii commented Jul 6, 2026

Copy link
Copy Markdown
Contributor Author

Thanks @AmirF194, this was helpful.

I rebased the branch onto current main and resolved the prompt snapshot conflicts. I also refreshed the three affected Codex prompt snapshots against the rebased code and kept the fixture paths in POSIX form so they stay aligned with the Linux snapshot baseline.

Local checks I ran after the rebase:

node scripts/run-vitest.mjs extensions/codex/src/app-server/run-attempt.test.ts --testNamePattern="scopes Codex developer reply instructions to message-tool-only delivery"
# 1 passed | 114 skipped

git diff --check
# clean

GitHub now reports the PR as mergeable again; CI is running on the updated head 787d668081 for the Linux/Node truth.

@clawsweeper clawsweeper Bot added rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels Jul 6, 2026
@Glucksberg

Glucksberg commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

Additional production evidence supports this mitigation. During an OpenClaw 2026.6.10 control window, we recorded no turn.dynamic_tool_terminal_release events caused by message; after moving to 2026.7.1-beta.2, we recorded more than 100. Affected turns follow message(send) -> tool result(ok) -> turn.dynamic_tool_terminal_release -> session ended, including acknowledgment/status messages before work completes. This independently matches #100153.

The final-only instruction is useful defense in depth, though the long-term distinction should be explicit delivery intent rather than inferred terminality. This branch appears to need only a rebase/snapshot refresh. I can prepare that focused refresh or an adversarial GPT-5.6 continuation test if the author or a maintainer wants help, without widening this PR's scope.

@obviyus

obviyus commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Closing: maintainers chose the structural completion contract over the prompt-only approach. #105365 (merged as 4dc6e18) adds an explicit final control to the projected Codex message schema with delivery-confirmed termination and progress-aware recovery, which holds up against model noncompliance in a way prompt steering alone cannot — an ignored instruction degrades to legacy behavior instead of a stranded or duplicated reply. Thanks for the proof-positive alternative; it clarified the decision. If the landed contract shows gaps in practice, a fresh issue with run telemetry would reopen the discussion.

@obviyus obviyus closed this Jul 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

extensions: codex mantis: telegram-visible-proof Mantis should capture Telegram visible proof. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. P1 High-priority user-facing bug, regression, or broken workflow. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. size: S status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Codex message-tool-only turns can stop after progress/status message sends

4 participants