SKILL.md
opensquad Development Checklist
You are running the opensquad-dev verification skill inside the opensquad repository. Your job is to detect and report distribution issues before they reach users.
How opensquad Distribution Works
Understand this before checking anything:
templates/→ Copied bysrc/init.js:copyCommonTemplates()duringnpx opensquad init
and by src/update.js during npx opensquad update. Everything in templates/ except ide-templates/ is copied recursively to the user's project. This is the PRIMARY distribution mechanism — if a file isn't in templates, users don't get it on init.
templates/ide-templates/→ IDE-specific files. Copied selectively based on user's
IDE selection during init. Each subfolder (claude-code/, opencode/, codex/, antigravity/) maps to one IDE choice.
agents/(project root) → Predefined agent catalog, distributed via npm
(package.json files[]). Auto-installed during npx opensquad init and new agents added during npx opensquad update. Protected from overwrites in src/update.js:PROTECTED_PATHS. Users can also install manually via npx opensquad agents install.
skills/(project root) → Bundled skills catalog, distributed via npm
(package.json files[]). Non-MCP skills are auto-installed during init. MCP skills (type: mcp/hybrid or with env vars) are offered interactively during init. Users can also install manually via npx opensquad skills install.
- **
_opensquad/core/*** → Framework core files. MUST have a mirror copy in
templates/_opensquad/core/*. Any change to a core file that isn't synced to templates means npx opensquad init delivers STALE content to new users.
- **
skills/*** → Bundled skills catalog. Two distribution sub-types:
- Multi-file skills (have scripts/assets/agents dirs alongside SKILL.md, e.g. opensquad-skill-creator): also have a mirror in templates/skills/* so the full directory structure is copied during init. Check B verifies this sync. - Single-file skills (only SKILL.md, no subdirs, e.g. opensquad-agent-creator): distributed via installSkill() — no template copy needed. Check B does NOT apply to these.
package.json files[]→ Controls what enters the npm package.
Currently: bin/, src/, agents/, skills/, templates/.
src/update.js:PROTECTED_PATHS→ Directories NEVER overwritten during update:
opensquad/memory, opensquad/investigations, agents, squads.
Multi-IDE Architecture
opensquad supports multiple IDEs. When a user runs npx opensquad init, they choose which IDE(s) to install for. Files are copied from two places:
- Common templates (
templates/, excludingide-templates/) — copied to every project regardless of IDE - IDE-specific templates (
templates/ide-templates/{ide}/) — copied only for the selected IDE(s)
File Classification
| Type | Definition | Location |
|---|---|---|
| SHARED | Applies to all IDEs equally | _opensquad/core/, templates/ (excluding ide-templates/) |
| IDE-SPECIFIC | Applies to one IDE only | templates/ide-templates/{ide}/ |
Supported IDEs and Their Template Folders
| IDE | Template Folder | Example Files |
|---|---|---|
| Claude Code | templates/ide-templates/claude-code/ |
SKILL.md, CLAUDE.md, .mcp.json |
| Antigravity | templates/ide-templates/antigravity/ |
.agent/rules/opensquad.md, .agent/workflows/opensquad.md |
| OpenCode | templates/ide-templates/opencode/ |
AGENTS.md, .opencode/commands/opensquad.md |
| Codex | templates/ide-templates/codex/ |
AGENTS.md |
The Golden Rule
When a change is requested for a specific IDE, modify ONLY files inside
templates/ide-templates/{ide}/.
NEVER add conditional logic ("if antigravity, do X") to shared files.
Violation example:
- User asks: "Add sequential execution support for Antigravity in the pipeline."
- ❌ Wrong: Edit
_opensquad/core/runner.pipeline.mdaddingif antigravity: run sequentially - ✅ Correct: Edit
templates/ide-templates/antigravity/.agent/rules/opensquad.mdwith the sequential execution instructions
Legitimate shared file edit:
- User asks: "Add a new researcher agent type to the architect."
- ✅ Fine: Edit
_opensquad/core/architect.agent.yamlbecause the change benefits ALL IDEs equally.
Verification Process
Step 1: Detect what changed
Run these commands to identify changed files:
# Uncommitted changes (staged + unstaged)
git diff --name-only HEAD
# If no uncommitted changes, check recent commits
git log --oneline -5
git diff --name-only HEAD~5..HEAD
Collect all changed file paths into a list.
Step 2: Run applicable checks
For each changed file, apply the matching verification rules below. Only run checks that are relevant to the actual changes detected.
Check A: Core file sync (_opensquad/core/** changed)
For EACH changed file matching _opensquad/core/**:
- Compute the expected template path:
templates/{same relative path}
Example: opensquad/core/runner.pipeline.md → templates/opensquad/core/runner.pipeline.md
- Run diff:
``bash diff "opensquad/core/{file}" "templates/opensquad/core/{file}" ``
- If diff shows differences:
- FAIL: Report the file and show the diff summary - Fix: cp opensquad/core/{file} templates/opensquad/core/{file}
- If template file doesn't exist:
- FAIL: "Template missing for opensquad/core/{file}" - Fix: mkdir -p templates/opensquad/core/{dir} && cp opensquad/core/{file} templates/opensquad/core/{file}
Check B: Skills sync (skills/** changed)
Only applies to multi-file skills — skills that have subdirectories (scripts/, assets/, agents/, etc.) alongside their SKILL.md. These require a template mirror so the full directory is copied during init.
Single-file skills (only SKILL.md, no subdirs) are distributed via installSkill() and do NOT need a templates/skills/ counterpart. Do not flag them as missing.
For each changed multi-file skill:
- Source:
skills/{skill}/SKILL.md - Template:
templates/skills/{skill}/SKILL.md
Check C: Agents directory (agents/** changed)
- Read
package.json, parse thefilesarray - Verify
"agents/"is present in the array - If missing: FAIL —
"agents/" not in package.json files[]
Check D: Init logic (src/init.js changed)
- Read
src/init.js - Verify
copyCommonTemplatesfunction exists and referencesTEMPLATES_DIR - Verify
getTemplateEntriesrecursively scans the templates directory - Flag if any new filtering logic was added that might exclude files
Check E: Update logic (src/update.js changed)
- Read
src/update.js - Extract the
PROTECTED_PATHSarray - Verify it includes all user-owned directories:
- opensquad/memory (user preferences and company context) - opensquad/investigations (Sherlock investigation data) - agents (user-installed/customized agents) - squads (user-created squads)
- If a new user-owned top-level directory was added to the project,
check if it should be in PROTECTED_PATHS
Check F: Package manifest (package.json changed)
- Read
package.json, parsefilesarray - Verify these directories are present:
bin/,src/,agents/,skills/,templates/ - If any distributable directory exists at project root but is NOT in
files[]: FAIL
Check G: New top-level directory (any new directory at root)
- Run
ls -d */at project root - For each directory, check:
- Is it in package.json files[]? (if it should be distributed) - Is it in PROTECTED_PATHS? (if it's user-owned content) - Is it in templates/? (if it should be copied during init)
- Flag any directory that seems like it should be distributed but isn't configured
Check H: Init auto-installs agents and skills (src/init.js changed)
- Read
src/init.js - Verify it imports from
./agents.js:listAvailable(aliased aslistAvailableAgents) andinstallAgent - Verify
installAllAgentsfunction exists and is called ininit() - Verify
installNonMcpSkillsfunction exists and is called ininit() - Verify
installNonMcpSkillsfilters out:opensquad-skill-creator, typemcp, typehybrid, skills withenv - If any of these are missing: FAIL — "Init does not auto-install agents/skills"
Check I: Update installs new agents/skills (src/update.js changed)
- Read
src/update.js - Verify it imports from
./agents.js:listAvailable,listInstalled,installAgent - Verify it imports from
./skills.js:listAvailable,listInstalled,installSkill,getSkillMeta - Verify the update function installs missing agents (compares available vs installed)
- Verify it installs missing non-MCP skills with same filtering as init
- If any of these are missing: FAIL — "Update does not install new agents/skills"
Check J: IDE contamination in shared files (any _opensquad/core/ or templates/ changed, excluding templates/ide-templates/**)
Scan shared files for IDE-specific conditional logic that should live in templates/ide-templates/{ide}/ instead.
Files to scan:
- All files in
_opensquad/core/ - All files in
templates/EXCEPT those undertemplates/ide-templates/
What to look for: Content that says "do X for IDE Y" or "if using IDE Y, behave differently."
Contamination keywords (IDE names used as conditional subjects):
antigravityor.antigravitycursorrulesor.cursor/windsurforwindsurfrulesopencodeoropen-codecodex- Conditional patterns: "se antigravity", "if antigravity", "for antigravity", "if cursor", "if windsurf", "if codex"
Exclusions: Mentions inside this opensquad-dev SKILL.md itself (documentation), and any comment explicitly labeled as a cross-reference.
Pass: No IDE-specific conditional logic found in shared files. Fail: Report the file path, relevant line, and the correct location where the change should go instead (i.e., which templates/ide-templates/{ide}/ file).
Step 3: Report results
Present a clear summary:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔧 opensquad Dev Checklist
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Files changed: {N}
Checks run: {N}
✅ Check A: Core file sync — {N}/{N} files in sync
❌ Check B: Skills sync — {file} out of sync
Fix: cp skills/{x}/SKILL.md templates/skills/{x}/SKILL.md
✅ Check F: Package manifest — all directories present
✅ Check J: IDE contamination — no IDE-specific logic in shared files
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Result: {N} issues found
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
If ALL checks pass, report clean:
✅ All {N} checks passed — distribution is consistent.
If any check fails, list the fix commands at the end so the user can approve them in batch.