setup
Skill426 starsChanged 6 months agoMITView on GitHub
Interactive project setup — detects your project, configures metaswarm, writes project-local files
- Reads credentials
- Installs packages
191 other projects use a version of this.
Adopted by
Most recently taken up by
- hydra-db/hydradb-claude-codetheir own version, first seen Nov 8, 2026
- WALKERKILLER/Look-Tongji-Notestheir own version, first seen Nov 8, 2026
- steerlabs/opensteertheir own version, first seen Nov 8, 2026
- ansvisor/ansvisortheir own version, first seen Nov 8, 2026
- anombyte93/prd-taskmastertheir own version, first seen Nov 8, 2026
- per-simmons/claude-game-studiotheir own version, first seen Nov 8, 2026
Used with
Projects with it also use add-voice-transcription, add-discord and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
juancruzmunozalbeloSkilladd-voice-transcription
Add voice message transcription to NanoClaw using OpenAI's Whisper API. Automatically transcribes WhatsApp voice notes so the agent can read and respond to them.
Also in 5 projects that use this
MicrosoftSkilladd-discord
Add Discord bot channel integration via Chat SDK.
Also in 11 projects that use this
MicrosoftSkilladd-slack
Add Slack channel integration via Chat SDK.
Also in 11 projects that use this
juancruzmunozalbeloSkilladd-telegram-swarm
Add Agent Swarm (Teams) support to Telegram. Each subagent gets its own bot identity in the group. Requires Telegram channel to be set up first (use /add-telegram). Triggers on "agent swarm", "agent teams telegram", "telegram swarm", "bot pool".
Also in 7 projects that use this
- +8 more from microsoft
Other versions191 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 191
- anthropics/knowledge-work-plugins★ 35ksame name
- garrytan/gbrain★ 32ksame name
- gavrielc/nanoclaw★ 31ksame name
- nanocoai/nanoclaw★ 31ksame name
- qwibitai/nanoclaw★ 31ksame name
- Q00/ouroboros★ 6.3ksame name
- pytorch/executorch★ 5.2ksame name
- agenticnotetaking/arscontexta★ 3.5ksame name
- aws/agent-toolkit-for-aws★ 3.4ksame name
- spotify/portal-ai-plugins★ 2.8ksame name
181 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository19 other files it gives its agents.
- AGENTS.mdAGENTS.md
- skills/setup/templates/AGENTS.mdAGENTS.md
- templates/AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- skills/setup/templates/CLAUDE.mdCLAUDE.md
- templates/CLAUDE.mdCLAUDE.md
- brainstorming-extensionSkill
- create-issueSkill
- design-review-gateSkill
- external-toolsSkill
- handling-pr-commentsSkill
- handoffSkill
- migrateSkill
- orchestrated-executionSkill
- plan-review-gateSkill
- pr-shepherdSkill
- startSkill
- statusSkill
- visual-reviewSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
42 rules. 0 are common, 17 are distinctive, and 25 are very specific to this project.
0
Common
Most of the 170 edited versions we read keep these.
17
Distinctive
This author's own choices. Worth a look.
25
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 13
After Phase 2 (user questions), determine the correct coverage command from the detection results, then run this Bash command:
- Very specific: line 57
Use Glob to check if .metaswarm/project-profile.json exists.
- Very specific: line 59
If it exists: Read it, present the current configuration summary, and ask the user via AskUserQuestion: "You already have a metaswarm …
- Distinctive: line 70
Check for marker files at the project root:
- Very specific: line 83
If tsconfig.json exists alongside package.json, the language is "TypeScript".
- Distinctive: line 85
If multiple languages are detected, note all of them but use the primary one (most infrastructure) for command generation.
- Distinctive: line 87
If no language detected: Use AskUserQuestion to ask the user what language/stack they are using before proceeding.
- Very specific: line 110
If no framework detected, set to null.
- Very specific: line 121
Default to npm if no lock file found.
- Very specific: line 130
Python: Check for [tool.pytest] in pyproject.toml or pytest in dependencies -> pytest (default for Python).
- Distinctive: line 154
If biome detected as both linter and formatter, report once as "Biome (lint + format)".
- Distinctive: line 185
After all detection, present findings:
- Distinctive: line 205
Use AskUserQuestion to ask ONLY questions relevant based on detection.
- Very specific: line 249
Check the JSON output. If "status": "ok", the 3 mandatory files are done.
- Distinctive: line 251
If the script fails or is not found, write the files manually (see CRITICAL-REQUIREMENTS above for what they are).
- Distinctive: line 255
If the instruction file was newly written (not appended), use Edit to replace the TODO placeholders:
- Very specific: line 258
Remove the <!-- TODO: ... --> comment lines
- Distinctive: line 260
If the instruction file was appended to (existing file), this step is not needed.
- Very specific: line 268
Read each file from ./knowledge/:
- Very specific: line 271
Write them to .beads/knowledge/ in the project.
- Very specific: line 278
Write them to bin/ in the project.
- Very specific: line 280
Do NOT copy metaswarm-agents.sh or metaswarm-usage into the project.
- Very specific: line 285
If .metaswarm/models.yaml is absent, copy ./templates/models.yaml to .metaswarm/models.yaml (create .metaswarm/ if needed).
- Very specific: line 304
Node.js dependency warning: If Node.js was NOT detected as the project language, print:
- Very specific: line 324
Write .metaswarm/project-profile.json with all detection results and user choices:
- Very specific: line 385
Check if Codex and Gemini CLIs are installed via Bash (command -v codex, command -v gemini)
- Very specific: line 388
Update .metaswarm/external-tools.yaml — set enabled: true for installed tools, enabled: false for missing ones
- Very specific: line 392
Run npx playwright install chromium via Bash
- Very specific: line 433
Restart note: if .claude/agents/ did not exist before Phase 3 and generate created it, tell the user to restart the session (Claude Code …
- Very specific: line 435
Command naming: When recommending metaswarm skills to the user, use $name forms ($start, $setup, $status, $pr-shepherd) unless the active …
- Very specific: line 438
If external tools enabled: "Use $external-tools to check tool status."
- Very specific: line 439
If no CI set up: "Consider adding CI later -- metaswarm includes a template at ./templates/ci.yml."
- Distinctive: line 440
If visual review enabled: "The visual review skill will screenshot your app during development."
- Very specific: line 446
If $start is invoked and .metaswarm/project-profile.json does not exist, the start skill should auto-route here.
- Distinctive: line 452
If any Bash command fails, report the error and offer to skip that step or retry.
- Distinctive: line 453
If a file cannot be read, note it and continue with other detection.
- Distinctive: line 454
If AskUserQuestion is dismissed, use defaults: 100% coverage, no external tools, no visual review.
- Distinctive: line 455
Never leave the project half-configured.
- Distinctive: line 456
All template paths are hardcoded in this skill.
- Distinctive: line 462
Before saying "setup complete", run this Bash command to verify the 3 mandatory files:
- Very specific: line 483
If any output says "MISSING", go back and run the setup-mandatory-files.sh script or create the files manually.
- Very specific: line 485
When reporting available commands to the user, use $name skill invocation unless the active platform has its own confirmed command shims.
“Common” is measured: kept by at least 6 in 10 of the 170 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Setup
Interactive setup for metaswarm. Detects your stack, asks targeted questions, writes project-local files, and creates platform-appropriate instruction files and command shims. Replaces both npx metaswarm init and the old /metaswarm-setup command.
<CRITICAL-REQUIREMENTS>
Setup MUST produce the mandatory outputs for the active platform. A shell script handles them automatically — you MUST run it.After Phase 2 (user questions), determine the correct coverage command from the detection results, then run this Bash command:
PLUGIN_ROOT="${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-${extensionPath:-}}}"
if [ -z "$PLUGIN_ROOT" ]; then
setup_script="$(find "${CODEX_HOME:-$HOME/.codex}/plugins/cache" -path '*/metaswarm/*/lib/setup-mandatory-files.sh' -print -quit 2>/dev/null)"
if [ -n "$setup_script" ]; then
PLUGIN_ROOT="$(cd "$(dirname "$setup_script")/.." && pwd)"
fi
fi
if [ -z "$PLUGIN_ROOT" ] && [ -f "$(pwd)/lib/setup-mandatory-files.sh" ]; then
PLUGIN_ROOT="$(pwd)"
fi
bash "${PLUGIN_ROOT}/lib/setup-mandatory-files.sh" "$(pwd)" <threshold> "<coverage-command>" --platform <platform>Where:
<threshold>is the user's chosen percentage (e.g.,100)<coverage-command>is the enforcement command for their test runner:- pytest →
"pytest --cov --cov-fail-under=<threshold>" - vitest/pnpm →
"pnpm vitest run --coverage" - jest/npm →
"npx jest --coverage" - go →
"go test -coverprofile=coverage.out ./..." - cargo →
"cargo tarpaulin --fail-under <threshold>"
- pytest →
<platform>iscodex,claude,gemini, orall. Prefer:codexwhen running in Codex (PLUGIN_ROOTorCODEX_HOMEis present, or the user invoked$setup)claudewhen running in Claude Code (CLAUDE_PLUGIN_ROOTis present, or the setup skill was invoked there)geminiwhen running in Gemini (extensionPathis present, or the setup skill was invoked there)allonly when the user explicitly asks to configure every supported CLI
The script handles:
- Instruction file —
AGENTS.mdfor Codex,CLAUDE.mdfor Claude,GEMINI.mdfor Gemini; appends metaswarm section (or writes new), skips if already present .coverage-thresholds.json— writes at project root with correct thresholds and command- Claude command shims — for Claude/all only, writes
.claude/commands/start-task.md,prime.md,review-design.md,self-reflect.md,pr-shepherd.md,brainstorm.md
The script outputs JSON with what was created/skipped/errored. Check that "status": "ok".
If the script is not available or fails, fall back to writing these files manually with the Write tool. Do NOT skip them.
</CRITICAL-REQUIREMENTS>
Pre-Flight
Existing Profile Check
Use Glob to check if .metaswarm/project-profile.json exists.
- If it exists: Read it, present the current configuration summary, and ask the user via AskUserQuestion: "You already have a metaswarm project profile. Re-run setup (overwrites choices) or skip?" Options: "Re-run setup" / "Skip". If the user skips, stop with: "Setup skipped. Existing configuration unchanged."
- If it does not exist: Continue to Project Detection.
Phase 1: Project Detection
Scan the project directory silently using Glob and Read. Do NOT ask the user for any of this information. Detect everything, then present results.
1.1 Language
Check for marker files at the project root:
| Marker File | Language |
package.json | Node.js / JavaScript |
tsconfig.json | TypeScript (refines Node.js to TypeScript) |
pyproject.toml OR setup.py OR requirements.txt | Python |
go.mod | Go |
Cargo.toml | Rust |
pom.xml OR build.gradle OR build.gradle.kts | Java |
Gemfile | Ruby |
Makefile (alone, no other markers) | Unknown (ask user) |
If tsconfig.json exists alongside package.json, the language is "TypeScript".
If multiple languages are detected, note all of them but use the primary one (most infrastructure) for command generation.
If no language detected: Use AskUserQuestion to ask the user what language/stack they are using before proceeding.
1.2 Framework
Node.js/TypeScript — Read package.json and check dependencies + devDependencies:
| Dependency | Framework |
next | Next.js |
nuxt OR nuxt3 | Nuxt |
@angular/core | Angular |
svelte OR @sveltejs/kit | SvelteKit |
react (without next/nuxt) | React |
vue (without nuxt) | Vue |
express | Express |
fastify | Fastify |
hono | Hono |
@nestjs/core | NestJS |
Python — Check pyproject.toml or requirements.txt for: fastapi, django, flask.
Go — Read go.mod for: github.com/gin-gonic/gin (Gin), github.com/labstack/echo (Echo), github.com/gofiber/fiber (Fiber).
If no framework detected, set to null.
1.3 Package Manager (Node.js only)
| Lock File | Package Manager |
pnpm-lock.yaml | pnpm |
yarn.lock | yarn |
bun.lockb | bun |
package-lock.json | npm |
Default to npm if no lock file found. For non-Node.js, set to null.
1.4 Test Runner
Node.js/TypeScript (first match wins):
- Glob for
vitest.config.*orvitestin devDependencies ->vitest - Glob for
jest.config.*orjestin devDependencies ->jest mochain devDependencies ->mocha
Python: Check for [tool.pytest] in pyproject.toml or pytest in dependencies -> pytest (default for Python).
Go: go test (built-in). Rust: cargo test (built-in). Java/Maven: mvn test. Java/Gradle: gradle test.
1.5 Linter
| Marker | Linter |
.eslintrc* OR eslint.config.* OR eslint in devDependencies | eslint |
biome.json OR @biomejs/biome in devDependencies | biome |
[tool.ruff] in pyproject.toml OR ruff.toml | ruff |
.golangci.yml OR .golangci.yaml | golangci-lint |
.clippy.toml or clippy in Cargo.toml | clippy |
1.6 Formatter
| Marker | Formatter |
.prettierrc* OR prettier in devDependencies | prettier |
biome.json (also formats) | biome |
black in Python deps | black |
[tool.ruff.format] in pyproject.toml | ruff format |
rustfmt.toml OR .rustfmt.toml | rustfmt |
If biome detected as both linter and formatter, report once as "Biome (lint + format)".
1.7 Type Checker
| Marker | Type Checker |
tsconfig.json | tsc |
mypy in Python deps OR [tool.mypy] in pyproject.toml | mypy |
pyright in Python deps OR pyrightconfig.json | pyright |
Go (go vet) and Rust (cargo check) have built-in type checking — note but do not list separately.
1.8 CI Detection
| Marker | CI System |
.github/workflows/*.yml | GitHub Actions |
.gitlab-ci.yml | GitLab CI |
Jenkinsfile | Jenkins |
.circleci/config.yml | CircleCI |
1.9 Git Hooks Detection
| Marker | Hook System |
.husky/ | Husky |
.pre-commit-config.yaml | pre-commit |
.lefthook.yml | Lefthook |
1.10 Present Results
After all detection, present findings:
I detected the following about your project:
Language: {language}
Framework: {framework or "None detected"}
Package manager: {package_manager or "N/A"}
Test runner: {test_runner or "None detected"}
Linter: {linter or "None detected"}
Formatter: {formatter or "None detected"}
Type checker: {type_checker or "None detected"}
CI: {ci or "None detected"}
Git hooks: {git_hooks or "None detected"}Phase 2: Interactive Questions
Use AskUserQuestion to ask ONLY questions relevant based on detection. 3-5 questions maximum.
Always ask:
- Coverage threshold — "What test coverage threshold do you want to enforce?" Options: "100% (Recommended)" / "80%" / "60%" / "Custom"
Ask only if relevant:
- External AI tools — Ask only for non-trivial projects: "Set up external AI tools (Codex/Gemini) for cost savings on implementation?" Options: "Yes" / "No"
- Visual review — Ask only if a web framework was detected (Next.js, Nuxt, React, Vue, Angular, SvelteKit, Django, Flask): "Enable visual screenshot review for UI changes?" Options: "Yes" / "No"
- CI pipeline — Ask only if NO CI detected: "Create a GitHub Actions CI pipeline?" Options: "Yes (Recommended)" / "No"
- Git hooks — Ask only if NO hooks detected: "Set up git hooks for pre-push quality checks?" Options: "Yes (Recommended)" / "No"
Phase 3: Write Required Files
Step 1: Run the mandatory files script
This is the FIRST thing to do after Phase 2. Determine the coverage command, then run:
PLUGIN_ROOT="${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-${extensionPath:-}}}"
if [ -z "$PLUGIN_ROOT" ]; then
setup_script="$(find "${CODEX_HOME:-$HOME/.codex}/plugins/cache" -path '*/metaswarm/*/lib/setup-mandatory-files.sh' -print -quit 2>/dev/null)"
if [ -n "$setup_script" ]; then
PLUGIN_ROOT="$(cd "$(dirname "$setup_script")/.." && pwd)"
fi
fi
if [ -z "$PLUGIN_ROOT" ] && [ -f "$(pwd)/lib/setup-mandatory-files.sh" ]; then
PLUGIN_ROOT="$(pwd)"
fi
bash "${PLUGIN_ROOT}/lib/setup-mandatory-files.sh" "$(pwd)" <threshold> "<coverage-command>" --platform <platform>Example for Codex with Python/pytest at 100%:
bash "${PLUGIN_ROOT}/lib/setup-mandatory-files.sh" "$(pwd)" 100 "pytest --cov --cov-fail-under=100" --platform codexCheck the JSON output. If "status": "ok", the 3 mandatory files are done. Report to the user what was created.
If the script fails or is not found, write the files manually (see CRITICAL-REQUIREMENTS above for what they are).
Step 2: Customize instruction-file TODO sections
If the instruction file was newly written (not appended), use Edit to replace the TODO placeholders:
- Replace
npm test/npm run test:coveragewith the detected test/coverage commands - Replace
TypeScript strict mode/ESLint + Prettierwith the detected language tools - Remove the
<!-- TODO: ... -->comment lines
If the instruction file was appended to (existing file), this step is not needed.
Step 3: Additional files
Knowledge Base
Read each file from ./knowledge/:
patterns.jsonl,gotchas.jsonl,decisions.jsonl,api-behaviors.jsonl,codebase-facts.jsonl,anti-patterns.jsonl,facts.jsonl
Write them to .beads/knowledge/ in the project. Skip any that already exist.
Shell Utilities
Read each file from ./bin/:
estimate-cost.sh,external-tools-verify.sh,pr-comments-check.sh,pr-comments-filter.sh
Write them to bin/ in the project. Make executable with chmod +x. Skip any that already exist.
Do NOT copy metaswarm-agents.sh or metaswarm-usage into the project. Skills always run them from the plugin: the plugin bin/ is on PATH in Claude Code, so resolve with command -v metaswarm-agents.sh, falling back to ${CLAUDE_PLUGIN_ROOT:-$PLUGIN_ROOT}/bin/metaswarm-agents.sh.
Models Config and Phase Agents
- Note whether
.claude/agents/already exists (it matters for Phase 6). - If
.metaswarm/models.yamlis absent, copy./templates/models.yamlto.metaswarm/models.yaml(create.metaswarm/if needed). - Generate the project-scoped phase agents from it:
MA="$(command -v metaswarm-agents.sh || echo "${CLAUDE_PLUGIN_ROOT:-$PLUGIN_ROOT}/bin/metaswarm-agents.sh")" # command -v metaswarm-agents.sh
"$MA" generateThis writes .claude/agents/metaswarm-<role>.md. Exit 1 means a file was hand-edited or is user-authored; report it to the user and do not pass --force unless they ask. Exit 2 means models.yaml has a syntax error (models.yaml:<line>: <reason>); show it and ask the user to fix it.
TypeScript Scripts
Read each file from ./scripts/:
beads-fetch-pr-comments.ts,beads-fetch-conversation-history.ts
Write them to scripts/ in the project. Skip any that already exist.
Note: The former beads-self-reflect.ts script is no longer bundled. /self-reflect captures session learnings on its own and needs no extra script.
Node.js dependency warning: If Node.js was NOT detected as the project language, print:
"Note: scripts/*.ts require Node.js (npx tsx) to run. Some advanced features (PR comment fetching, conversation history) will work once Node.js is available. Core metaswarm functionality does not require Node.js."
Conditional Files
| Condition | Source | Destination |
| User chose YES for CI | ./templates/ci.yml | .github/workflows/ci.yml |
| User chose YES for git hooks AND Husky detected or Node.js project | ./templates/pre-push | .husky/pre-push (chmod +x) |
| User chose YES for external tools | ./templates/external-tools.yaml | .metaswarm/external-tools.yaml |
| Always | ./templates/.env.example | .env.example |
| Always | ./templates/SERVICE-INVENTORY.md | SERVICE-INVENTORY.md |
| Always | ./templates/gitignore | Merge into existing .gitignore (append missing entries, never duplicate) |
For .gitignore, read the existing file (if any), then append language-specific entries that are not already present. Always ensure .env, .DS_Store, and *.log are included.
Phase 4: Profile Creation
Write .metaswarm/project-profile.json with all detection results and user choices:
{
"metaswarm_version": "1.0.0",
"distribution": "plugin",
"installed_at": "{current ISO 8601 timestamp}",
"updated_at": "{current ISO 8601 timestamp}",
"detection": {
"language": "{detected language}",
"framework": "{detected framework or null}",
"test_runner": "{detected test runner}",
"linter": "{detected linter or null}",
"formatter": "{detected formatter or null}",
"package_manager": "{detected package manager or null}",
"type_checker": "{detected type checker or null}",
"ci": "{detected CI system or null}",
"git_hooks": "{detected hook system or null}"
},
"choices": {
"coverage_threshold": 100,
"external_tools": false,
"visual_review": false,
"ci_pipeline": false,
"git_hooks": false
},
"commands": {
"test": "{resolved test command}",
"coverage": "{resolved coverage command}",
"lint": "{resolved lint command or null}",
"typecheck": "{resolved typecheck command or null}",
"format_check": "{resolved format check command or null}"
}
}Fill all values from detection and user answers. Use null for anything not detected.
Command resolution reference:
| Test Runner | Pkg Mgr | Test Command | Coverage Command |
| vitest | pnpm | pnpm vitest run | pnpm vitest run --coverage |
| vitest | npm | npx vitest run | npx vitest run --coverage |
| vitest | yarn | yarn vitest run | yarn vitest run --coverage |
| jest | pnpm | pnpm jest | pnpm jest --coverage |
| jest | npm | npx jest | npx jest --coverage |
| jest | yarn | yarn jest | yarn jest --coverage |
| mocha | any | npx mocha | npx nyc mocha |
| pytest | -- | pytest | pytest --cov --cov-fail-under={threshold} |
| go test | -- | go test ./... | go test -coverprofile=coverage.out ./... |
| cargo test | -- | cargo test | cargo tarpaulin --fail-under {threshold} |
| mvn test | -- | mvn test | mvn test jacoco:report |
| gradle test | -- | gradle test | gradle test jacocoTestReport |
Phase 5: Post-Setup Actions
5.1 External Tools (if enabled)
- Check if Codex and Gemini CLIs are installed via Bash (
command -v codex,command -v gemini) - For tools not installed, tell the user how to install them
- For installed tools, verify with
--version - Update
.metaswarm/external-tools.yaml— setenabled: truefor installed tools,enabled: falsefor missing ones
5.2 Visual Review (if enabled)
- Run
npx playwright install chromiumvia Bash - Report success or failure
5.3 Git Hooks (if enabled)
Node.js/TypeScript: Install Husky if not present, run npx husky init, write pre-push hook.
Python: Suggest pip install pre-commit and offer to create .pre-commit-config.yaml.
Other: Suggest appropriate hook tools for the ecosystem.
Phase 6: Summary
Present a final summary:
Setup complete! Here's what was configured:
Project: {name}
Language: {language}
Framework: {framework or "None"}
Test runner: {test_runner} -> `{test command}`
Coverage: {threshold}% -> `{coverage command}`
Linter: {linter or "None"}
Formatter: {formatter or "None"}
CI: {ci or "None"}
Git hooks: {hooks or "None"}
External tools: {Enabled/Disabled}
Visual review: {Enabled/Disabled}
Mandatory files:
✔ {instruction file} — {written new / appended metaswarm section / already had it}
✔ .coverage-thresholds.json — {threshold}% coverage, enforcement: `{command}`
✔ .claude/commands/ — Claude only: shims for start-task, prime, review-design, self-reflect, pr-shepherd, brainstorm
Other files written:
{list every other file written or modified with its path}
You're all set! Run the platform's start command to begin working.Restart note: if .claude/agents/ did not exist before Phase 3 and generate created it, tell the user to restart the session (Claude Code only watches agent directories that existed at session start). Until then the plugin's default phase models apply.
Command naming: When recommending metaswarm skills to the user, use $name forms ($start, $setup, $status, $pr-shepherd) unless the active platform has already created and selected its own command shims.
Offer 1-2 relevant tips based on configuration:
- If external tools enabled: "Use
$external-toolsto check tool status." - If no CI set up: "Consider adding CI later -- metaswarm includes a template at
./templates/ci.yml." - If visual review enabled: "The visual review skill will screenshot your app during development."
Missing Setup Auto-Detection
If $start is invoked and .metaswarm/project-profile.json does not exist, the start skill should auto-route here. This skill will run the full setup flow, then hand back to $start to continue with the user's original request.
Error Handling
- If any Bash command fails, report the error and offer to skip that step or retry.
- If a file cannot be read, note it and continue with other detection.
- If AskUserQuestion is dismissed, use defaults: 100% coverage, no external tools, no visual review.
- Never leave the project half-configured. The pre-flight check allows re-running setup to completion.
- All template paths are hardcoded in this skill. Never construct file paths from user-provided input.
Final Verification (run this before declaring setup complete)
Before saying "setup complete", run this Bash command to verify the 3 mandatory files:
platform="${METASWARM_PLATFORM:-${CLAUDE_PLUGIN_ROOT:+claude}}"
platform="${platform:-${extensionPath:+gemini}}"
platform="${platform:-${CODEX_HOME:+codex}}"
platform="${platform:-${PLUGIN_ROOT:+codex}}"
platform="${platform:-claude}"
case "$platform" in
claude) instruction_file="CLAUDE.md" ;;
gemini) instruction_file="GEMINI.md" ;;
codex) instruction_file="AGENTS.md" ;;
*) echo "UNKNOWN PLATFORM: $platform"; exit 1 ;;
esac
echo "$instruction_file:"; grep -c "metaswarm" "$instruction_file" 2>/dev/null || echo "MISSING"
echo "coverage:"; ls .coverage-thresholds.json 2>/dev/null || echo "MISSING"
if [ "$platform" = "claude" ]; then
echo "shims:"; ls .claude/commands/start-task.md .claude/commands/prime.md .claude/commands/brainstorm.md 2>/dev/null || echo "MISSING"
fiIf any output says "MISSING", go back and run the setup-mandatory-files.sh script or create the files manually. Do NOT declare success with missing files.
When reporting available commands to the user, use $name skill invocation unless the active platform has its own confirmed command shims. Do NOT recommend commands that do not exist on that platform.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

