Audience: maintainer verification.
Verified 2026-09-21 and re-verified 2026-09-22 on macOS arm64 with devin 3000.11.1 (cc4e349ca55e).
The adapter reference owns operating facts; executable owners carry launch and state mechanics.
This verification covers crewmates and scouts, with tmux as the exercised runtime backend and a Herdr 0.9.0 lab session for the lifecycle checks below.
Primary, secondmate, ACP, and quota-provider integration are outside this guarantee.
devin --version
devin --help
devin auth status
devin models list
bin/fm-test-run.sh tests/fm-devin-harness.test.sh
FM_DEVIN_SIGNALS_LIVE=1 bin/fm-test-run.sh tests/fm-devin-signals-live-e2e.test.sh
FM_DEVIN_SIGNALS_LIVE=1 FM_DEVIN_MODEL=fusion-claude-fable-5-1-high-sidekick-swe-2-medium bin/fm-test-run.sh tests/fm-devin-signals-live-e2e.test.shThe credentialed guard copies file credentials into an isolated home, uses a private tmux socket, and runs the actual command generated by fm-spawn.sh.
That home carries a user Claude Code hook that must never fire, and the worker's own commit must carry no Devin attribution.
Worktree allocation and initial endpoint delivery use the portable fixture; steering and lifecycle control then use the real backend and vendor process.
It skips when signed out or when no file credentials can be isolated; the shared live gate owns absent-tool and opt-in behavior.
Failures name the installed Devin version.
On 2026-09-21 both refresh invocations completed with exit 0: SWE-2 Medium in 99 seconds and Fusion Fable High + SWE-2 Medium in 194 seconds. On 2026-09-22 the extended guard completed with exit 0 on SWE-2 Medium in 65 seconds:
ok - devin 3000.11.1 (cc4e349ca55e): spawn brief, model, autonomy, trust, identity and native Stop
ok - devin 3000.11.1 (cc4e349ca55e): no Claude Code hook ran and the worker commit carries no attribution
ok - devin 3000.11.1 (cc4e349ca55e): real fm-send doorbell read and acknowledged
ok - devin 3000.11.1 (cc4e349ca55e): idle interrupt sends one press; an open revert picker blocks exit and is closed without reverting
ok - devin 3000.11.1 (cc4e349ca55e): double Escape cancels, preserves agent, and invalidates busy state
ok - devin 3000.11.1 (cc4e349ca55e): /quit and native -r session resume
Version output:
devin 3000.11.1 (cc4e349ca55e)
Authentication reported Logged in (via Devin). and plan Max.
The account-reaching model list advertised:
swe-2-medium SWE-2 Medium [262K context, Free]
fusion-claude-fable-5-1-high-sidekick-swe-2-medium Fusion (Claude Fable 5.1 High + SWE-2 Medium) [1M context, $10 / 1M Input · $0.25 / 1M Cached input · $50 / 1M Output · Sidekick: Free]
Model availability and pricing are observations of this account and date, not an adapter-maintained catalog.
Both --prompt-file <file> and a prompt after -- started an interactive turn without additional input.
The spawn uses the latter with the canonical operational-input encoder.
--permission-mode dangerous --respect-workspace-trust false processed the initial prompt and wrote files in a fresh repository without a permission or trust dialog.
Devin's auto mode only auto-approves read-only tools according to --help; it is not mapped from Claude's differently defined auto mode.
The private config's native hook log recorded this ordered sequence for a tool-using turn:
SessionStart source=startup
UserPromptSubmit
PreToolUse tool_name=exec
PostToolUse tool_name=exec
Stop stop_hook_active=false last_assistant_message=80235
The generated hooks produced a record with state=idle source=devin-hook event=stop and the turn-ended notification.
The live Fusion resume recorded SessionStart source=resume, ran bin/fm-harness.sh from its own shell tool with output devin, and returned 17 × 29 = 493.
The footer identified Fusion · Claude Fable 5.1 ◆ SWE-2 Medium.
A running turn renders both esc twice to interrupt and ❭ Guide Devin while it works.
One Esc on a running turn renders (esc again to interrupt) on the spinner row for about three seconds; a second Esc then renders Canceled. What should Devin do?, preserves the process, and restores the empty composer without repopulating a draft (verified with a 0.6 second gap).
On an idle agent that has completed a turn, two Esc presses 0.05 or 0.1 seconds apart open the /revert picker, titled Revert to step: with the footer type search · ↑↓ select · ↵ revert · esc cancel, where Enter reverts file changes; gaps of 0.15 seconds or more did not open it, and one Esc closes it.
No Stop hook fires on that cancellation; the control plane therefore invalidates busy to unknown.
--export also updated after cancellation, but it is not used as a state source: file-change timing alone cannot bind completion to a newly submitted turn.
The idle composer is ❭ Ask Devin to build features, fix bugs, or work on your code.
The placeholder uses RGB 124;124;124; normal typed text uses RGB 255;255;255.
An inherited NO_COLOR=1 removes that distinction, so the launch clears that environment variable for the shared styled-composer guard.
/quit uses the shared slash-popup settle, returns to the shell, prints devin -r <session-id>, and emits SessionEnd reason=prompt_input_exit.
Native -r <session-id> accepted a new prompt and preserved the prior conversation.
With the pre-fix per-task config, a project .claude/settings.json logger fired on SessionStart, UserPromptSubmit, and Stop, and the user's own Claude Code SessionStart hooks also ran.
With read_config_from.claude false, the same logger never fired, in print mode and in the live guard.
attribution false is Devin's documented switch for its Co-Authored-By trailer; worker commits carried neither trailer nor Generated with Devin line.
The default-on trailer itself did not reproduce on this version with SWE-2 Medium or Claude Sonnet 5 Low composing their own commit messages, so the forced value is documented behavior rather than an observed fix.
A real fm-spawn.sh --backend herdr scout on a named Herdr 0.9.0 lab session, with the user's real ~/.claude/settings.json hooks present, produced:
agent get: {"agent":"devin","agent_status":"idle",...}
agent explain: manifest remote:.../agent-detection/remote/devin.toml, rule welcome_prompt_footer
fm_backend_agent_state: alive
interrupt (idle): interrupt-delivered ... backend=herdr verified=agent-alive cancel=not-running
interrupt (busy): interrupt-delivered ... backend=herdr verified=agent-alive cancel=unconfirmed
raw fast Esc pair: Revert to step picker open; exit refused; interrupt closed it; worktree unchanged
Herdr names the pane from its own screen-detection manifest; with Claude hook import left on, it still reported devin, so the feared Claude mislabel did not reproduce.
/no-mistakes typed through fm-send submitted as a slash command and loaded the skill.
A second fm-send while the worker ran sleep 40 rendered no cancellation, and both the running instruction and the queued one completed.
exit on Herdr refuses for a Devin worker: the cursorless composer classifier finds the ❭ row but reads the plain rule below it as an unpaired Pi separator and answers unknown.
The portable regression drives ancestry evidence, rejects unrelated process names, preserves drafts, checks both delivery signals independently, exercises config preservation and generation rejection, and verifies worker-only launch plus model and effort handling.
The control-plane regression covers the armed second press and its minimum gap, the single press on an idle agent, revert-picker dismissal and the exit refusal, and conservative state invalidation.
Rejected stale-generation events emit no turn-end notification.
The live guard checks main-turn completion, Claude hook isolation, commit attribution, doorbell acknowledgement, idle and busy interruption, the revert picker, process liveness, exit, and native resume.
The shared process classifier supplies the same native identity to tmux and Herdr; Herdr interrupt, steering, and identity were exercised in a lab session, while Herdr exit refuses as described above.
Zellij, Orca, and cmux were inspected through their existing backend-neutral delivery and key capability surfaces, not live-tested here.
Orca's existing lack of Escape delivery means a Devin interrupt is refused there.
A direct keyboard cancellation bypassing fm-control can retain a busy record until normal completion or session exit; no primary supervision guarantee is implied by these worker hooks.