mirror of
https://github.com/obra/superpowers.git
synced 2026-08-08 15:22:59 +08:00
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.
This commit is contained in:
@@ -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"
|
||||
]
|
||||
}
|
||||
@@ -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" }
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -48,6 +48,7 @@ EXCLUDES=(
|
||||
"/.claude-plugin/"
|
||||
"/.codex/"
|
||||
"/.cursor-plugin/"
|
||||
"/.devin-plugin/"
|
||||
"/.git/"
|
||||
"/.gitattributes"
|
||||
"/.github/"
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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:<skill>` 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.
|
||||
Executable
+85
@@ -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)"
|
||||
Reference in New Issue
Block a user