@obversa/engine-devin-cli runs Devin as an engine: every request is one
fresh devin -p process. Use it to put a Devin model in a writing,
checking or review seat.
Install
@obversa/obversa; install it on its own.
Requirements
- The Devin CLI installed and signed in with your own account. The
devincommand must be on yourPATH, or you pass its path ascliBinary.
Quickstart
devin(model?) is the seat helper a workflow() role takes, as
claude(model) is for Claude. This file runs the seat once on a read-only
question:
examples/engine-devin-cli-seat.ts
npx tsx engine-devin-cli-seat.ts in a git repository that holds
an a.js with two exports. One run printed:
Output
devin('swe-2-max') to name the model. devin models list prints the
models your account can use.
How it runs Devin
Devin runs as you run it yourself: with your home folder, your Devin login and your Devin settings. It reads the same instruction files and rules it reads when you start it yourself. The plugin adds only these flags:
Each attempt is a new process. The plugin never continues or resumes an
earlier Devin conversation.
Identity
The plugin reportsprovider: 'cognition'. The model family is the first
part of the model name: swe-2-max gives swe, and claude-opus-5-5-max
gives claude. The result’s effective record names the model Devin reports
for the run, so a seat with no model still records which model answered.
Without a model, the seat records the model as default.
Devin reports token counts in its conversation file, and the result carries
them. If Devin reports none, usage is unknown.
Workspace modes
A step that names no workspace mode runs as
read. The plugin never passes
smart or dangerous.
In print mode Devin cannot ask you. When Devin wants a tool that its
permission mode does not approve, it refuses the tool and does not wait. If
Devin then ends without an answer, the attempt fails with
EngineIncompleteResultError. The message names the permission mode and
repeats Devin’s warning.
What Devin cannot do through the plugin
- No list of named tools. Devin has no flag that limits a step to named
tools. The permission mode is the only limit, and a seat’s
toolslist is recorded, not enforced. - No step without a folder.
workspaceMode: 'none'andtools: []fail withinvalid-configbefore Devin starts. - No system prompt. Devin has no flag for one, so a request’s
systemtext goes at the top of the prompt. - No structured result. The final message is text. A request’s
jsonSchemais not sent to Devin. - No live events. The plugin reads the conversation after Devin exits, so text and tool events arrive together at the end.
- No folder trust check. The plugin skips it, for the reason in the table above.
Options
Errors
EngineErrorof kindmissing-cliwhen the executable can’t run.EngineErrorof kindinvalid-configfor a step without a folder, a step withtools: [], or adevin --versionoutput the plugin cannot read.EngineIncompleteResultErrorwhen Devin exits without a final answer.- Other
EngineErrorkinds, such asauthorrate-limit, are read from Devin’s own error message.
API
devin(model?): aTeamSeatfor a workflow role. Quickstart.DevinCliEngine: the engine class.DevinCliEngineOptionsandDevinSeat: its types.buildDevinArgs: the argument builder, exported for tests.
Next steps
- Runtime: the roles a seat fills.
- Codex CLI Engine: another CLI seat.