Add Devin CLI as an ACP provider - #226
Draft
egoist wants to merge 4 commits into
Draft
Conversation
Drive `devin acp` through the shared ACP driver, with Adaptive as the fallback model, session list/load over ACP, and no turn-aware fork.
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ❌ Deployment failed View logs |
waku-web | aa26198 | Sep 12 2026, 01:00 PM |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
waku | aa26198 | Commit Preview URL Branch Preview URL |
Sep 12 2026, 01:00 PM |
Devin never implemented session/set_model, so applying the picker choice toasted "Method not found" while the turn still ran. Use the advertised model config option instead, and treat a missing ACP method as unsupported rather than a user-facing failure.
devin models list is the interactive CLI catalog and includes Adaptive. ACP only advertises the models the session will accept, so sending Adaptive toasted "Model not found". Discover from session/new configOptions and map Adaptive to the advertised current value.
Devin writes a generated title to sessions.db after the turn and does not push session_info_update on a live first prompt. Poll that store and ignore the first-prompt placeholder so the sidebar can replace Waku's fallback.
|
This is working well for me |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem and solution
Waku had no Devin CLI path. Devin already speaks Agent Client Protocol over stdio (
devin acp), so it joins Cursor, Fx, Grok, and Kimi on the shared ACP driver instead of getting a one-off transport.Launch is
devin acpwith no--model. The picker catalog comes from the ACP session's advertised modelconfigOptions— the listsession/set_config_optionwill actually accept.devin models listis the interactive CLI catalog and includes ids such asadaptivethat this agent rejects (Model not found: adaptive. Available models: swe-1-6-slow). Discovery opens a short-lived ACP session, reads that option, and deletes the session. If ACP discovery is empty, Waku falls back to parsingdevin models list --format json(families[].variants[].model_uid). There is no invented Adaptive fallback.Model selection uses
session/set_config_optionon the advertised model option.adaptive/automap to the advertised current value when they are not themselves advertised. Devin never implementedsession/set_model; a missing-method reply is treated as unsupported rather than a user-facing failure. Resume is{ provider: "devin", sessionId }. Session catalog and history go through ACPsession/list/session/loadthe same way Cursor and Fx do. Slash commands arrive from the liveAvailableCommandsupdate after session open. Skills are scanned from.devin/skillsand the XDG/AppDatadevin/skillsdirectory.Fork and rewind stay off. Devin does not expose a turn-aware truncation or fork, so
supports_conversation_forkandsupports_conversation_rollbackare false and the UI hides those controls. Steering is advertised because the transport allows a secondsession/prompt; that superseded-prompt policy has not been probed on a live Devin turn.Commit-message generation is
devin --respect-workspace-trust false --print --plus an optional--model.--printcannot show the workspace-trust prompt, so the trust check is skipped.--sandboxis not passed.Reasoning effort is not sent as config id
modefor Devin: that id is Devin's permission mode.A new Devin session kept the truncated-prompt fallback for the whole run. Devin does generate a title, but it writes it to
sessions.dbaftersession/promptreturns and does not pushsession_info_updateon the live turn. The driver now polls that store (sameNativeTitleRefreshpath as Grok) from the first prompt and again at turn end. The first prompt Devin stores immediately is treated as a miss, so it cannot latch and hide the generated name._cognition.ai/session/renameis forwarded when it carries a distinct title.Checks
cargo fmt --package waku --package waku-protocol --package waku-client --package waku-core --package waku-daemon -- --checkcargo test -p waku-core --lib -- driver::acp::: 28 pass, 3 ignored (live Cursor/Grok/Kimi)cargo test -p waku-core --lib -- devin_session: 3 passLimitations and follow-up
session/request_permission; Auto-accept / Auto / Full access auto-answer. Devin’s native/normal/accept-edits/bypassmodes are not mapped throughsession/set_modeuntil they are seen on the wire.devinprocess against a locked session; it reads the CLI sqlite store.agent_ext::title/failed_precondition). That is silent, and the prompt fallback stays until a distinct title is written.Related issue
None.
AI disclosure
Cursor Grok 4.6 (cloud agent) implemented the wiring from Devin’s public CLI/ACP docs and the existing Cursor/Fx/Kimi ACP path, then fixed model selection after live toasts of
Method not foundandModel not found: adaptive. Catalog discovery was checked against a livedevin acpsession on this machine. Title polling was added after a live first turn left the sidebar on the prompt fallback: Devin logs show title generation aftersession/prompt, andsessions.dbis where that name is stored.Checklist