5.6 KiB
Devin Claude Bridge Progress
Updated: 2026-07-28
Baseline
- Fork version:
3.8.49. - Starting branch:
release/v3.8.49. - Starting commit:
ed7db3ee5f89a144b2d931d8605534522f83de30. - Fixed runtime artifacts: Node
26.0.0, Claude Code2.1.220, Devin CLI3000.2.17. - Existing
devin-cliremains unchanged; the new path is the separatedevin-cli-agenticprovider.
Implemented architecture
- Claude Code runs only inside the non-root bridge container with its own empty config volume and local OmniRoute base URL.
devin-cli-agenticpreserves Anthropic messages, tool schemas,tool_use, andtool_result, then calls the official Devin CLI over ACP stdio.- The executor starts
devin acp --agent-type summarizer. This is the only fixed official ACP role in the pinned CLI that has no Devin-owned tools. - The request is framed as an execution trace. Devin can return one strict client tool envelope; Claude Code executes that tool locally.
- Internal ACP
tool_callevents, unsupported blocks, invalid schemas, narrative actions, timeouts, cancellation, and process failure all fail closed. - Provider and network policy prevent combo/auto/Anthropic fallback.
Offline proof
- Focused serializer, parser, executor, ACP lifecycle, wire-format, environment, and audit tests pass (39/39).
- The contract suite covers Anthropic JSON/SSE,
tool_use,tool_resultcontinuation, fragmented ACP frames, stderr, early exit, timeout, cancellation, and fail-closed provider loss. - The production bridge image builds with the pinned CLIs.
- Real Claude Code offline E2E loads
CLAUDE.md, the project skill and slash command, fires hooks, executes local tools over multiple turns, observes a failed test, repairs the file, reruns the test, and completes. - The isolation verifier proves non-root/read-only execution, isolated mounts and config, blocked Anthropic/Claude access, no host credential mounts, local-only inference, and no fallback.
Evidence is generated under .sandbox/evidence and ignored by Git.
Regression status
typecheck:core, focused ESLint, Prettier, shell/Node syntax, and the complete documentation accuracy suite pass.- The broad
npm run checkis not reported as passed: after its lint phase, the repository test runner remained alive while an existingioredisclient repeatedly retried an unavailable local Redis endpoint afterquota-redis-store.test.ts. The bridge-focused suites, production image build, offline E2E, isolation proof, and live gate do not use that Redis service and all pass.
Live Devin proof
Passed with the official in-container login and discovered model
swe-1-7-lightning. The terminal live run completed all three scenarios:
- Claude Code loaded the fixture instructions, issued client-owned
Readcalls, and returned a correct defect analysis. - Claude Code issued a real
Editchanging subtraction to addition, then a client-ownedBashcall runningnpm test; the test reported one pass and zero failures. - Claude Code initialization listed
bridge-checkandbridge-proof, read the corrected source and test, executed another client-ownednpm test, and completed successfully.
The live evidence validator parses stream JSON and requires successful tool results. It does not accept a textual claim that a tool ran. It also rejects terminal summaries that report a blocker, incomplete work, or required next steps.
The final live gate reported:
PASS: validated Claude evidence for LIVE_ANALYSIS_COMPLETE
PASS: validated Claude evidence for LIVE_FIX_COMPLETE
PASS: validated Claude evidence for BRIDGE_E2E_COMPLETE
PASS: three live Devin-backed Claude Code scenarios completed
PASS: live model swe-1-7-lightning was discovered and validated by three scenarios
The same gate validated the network audit: only the Devin guard path was used, no internal Devin tool event was accepted, and the Claude egress audit remained empty.
Investigation conclusion
The initial default-agent hypothesis failed because ACP permission modes do not turn the
default Devin agent into a raw inference backend. Even ask mode can emit Devin-owned
tool_call events. A discovered allowed-tools: [] agent configuration was not consumed by
devin acp in CLI 3000.2.17.
The working adaptation uses the official summarizer agent because it is structurally
no-tools. Its fixed summarization behavior can produce intermediate prose, so the bridge
frames requests as execution traces, detects future-action narration, performs at most one
strict repair, and otherwise fails. Live validation also exposed transient ACP timeouts;
the harness now spaces independent scenarios rather than weakening routing or retrying into
another provider.
Safety record
No host Claude executable, configuration, login, OAuth token, Keychain, or Anthropic API was used. The dedicated Docker volumes remain role-separated. No credential value is written to the repository or evidence output.
During the early baseline, a focused test without isolated DATA_DIR initialized the
repository's normal OmniRoute database at /Users/lucasisrael/.omniroute/storage.sqlite.
It was not rolled back or touched again. Every bridge command now pins database and temporary
paths under the worktree's .sandbox directory.
Remaining limits
- The no-tools backend has a summarizer system role rather than a neutral generation role.
- One client tool call per response is supported; parallel tool calls are rejected.
- ACP processes are per-turn and stateless.
- Live Devin availability can still produce explicit
502/504failures. - Images and unadvertised vision/effort/large-context capabilities remain unsupported.