Skip to content

feat: add Devin CLI support#1995

Open
caiolopes wants to merge 2 commits into
obra:devfrom
caiolopes:add-devin-cli-support
Open

feat: add Devin CLI support#1995
caiolopes wants to merge 2 commits into
obra:devfrom
caiolopes:add-devin-cli-support

Conversation

@caiolopes

@caiolopes caiolopes commented Jul 16, 2026

Copy link
Copy Markdown

Who is submitting this PR? (required)

Field Value
Your model + version Claude Fable 5 (XHigh thinking)
Harness + version Devin CLI 3000.1.27 (macOS, Homebrew cask)
All plugins installed None during development; only superpowers (this branch, local live-linked install) during acceptance testing
Human partner who reviewed this diff Caio Lopes (@caiolopes)

What problem are you trying to solve?

Devin CLI (Cognition's terminal agent) gained a plugin system that installs skill bundles from a GitHub repo (devin plugins install owner/repo). Running the natural command against this repo fails today:

$ devin plugins install obra/superpowers
Error: invalid manifest: could not read manifest at .../.devin-plugin/plugin.json: No such file or directory (os error 2)

This was hit in a real session: a Devin CLI user asked whether Superpowers could be installed (it isn't listed in the README), tried the install, and got the error above. Devin CLI's installer requires a .devin-plugin/plugin.json manifest at the repo root; the repo ships manifests for Claude Code, Codex, Cursor, Kimi, OpenCode, and Pi, but not Devin.

What does this PR change?

Adds a .devin-plugin/plugin.json manifest so devin plugins install obra/superpowers works, a Devin tool mapping (references/devin-tools.md) linked from using-superpowers' Platform Adaptation list, a README install section, version tracking in .version-bump.json, a .devin-plugin/ exclude in the Codex sync script, and a CI-safe test (tests/devin/test-devin-plugin.sh).

Is this change appropriate for the core library?

Yes — it's new harness support, the one carve-out the contributor rules allow. No skill bodies are modified (the single SKILL.md change is a one-line pointer in the Platform Adaptation section, which the porting guide explicitly sanctions). Zero dependencies added; no hooks, no code plugin — the integration is a manifest + a mapping doc.

How the bootstrap works on Devin CLI (per docs/porting-to-a-new-harness.md): Devin plugins carry skills only — the plugin system has no hook or context-file component (hooks exist in Devin but only as user/project config, which rule 2 forbids touching). However, Devin natively surfaces every installed skill's name + description in the system prompt at session start, with a standing instruction to invoke any matching skill immediately via its native skill tool. This is the "surfaced skill index" path the porting guide describes (Part 5 case 2 / Part 6: "lean on the installed using-superpowers skill itself"), for which the acceptance test is the mandatory proof — see the transcript below.

What alternatives did you consider?

  • Session-start hook injection (Shape A): Devin CLI has a SessionStart hook event with Claude Code–compatible hookSpecificOutput.additionalContext output — but hooks load only from user/project config (.devin/hooks.v1.json, ~/.config/devin/config.json), not from installed plugins. Shipping the bootstrap that way would require editing the user's config, which the porting guide forbids (rule 2). If Devin plugins gain a hooks component later, the existing hooks/session-start script could be wired up for a stronger guarantee.
  • Reusing an existing manifest: Devin's installer specifically requires .devin-plugin/plugin.json; it does not read .claude-plugin/ or the .agents/ marketplace file. Verified empirically (the error message above).
  • Doing nothing / external install shim: fails the acceptance test and the "install through the harness's own mechanism" rule.

Does this PR contain multiple unrelated changes?

No — one harness, and every touched file is required by the porting guide for a new harness (manifest, mapping, SKILL.md pointer, README, version tracking, sync excludes, tests).

Existing PRs

  • I have reviewed all open AND closed PRs for duplicates or prior art
  • Related PRs: none found for Devin (searched "devin", "devin CLI", "cognition"). Closest prior art: [feat] Add the support for windsurf #741 (closed, Windsurf) — rejected for duplicated install/update instructions and no evident human review. This PR keeps a single install path (the harness's own devin plugins install), adds no duplicated instructions, and the complete diff was human-reviewed.

Environment tested

Harness (e.g. Claude Code, Cursor) Harness version Model Model version/ID
Devin CLI 3000.1.27 (0d4bf12e) Claude Fable 5 Claude Fable 5 XHigh

New harness support (required if this PR adds a new harness)

Acceptance test run in a clean environment: pristine HOME (only Devin CLI credentials copied in), superpowers installed via devin plugins install <path-to-this-branch>, fresh empty git repo as the working directory, interactive session. devin skills list confirmed only the two Devin built-ins plus the 14 superpowers skills were loaded.

The first agent actions after the user message were invoking using-superpowers and then brainstorming — before any code, any file writes, or any exploration.

Clean-session transcript for "Let's make a react todo list"
◆ Trust /private/tmp/superpowers-acceptance? Yes, trust /private/tmp/superpowers-acceptance
⠀⣴⣾⣶⡄⠀⠀⠀⠀
⠀⠛⠿⠟⠻⣶⣾⣶⡄  Devin CLI
⠀⣤⣶⣦⣴⠿⢿⠿⠃  v3000.1.27
⠀⠻⢿⠿⠃⠀⠀⠀⠀

Cognition Platform (Enterprise)

❭ Let's make a react todo list

⏺ Invoked skill using-superpowers

⏺ Invoked skill brainstorming

Using brainstorming to design this before writing any code. Let me read the rest
of the skill and check the project context.

⏺ Read /private/var/folders/sv/.../content.txt
  └ 14 lines

⏺ Ran command
  │ $ ls -la /private/tmp/superpowers-acceptance && git -C /private/tmp/
  │   superpowers-acceptance log --oneline -5 2>/dev/null; echo "---"; git -C /
  │   private/tmp/superpowers-acceptance status
  │ On branch main
  │ No commits yet
  │ nothing to commit (create/copy files and use "git add" to track)
  └ Exited with code 0

⏺ Updated todo list (9 items)
  │ ✓ 1. Explore project context
  │ ◔ 2. Ask clarifying questions (one at a time)
  │ ○ 3. Offer visual companion just-in-time (only if a visual question arises)
  │ ○ 4. Propose 2-3 approaches with trade-offs
  │ ○ 5. Present design and get approval
  │ ○ 6. Write design doc to docs/superpowers/specs/ and commit
  │ ○ 7. Spec self-review
  │ ○ 8. User reviews written spec
  └ ○ 9. Invoke writing-plans skill

⏺ Asked user What's the main purpose of this React todo list?
  └ Learning exercise

⏺ Asked user Beyond adding, completing, and deleting todos, what should be
included?
  ✗ Canceled due to user interrupt

✱ Canceled. What should Devin do?

❭ /exit

(Session ended by the human at the second clarifying question — the design flow was proceeding per the brainstorming skill: context exploration, checklist todos, one question at a time via Devin's native multiple-choice prompt. No code was written at any point.)

Evaluation

  • Initial prompt: a Devin CLI user asked "can devin use https://github.com/obra/superpowers? i don't see it listed on README", then tried the install and hit the missing-manifest error.
  • Eval sessions after the change: 2 acceptance sessions (one non-interactive -p run, one interactive TUI run — both in the clean environment described above). Both auto-triggered using-superpowers + brainstorming as the first actions.
  • Before the change: devin plugins install obra/superpowers errors out; no skills load at all. After: install succeeds, all 14 skills register as /superpowers:<skill>, and the acceptance test passes.

Rigor

  • If this is a skills change: I used superpowers:writing-skills and completed adversarial pressure testing (paste results below) — N/A: no skill body content was modified (only the sanctioned Platform Adaptation pointer line and a new references/ mapping file)
  • This change was tested adversarially, not just on the happy path — the clean-HOME environment removed all personal skills/config; the non-interactive mode run additionally showed the skills still trigger when interactive tools are unavailable
  • I did not modify carefully-tuned content (Red Flags table, rationalizations, "human partner" language) without extensive evals showing the change is an improvement

Human review

  • A human has reviewed the COMPLETE proposed diff before submission

Devin CLI's `devin plugins install obra/superpowers` fails today because the
repo has no `.devin-plugin/plugin.json` manifest. Add the manifest (skills are
auto-discovered from the co-located skills/ directory), a Devin tool mapping
linked from using-superpowers' Platform Adaptation section, a README install
section, version tracking in .version-bump.json, a Codex-sync exclude for the
new dotdir, and a CI-safe test mirroring the kimi/antigravity test style.

Bootstrap rides Devin's native skill surfacing: every installed skill's
name + description is injected into the system prompt at session start with a
standing instruction to invoke matching skills via the native skill tool.
Acceptance test ("Let's make a react todo list") passes in a clean session:
using-superpowers and brainstorming auto-trigger before any code is written.
@obra

obra commented Jul 19, 2026

Copy link
Copy Markdown
Owner

Hi,

Thanks so much for submitting this.
We're working hard to remove the "x-tools.md" content except where absolutely necessary. Do you have a sense of how much of what's in devin-tools.md is necessary for correct operation?

Re-ran the clean-session acceptance test with the mapping file and the
SKILL.md Platform Adaptation pointer removed: using-superpowers and
brainstorming still auto-trigger first, and the full workflow chain
(writing-plans, executing-plans, TDD, verification) resolves every action
to Devin's native tools. Devin CLI's own system prompt already documents
its tools (skill invocation, subagent profiles, todo tracking, question
prompts), so the mapping was redundant. Test now validates the manifest only.
@caiolopes

Copy link
Copy Markdown
Author

@obra I tested and it works fine without it!

I've pushed a commit dropping the file and the SKILL.md pointer line, so the PR no longer touches any skill files

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants