Skip to content

Package the kit as a Claude Code plugin + marketplace - #1

Merged
anshulixyz merged 7 commits into
mainfrom
plugin-scaffold
Jun 19, 2026
Merged

Package the kit as a Claude Code plugin + marketplace#1
anshulixyz merged 7 commits into
mainfrom
plugin-scaffold

Conversation

@anshulixyz

Copy link
Copy Markdown
Owner

What

Makes the repo installable as a Claude Code plugin (named loop) and its own single-plugin marketplace, purely additive over the existing clone-install. Adds a follow-up design doc for an optional autonomous mode.

Contents

  • .claude-plugin/plugin.json + marketplace.json — both pass claude plugin validate.
  • commands/*.md/loop:{make-this,spawn,status,standup,radar,scan,approvals,listen,agents,ownership,tick}. Bodies invoke the existing tools/ scripts via ${CLAUDE_PLUGIN_ROOT} substitution (no PATH dependency).
  • skills/make-this/SKILL.md — model-invocable auto-offer of the loop.
  • bin/ — 11 shims over the existing scripts as a terminal CLI convenience.
  • README — "C. As a Claude Code plugin" install + usage section.
  • docs/AUTONOMOUS_LOOP_DESIGN.md — proposal (not built) for an optional operator-drives-the-agents mode, with the guardrails that preserve the kit's isolation + human-approval invariant.

Testing

  • claude plugin validate . passes for both the marketplace and the plugin manifest (validated in isolation too).
  • All 11 bin/ shims exercised end-to-end against a throwaway git repo: loop-make-this installs the kit (45 files), loop-spawn creates real worktrees + branches.
  • Multi-agent loop verified: spawned 3 agents (3 worktrees/branches), gave them distinct journal states, and confirmed loop-status / loop-standup / loop-tick aggregate correctly across all of them (4 agents · 3 idle · 1 blocked, stale flag, blocker surfaced).
  • The installer does not copy plugin-only dirs into user repos, so clone-install and plugin-install stay independent.

Not verified

Live runtime behavior inside a real (non-sandboxed) Claude Code session — nested headless claude produces no output in the dev environment used here. The manifests validate and the wrapped scripts are tested; the remaining check is an interactive claude --plugin-dir ./loop:status.

Design decisions / corrections to the original plan

  • author must be an object; this CLI's validator rejects $schema/displayName in plugin.json.
  • Same-repo plugin source is "./"; marketplace description goes under metadata.description.
  • Command bodies use ${CLAUDE_PLUGIN_ROOT} substitution rather than depending on bin/ PATH injection.

🤖 Generated with Claude Code

anshulixyz and others added 7 commits June 19, 2026 16:34
Make the repo installable as a Claude Code plugin (named "loop") and its
own single-plugin marketplace, purely additive over the existing clone-install.

- .claude-plugin/plugin.json + marketplace.json (both pass `claude plugin validate`)
- commands/*.md -> /loop:{make-this,spawn,status,standup,radar,scan,
  approvals,listen,agents,ownership,tick}; bodies invoke the existing
  tools/ scripts via ${CLAUDE_PLUGIN_ROOT} substitution (no PATH dependency)
- skills/make-this/SKILL.md: model-invocable auto-offer of the loop
- bin/: 11 shims over the existing scripts as a terminal CLI convenience
- README: "C. As a Claude Code plugin" install + usage section

The installer (scripts/install-into-repo.sh) does not copy the plugin-only
dirs into user repos, so clone-install and plugin-install stay independent.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sketch (not built) for an autonomy layer on top of the plugin scaffold:
two options (subagent fan-out vs supervisor-launches-sessions), a scoped
first step (run only pre-approved briefs, PR-gated, no self-merge), and the
guardrails that keep the kit's isolation + human-approval invariant.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Packaging (review blockers):
- bin shims now cd to the operator's PRIMARY worktree before running, so loop
  data (journals/radar) is read/written in the canonical checkout regardless of
  whether the command is invoked from a subdirectory or a linked agent worktree.
  Fixes the silent "wrong tree" / "no agents-status" failures, and stops
  standup from writing BLOCKERS.md/OPERATOR_ASKS.md into the wrong dir via tick.
- command bodies route through the bin shims so the fix applies to /loop:* too;
  make-this now honors $ARGUMENTS and defaults to the repo root (not the CWD).
- shim root-resolution uses `cd -P` to resolve symlinks in the fallback path.

Autonomy design:
- flip the recommendation from Option A (subagent fan-out) to Option B
  (supervisor launches a separate process per worktree): isolation here is a
  physical property (separate process/dir/permission grant), and fan-out shares
  one session's permission scope, so instruction-only "worktree pinning" can't
  preserve it. Resolve the three open questions, add the omitted failure modes
  (shared-file contention, approval-file races, all-blocked deadlock, cost
  blowup, partial-dispatch), and recommend shipping it as a separate opt-in
  plugin so the default install stays human-in-the-loop.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The primary-checkout resolution used `awk '{print $2}'`, which truncated
worktree paths containing spaces (e.g. ~/Documents/My Project) and then
silently failed to cd — reintroducing the wrong-directory bug for those
paths. Parse everything after "worktree " via sed instead, so spaces survive.
Verified from a subdirectory and from inside a linked worktree, both at a
space-containing path. Also note in make-this that a relative target resolves
from the repo root.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds a modular demo set, all rendered as the real Claude Code UI driving the
real /loop commands on a sample multi-currency /orders feature across 3 agents:
- intro-chat        — chat-style "set up the loop" intro
- scene1-worktrees  — one repo fans out into per-agent git worktrees
- agents-grid       — 2x2 of Claude Code windows working in parallel
- operator-cli      — the operator's /loop:status -> approve flow
- loop-reel.mp4     — the four stitched into a ~70s reel with title cards,
                      gentle zoom, and an ambient audio bed

Each scene ships as standalone auto-playing HTML + MP4 + GIF. README gains a
"See it in motion" section embedding the four scene GIFs and linking the reel.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- relocate all generated demo media into docs/demo-clips/ for editing:
  numbered scene clips (01-04), gifs, the reel, source HTML + title cards
- regenerate the audio bed at an audible level (peak -3 dB; the previous bed
  was ~-42 dB, effectively silent) and re-mux the reel
- add demo-clips/audio-bed.wav and NOTES.md (clip list, suggested order,
  re-stitch recipe)
- update README demo paths to docs/demo-clips/

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Untrack docs/demo-clips/ (gitignored, kept locally for editing) and remove the
README "See it in motion" embeds so there are no broken links. The repo ships
the plugin/kit code and docs only.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@anshulixyz
anshulixyz merged commit cc7dfd3 into main Jun 19, 2026
1 of 2 checks passed
@anshulixyz
anshulixyz deleted the plugin-scaffold branch June 19, 2026 14:31
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.

1 participant