opensquad-dev
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 initand bysrc/update.jsduringnpx opensquad update. Everything intemplates/exceptide-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 duringnpx opensquad initand new agents added duringnpx opensquad update. Protected from overwrites insrc/update.js:PROTECTED_PATHS. Users can also install manually vianpx 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 vianpx opensquad skills install. -
_opensquad/core/*→ Framework core files. MUST have a mirror copy intemplates/_opensquad/core/*. Any change to a core file that isn't synced to templates meansnpx opensquad initdelivers 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 intemplates/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 viainstallSkill()— no template copy needed. Check B does NOT apply to these.
- Multi-file skills (have scripts/assets/agents dirs alongside SKILL.md, e.g.
-
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:
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}
- FAIL: "Template missing for
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)
- Is it in
- 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.