Skip to content

Multi-agent packaging: add Cursor, Devin, opencode, and AGENTS.md adapters - #9

Merged
Xcaciv merged 2 commits into
mainfrom
claude/multi-agent-plugin-5swe8g
Aug 25, 2026
Merged

Xcaciv merged 2 commits into
mainfrom
claude/multi-agent-plugin-5swe8g

Conversation

@Xcaciv

@Xcaciv Xcaciv commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator

Implements the obra/superpowers multi-agent packaging model: one skills tree, one adapter per agent harness. Each supported agent now gets a root-level adapter (manifest or agent-followable install instructions), and all adapters point at the same skills/ + data/ tree.

Key changes

  • New per-agent adapters:

    • .cursor-plugin/plugin.json — Cursor plugin manifest with skills pointer
    • .devin-plugin/plugin.json — Devin plugin manifest
    • .opencode/INSTALL.md — Agent-followable install instructions for opencode
    • .agents/INSTALL.md — Agent-followable install instructions for any AGENTS.md/SKILL.md agent (Codex, Zed, Amp, etc.)
  • Manifest lockstep enforcement:

    • New scripts/check_manifests.py validates that all per-agent manifests stay in sync on name, version, license, and repository
    • Verifies resource pointers (e.g., Cursor's skills path) resolve inside the repo
    • Verifies required install documents exist
    • Integrated into CI via scripts/run_checks.sh
  • Release automation:

    • scripts/build_plugin_zip.sh now stamps the release version into .cursor-plugin/plugin.json and .devin-plugin/plugin.json alongside the canonical .claude-plugin/plugin.json
  • Documentation:

    • Updated README.md with installation instructions for all five agent types (Claude Code, Cursor, Devin, opencode, generic AGENTS.md)
    • Updated AGENTS.md to document the per-agent adapter layout
    • Version bump to 2.3.0 across all manifests

Implementation details

  • .claude-plugin/plugin.json remains the canonical version source; all other manifests are kept in lockstep by CI
  • Install documents carry no version (they are always current) and are validated to exist
  • The sibling layout of skills/, data/, plays/, templates/, schema/, core/, and rules/ is load-bearing for relative references inside skill definitions
  • scripts/check_manifests.py exits 0 when consistent, 1 with one line per problem otherwise

https://claude.ai/code/session_01AcHBYr49Btj8UFuMPPEWud

…ic AGENTS.md agents

Adopt the multi-agent packaging methodology of obra/superpowers: one
root-level adapter per harness, all pointing at the same skills/ + data/
tree.

- .cursor-plugin/plugin.json — Cursor plugin manifest with a skills
  pointer at the shared skills/ tree
- .devin-plugin/plugin.json — Devin plugin manifest
  (devin plugins install Securability-Engineering/securable-claude-plugin)
- .opencode/INSTALL.md — agent-followable fetch-and-follow install for
  opencode, driving the existing layout-preserving installer
- .agents/INSTALL.md — the same for any AGENTS.md/SKILL.md-conforming
  agent (Codex, Zed, Amp, ...)
- scripts/check_manifests.py — CI lockstep check: every manifest must
  agree with .claude-plugin/plugin.json on name/version/license, the
  Cursor skills pointer must resolve, install docs must exist; wired
  into scripts/run_checks.sh
- scripts/build_plugin_zip.sh — release version now stamped into all
  three manifests, not just the Claude one
- README/AGENTS.md — per-agent installation matrix and layout docs
- Version 2.2.0 -> 2.3.0 across all manifests

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AcHBYr49Btj8UFuMPPEWud
Copilot AI lite review requested due to automatic review settings August 25, 2026 19:51

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR implements a multi-agent packaging layout (à la obra/superpowers) so the repository can be installed into multiple agent harnesses via per-harness “adapters” (manifests or INSTALL docs) while still sharing one canonical skills/ + data/ tree.

Changes:

  • Added new per-agent adapters for Cursor, Devin, opencode, and generic AGENTS.md/SKILL.md agents, plus updated documentation to describe installation paths.
  • Added scripts/check_manifests.py and wired it into scripts/run_checks.sh to keep per-agent manifests in lockstep with the canonical Claude manifest.
  • Updated release packaging (scripts/build_plugin_zip.sh) to stamp the release version into Cursor/Devin manifests in addition to the canonical Claude manifest.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
scripts/run_checks.sh Runs the new manifest lockstep check and validates the added manifest JSON files.
scripts/check_manifests.py New CI guard to enforce cross-manifest consistency and validate resource pointers / install docs.
scripts/build_plugin_zip.sh Extends release stamping to Cursor/Devin manifests during ZIP build.
README.md Documents the new multi-agent adapter layout and installation instructions per harness.
AGENTS.md Updates repository layout and tool-compatibility documentation to include new adapters.
.opencode/INSTALL.md New agent-followable install instructions for opencode.
.agents/INSTALL.md New agent-followable install instructions for general AGENTS.md/SKILL.md harnesses.
.devin-plugin/plugin.json New Devin plugin manifest.
.cursor-plugin/plugin.json New Cursor plugin manifest with skills pointer.
.claude-plugin/plugin.json Version bump to 2.3.0 (canonical manifest).
.claude-plugin/marketplace.json Version bump to 2.3.0 for marketplace entry.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread scripts/check_manifests.py Outdated
Comment on lines +79 to +84
for field in ["name", "version", "license"]:
if entry.get(field) != canonical.get(field):
errors.append(
f".claude-plugin/marketplace.json: plugins[0].{field} "
f"{entry.get(field)!r} != {CANONICAL} {field} {canonical.get(field)!r}"
)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implemented in 6119005: .claude-plugin/marketplace.json lockstep validation now checks repository alongside the other canonical fields.

Comment on lines +68 to +74
# Resource pointers resolve against the plugin root (the repo root),
# per the Claude/Cursor plugin convention — not the manifest's own dir.
skills = manifest.get("skills")
if skills is not None:
skills_dir = (REPO_ROOT / skills).resolve()
if not skills_dir.is_dir() or not list(skills_dir.glob("*/SKILL.md")):
errors.append(f"{rel}: skills path {skills!r} has no */SKILL.md")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implemented in 6119005: skills path validation now rejects paths that resolve outside the repository root before checking for */SKILL.md.

Comment on lines +82 to +91
for rel in (".cursor-plugin/plugin.json", ".devin-plugin/plugin.json"):
manifest_path = os.path.join(plugin_dir, rel)
if not os.path.isfile(manifest_path):
continue
with open(manifest_path, "r", encoding="utf-8") as f:
manifest = json.load(f)
manifest["version"] = version
with open(manifest_path, "w", encoding="utf-8") as f:
json.dump(manifest, f, indent=2)
f.write("\n")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implemented in 6119005: ZIP packaging now stamps .claude-plugin/marketplace.json plugin version so packaged manifests stay version-consistent.

Co-authored-by: Xcaciv <23732819+Xcaciv@users.noreply.github.com>
@Xcaciv
Xcaciv merged commit 5847202 into main Aug 25, 2026
4 checks passed
@Xcaciv
Xcaciv deleted the claude/multi-agent-plugin-5swe8g branch August 25, 2026 22:00
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.

4 participants