FDE tool · Skill Loop + Plugin Marketplace · MIT

Client skills that prove they still work.

A package for shipping a business owner their own Claude Code plugin marketplace, with Skill Loop checking every skill on a schedule and a live stream that shows each check as it runs.

$ npx github:Organized-AI/skills-in-a-box check all --target https://github.com/Organized-AI/plugin-marketplace/tree/main/gtm-ai-plugin
REPO organized-ai/skills-in-a-box ENGINE plugin-marketplace · codex/skill-loop-bounded-optimization RUNTIME Node 22 · Worker + D1 · SSE GATES G0 → G4
sib run stream · Organized-AI/plugin-marketplace@2964188 recorded run · Oct 1
0 pass0 fail0 manual0 not built0/6 loop stages
Proof · first run on the real marketplace

Pointed at Organized-AI/plugin-marketplace, the box found real problems.

These numbers are from the run in the stream above: sib check all against main at commit 2964188, then sib loop demo on the Skill Loop engine. Nothing was executed from the plugins themselves; the inventory reads files and hashes them.

1listed plugin with no folder, so its install fails (gtm-audit-pro)
4plugin folders nobody can install because they aren't listed
65skills inventoried across 20 plugins, 0 unreadable
0/65skills with a QA suite, so drift can't be measured yet
35referenced files that really are missing
6skill names shipped by more than one plugin
9vendored plugins with no version or license
50→100demo loop score, staged as pending; active skill unchanged
CheckResultWhat it found
The box checked its own engine too.

Skill Loop's inventory flagged 65 missing references. Before calling them skill bugs, refs-resolve re-resolved each one. 14 exist at the plugin root or once a doubled segment like assets/assets is collapsed, 15 are example paths in prose (skill-creator's references/finance.md), and 1 is code (this.accountId,). That leaves 35 real gaps. The other 30 are an Evaluator seam: the probe was wrong, not the skill. The fix belongs in the engine's resolver.

Exhibit A · System

What's in the box

