Repository navigation
State the Captain decision per provider adapter #233
Description
Activity
- addedsize:S10-29 effective changed lines (test files excluded in mixed PRs).10-29 effective changed lines (test files excluded in mixed PRs).
on Sep 21, 2026 bryantderosier commented
on Sep 21, 2026 CollaboratorAuthorMore actions@bryantderosier @Jacksondr5 I need a call on this before anyone picks it up.
The question: can a Cursor, Grok, OpenCode, or Antigravity thread act as a Captain and propose a Crew in this release, or is the rule "Codex and Claude Captains, any harness for seats"?
- Codex and Claude only: write that into crews.md (Definition and AC5) and the Crews section of the user personas doc, and close this issue as a doc change.
- Other adapters too: verify per adapter whether the t3-code MCP server and the orchestration instructions reach the thread and whether its approval model lets
propose_crewthrough, document the result, and file a separate issue for any adapter that needs an appended spread like the Codex one.
My lean is Codex and Claude only for this release, since those are the two adapters with appends recorded in FORK.md and the others are disabled in most installs. Reply here with your pick and I will update the issue.
bryantderosier commented
on Sep 24, 2026 CollaboratorAuthorMore actionsMy call: every adapter can be a Captain in this release, not just Codex and Claude.
- The roster gate has to be the only human step on every harness, which is what AC5 promises. A harness that raises its own approval prompt for
propose_crew, or refuses it, needs a pre-approval append. - That append covers the full J5 set Codex pre-approves (
J5_CODEX_PREAPPROVED_TOOLS: the J5 coordination verbs,write_artifact, anddelegate_task/task_status/task_cancel), so Captains and seats behave the same on every harness. - This issue is the audit plus the docs. First I work out each adapter's approval path from the code, then I spot-check on the harnesses installed here in an isolated dev server. Anything I can't run is marked as derived from code.
- Each adapter that needs an append gets its own issue in this milestone, recorded in FORK.md.
- The roster gate has to be the only human step on every harness, which is what AC5 promises. A harness that raises its own approval prompt for
bryantderosier commented
on Sep 24, 2026 CollaboratorAuthorMore actionsI filed the per-adapter issues in the Crews milestone:
- Pre-approve J5 tools on OpenCode threads #265 Pre-approve J5 tools on OpenCode threads (in the stack)
- Pre-approve J5 tools on Pi threads #266 Pre-approve J5 tools on Pi threads (in the stack)
- Pre-approve J5 tools on ACP registry agents #267 Pre-approve J5 tools on ACP registry agents (in the stack; codex-acp, qwen, claude-acp, Kilo, opencode, Amp, droid, Copilot, Gemini CLI, Auggie)
- Capture and match Grok MCP permission requests #268 Capture and match Grok MCP permission requests (blocked; no live capture for now)
- Match Antigravity MCP permission requests by server #269 Match Antigravity MCP permission requests by server (held until a server-identifying field turns up)
- Cursor Captains need Full access until the Cursor SDK exposes MCP approval #270 Cursor Captains need Full access until the Cursor SDK exposes MCP approval (blocked on the Cursor SDK)
Pre-approval mirrors Codex per mode on every harness. The per-mode audit table comes with the first PR in the stack.
- added a commit that references this issue
on Sep 25, 2026 Ruling (Jackson, 2026-09-26), replacing the "every adapter can be a Captain" call above.
- Any harness can be a Captain, but J5 only pre-approves its tools on Codex and Claude. On those two, the roster card is the only human step before a Crew launches.
- On every other harness (OpenCode, Pi, ACP registry agents, Grok, Antigravity, Cursor), the provider may ask once with its own MCP prompt before the roster card, and a read-only persona can't propose at all. Both are acceptable: proposing a Crew is enough of a write that a read-only persona being blocked is fine.
- Why: making a harness skip its native MCP prompt is adapter work, and adapters are upstream's territory. Upstream connects T3's MCP server to every adapter but pre-approves T3's own tools only on Claude. Codex keeps J5's existing pre-approval because it's already built. We don't add fork surface to upstream adapters without a strong need. OpenCode would be simple, but there aren't enough users to justify the extra fork surface. Pi and ACP are hard (ACP has no trustworthy server identity in its permission request). Cursor's SDK doesn't expose MCP approval at all.
- Upstream give-back: a general "pre-approve T3's own MCP tools on every adapter" fix belongs upstream and is tracked in Upstream give-back backlog (hold until V2 merges upstream) #276.
Outcome: #301 stays, with docs fixes. #302, #303 and #304 are closed. #265–#270 are closed as not planned.
- added a commit that references this issue
on Sep 29, 2026
Crews are proposed from Codex and Claude threads; both adapters have explicit appends so
propose_crewand the other J5 verbs get through (FORK.md, saved-agent mentions paragraph).Nothing in crews.md, agent-tools.md, or the adapters records a decision for Cursor, Grok, OpenCode, or Antigravity threads acting as Captain.AGENTS.md requires a decision per adapter, even when the decision is "not supported here". Seats on those harnesses are already handled by the runtime preview's ACP access rules; this is only about a thread on one of them proposing a Crew.Blocked on my decision, which I will record on this issue: whether the rule for this release is "Codex and Claude Captains, any harness for seats", or whether the other adapters should be able to propose.
What should change once decided:
Verify per adapter whether thet3-codeMCP server andT3_CODE_ORCHESTRATION_INSTRUCTIONSreach the thread and whether the adapter's approval model lets a non-read-only MCP call likepropose_crewthrough.docs/user/personas.md.J5_CODEX_T3_MCP_SERVER_CONFIG, file that as its own issue and record the append in FORK.md; do not bundle it here.Done when crews.md states, for every provider T3 Code ships, whether a thread on it can be a Captain.
Related criteria: crews.md AC5.
Dependencies: blocked on the decision below. No code issue depends on this one.
Edit (2026-09-24, after the upstream sync in #256)
The question still stands, but the adapter list and part of the verification step are out of date.
Adapters this build ships (
apps/server/src/provider/builtInDrivers.ts): Codex, Claude, Cursor, Grok, OpenCode, Antigravity, Pi, and ACP registry harnesses (Devin among them). Pi came in with the upstream sync, and its thread adapter isorchestration-v2/Adapters/PiAdapterV2.ts. The ruling has to name all eight, not four.What the code already answers. Every adapter now gets the
t3-codeMCP server and the orchestration instructions, so reachability no longer needs checking one adapter at a time:cursorMcpServersinCursorAdapterV2.tsOpenCodeAdapterV2.tst3 acp-mcp-bridgestdio server inAcpAdapterV2.ts, which all three are built onpiT3McpExtensionSource.ts/piT3McpInjection.tsWhat is still open. Only Codex (
J5_CODEX_T3_MCP_SERVER_CONFIG) and Claude (J5_CLAUDE_MCP_ALLOWED_TOOLS) pre-approve the J5 verbs. On the other six,propose_crewfalls through to the harness's own approval model. It may raise a native approval card, or it may be refused in read-only ornever-style modes. Pi, for example, leaves permission policy to extensions. crews.md AC5 says filing a proposal "works under every sandbox and approval policy", which today is only true on Codex and Claude.Revised steps once decided:
docs/user/personas.md. No code.propose_crewin each runtime mode. File a separate issue, with a FORK.md append, for any adapter that needs a pre-approval spread like Codex's or Claude's. Update AC5 to match what is measured.Edit (2026-09-24): decision
Ruling: every adapter can be a Captain. The "Codex and Claude only" option no longer applies.
What this issue now covers:
propose_crewis handled in each runtime mode. Work it out from the adapter and harness code first, then spot-check live on the harnesses installed here (isolated dev server, copied data). Mark each result as measured or derived from code.An adapter that raises a native prompt or refuses needs a pre-approval append for the full J5 set inJ5_CODEX_PREAPPROVED_TOOLS, not only the crew verbs.docs/user/personas.md: every shipped adapter can be a Captain.Until an adapter's append lands, the docs say which adapters still show an extra prompt, or refuse, before the roster gate.Done when crews.md names all eight adapters as Captain-capable and every adapter that needs an append has its own issue.
Edit (2026-09-24): where pending adapters are listed
docs/j5/process/docs.mdrequires a definition to describe the end state, so crews.md (Definition and AC5) says only that every shipped adapter can be a Captain and that the roster gate is the only human step. The pending adapters are tracked in their own issues, not in crews.md.docs/user/personas.mddescribes what ships today, so it names the harnesses that still show an extra prompt, or refuse, before the roster gate. Each adapter PR narrows that list, and the last one removes the sentence.Edit (2026-09-24): pre-approval matches Codex per mode
Every adapter pre-approves exactly what Codex pre-approves in the same mode. Where the harness would never ask (Codex's approval policy
never: full access, and saved-persona policies that resolve to it), that is the full set inJ5_CODEX_PREAPPROVED_TOOLS. In the interactive modes (approval-required, auto-accept-edits, auto), it is onlysend_message,clear_own_ask,propose_crew, andrequest_crew_member. Every other tool keeps the harness's own verdict. Codex itself is unchanged, and no harness pre-approves more than Codex in any mode. Both sets and the mode-to-set rule live in one J5-owned module that Codex'sj5CodexT3McpServerConfigand every new adapter append share.