`--once` against an open conversation is refused with a sentence nothing documents
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 初心者へのやさしさ
- 76/100
- issue の種類
- ドキュメント
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- go
- 領域
- cli, documentation
調査の方向性
Start with errExecutionMode and its check in internal/remote/server.go, then read internal/manual/chat/running-from-the-terminal.md and docs/changes/unreleased/1071-approvals-wheel.md. Run the manual probe in internal/manual/chat_test.go and the stated interactive and control e2e cases. Done means the refusal wording, manual explanation, probe, and invalidates entry agree exactly.
索引モデルが issue の本文から書いたものです。
説明
What happened
2026-09-21, PR #1071 at 78ddda475 (on dev@49b4a58fb). The fix round on that PR made headless roads (codeaf chat --once, and any Hello with Headless set) build their own approval gate and refuse to attach to an agent that was built interactive, or the reverse. The refusal is one sentence, errExecutionMode in internal/remote/server.go:
this conversation is already open in a different interactive or headless mode; close it before retrying
It is the right default: a headless caller reusing an already-open interactive agent would inherit that agent's gate, which is the bypass the fix exists to close. But it is a new refusal on a road people script against, nothing documents it, and the sentence does not say which mode holds the conversation, where, or what "close it" means for someone who has the interactive session open in another terminal on purpose. Neither docs/changes/unreleased/1071-approvals-wheel.md nor any page under internal/manual/chat/ mentions it, so the chat cannot answer "why does --once say the conversation is already open".
Replication
Deterministic (no model).
The errExecutionMode path in internal/remote/server.go is reached whenever a hello's Headless disagrees with the mode the agent was opened in; a unit case beside it with a stub engine shows the refusal and its exact bytes. Through the real door: internal/manual/chat_test.go with the probe why does --once say the conversation is already open reaches no page today.
Field (real models).
Open a workspace interactively with codeaf, then from a second shell run codeaf chat --once "say hi" in the same workspace. The second command exits non-zero and prints the sentence above. Needs a provider key only for the first process; the refusal itself costs nothing.
Where
errExecutionMode and its check in internal/remote/server.go; Hello.Headless in internal/remote/wire.go; the --once flag in cmd/codeaf/chatv3.go; internal/manual/chat/running-from-the-terminal.md for the page that should carry it; docs/changes/unreleased/1071-approvals-wheel.md for the entry.
The fix
Three things, all wording:
- The refusal names the other side and the way out, on the model of the product's other refusals:
this conversation is open interactively in another terminal; --once cannot join it. Close it there, or run --once in a different session.and the mirror sentence when an interactive launch finds a headless holder. internal/manual/chat/running-from-the-terminal.mdgets a##heading in the asker's words (--once says the conversation is already open) that quotes the sentence and says why it exists: a headless run answers its own approvals and never borrows an open session's gate.- The #1071 change entry's
invalidatessays that--onceused to join an open conversation and now refuses.
Acceptance
- e2e: an interactive
codeafholding a workspace, thencodeaf chat --once "say hi"in the same workspace from a second process: exit code non-zero and the new sentence printed in full. - e2e: control:
codeaf chat --once "say hi"in a workspace nobody holds runs, prints the reply and exits zero;--oncewithout--yolostill refuses a tool call withneeds approval but no resolver is attached. - Unit: the manual probe
why does --once say the conversation is already openreachesrunning-from-the-terminal. - The manual page quotes the wording exactly as
internal/remote/server.gospells it, and the change entry'sinvalidatesnames what people believed before.
- 主要言語
- Go
- スター
- 115
- フォーク
- 14
- 平均マージ
- 9時間 38分
- マージ済み PR(30日)
- 749
環境構築
このプロジェクトの環境構築ファイルはまだ確認していません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
Agent-Field/CodeAF のほかの issue
-
area:chat feature
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
Agent-Field/CodeAF#1510 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
Agent-Field/CodeAF#1489 ·
メンテナーはふだん 1 日以内に返信
-
area:chat bug good first issue sev:papercut
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
Agent-Field/CodeAF#1470 ·
メンテナーはふだん 1 日以内に返信
-
area:chat bug good first issue sev:papercut
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
Agent-Field/CodeAF#1469 ·
メンテナーはふだん 1 日以内に返信
-
area:chat bug sev:papercut
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
Agent-Field/CodeAF#1468 ·
メンテナーはふだん 1 日以内に返信
Agent-Field/CodeAF の issue をすべて見る
似ている issue
-
bug needs triage
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
bug P2 reliability
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
afreidah/s3-orchestrator#1564 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
blinklabs-io/gouroboros#2577 ·
メンテナーはふだん 1 日以内に返信
-
agentic-workflows
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
メンテナーはふだん 1 日以内に返信