@@ -124,6 +124,88 @@ cursor-agent status </dev/null 2>&1 | head -3 # or: [ -n "$CURSOR_API_KEY" ]
124124> preferred for untrusted / high-stakes work** . See
125125> [ ` adapter-cursor.md ` ] ( ../skills/backend-launcher/adapter-cursor.md ) .
126126
127+ ### 1a-quater. Devin CLI (` devin ` ) — optional, lower-trust, WORKER-ONLY backend
128+
129+ ``` bash
130+ command -v devin
131+ ```
132+
133+ If absent → Devin is ** not available** (record it; routing never offers it).
134+
135+ If present → check ** authentication** (auth-free command, verified live):
136+
137+ ``` bash
138+ devin auth status < /dev/null 2>&1 | head -3 # or: [ -n "$COGNITION_API_KEY" ]
139+ ```
140+
141+ - Installed ** and** authenticated (` devin auth login ` , or ` COGNITION_API_KEY ` set) →
142+ Devin is ** usable** ; record it and add it to ` backends ` . The pinned headless invocation
143+ (devin-cli 3000.1.27, verified live for its help/flag surface — task-execution behavior is
144+ DOC-CLAIMED, unverified without an authenticated run):
145+ ` cd "$WT" && devin -p "<prompt>" --permission-mode dangerous [--model <M>] --export <path> </dev/null ` .
146+ Also probe sandbox availability (auth-free, verified live): ` devin sandbox setup ` — on macOS
147+ reports * "No sandbox setup is required"* ; on Linux it either confirms ` bubblewrap ` +` socat `
148+ are present or prints install instructions. Record the result — it tells ` /v:models ` /
149+ the operator whether Devin's ` --sandbox ` (Research Preview) is even usable on this machine,
150+ though this plugin does ** not** rely on it for enforcement in v1 (see below).
151+ - Installed but ** not** authenticated → record it as ** present but unauthenticated** ; treat as
152+ unavailable and tell the user to run ` devin auth login ` (or set ` COGNITION_API_KEY ` ).
153+
154+ > ** Flag it as lower-trust AND worker-only when you record it.** Devin has a real,
155+ > live-confirmed kernel ` --sandbox ` flag (macOS Seatbelt / Linux bwrap+seccomp) — a
156+ > genuine differentiator from Antigravity/Cursor — but Cognition labels it
157+ > ** "[ Research Preview] "** , its coverage is scoped to "exec-tool processes" (non-shell
158+ > file-edit tool coverage unverified), and its network-filtering is called "currently
159+ > unstable" in Cognition's own docs. Until those are live-verified, this plugin treats
160+ > Devin as ** opt-in, lower-trust — the same tier as Antigravity/Cursor** , NOT Codex: the
161+ > worktree + ` git diff ` gate is the * real* enforcement (detection, not confirmed
162+ > prevention). ** Prefer Codex for untrusted / high-stakes work.** Devin is also
163+ > ** model-agnostic** (` --model ` accepts a free string spanning Claude/GPT/Gemini/Devin's
164+ > own SWE family) — its resolved model family is data-dependent, so it is ** WORKER-ONLY
165+ > for v1, excluded from any cross-model arbiter/review panel** until family-dedup keys on
166+ > the resolved model rather than the backend name. See
167+ > [ ` adapter-devin.md ` ] ( ../skills/backend-launcher/adapter-devin.md ) .
168+
169+ ### 1a-quinquies. opencode CLI (` opencode ` ) — optional, lower-trust, WORKER-ONLY, multi-provider backend
170+
171+ ``` bash
172+ command -v opencode || npx -y opencode-ai@latest --version # confirms installable even if not on PATH
173+ ```
174+
175+ If absent → opencode is ** not available** (record it; routing never offers it).
176+
177+ If present → check for at least one usable provider credential (auth-free command,
178+ verified live):
179+
180+ ``` bash
181+ opencode providers list < /dev/null 2>&1 | grep -qv ' 0 credentials' \
182+ && echo " opencode has stored credentials" \
183+ || echo " opencode has NO stored credentials (may still work via ambient provider env vars)"
184+ ```
185+
186+ - Installed ** and** (stored credentials via ` opencode providers login ` , ** or** a known
187+ provider env var like ` ANTHROPIC_API_KEY ` /` OPENAI_API_KEY ` /` ANTHROPIC_BASE_URL ` is
188+ explicitly set for this purpose) → opencode is ** usable** ; record it and add it to
189+ ` backends ` . ** Load-bearing, live-observed finding:** opencode successfully authenticated
190+ with ** zero** stored credentials purely from an inherited ` ANTHROPIC_BASE_URL ` — record
191+ ` auth ` as ` ambient-env ` vs ` stored-credentials ` so the operator knows which path is live
192+ on this machine, and see the adapter's env-scrub requirement below.
193+ - Installed but no credentials and no relevant env var set → present but unauthenticated;
194+ tell the user to run ` opencode providers login ` .
195+
196+ > ** Flag it as lower-trust, worker-only, AND multi-provider when you record it.** opencode
197+ > has ** no kernel write-confinement** at all (no ` --sandbox ` equivalent), and per its own
198+ > docs defaults to ** allowing all operations without explicit approval** — the opposite
199+ > posture from Cursor/Antigravity, which refuse until explicitly unlocked. The worktree +
200+ > ` git diff ` gate is the only real enforcement (detection, not prevention). ** Prefer Codex
201+ > for untrusted / high-stakes work.** opencode addresses models as ` provider/model `
202+ > strings (e.g. ` anthropic/claude-opus-4-6 ` ), so — like Devin — its resolved model family
203+ > is data-dependent; it is ** WORKER-ONLY for v1, excluded from any cross-model
204+ > arbiter/review panel** until family-dedup keys on the resolved model. See
205+ > [ ` adapter-opencode.md ` ] ( ../skills/backend-launcher/adapter-opencode.md ) for the
206+ > ** mandatory env-scrub** (the worker script must NOT blindly inherit the dispatcher's own
207+ > provider env vars into the ` opencode run ` child process).
208+
127209### 1b. Context7 MCP (match by namespace)
128210
129211Context7 is ** plugin-namespaced** — match the namespace, not a bare ` context7 ` :
@@ -408,18 +490,27 @@ was, in those two fields).
408490 "claude" : { "deep" : " opus" , "standard" : " opus" , "light" : " sonnet" },
409491 "codex" : { "deep" : " gpt-5.6-sol" , "standard" : " gpt-5.6-terra" , "light" : " gpt-5.6-luna" },
410492 "antigravity" : { "deep" : " Gemini 3.1 Pro (High)" , "standard" : " Gemini 3.1 Pro (Low)" , "light" : " Gemini 3.5 Flash (Low)" },
411- "cursor" : { "deep" : " auto" , "standard" : " auto" , "light" : " auto" }
493+ "cursor" : { "deep" : " auto" , "standard" : " auto" , "light" : " auto" },
494+ "devin" : { "deep" : " claude-opus-4.6" , "standard" : " claude-sonnet-4" , "light" : " gpt-5.5" },
495+ "opencode" : { "deep" : " anthropic/claude-opus-4-6" , "standard" : " openai/gpt-5.6-terra" , "light" : " opencode/mimo-v2.5-free" }
412496 },
413497 "cost-aware" : {
414498 "claude" : { "deep" : " opus" , "standard" : " sonnet" , "light" : " sonnet" },
415499 "codex" : { "deep" : " gpt-5.6-sol" , "standard" : " gpt-5.6-terra" , "light" : " gpt-5.6-luna" },
416500 "antigravity" : { "deep" : " Gemini 3.1 Pro (High)" , "standard" : " Gemini 3.1 Pro (Low)" , "light" : " Gemini 3.5 Flash (Low)" },
417- "cursor" : { "deep" : " auto" , "standard" : " auto" , "light" : " auto" }
501+ "cursor" : { "deep" : " auto" , "standard" : " auto" , "light" : " auto" },
502+ "devin" : { "deep" : " claude-opus-4.6" , "standard" : " claude-sonnet-4" , "light" : " gpt-5.5" },
503+ "opencode" : { "deep" : " anthropic/claude-opus-4-6" , "standard" : " openai/gpt-5.6-terra" , "light" : " opencode/mimo-v2.5-free" }
418504 }
419505 }
420506}
421507```
422508
509+ - ` devin ` and ` opencode ` are ** worker-only** backends (v1): excluded from any cross-model
510+ arbiter/review panel until family-dedup keys on the * resolved* model rather than the
511+ backend name (both are multi-provider routers, so ` backend: devin ` /` backend: opencode `
512+ does not fix a single model family — see ` adapter-devin.md ` / ` adapter-opencode.md ` ).
513+
423514(` conservative ` and ` claude-only ` mirror ` balanced ` — seed those two stance blocks
424515identically to ` balanced ` . Only ` cost-aware.claude.standard ` differs: ` sonnet ` , not
425516` opus ` ; ` cost-aware.claude.deep ` stays ` opus ` .)
@@ -506,6 +597,20 @@ The user-level cache of what this machine can do, reused across repos:
506597 "codex" : { "available" : true , "exec_flags_verified" : true , "version" : " <from `codex --version`>" },
507598 "antigravity" : { "available" : false , "trust" : " lower (no kernel sandbox)" , "version" : " <from `agy --version`>" },
508599 "cursor" : { "available" : false , "authenticated" : false , "trust" : " lower (no kernel sandbox)" , "version" : " <from `cursor-agent --version`>" },
600+ "devin" : {
601+ "available" : false ,
602+ "authenticated" : false ,
603+ "trust" : " lower (Research-Preview kernel sandbox; exec-tool-only coverage unverified; network filtering unstable per vendor); worker-only" ,
604+ "version" : " <from `devin --version`>" ,
605+ "sandbox_setup_required" : null
606+ },
607+ "opencode" : {
608+ "available" : false ,
609+ "auth" : " none" ,
610+ "trust" : " lower (no kernel sandbox; docs claim default-allow permissions); worker-only, multi-provider" ,
611+ "version" : " <from `opencode --version`>" ,
612+ "providers_configured" : []
613+ },
509614 "context7" : { "available" : true },
510615 "workflows" : { "available" : false },
511616 "deep_research" : true ,
@@ -518,6 +623,17 @@ The user-level cache of what this machine can do, reused across repos:
518623- ` antigravity.available ` reflects the Step 1a-bis ` command -v agy ` probe; record the
519624 ` version ` from ` agy --version ` . When present, Step 1a-bis also seeds a real model map
520625 via ` agy models </dev/null ` (headless — no TTY needed).
626+ - ` devin.available ` reflects the Step 1a-quater ` command -v devin ` probe;
627+ ` devin.authenticated ` reflects ` devin auth status ` . ` sandbox_setup_required ` records
628+ whether ` devin sandbox setup ` reported readiness (macOS: always ready; Linux: depends
629+ on ` bubblewrap ` /` socat ` ) — informational only, not relied on for enforcement in v1.
630+ - ` opencode.available ` reflects the Step 1a-quinquies ` command -v opencode ` probe;
631+ ` opencode.auth ` records ** how** it is authenticating (` ambient-env ` /
632+ ` stored-credentials ` / ` none ` ) — this machine-local nuance matters more for opencode
633+ than any other backend, given the live-observed ambient-credential finding (see
634+ ` adapter-opencode.md ` ).
635+ - ` devin ` and ` opencode ` are never added to any arbiter/review-panel capability block —
636+ they are ** worker-only** in v1.
521637- ` deep_research ` reflects the Step 1d-bis presence probe (is ` deep-research ` in the
522638 available-skills listing?) — an ** advisory hint only** : Trigger 0 re-checks the live
523639 listing at fire time, because the flag can go stale (` disableBundledSkills ` /
0 commit comments