Repository navigation
feat(devin-cli): add skill and ACP run helper - #45
Merged
Merged
Conversation
- Reject edit, delete and move requests without a target path. - --read-only also rejects shell-command requests and starts in ask mode; editing modes are refused with it. - One run per run directory, created owner-only; reuse is refused. - A mode update without config options replaces the cached mode. - Streamed answer text is logged as activity for progress. - progress --tools 0 shows no titles; negative counts are rejected.
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.
Summary
Add a
devin-cliskill for delegating bounded coding tasks to the local Devin CLI over ACP (devin acp) from a supervising agent such as Claude Code or Codex.The bundled
scripts/devin_acp.py(standard library, Python 3.10+) has two commands:rundrives one Devin turn and blocks until it ends, so the caller backgrounds it with its own facility. It prints JSON lines (started,session,finished) and writesfinal.md,summary.json,events.jsonlanddevin.stderr.logto a run directory. It supports--resume <session_id>(ACPsession/load),--mode,--model,--agent-type, and a turn timeout that cancels and then stops the process tree.progresssummarizes a running or finished run directory: tool calls, recent tools, latest plan, denied permissions, failed tools, and time since the last event.Permission requests are always answered with a single-use option (
allow_once/reject_once). The helper never picksallow_session,allow_always,allow_always_globalorswitch_bypass, which persist in Devin's configuration or change the session mode. A default deny list rejects history-rewriting and branch/worktree git commands andghpublishing, and edits outside--cwdare rejected. Callers can adjust this with--deny,--no-default-deny,--allow-write-rootand--read-only.SKILL.mdcovers writing a self-contained brief, worktree isolation and integration, permissions and modes, model selection, monitoring, follow-ups, and verifying results.references/protocol.mdrecords the Devin-specific ACP behavior the helper relies on: setup, session modes and config options, replay onsession/load, update kinds, and the permission option IDs.Validation
python -m unittest discover -s tests: 92 tests passed, including 15 new offline tests intests/test_devin_acp.pyagainst a scripted ACP agent (tests/fixtures/devin_acp_agent.py). They cover text and config capture, single-use permission answers and policy decisions, read-only and extra deny rules, resume without replayed text, mode validation, timeout with and without cancel acknowledgement, incomplete stop reasons, setup and process failures, unsupported client requests,progress, and CLI argument handling. Also rantests.test_devin_acpwith-W error::ResourceWarning.uv tool run ruff check skills/devin-cli/scripts tests/test_devin_acp.py tests/fixtures/devin_acp_agent.py: passed.python scripts/update_readme_skills.py --check,python scripts/sync_agent_runtime.py --check,gh skill publish --dry-run,git diff --check: passed. Packaged withscripts/package_skill.py(containsSKILL.md,references/protocol.md,scripts/devin_acp.py).git statusandgit add(one through a single-use approval), and hadgit commitrejected by the default deny list. The summary reported the effectivemodel,thought_levelandspeed.--resumewith--mode askcontinued the same session and recalled the refused command without using tools.--modefailed before the prompt was sent and listed the available modes.CLI help: