From 09a567b6f4e3ee47aa64c5e8db81a075217bbbfa Mon Sep 17 00:00:00 2001 From: Caio Lopes Date: Thu, 16 Jul 2026 10:46:34 -0300 Subject: [PATCH 1/2] feat: add Devin CLI support 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. --- .devin-plugin/plugin.json | 22 +++++ .version-bump.json | 1 + README.md | 17 +++- scripts/sync-to-codex-plugin.sh | 1 + skills/using-superpowers/SKILL.md | 1 + .../references/devin-tools.md | 18 ++++ tests/devin/test-devin-plugin.sh | 85 +++++++++++++++++++ 7 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 .devin-plugin/plugin.json create mode 100644 skills/using-superpowers/references/devin-tools.md create mode 100755 tests/devin/test-devin-plugin.sh diff --git a/.devin-plugin/plugin.json b/.devin-plugin/plugin.json new file mode 100644 index 00000000..5299cca8 --- /dev/null +++ b/.devin-plugin/plugin.json @@ -0,0 +1,22 @@ +{ + "name": "superpowers", + "version": "6.2.0", + "description": "An agentic skills framework & software development methodology that works: planning, TDD, debugging, and collaboration workflows.", + "author": { + "name": "Jesse Vincent", + "email": "jesse@fsck.com" + }, + "homepage": "https://github.com/obra/superpowers", + "repository": "https://github.com/obra/superpowers", + "license": "MIT", + "keywords": [ + "brainstorming", + "subagent-driven-development", + "skills", + "planning", + "tdd", + "debugging", + "code-review", + "workflow" + ] +} diff --git a/.version-bump.json b/.version-bump.json index 8b9c6d99..8df0a977 100644 --- a/.version-bump.json +++ b/.version-bump.json @@ -5,6 +5,7 @@ { "path": ".claude-plugin/plugin.json", "field": "version" }, { "path": ".cursor-plugin/plugin.json", "field": "version" }, { "path": ".codex-plugin/plugin.json", "field": "version" }, + { "path": ".devin-plugin/plugin.json", "field": "version" }, { "path": ".kimi-plugin/plugin.json", "field": "version" }, { "path": ".claude-plugin/marketplace.json", "field": "plugins.0.version" }, { "path": "gemini-extension.json", "field": "version" } diff --git a/README.md b/README.md index cab41fff..652819a9 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ Superpowers is a complete software development methodology for your coding agent - [Codex App](#codex-app) - [Codex CLI](#codex-cli) - [Cursor](#cursor) + - [Devin CLI](#devin-cli) - [Factory Droid](#factory-droid) - [Gemini CLI](#gemini-cli) - [GitHub Copilot CLI](#github-copilot-cli) @@ -31,7 +32,7 @@ Superpowers is a complete software development methodology for your coding agent ## Quickstart -Give your agent Superpowers: [Claude Code](#claude-code), [Antigravity](#antigravity), [Codex App](#codex-app), [Codex CLI](#codex-cli), [Cursor](#cursor), [Factory Droid](#factory-droid), [Gemini CLI](#gemini-cli), [GitHub Copilot CLI](#github-copilot-cli), [Grok Build CLI](#grok-build-cli), [Hermes Agent](#hermes-agent), [Kimi Code](#kimi-code), [OpenCode](#opencode), [Pi](#pi). +Give your agent Superpowers: [Claude Code](#claude-code), [Antigravity](#antigravity), [Codex App](#codex-app), [Codex CLI](#codex-cli), [Cursor](#cursor), [Devin CLI](#devin-cli), [Factory Droid](#factory-droid), [Gemini CLI](#gemini-cli), [GitHub Copilot CLI](#github-copilot-cli), [Grok Build CLI](#grok-build-cli), [Hermes Agent](#hermes-agent), [Kimi Code](#kimi-code), [OpenCode](#opencode), [Pi](#pi). ## How it works @@ -128,6 +129,20 @@ Superpowers is available via the [official Codex plugin marketplace](https://git - Or search for "superpowers" in the plugin marketplace. +### Devin CLI + +- Install the plugin from this repository: + + ```bash + devin plugins install obra/superpowers + ``` + +- Update to the latest version with: + + ```bash + devin plugins update superpowers + ``` + ### Factory Droid - Register the marketplace: diff --git a/scripts/sync-to-codex-plugin.sh b/scripts/sync-to-codex-plugin.sh index ef8e0839..bdaa13a3 100755 --- a/scripts/sync-to-codex-plugin.sh +++ b/scripts/sync-to-codex-plugin.sh @@ -48,6 +48,7 @@ EXCLUDES=( "/.claude-plugin/" "/.codex/" "/.cursor-plugin/" + "/.devin-plugin/" "/.git/" "/.gitattributes" "/.github/" diff --git a/skills/using-superpowers/SKILL.md b/skills/using-superpowers/SKILL.md index 7ab2eb67..ec24a876 100644 --- a/skills/using-superpowers/SKILL.md +++ b/skills/using-superpowers/SKILL.md @@ -57,6 +57,7 @@ If your harness appears here, read its reference file for special instructions: - Pi: `references/pi-tools.md` - Antigravity: `references/antigravity-tools.md` - Hermes Agent: `references/hermes-tools.md` +- Devin CLI: `references/devin-tools.md` ## User Instructions diff --git a/skills/using-superpowers/references/devin-tools.md b/skills/using-superpowers/references/devin-tools.md new file mode 100644 index 00000000..dc40d633 --- /dev/null +++ b/skills/using-superpowers/references/devin-tools.md @@ -0,0 +1,18 @@ +# Devin CLI Tool Mapping + +Skills speak in actions ("dispatch a subagent", "create a todo", "read a file"). On Devin CLI these resolve to the tools below. + +| Action skills request | Devin CLI equivalent | +| --- | --- | +| Invoke a skill | The native `skill` tool (skills also appear as `/superpowers:` slash commands) | +| Dispatch a subagent (`Subagent (general-purpose):` template) | `run_subagent` with the `subagent_general` profile; use `subagent_explore` for read-only exploration | +| Task tracking ("create a todo", "mark complete") | `todo_write` | +| Ask the user / present options | `ask_user_question` (native multiple-choice prompts; fall back to plain text in non-interactive mode) | + +## Subagents + +`run_subagent` subagents are stateless and cannot ask clarifying questions — front-load the full context and exact instructions in the task prompt, as the subagent-driven-development templates already do. Run independent tasks in parallel with `is_background: true`; keep dependent tasks sequential. + +## File, shell, and search tools + +Devin CLI exposes native tools for reading, writing, and editing files, running shell commands, and searching (grep/glob). Exact tool names can vary by session mode — use whichever file/shell/search tools your session exposes rather than names remembered from another harness. diff --git a/tests/devin/test-devin-plugin.sh b/tests/devin/test-devin-plugin.sh new file mode 100755 index 00000000..312990d7 --- /dev/null +++ b/tests/devin/test-devin-plugin.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env bash +# Validate the Devin CLI integration. `devin plugins install obra/superpowers` +# reads `.devin-plugin/plugin.json` and auto-discovers the co-located `skills/` +# directory; Devin CLI surfaces every installed skill's name + description in +# the system prompt at session start and invokes them via its native `skill` +# tool, so there is no hook or injector scaffold to test. What IS Devin-specific +# is the manifest and the tool mapping — subagent dispatch via run_subagent +# profiles and task tracking via todo_write — and SKILL.md pointing at it. +# +# Mirrors tests/kimi/test-plugin-manifest.sh (manifest) and +# tests/antigravity/test-antigravity-tools.sh (mapping). CI-safe: does not +# require `devin` installed. +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" + +MANIFEST="$REPO_ROOT/.devin-plugin/plugin.json" +MAPPING="$REPO_ROOT/skills/using-superpowers/references/devin-tools.md" +SKILL="$REPO_ROOT/skills/using-superpowers/SKILL.md" + +fail() { echo "FAIL: $*" >&2; exit 1; } + +echo "test-devin-plugin: checking Devin CLI manifest and tool mapping" + +# --- Manifest is valid and matches the repo version ------------------------- +[ -f "$MANIFEST" ] || fail "manifest missing at $MANIFEST" + +python3 - "$MANIFEST" <<'PY' +import json +import sys +from pathlib import Path + +manifest_path = Path(sys.argv[1]) +manifest = json.loads(manifest_path.read_text(encoding="utf-8")) +repo_root = manifest_path.parents[1] + +if manifest.get("name") != "superpowers": + raise AssertionError(f"plugin name: expected 'superpowers', got {manifest.get('name')!r}") + +package = json.loads((repo_root / "package.json").read_text(encoding="utf-8")) +if manifest.get("version") != package.get("version"): + raise AssertionError( + f"manifest version {manifest.get('version')!r} != package.json version {package.get('version')!r}" + ) + +# Devin CLI plugins carry skills only (auto-discovered from ./skills/); the +# manifest supports metadata + dependency lists, nothing executable. +unsupported = ["skills", "hooks", "commands", "sessionStart", "contextFileName", "inject"] +present = sorted(field for field in unsupported if field in manifest) +if present: + raise AssertionError("unsupported Devin manifest fields present: " + ", ".join(present)) + +version_config = json.loads((repo_root / ".version-bump.json").read_text(encoding="utf-8")) +entries = version_config.get("files") +if not isinstance(entries, list) or not any( + entry.get("path") == ".devin-plugin/plugin.json" and entry.get("field") == "version" + for entry in entries + if isinstance(entry, dict) +): + raise AssertionError(".version-bump.json must update .devin-plugin/plugin.json version") + +print("Devin plugin manifest looks good") +PY + +# --- Mapping exists ---------------------------------------------------------- +[ -f "$MAPPING" ] || fail "tool mapping missing at $MAPPING" + +# --- Core action→tool mappings are documented -------------------------------- +for tool in skill run_subagent todo_write ask_user_question; do + grep -q "$tool" "$MAPPING" \ + || fail "mapping does not document the '$tool' tool" +done + +# --- Subagents use the built-in profiles -------------------------------------- +grep -q 'subagent_general' "$MAPPING" \ + || fail "mapping does not document the 'subagent_general' profile" +grep -q 'subagent_explore' "$MAPPING" \ + || fail "mapping does not document the 'subagent_explore' profile" + +# --- SKILL.md Platform Adaptation links the mapping --------------------------- +grep -q "devin-tools.md" "$SKILL" \ + || fail "SKILL.md Platform Adaptation does not reference devin-tools.md" + +echo "PASS: Devin CLI plugin valid (manifest, tool mapping, SKILL.md link)" From d21e171f5738700e05d4bd4cf056eea671c56b0f Mon Sep 17 00:00:00 2001 From: Caio Lopes Date: Mon, 20 Jul 2026 11:37:26 -0300 Subject: [PATCH 2/2] =?UTF-8?q?Drop=20devin-tools.md=20=E2=80=94=20not=20n?= =?UTF-8?q?eeded=20for=20correct=20operation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- skills/using-superpowers/SKILL.md | 1 - .../references/devin-tools.md | 18 ---------- tests/devin/test-devin-plugin.sh | 36 ++++--------------- 3 files changed, 7 insertions(+), 48 deletions(-) delete mode 100644 skills/using-superpowers/references/devin-tools.md diff --git a/skills/using-superpowers/SKILL.md b/skills/using-superpowers/SKILL.md index ec24a876..7ab2eb67 100644 --- a/skills/using-superpowers/SKILL.md +++ b/skills/using-superpowers/SKILL.md @@ -57,7 +57,6 @@ If your harness appears here, read its reference file for special instructions: - Pi: `references/pi-tools.md` - Antigravity: `references/antigravity-tools.md` - Hermes Agent: `references/hermes-tools.md` -- Devin CLI: `references/devin-tools.md` ## User Instructions diff --git a/skills/using-superpowers/references/devin-tools.md b/skills/using-superpowers/references/devin-tools.md deleted file mode 100644 index dc40d633..00000000 --- a/skills/using-superpowers/references/devin-tools.md +++ /dev/null @@ -1,18 +0,0 @@ -# Devin CLI Tool Mapping - -Skills speak in actions ("dispatch a subagent", "create a todo", "read a file"). On Devin CLI these resolve to the tools below. - -| Action skills request | Devin CLI equivalent | -| --- | --- | -| Invoke a skill | The native `skill` tool (skills also appear as `/superpowers:` slash commands) | -| Dispatch a subagent (`Subagent (general-purpose):` template) | `run_subagent` with the `subagent_general` profile; use `subagent_explore` for read-only exploration | -| Task tracking ("create a todo", "mark complete") | `todo_write` | -| Ask the user / present options | `ask_user_question` (native multiple-choice prompts; fall back to plain text in non-interactive mode) | - -## Subagents - -`run_subagent` subagents are stateless and cannot ask clarifying questions — front-load the full context and exact instructions in the task prompt, as the subagent-driven-development templates already do. Run independent tasks in parallel with `is_background: true`; keep dependent tasks sequential. - -## File, shell, and search tools - -Devin CLI exposes native tools for reading, writing, and editing files, running shell commands, and searching (grep/glob). Exact tool names can vary by session mode — use whichever file/shell/search tools your session exposes rather than names remembered from another harness. diff --git a/tests/devin/test-devin-plugin.sh b/tests/devin/test-devin-plugin.sh index 312990d7..16ea31f4 100755 --- a/tests/devin/test-devin-plugin.sh +++ b/tests/devin/test-devin-plugin.sh @@ -3,25 +3,22 @@ # reads `.devin-plugin/plugin.json` and auto-discovers the co-located `skills/` # directory; Devin CLI surfaces every installed skill's name + description in # the system prompt at session start and invokes them via its native `skill` -# tool, so there is no hook or injector scaffold to test. What IS Devin-specific -# is the manifest and the tool mapping — subagent dispatch via run_subagent -# profiles and task tracking via todo_write — and SKILL.md pointing at it. +# tool, and its system prompt already documents its own tools (subagent +# profiles, todo tracking, question prompts), so there is no hook, injector, +# or tool-mapping scaffold to test. What IS Devin-specific is the manifest. # -# Mirrors tests/kimi/test-plugin-manifest.sh (manifest) and -# tests/antigravity/test-antigravity-tools.sh (mapping). CI-safe: does not -# require `devin` installed. +# Mirrors tests/kimi/test-plugin-manifest.sh. CI-safe: does not require +# `devin` installed. set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" MANIFEST="$REPO_ROOT/.devin-plugin/plugin.json" -MAPPING="$REPO_ROOT/skills/using-superpowers/references/devin-tools.md" -SKILL="$REPO_ROOT/skills/using-superpowers/SKILL.md" fail() { echo "FAIL: $*" >&2; exit 1; } -echo "test-devin-plugin: checking Devin CLI manifest and tool mapping" +echo "test-devin-plugin: checking Devin CLI manifest" # --- Manifest is valid and matches the repo version ------------------------- [ -f "$MANIFEST" ] || fail "manifest missing at $MANIFEST" @@ -63,23 +60,4 @@ if not isinstance(entries, list) or not any( print("Devin plugin manifest looks good") PY -# --- Mapping exists ---------------------------------------------------------- -[ -f "$MAPPING" ] || fail "tool mapping missing at $MAPPING" - -# --- Core action→tool mappings are documented -------------------------------- -for tool in skill run_subagent todo_write ask_user_question; do - grep -q "$tool" "$MAPPING" \ - || fail "mapping does not document the '$tool' tool" -done - -# --- Subagents use the built-in profiles -------------------------------------- -grep -q 'subagent_general' "$MAPPING" \ - || fail "mapping does not document the 'subagent_general' profile" -grep -q 'subagent_explore' "$MAPPING" \ - || fail "mapping does not document the 'subagent_explore' profile" - -# --- SKILL.md Platform Adaptation links the mapping --------------------------- -grep -q "devin-tools.md" "$SKILL" \ - || fail "SKILL.md Platform Adaptation does not reference devin-tools.md" - -echo "PASS: Devin CLI plugin valid (manifest, tool mapping, SKILL.md link)" +echo "PASS: Devin CLI plugin valid (manifest)"