One CLI, one Worker, one D1 table. The marketplace repo stays the source of truth; the box reads it, runs Skill Loop over it, and streams what happened.

  FDE / CLIENT                                       CLIENT'S CLAUDE CODE
  sib init acme ─▶ acme-marketplace repo             /plugin marketplace add
      │             .claude-plugin/marketplace.json        acme/acme-marketplace
      │             plugins/*  ·  qa/<plugin>/<skill>/suite.json        ▲
      ▼                                                      │ install
  git push ─▶ GitHub Actions  skill-loop.yml ────────────────┘
              sib check all   G0 manifest · G1 inventory · G2 suites
              sib loop run    trigger ▸ score ▸ detect ▸ research ▸ redraft ▸ stage
                    │ POST /api/events  (Bearer SIB_INGEST_TOKEN)
                    ▼
  ┌──────────────────────── CLOUDFLARE ─────────────────────────────────┐
  │  skills-in-a-box Worker                                             │
  │   Assets   /  guide   ·  /run/  run view                            │
  │   /api/events ──▶ D1 events (run_id, seq, kind, body)               │
  │   /api/stream ◀── SSE, resumes from Last-Event-ID  ──▶ any browser   │
  │   cron ──▶ workflow_dispatch skill-loop.yml   (G3)                  │
  │                                                                     │
  │  jev-gateway  /v1/select-skill  ──▶ outcomes join the same log  (G3) │
  └─────────────────────────────────────────────────────────────────────┘
                    │ drift found
                    ▼
  PR with the redrafted section + score diff ──▶ owner approves ──▶ tag release (G4)
trigger→score→detect→research→redraft→stage · human gate
Exhibit B · Gates

Each gate ends when its checks pass

Check IDs are code in checks/index.mjs. Unbuilt work reports "not built" instead of passing. Chip colors below are the result from the recorded run.

Exhibit C · Using it on an engagement

What the business owner gets, and what you run

The owner gets

  • One install line: /plugin marketplace add acme/acme-marketplace, with only the plugins they paid for.
  • A run view link that streams every check, so "is it still working?" has an answer with a timestamp.
  • Pull requests, not surprise edits. A redraft never reaches their team until they approve it.

You run

sib check all --run-tests \ --target https://github.com/Organized-AI/plugin-marketplace/tree/main/gtm-ai-plugin sib init acme cp -r ../plugin-marketplace/organized-google-wiring acme/ SIB_MARKET=acme sib check g0 --why SIB_MARKET=acme sib check g1 sib loop demo # show the loop before suites exist
Exhibit D · Phased plan

Build order, gate by gate

Phase 0this session

Box exists and runs. CLI, 18 checks, Worker with SSE stream, D1 schema, CI workflow, and a recorded proof run against the real marketplace.

Phase 1 · G0marketplace clean

Fix what install would hit. Drop or restore gtm-audit-pro, list or move the 4 orphans, pin version and upstream license on the 9 vendored plugins. Merge Skill Loop into main under plugins/skill-loop.

Phase 2 · G1inventory honest

Resolve the 35 missing files and the 6 duplicate names. Upstream the resolver fix so the 30 false positives stop appearing. Deploy the Worker so every CI run streams.

Phase 3 · G2suites

Suites for client-facing skills first (google and meta wiring, GTM). Draft from each SKILL.md, review by hand, record baselines tagged with the model ID.

Phase 4 · G3loop on schedule

Cron dispatches the loop. Drift opens a PR with the redrafted section and score diff. Only the owner token merges. jev-gateway skill-selection outcomes join the same event log.

Phase 5 · G4distribute

Client forks and releases. sib init tested end to end, a clean-container install in CI, and a tagged release with a changelog line on every version bump.

Exhibit E · Claude Code

Prompt to take it from here

Paste into Claude Code on the Mac. The env vars for Claude Code Web are at the end of the block.

cd /Users/supabowl && claude --dangerously-skip-permissions

Build "Skills in a Box" in /Users/supabowl/skills-in-a-box and push it to github.com/organized-ai/skills-in-a-box (private, MIT).

First step: apply the Organized Codebase agent templates to .claude/ before writing code.

Context: an FDE tool that ships a client their own Claude Code plugin marketplace and keeps every skill in it checked by Skill Loop, with a live SSE stream as proof. Engine: Organized-AI/plugin-marketplace, branch codex/skill-loop-bounded-optimization, plugins/skill-loop (76 tests pass). Style: match devops-in-a-box (dark, gold, IBM Plex) and use GSAP on the guide.

Phase 0 is drafted already (cli/sib.mjs, checks/index.mjs, src/worker.js, migrations/0001_events.sql, wrangler.jsonc, .github/workflows/skill-loop.yml, site/page.html). Recreate it from the attached tarball if present, otherwise build to that spec:
- sib check [g0..g4|all] [--why] [--json], sib loop demo|run, sib init <client>, sib stream
- every check event POSTs to $SIB_URL/api/events with Bearer $SIB_INGEST_TOKEN and appends to $SIB_RECORD
- Worker: Assets for / and /run/, GET /api/stream (SSE from D1, Last-Event-ID resume), /api/status, /api/events

Deploy first:
1. wrangler d1 create skills-in-a-box, put the id in wrangler.jsonc, wrangler d1 migrations apply skills-in-a-box --remote
2. wrangler secret put SIB_INGEST_TOKEN (openssl rand -hex 24), wrangler deploy
3. Run SIB_URL=<worker url> SIB_INGEST_TOKEN=... sib check all, and confirm the run view streams it

Then work gate by gate. A gate is done only when `sib check <gate>` passes in CI. Keep checks honest.
G0  In plugin-marketplace: remove or restore gtm-audit-pro, list or move boris, google-oauth-helper, phased-planning, social-carousel, pin version + upstream license on the 9 vendored Anthropic plugins, merge plugins/skill-loop into main.
G1  Fix the 35 missing references and 6 duplicate skill names. Open a PR on the skill-loop engine so its resolver checks the plugin root and collapses doubled segments.
G2  `sib suite draft <skill>` writes qa/<plugin>/<skill>/suite.json from the SKILL.md for review. Start with organized-google-wiring and organized-meta-wiring. Record baselines tagged with the model ID.
G3  Worker cron dispatches skill-loop.yml. Drift opens a PR with the redrafted section and score diff. Only `sib approve` with the owner token merges. Post jev-gateway /v1/select-skill outcomes into the same event log.
G4  sib init tested end to end on a sample client, CI installs the marketplace in a clean container, tagged releases with a changelog line.

Rules: no time estimates anywhere. Commit after each gate passes. README leads with the one-command check and shows which gates are green.

# Claude Code Web env vars
CLOUDFLARE_ACCOUNT_ID=<your account id>
CLOUDFLARE_API_TOKEN=<Workers Scripts:Edit, D1:Edit, Account Settings:Read>
SIB_INGEST_TOKEN=<same value as the Worker secret>
SIB_URL=https://skills-in-a-box.<subdomain>.workers.dev
SIB_MARKET=./plugin-marketplace
SIB_ENGINE=./plugin-marketplace/plugins/skill-loop
GITHUB_TOKEN=<repo + workflow scope on organized-ai>