Skip to content

State the Captain decision per provider adapter #233

Description

@bryantderosier

Crews are proposed from Codex and Claude threads; both adapters have explicit appends so propose_crew and 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 the t3-code MCP server and T3_CODE_ORCHESTRATION_INSTRUCTIONS reach the thread and whether the adapter's approval model lets a non-read-only MCP call like propose_crew through.
  • Write the ruling into crews.md (Definition and AC5) and the Crews section of docs/user/personas.md.
  • If an adapter needs an appended spread like Codex's 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 is orchestration-v2/Adapters/PiAdapterV2.ts. The ruling has to name all eight, not four.

What the code already answers. Every adapter now gets the t3-code MCP server and the orchestration instructions, so reachability no longer needs checking one adapter at a time:

  • Cursor: cursorMcpServers in CursorAdapterV2.ts
  • OpenCode: OpenCodeAdapterV2.ts
  • Grok, Antigravity, and ACP registry: the t3 acp-mcp-bridge stdio server in AcpAdapterV2.ts, which all three are built on
  • Pi: the injected extension in piT3McpExtensionSource.ts / piT3McpInjection.ts

What 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_crew falls through to the harness's own approval model. It may raise a native approval card, or it may be refused in read-only or never-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:

  • Codex and Claude only: write the rule into crews.md (Definition and AC5), naming all eight adapters. Narrow AC5 to Codex and Claude, and add the rule to the Crews section of docs/user/personas.md. No code.
  • Other adapters too: for each of Cursor, Grok, OpenCode, Antigravity, Pi, and ACP registry, record how the harness handles an unapproved propose_crew in 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:

  • For Cursor, Grok, OpenCode, Antigravity, Pi, and ACP registry, record how an unapproved propose_crew is 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.
  • The rule: the roster gate is the only human step. An adapter that raises a native prompt or refuses needs a pre-approval append for the full J5 set in J5_CODEX_PREAPPROVED_TOOLS, not only the crew verbs.
  • File one issue per adapter that needs an append, in this milestone, each recording its append in FORK.md. The appends are not done here.
  • Write the ruling into crews.md (Definition and AC5) and the Crews section of 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.md requires 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.md describes 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 in J5_CODEX_PREAPPROVED_TOOLS. In the interactive modes (approval-required, auto-accept-edits, auto), it is only send_message, clear_own_ask, propose_crew, and request_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's j5CodexT3McpServerConfig and every new adapter append share.

Activity

  1. added this to the Crews milestone on Sep 21, 2026
  2. added
    size:S10-29 effective changed lines (test files excluded in mixed PRs).
    on Sep 21, 2026
  3. bryantderosier commented on Sep 21, 2026

    @bryantderosier
    CollaboratorAuthor

    @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_crew through, 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.

  4. bryantderosier commented on Sep 24, 2026

    @bryantderosier
    CollaboratorAuthor

    My 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, and delegate_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.
  5. bryantderosier commented on Sep 24, 2026

    @bryantderosier
    CollaboratorAuthor

    I filed the per-adapter issues in the Crews milestone:

    Pre-approval mirrors Codex per mode on every harness. The per-mode audit table comes with the first PR in the stack.

  6. Jacksondr5 commented on Sep 26, 2026

    @Jacksondr5
    Owner

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

size:S10-29 effective changed lines (test files excluded in mixed PRs).

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions