setup
Configure, authenticate, repair, and verify the Claude Code to Codex Bridge; safe stages run by default and sensitive stages require separate approval.
Files1
View on GitHubSKILL.mdplugins/bridge_cc-codex/claude-skills/setup/SKILL.md
GitHubSet Up the Bridge
Bootstrap and plan
- Treat a plain invocation as
action=all target=peer scope=auto live=prompt. - Loaded Claude plugin, Claude trust, Claude authentication, and current session are external bootstrap prerequisites. Never replace or restart current invocation surface.
- Reject a model-supplied workspace; use Claude's launch workspace — the working directory of the current Claude Code session, never a path named in conversation or task text.
- Run
python --versionfirst; stop if unavailable or older than Python 3.10; report the interpreter found, or its absence, and the 3.10 minimum. - Parse only documented
key=valuegrammar plus one-release compatibility forms--live(=action=verify-live live=required) and--direction codex|claude(=target=codex|claude); reject ambiguous or unknown arguments.
For one resolved target, invoke:
python "${CLAUDE_PLUGIN_ROOT}/bin/bridge_setup.py" --current-host claude --workspace "<launch-workspace>" --action "<action>" --target "<target>" --scope "<scope>" --live "<live>"
Deterministic planner performs credential-free inspection, returns setup result JSON defined by schemas/setup-result.schema.json.
Check and approved changes
For check, report the result and stop. For all, configure, or repair:
If the planned
operationslist is empty, report nothing to configure and stop underconfigureorrepair; underall, continue to the stages below without requesting approval.Before mutation, Write every planned
operationsentry and the approval digest to.temp/bridge-setup/operations-<first 12 digest chars>.md, together with:- action and purpose;
- exact native argv and resolved target/scope;
- external capability;
- credential behavior;
- filesystem and host-configuration effects;
- rollback evidence;
- retry policy; and
- safe denial outcome.
Print that file once as the last reply text before the step-3 question. Never put operations or the digest in an option
preview.Obtain explicit approval for exactly that digest via the
AskUserQuestiontool — never a plain-text question. Question text: at most 6 plain lines (target 600 characters, hard cap 1,500), no table, pipe layout or code fence, carrying the action, operation count, full approval digest and→ <operations file path>. Reply text before a tool call can arrive as an empty progress update; the question text is always rendered, so it alone must identify what is approved — never ask approval for operations the user could not see. Options: a label plus a one-line effect each, no previews, recommended option second.After approval, give the operator the identical command plus
--approve "<approval_digest>"to run in their own terminal, with${CLAUDE_PLUGIN_ROOT}expanded to its absolute path (it is unset there; read it withecho "${CLAUDE_PLUGIN_ROOT}"). Then re-plan with--action checkto report the outcome.
Host-held HMAC makes digest tamper-evident but does not grant consent; explicit operator or host approval remains required. The digest is action-bound, expires, and is consumed by its first execution attempt; it lives 300 seconds. Never substitute
--approvewithout its digest. Denial, changed or expired digest, replay, unsupported capability, failed probe, or failed native operation stops without retry.
Operator proof:
--approveexecutes only when stdin and stderr are the operator's terminal; otherwise the helper exits 2 withoperator-terminal-requiredbefore inspecting, locking or mutating anything. Never run--approvethrough model-controlled Bash, a pipe, or an allocated TTY; run only the planning command (no--approve) there. The digest the model planned is not operator approval.
Authentication
When action=all or action=authenticate and authentication remains (configure and repair stop after their result, reporting remaining):
- Re-plan the provider-owned interactive login with identical host, workspace, target, scope, and live values but
--action authenticate. - Obtain separate approval for that action's digest via the
AskUserQuestiontool, with the same question-text contract as step 3 above: the question text names the full authentication digest and the exactauthentication_argv, and states it may open a browser and use network and account state. No previews. - Give operator identical authenticate command plus
--approve "<authentication_digest>"to run in their own terminal, with the absolute plugin path as in step 4 above.
Sensitive phase: never run through model-controlled Bash or another captured tool stream. Bridge then launches only native login command with terminal inherited. Never accept, request, pipe, echo, inspect, or store a token, API key, browser code, device code, email, or raw login output. Process exit means
auth-flow-launched; only a later redacted status probe may establishhost-authenticated.
Live verification
When action=all or action=verify-live, live=prompt or live=required, and remaining still lists live-verification:
- Precondition: a fresh plan with identical host, workspace, target, scope, and live values but
--action allmust show an emptyoperationslist andremaininglisting neitherconfigurationnorauthentication. Otherwise the approved call would be refused (configuration-neededorauthentication-needed, exit 2) after the user already paid attention to it: report the missing stage and stop. A configuration result classifiedfresh-session-requiredneeds a fresh session first. - Re-plan with identical host, workspace, target, and scope but
--action verify-live. Exit 2 withstatus=manualandclassification=live-verification-requires-separate-approvalis this plan's normal result, not a failure; itsapproval_digestis the live digest. - Obtain a third approval for that action's digest via the
AskUserQuestiontool and one paid provider call, with the same question-text contract as step 3 above: the question text names the full live digest and the one paid call. No previews. - State network, installed-CLI-managed credential, quota/cost, workspace, and point-in-time semantics in that question text, or, when they do not fit its 6 lines, in a file printed once as the last reply text before the question, which the question text names as
→ <path>. - Give the operator that same verify-live command plus
--approve "<live_digest>"to run in their own terminal, with the absolute plugin path as in step 4 above.
Never invoke the lower-level live doctor outside this approval path. Successful live CLI result remains partial until the applicable
bridge_statussession/workspace evidence named under Completion boundary is also present.live=skipremainsinference-unverified; never call it ready. Denial underlive=requiredis non-ready.
Completion boundary
For Codex-to-Claude repository transfer consent, continue in a fresh Codex session with $bridge:setup; its provider-consent stage records an explicit operator-approved policy. Installing either half does not grant that consent. Do not write Codex policy from this Claude setup flow or reuse a configuration/authentication/live-check approval for it. This stage governs the reverse Codex-to-Claude route, not Claude-to-Codex authorization.
- Setup always owns one resolved peer target.
- To prepare both integrations, finish peer lifecycle from Claude, start any required fresh session, then run
$bridge:setupfrom Codex for its peer; no digest, state claim, or readiness result is shared between hosts. - Loaded-host branch is check/bootstrap-only, never mutates its current invocation surface.
bridge_statusevidence belongs to a fresh Codex session. An unbound reverse backend is loaded but has no selected project; usebridge_bind_workspacethere with the known absolute folder as untrustedproposed_workspaceand exact canonical native confirmation; empty arguments retain manual selection plus confirmation. Require its currentbinding_idand intended workspace before claiming reverse MCP session/workspace ready or passing executable calls; binding grants no runtime permission or paid-call consent.- Report strongest verified level, exact remaining action, confidence, and limits.
Never equate static readiness, process exit, host authentication, session readiness, workspace readiness, or live verification.