Devin harness reference
DevinOpts configures the devin() harness factory for Devin CLI-backed turns. Pass it as devin(opts); every field is optional.
DevinOpts
| Option | Type | Default | When to set |
|---|---|---|---|
binary | string | 'devin' (resolved via PATH) | Worker environments with a minimal PATH; pass an absolute path. |
model | DevinModel | Devin CLI default | Pin a default model for all turns from this harness instance; per-turn opts.model wins. |
defaultTimeoutMs | number | 1_800_000 (30 min) | Change the default per-turn timeout; per-call timeoutMs still overrides it. |
sandbox | boolean | false | Also pass Devin --sandbox when the worker has Devin's sandbox prerequisites installed. |
DEFAULT_DEVIN_MODEL is swe-1.7-lightning, matching the Devin CLI model slug shown by devin --help/invalid-model output.
Access and permission mode
Orchard writes a per-turn Devin --agent-config file and runs Devin in print mode with --export so it can recover the session ID for repair/resume turns.
| Orchard access | Devin flags and permissions |
|---|---|
'read' | --permission-mode auto; allow Read(cwd)/Read(cwd/**), deny matching Write scopes. |
'edit' | --permission-mode accept-edits; allow matching Read and Write scopes. |
The built-in Devin harness intentionally does not expose Devin dangerous permission mode. sandbox: true adds Devin's OS-level exec sandbox flag, but Orchard leaves it off by default because Devin fails before the turn when host prerequisites such as socat are missing.
Structured output
Devin does not currently expose a JSON-schema print-mode flag in this wrapper. harnessCall therefore uses Orchard's prompt-and-repair JSON extraction path and resumes the same Devin session with --resume <session_id> when repair is needed.