ai-toolkit
CLAUDE.md3 starsChanged 3 months agoMITView on GitHub
Mirror pair — edit both copies together. This repository keeps CLAUDE.md and AGENTS.md byte-for-byte identical. Claude Code reads CLAUDE.md; OpenCode and Pi read AGENTS.md. They are the same document under two filenames — any change to one MUST be made to the other. (Verify with diff CLAUDE.md AGENTS.md — it should print nothing.) This is the project-level context file. It supplements, and does not replace, the global standards installed at ~/.claude/ (Claude Code), ~/.config/opencode/ (OpenCode), and ~/.pi/agent/ (Pi). Global standards…
In this repository86 other files it gives its agents.
- AGENTS.mdAGENTS.md
- project-templates/AGENTS.mdAGENTS.md
- project-templates/CLAUDE.mdCLAUDE.md
- alembic-migration-managerSkill
- architecture-journalSkill
- architecture-reviewSkill
- automated-code-reviewSkill
- axum-scaffolderSkill
- capture-consolidateSkill
- cargo-package-scaffoldSkill
- code-review-coachSkill
- confluence-guide-writerSkill
- dependency-mapperSkill
- doc-syncSkill
- dotnet-architecture-checklistSkill
- dotnet-controller-api-scaffolderSkill
- dotnet-security-reviewSkill
- dotnet-vertical-sliceSkill
- ef-migration-managerSkill
- email-captureSkill
- environment-healthSkill
- evaluate-testsSkill
- fastapi-scaffolderSkill
- fitness-functionsSkill
- jira-comment-writerSkill
- legacy-migration-analyzerSkill
- minimal-api-scaffolderSkill
- nuget-package-scaffoldSkill
- oss-vettingSkill
- pattern-tradeoff-analyzerSkill
- php-api-scaffolderSkill
- php-architecture-checklistSkill
- php-feature-sliceSkill
- php-migration-managerSkill
- php-package-scaffoldSkill
- php-security-reviewSkill
- pr-feedback-writerSkill
- pypi-package-scaffoldSkill
- python-architecture-checklistSkill
- python-feature-sliceSkill
- python-modernization-analyzerSkill
- python-security-reviewSkill
- qraspi-architectureSkill
- qraspi-graduateSkill
- qraspi-implementSkill
- qraspi-planSkill
- qraspi-questionsSkill
- qraspi-researchSkill
- qraspi-skeletonSkill
- qrspi-implementSkill
- qrspi-planSkill
- qrspi-questionsSkill
- qrspi-researchSkill
- qrspi-specSkill
- react-app-scaffolderSkill
- react-architecture-checklistSkill
- react-component-scaffolderSkill
- react-feature-sliceSkill
- react-modernization-analyzerSkill
- react-security-reviewSkill
- The first 60 shown.
The file
Show its rules and text
We split this CLAUDE.md into the rules it gives an agent
17 rules. About 0 are common, 5 are distinctive, and 12 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
12
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 23
Definition of success: Every skill and agent installs cleanly, follows its template (skills: the 5-section lean layout.
- Very specific: line 200
Create skills/<new-name>/SKILL.md with focused instructions (no template to copy)
- Very specific: line 201
Add disable-model-invocation: true for interactive or conversational skills
- Very specific: line 202
Create skills/<new-name>/references/ with ≥ 1 supporting file — skip it if the SKILL.md is under 20 lines and has no depth to split out
- Very specific: line 208
Add agent entries in both claude/agents/ and opencode/agents/
- Very specific: line 209
Add command entries in both claude/commands/ and opencode/commands/ if user-invocable
- Distinctive: line 210
Update counts and tables: README.md badge + at-a-glance + structure comments.
- Very specific: line 211
Add a Green / Yellow / Red entry for the new skill in pi/SKILLS-local.md
- Very specific: line 294
Use subtask: true for read-heavy commands (review, research, context-prime).
- Very specific: line 295
Use subtask: false for commands that write files (new-feature, migrate) — they need primary context.
- Distinctive: line 334
No compiled artifacts. Validation is structural.
- Very specific: line 359
Follow the 5-section lean layout when creating or modifying skills.
- Very specific: line 360
Keep both claude/agents/ and opencode/agents/ versions in sync.
- Very specific: line 361
Every full-template skill must have a references/ directory with at least 2 supporting files (minimal-tier: ≥ 1, or none if the SKILL.md is …
- Distinctive: line 373
Do not batch-edit them alongside skill or agent changes.
- Distinctive: line 375
These files are public templates: Never embed specific book titles, personal document names, personal file paths, or user-specific tool …
- Very specific: line 477
Follow the global Session Boot Ritual (see global CLAUDE.md / AGENTS.md).
≈ “Common” is an estimate: at least 1 in 5 of the 26,980 CLAUDE.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
AI Toolkit — Project Context
Mirror pair — edit both copies together. This repository keeps
CLAUDE.mdandAGENTS.mdbyte-for-byte identical. Claude Code readsCLAUDE.md; OpenCode and Pi readAGENTS.md. They are the same document under two filenames — any change to one MUST be made to the other. (Verify withdiff CLAUDE.md AGENTS.md— it should print nothing.)
This is the project-level context file. It supplements, and does not replace, the global
standards installed at ~/.claude/ (Claude Code), ~/.config/opencode/ (OpenCode), and
~/.pi/agent/ (Pi). Global standards — coding style, security rules, quality gates, the
grounding/MCP workflow, and the Session Boot Ritual — live in those global files and are not
repeated here. Related project context files: intent.md (goals, values, tradeoff hierarchy),
constraints.md (musts, must-nots, escalation triggers), evals.md (test cases and CI gates).
Project Overview
- Name: AI Toolkit
- Purpose: A collection of 83 shareable skills and autonomous agents for AI-assisted software development. Supports Claude Code, OpenCode, and Pi. Edge AI, ML, robotics, and industrial-automation skills live in the companion
edge-ai-robotics-automation-toolkit. - Phase: Maintain — stable toolkit; work consists of adding new skills/agents, fixing existing ones, and keeping platform parity.
- Jira project key: N/A — task specs are tracked in conversation context or ad hoc
- Definition of success: Every skill and agent installs cleanly, follows its template (skills: the 5-section lean layout; agents: the agent section template), and works out of the box without requiring external documentation.
Technology Stack
- Content format: Markdown + YAML frontmatter — no compiled language, no build system
- Agent platforms: Claude Code (claude.ai/code), OpenCode, and Pi (pi.dev / Ollama local models)
- Global install targets:
~/.claude/(Claude Code),~/.config/opencode/(OpenCode),~/.pi/agent/(Pi) - Package manager: None for skills/agents;
bunused inopencode/global/for OpenCode config dependencies
Architecture
- Pattern: Flat directories by domain — skills, agents, global config, and project templates are siblings, not layers
- Two-level context stack:
claude/global/CLAUDE.md+opencode/global/AGENTS.md+pi/global/AGENTS.md— universal standards, installed once globallyCLAUDE.md(root) +AGENTS.md(root) — this repo's context only (this mirrored file)
- Key directories:
skills/<name>/— skill definition (SKILL.md) + supporting docs (references/); flat, noteam/professionalsubdirectory — Claude Code only discoversskills/<name>/SKILL.mdone level deep, so theaudience:frontmatter field is metadata only (it no longer selects an install subdirectory for skills; it still does forclaude/agents/andopencode/agents/, which keep theirteam/professionalsplit)claude/agents/— Claude Code agent definitions, flat (.mdwithskills:frontmatter array)opencode/agents/— OpenCode agent definitions, flat (.mdwith boolean tool flags +skill()body calls)claude/commands/— Claude Code user-invoked slash commands with shell injection (flat, no audience subdir)opencode/commands/— OpenCode command equivalents with agent routing and subtask isolation (flat)claude/global/— global Claude Code files installed to~/.claude/claude/global/settings.json— hook wiring: PreToolUse credential + shell-exec-chain stops, PostToolUse bash audit log + build/lint gatesclaude/global/hooks/— hook script bodies (*.sh), installed to~/.claude/hooks/;settings.jsonreferences them by pathclaude/global/settings.local.json— permissions: bash allow/deny arrays, read allow/deny arraysopencode/global/— global OpenCode files installed to~/.config/opencode/pi/global/— global Pi files installed to~/.pi/agent/;SYSTEM.mdis a per-project templateproject-templates/— context file templates users copy into their own project roots (do not edit globally)tools/— standalone runnable utilities that are not skills/agents/commands (e.g.tools/pdf2md/,tools/web2md/,tools/code2md/,tools/ollama-evals/); excluded from primitive counts and parity checks
Platform primitive support — harness and model provider are orthogonal (all three run local or cloud models); what differs is which primitives each harness natively supports:
Primitive Claude Code OpenCode Pi Skills yes yes yes — same skills/tree,/skill:<name>to invokeCommands claude/commands/opencode/commands/prompt templates ( ~/.pi/agent/prompts/*.md) — args only, no!shell injectionAgents / subagents yes yes no — Pi extensions cannot spawn child agents Hooks shell, settings.jsonyes TypeScript extension events ( tool_callcan block,tool_resultcan rewrite)MCP native native via an extension; grounded-code-mcpalso ships a CLI Pi calls directlyPi is a first-class target for skills and commands, and deliberately not for agents — the boundary is Pi's capability surface plus the local model tier, not neglect. Multi-phase work still runs on Pi: QRSPI/QRASPI phases are artifact-gated (each phase reads a markdown artifact and writes the next), so the human drives phase-to-phase where the agents would.
- Non-obvious constraints:
claude/global/,opencode/global/, andpi/global/files affect every project on the user's machine — changes require explicit human approval before committing
Quick Reference
- Skills:
skills/<n>/SKILL.md— flat, no subdir;audience:frontmatter (team|professional) is metadata only. 5-section lean layout (depth →references/), gold standard:skills/cargo-package-scaffold/SKILL.md - Agents:
claude/agents/<n>.md(Claude Code) |opencode/agents/<n>.md(OpenCode) — flat, must stay in parity - Commands:
claude/commands/<n>.md(Claude Code) |opencode/commands/<n>.md(OpenCode) — flat, no audience subdir - Global files:
claude/global/→ installs to~/.claude/|opencode/global/→ installs to~/.config/opencode/|pi/global/→ installs to~/.pi/agent/ - Hooks:
claude/global/settings.json(wiring) +claude/global/hooks/*.sh(bodies) — credential + shell-exec-chain stops (PreToolUse), bash audit log + post-write build/lint gates (PostToolUse) - Permissions:
claude/global/settings.local.json— bash allow/deny arrays, read allow/deny arrays - Project templates:
project-templates/— copy into target project roots, do not edit globally
Key Files
| File | Why It Matters |
skills/cargo-package-scaffold/SKILL.md | Gold standard for the 5-section lean skill layout (depth in references/) |
project-templates/AGENTS.md | Template pattern this file follows |
claude/global/CLAUDE.md | Global Claude Code standards — do not duplicate here |
opencode/global/AGENTS.md | Global OpenCode standards — do not duplicate here |
pi/global/AGENTS.md | Global Pi standards — do not duplicate here |
pi/global/SYSTEM.md | Per-project Pi system prompt template — users copy to project root |
intent.md | Goals, values, tradeoff hierarchy, and persistent decisions for this repo |
constraints.md | Contribution constraints — read before any task |
tools/pdf2md/ | Standalone Python utility (not a skill/agent/command): converts PDFs to RAG-ready Markdown. Self-contained pyproject.toml + tests; see its README.md. |
tools/web2md/ | Standalone Python utility: converts web pages and documentation sites to RAG-ready Markdown via docling. Supports single-page, crawl, and sitemap modes. Self-contained pyproject.toml + tests; see its README.md. |
tools/code2md/ | Standalone Python utility: converts a codebase to language-tagged Markdown for RAG ingestion. Self-contained pyproject.toml + tests; see its README.md. |
tools/ollama-evals/ | Standalone Python utility: evaluates and regression-tests local Ollama models (coding via code-execution, chat via LLM-as-judge, tool-use, structured JSON-schema). Frontend-agnostic — measures the model behind Pi / Goose / Open WebUI once at the /v1 API. Model-vs-model comparison matrix + non-zero-exit regression gate; local rubric judge (offline) with optional DeepEval/remote. Self-contained pyproject.toml + tests; see its README.md. |
tools/skill-evals/ | Standalone Python utility: the executable eval harness for skills/. L1 structural lint (no model, 30+ rules, exits non-zero), L2 routing eval (does the model pick the right skill?), L3 output quality (SKILL.md as system prompt, judged against that skill's own criteria), L4 rubric scorecard (skill-creator's 10 dimensions, one judge call each). Reuses tools/ollama-evals for the client/judge/compare/report spine. Implements evals.md; run skill-evals lint before committing any skill change. |
Skill Conventions
Each skill lives in skills/<name>/ with a SKILL.md and a references/ directory — flat, no
team/professional subdirectory. Claude Code only discovers skills/<name>/SKILL.md one level
deep, so nesting by audience breaks discovery. claude/agents/ and opencode/agents/ are flat too
(see the 2026-08-08 Persistent Decision). The audience: frontmatter field (team | professional)
is retained as pure metadata — it groups a skill (and its paired agent, if any) into the README's
Team/Professional sections but no longer selects an install path anywhere — and is backfilled by
scripts/add_frontmatter.py, which now walks skills/*/.
SKILL.md Frontmatter
---
name: skill-name
audience: team # team | professional — metadata; selects the install subdir for this skill's paired agent (if any), not for the skill itself
description: >
What the skill does. Trigger phrases like "keyword1", "keyword2".
disable-model-invocation: true # optional: prevents auto-invocation; use for interactive or conversational skills
---Skill Tiers
| Tier | When to use | SKILL.md size | References required |
| Minimal | Mode switches, conversational tools, single-instruction skills, thin workflow-phase drivers (≤ ~40 imperative directives) | ≤ 100 lines | ≥ 1 file — none required under 20 lines |
| Full-template | Domain-expert skills with workflow, state tracking, and output templates | ≤ 200 lines (depth → references/) | ≥ 2 files |
Minimal-tier skills have no prescribed section structure — just focused instructions.
Full-template skills follow the 5-section lean layout below. Every always-loaded section is a
per-invocation token tax, so depth — principle tables, anti-patterns, discipline rules, recovery
steps, and code/report templates — lives in references/ and loads just-in-time, not in SKILL.md.
Description Format
The description field is the only thing the model sees when deciding which skill to load. Quality here determines trigger reliability.
- Max 1024 chars
- Third person: "Scaffolds...", "Audits...", "Extracts..." — not "I will..." or "You can..."
- First sentence: what the skill does
- Second sentence: "Use when [specific trigger scenarios]"
- Include "Do NOT use when..." for negative triggers
Good:
description: >
Scaffolds NuGet package metadata, CI/CD pipeline, and test harness.
Use when publishing a new library to NuGet.org. Do NOT use for
internal workspace-only libraries; use dotnet-vertical-slice instead.Bad (too vague — triggers on everything):
description: >
A comprehensive and powerful tool for NuGet package management.
Very useful for .NET developers.5-Section Lean Layout (in order)
A full-template SKILL.md carries only what the model needs to act. Everything else is depth that
loads on demand from references/.
- Title + Epigraph --
# Skill Namewith 1 relevant quote - Core Philosophy -- design rationale + a numbered Non-Negotiable Constraints list. The
Critical/High principles live here as constraints; the full principle table goes to
references/. - Workflow -- phased lifecycle (e.g., DETECT, SCAN, REPORT, RECOMMEND) in one compact block,
with exit criteria. Decision trees and long step prose go to
references/. - State Block -- unique XML tag (e.g.,
<tdd-state>,<arch-review-state>) for multi-turn tracking - Output Template -- pointers to the report/code templates in
references/, not the templates inline - Integration with Other Skills -- a table cross-referencing related skills
Pushed to references/ (depth, loaded just-in-time): the full Domain Principles table,
Anti-Patterns table, AI Discipline (WRONG/RIGHT) rules, Error Recovery scenarios, and all
code/report templates. These remain authoritative — they are relocated, not deleted, and every
reference file is named by a pointer in SKILL.md so nothing becomes undiscoverable.
Gold-standard lean examples: skills/qraspi-skeleton/SKILL.md (phase driver) and
skills/cargo-package-scaffold/SKILL.md (domain scaffolder with references/ depth).
References Directory
Each references/ directory contains 2-5 supporting files: code examples, decision matrices, checklists, configuration templates.
When Adding a Skill
Choose a tier first (see the Skill Tiers table above). Set audience: in the frontmatter
(team | professional) — pure metadata, grouping the skill (and its paired agent, if any) into
the README's Team/Professional sections. scripts/add_frontmatter.py backfills it when missing.
Minimal-tier steps:
- Create
skills/<new-name>/SKILL.mdwith focused instructions (no template to copy) - Add
disable-model-invocation: truefor interactive or conversational skills - Create
skills/<new-name>/references/with ≥ 1 supporting file — skip it if the SKILL.md is under 20 lines and has no depth to split out - Skip the agent/command/registration steps below unless the skill is user-invocable
Full-template steps:
- Copy the gold standard:
cp -r skills/cargo-package-scaffold skills/<new-name> - 5-section lean layout — keep Core Philosophy / Workflow / State / Output Template / Integration in SKILL.md; push depth to
references/; ≥ 2 reference files - Add agent entries in both
claude/agents/andopencode/agents/ - Add command entries in both
claude/commands/andopencode/commands/if user-invocable - Update counts and tables: README.md badge + at-a-glance + structure comments; this file's Purpose line + Open Loops + Skill Suites table
- Add a Green / Yellow / Red entry for the new skill in
pi/SKILLS-local.md
Agent Conventions
Agents exist in two flavors with identical behavior but different formats:
Claude Code (claude/agents/<name>.md)
---
name: agent-name
description: What the agent does
tools: Read, Edit, Write, Bash, Glob, Grep
model: inherit
skills:
- skill-name-1
- skill-name-2
---OpenCode (opencode/agents/<name>.md)
---
description: What the agent does
mode: subagent
tools:
read: true
edit: true
write: true
bash: true
glob: true
grep: true
---Key difference: Claude uses skills: array in frontmatter; OpenCode uses skill({ name: "..." }) calls in the body.
10 Mandatory Agent Sections (in order)
- Title + Epigraph
- Core Philosophy
- Guardrails
- Autonomous Protocol
- Self-Check Loops
- Error Recovery
- AI Discipline Rules
- Session Template
- State Block (unique XML tag per agent, e.g.,
<tdd-state>,<code-review-state>) - Completion Criteria
Command Conventions
Commands are user-invoked (typed as /command-name). Use ! shell injection to give the agent
live state before it acts. Skills are model-invoked — different primitive, different directory.
Claude Code format:
---
description: What it does. Trigger phrase for slash-command discovery.
allowed-tools: Bash(dotnet test:*), Read, Edit
---
<live_state>
!`command that captures current state`
</live_state>
Instruction using the injected state above.OpenCode additions — agent:, subtask:, optional model::
---
description: What it does.
agent: build
subtask: true
---Use subtask: true for read-heavy commands (review, research, context-prime).
Use subtask: false for commands that write files (new-feature, migrate) — they need primary context.
Hook Enforcement (settings.json)
claude/global/settings.json installs deterministic hooks that run outside the LLM:
| Hook | Matcher | Action |
| PreToolUse | ^Bash$ | Shell-exec-chain scan (pipe-to-shell, find -exec sh) — exit 2 blocks the call |
| PreToolUse | ^(Write|Edit|NotebookEdit)$ | Credential pattern scan of the content being written — exit 2 blocks the call |
| PostToolUse | ^Bash$ | Appends the command to ~/.claude/logs/bash-audit.log |
| PostToolUse | ^(Write|Edit)$ | Dispatches by extension: .cs → build the owning .csproj, .csproj → restore it, .py → ruff check (advisory) |
Hook bodies live in claude/global/hooks/*.sh and install to ~/.claude/hooks/; settings.json
only references them by path. Three rules govern whether a hook works at all — each has silently
disabled these hooks before:
matchermatches the tool NAME only, as a literal or unanchored regex. Permission-rule syntax (Bash(*),Write(*.cs)) does not work here and matches nothing. Filter by file extension inside the script, not in the matcher.- Tool input arrives as JSON on stdin — read it with
jq(.tool_input.command,.tool_input.file_path). There are noCLAUDE_TOOL_INPUT_*environment variables; referencing them yields an empty string and the hook fails open, silently allowing what it should block. - Exit 2 blocks only on PreToolUse. PostToolUse runs after the tool call and cannot block — its output is advisory. Messages must go to stderr to be surfaced.
A misconfigured hook produces no error — it simply never runs. Verify with the checks in
claude/global/README.md rather than assuming.
These run regardless of model instruction and cannot be bypassed by prompt injection. Permissions
(interactive allow/deny) live separately in claude/global/settings.local.json — hooks for
deterministic enforcement, permissions for interactive approval; keep them in separate files.
Contributor Validation
No compiled artifacts. Validation is structural.
# Count skills
find skills -name "SKILL.md" | wc -l
# Verify a full-template skill has the 5 lean sections (in-fence template headers may push this higher)
grep -c "^## " skills/<n>/SKILL.md
# Check agent parity (counts must match) — agents live under team/ and professional/ subdirs
find claude/agents -name "*.md" | wc -l
find opencode/agents -name "*.md" | wc -l
# Check command parity (counts must match) — commands are flat
ls claude/commands/*.md | wc -l
ls opencode/commands/*.md | wc -l
# Confirm this mirror pair is in sync (should print nothing)
diff CLAUDE.md AGENTS.mdEditing Guidelines
- Follow the 5-section lean layout when creating or modifying skills; push depth to
references/. - Keep both
claude/agents/andopencode/agents/versions in sync. - Every full-template skill must have a
references/directory with at least 2 supporting files (minimal-tier: ≥ 1, or none if the SKILL.md is under 20 lines). - State block XML tags must be unique across all skills and agents.
- Frontmatter
descriptionfields must include trigger phrases for slash-command discovery. - In Python code examples, avoid PyTorch evaluation mode calls that trigger security hooks. Use
model.train(False)instead. - Keep
CLAUDE.mdandAGENTS.mdbyte-identical — any edit to one must be made to the other; confirm withdiff CLAUDE.md AGENTS.md.
Global File Caution
Files in claude/global/, opencode/global/, and pi/global/ affect every project on the user's machine after install.
Changes to any global file require explicit review before committing.
Do not batch-edit them alongside skill or agent changes.
These files are public templates. Never embed specific book titles, personal document names,
personal file paths, or user-specific tool references in them. Collection descriptions must describe
topic domains only (e.g., "Rust language: ownership, async, Tokio"), not the specific documents a
particular user has ingested. Personal enrichment belongs in the installed copies
(~/.claude/CLAUDE.md, ~/.config/opencode/AGENTS.md, ~/.pi/agent/AGENTS.md), not the repo source.
Persistent Decisions
| Date | Decision | Rationale | |
| 2026-03-01 | 10-section template for skills and agents | Enforces completeness; gold standard is skills/professional/architecture-review/SKILL.md | |
| 2026-03-01 | Claude Code uses skills: frontmatter array; OpenCode uses skill() body calls | Platform format requirements differ; behavior must be identical | |
| 2026-04-18 | Specs live in Jira / Confluence, not local spec.md | Professional dev workflow; spec.md creates stale duplicates | |
| 2026-04-18 | project-templates/ renamed from templates/ | "project-templates" makes the scope explicit — these are not global files | |
| 2026-04-18 | Global files live in claude/global/ and opencode/global/ | Separates global standards from project-level context; aligns with install script targets | |
| 2026-04-24 | Pi global files live in pi/global/; AGENTS.md installs to ~/.pi/agent/; SYSTEM.md is a per-project template | Pi's SYSTEM.md is project-scoped (not a global config file); keeping it in pi/global/ as a user-copyable template matches Pi's per-project design | |
| 2026-04-24 | Commands layer added alongside agents | Commands are user-invoked (typed as /command-name); skills are model-invoked (autonomous). Different primitives, same platform directory scope. | |
| 2026-04-24 | Hooks in settings.json, permissions in settings.local.json | Separation of concerns — deterministic enforcement (hooks) vs. interactive approval (permissions). Keep in separate files. | |
| 2026-04-25 | Two-tier skill system: minimal (≤ 100 lines, ≥ 1 reference) and full-template (10 sections, ≤ 400 lines, ≥ 2 references) | Ported from mattpocock/skills — minimal tier handles mode switches, conversational tools, and single-instruction skills without the overhead of the 10-section template. | |
| 2026-04-25 | disable-model-invocation: true frontmatter for interactive/conversational skills | Ported from mattpocock/skills — prevents auto-invocation by the model; grill-me and grill-with-docs use this. | |
| 2026-04-26 | Global template files (claude/global/, opencode/global/) must contain only generic, domain-level descriptions — no specific book titles, personal document names, or user-specific tool references | These files are public templates installable by any user. Personal enrichment belongs in the installed copies (~/.claude/CLAUDE.md, ~/.config/opencode/AGENTS.md), not the repo source. | |
| 2026-06-02 | QRSPI replaces RPI: deprecate the 4 rpi-* skills + rpi-planner/rpi-implement agents now (disable-model-invocation: true on skills + DEPRECATED description prefix); remove all rpi-* files at sunset ~2026-09-01 (Slice 7). The 3 read-only subagents were renamed research-* (workflow-neutral) and kept. | RPI delivered poor results (instruction-budget overflow, magic-words dependency, plan-reading illusion). Coexistence leaves the poor-outcome path discoverable; QRSPI is its replacement, so RPI is deprecated then removed. | |
| 2026-06-02 | QRSPI vendors 0 new primitive skills — qrspi-implement references the existing tdd skill as its inner loop; qrspi-spec/qrspi-plan carry the vertical-slice gate in their own content; all five cross-link tdd and the *-feature-slice scaffolders via Integration | tdd already IS the canonical RED-GREEN-REFACTOR loop purpose-built as a shared inner loop; a new red-green-refactor skill would be ~100% duplication. Honors DRY and the "Companion Skills" non-overlap doctrine. | |
| 2026-06-02 | Minimal-tier definition broadened to include thin, self-sufficient workflow-phase drivers (≤ ~40 imperative directives). All five qrspi-* phase skills use the minimal tier (≤ 100 lines, ≥ 1 reference), self-sufficient when invoked directly, overflow pushed to references/ loaded just-in-time | QRSPI exists because prompts past ~150–200 instructions degrade; the full 10-section template reproduces the exact bloat QRSPI was created to fix, and is worst on smaller local models. Every section is an always-on per-invocation token tax. | |
| 2026-06-02 | QRSPI artifacts co-locate in a per-feature folder thoughts/shared/qrspi/YYYY-MM-DD-{slug}/ (questions.md, research.md, spec.md, plan.md, implementation/slice-NN-*.md) rather than scattering across `thoughts/shared/research | plans/` | QRSPI produces five tightly-coupled artifacts per feature; co-locating them makes a fresh session cheap (read the folder, not the transcript) and gives each slice log a clean resumption point. spec.md/plan.md carry a lifecycle status: (the approved gate blocks qrspi-implement). |
| 2026-06-03 | QRASPI greenfield workflow added: six phases Q→R→A→S→P→I + a terminal graduation handoff, the greenfield (V0/V1) counterpart to QRSPI. 2-agent topology split by edit access: qraspi-orchestrator (no-Edit: Questions/Research/Architecture/Plan/Graduate) + qraspi-builder (Edit: Skeleton/Implement). | Greenfield's edit boundary differs from QRSPI's (Skeleton and Implement write source; Q/R/A/P/graduate are markdown), but it still splits cleanly into who-may-edit. A 3rd agent buys nothing — Skeleton and Implement share tools and the green-gate philosophy. QRASPI maps a problem domain; QRSPI maps an existing codebase. | |
| 2026-06-03 | QRASPI extracts one new primitive skill, fitness-functions — the first new primitive since the QRSPI "vendored 0 primitives" decision. ADR-writing, C4, and walking-skeleton scaffolding were instead folded into the phase skills + references/. | fitness-functions has ≥2 callers (qraspi-architecture specifies them, qraspi-skeleton lands them as CI gates) and cross-workflow reuse (a brownfield QRSPI feature can add a CI-gate fitness function); no existing skill covers the surface (dependency-mapper covers only the coupling-metric category). The doctrine holds in spirit: extract only at ≥2 callers with no existing cover. | |
| 2026-06-03 | QRASPI artifacts co-locate per project in thoughts/shared/qraspi/YYYY-MM-DD-{slug}/ with per-slice plan-{slice}.md + implementation-log-{slice}.md (vs QRSPI's single plan.md + implementation/slice-NN-*.md); accepted ADRs live in the target repo's docs/adr/NNNN-*.md. | Greenfield grows slice-by-slice on the skeleton, so Plan/Implement run once per slice (default: the next unbuilt backlog slice from skeleton.md). ADRs are project artifacts QRSPI later reads, so they belong in the repo, not the qraspi feature folder. | |
| 2026-06-03 | QRASPI ADRs use the MADR template (Title/Status/Context/Considered Options/Decision/Consequences) with ≥2 alternatives required and an align-before-lock gate (proposed → human aligns → accepted). | "Alternatives Considered" is a MADR/Tyree addition, not original Nygard; QRASPI requires alternatives so a fait-accompli ADR cannot reach WRITE, and MADR carries them natively. architecture-journal keeps its own ADR variant; QRASPI's MADR template lives in qraspi-architecture/references/adr-template.md. | |
| 2026-06-03 | QRASPI C4 diagrams use Mermaid C4Context/C4Container (Context + Container levels only). | The repo is markdown-native with no build system; Mermaid renders inline in GitHub/Codeberg/VS Code, is diffable, and is AI-generatable. Structurizr DSL is richer but needs tooling the repo lacks. | |
| 2026-06-03 | QRASPI Skeleton's exit gate is CI green — a real CI/test run (build + unit + lint + fitness gates) exiting 0, captured as ci_green, never a claim. Hardware archetypes: host gates green + device-deploy as a documented manual gate. | A walking skeleton is executable by definition; an aspirational scaffold defeats the phase. The fitness functions qraspi-architecture specified are wired by fitness-functions and must pass as part of CI green; qraspi-implement keeps them green per slice. | |
| 2026-06-03 | Deprecate spec-implement alongside RPI (disable-model-invocation: true + DEPRECATED description prefix; removal at sunset ~2026-09-01). Its rpi-* pointers in spec-implement, tdd, and spec-coach were scrubbed to QRSPI/QRASPI. | spec-implement was branded "the greenfield counterpart to RPI" and routed to the now-deprecated /rpi-research in five places; QRASPI (greenfield) and QRSPI (brownfield) subsume its spec → criteria → per-slice TDD flow with artifact-gated phases. Leaving it live keeps a stale path to a sunset workflow discoverable. | |
| 2026-06-03 | Cross-language architecture + security parity for .NET/Python/PHP/Rust. Architecture: four <lang>-architecture-checklist skills sharing an identical Core Values + DETECT→SCAN→REPORT(A–F)→RECOMMEND workflow + output, differing only in language checks/tooling; python-arch-review (a misfit TDD-authoring hybrid) renamed/re-scoped to python-architecture-checklist; php-architecture-checklist created. Security: four <lang>-security-review bases share an OWASP core; gov collapses to ONE language-agnostic security-review-federal overlay (NIST 800-53 · CUI · DOE · POA&M · EO 14028 + per-language FIPS table), replacing dotnet-security-review-federal + python-security-review-federal. All trimmed lean; depth in references/. | User wants the four languages "in sync" (same workflow/values, language-specific specifics) and lean. Per-language skills (not one detecting skill) preserve trigger routing and match every other family. The federal overlay is ~80% language-agnostic policy, so one shared skill gives gov parity for all four languages at once and one place to keep NIST/CUI/POA&M in sync — far leaner than duplicating it 4×. python-arch-review was the lone misfit whose triggers collided with tdd/python-feature-slice/python-security-review. | |
| 2026-06-03 | React skill family added (first frontend family), mirroring the .NET/Python/PHP/Rust families: react-architecture-checklist, react-security-review, react-feature-slice, react-component-scaffolder, react-app-scaffolder, react-modernization-analyzer (6 skills) + 6 agents in both runtimes (react-feature-slice-agent, react-component-scaffold-agent, react-app-scaffold-agent, react-security-agent, react-modernization-agent, react-arch-checklist-agent). React is a frontend library, so two backend archetypes were remapped: the HTTP api-scaffolder slot → react-component-scaffolder + react-app-scaffolder (the component/app is the front-end "unit"), and the DB migration-manager slot → react-modernization-analyzer (class→hooks, CRA→Vite, 17→18→19, JS→TS); the *-package-scaffold (npm) archetype was dropped to keep the family at the standard 6 skills. Federal overlay gained a React/TS FIPS row; security-review command dispatch adds react. | User asked for React "to mirror the php, python, etc." The remapping keeps the family the same size and shape while respecting that a frontend library has no HTTP endpoint or DB migration. Grounding gap noted: the KB has no React corpus (grounded_javascript is JS/TS + Vue, not React), so every React skill grounds TS via collection="javascript", a11y via collection="ui_ux", OWASP via collection="internal", and cites react.dev as the primary authority. Follow-up (separate repo): add a grounded_react collection to grounded-code-mcp. | |
| 2026-06-03 | Consolidate the TDD cluster 8→5. Delete tdd-implementer and tdd-refactor — their per-phase content folds into the canonical tdd skill's GREEN/REFACTOR sections + references/ (green idioms, code-smells, refactoring-catalog, loaded on demand). Merge tdd-verify into evaluate-tests as a second "TDD compliance" mode (commit-history scorecard + AI anti-patterns). Keep tdd (the one loop), tdd-agent + tdd-pair (operating modes that defer to tdd), evaluate-tests, test-scaffold. Agents tdd-agent/test-generation-agent updated; no agent/command count change. | Eight overlapping TDD skills created an unanswerable routing question ("for GREEN, use tdd or tdd-implementer?"). The per-phase skills re-derived single phases of the loop tdd already owned whole, and the two auditors (tdd-verify, evaluate-tests) overlapped. One loop + modes + one auditor is focused and token-efficient; depth moved to load-on-demand references/. TDD/RGR is critical to AI-agent coding — clarity of "which skill" matters most here. | |
| 2026-06-03 | Full-template tier adopts the 5-section lean layout, retiring the "10 Mandatory Sections" standard. SKILL.md keeps only Title+Epigraph · Core Philosophy (with a Non-Negotiable Constraints list) · Workflow · State Block · Output Template (pointers) · Integration. The four heavy sections — Domain Principles table, AI Discipline (WRONG/RIGHT), Anti-Patterns table, Error Recovery — plus all code/report templates move to references/, loaded just-in-time. Size budget drops 400 → 200 lines. Gold standard moves from architecture-review (10-section) to qraspi-skeleton + cargo-package-scaffold. Rollout migrates the heaviest full-template skills first (Tier A); pilot cargo-package-scaffold went 367 → 103 lines with zero information loss. | The 10-section template "reproduces the exact bloat QRSPI was created to fix" (2026-06-02 decision): every always-loaded section is a per-invocation token tax, worst on smaller local models. The qraspi/qrspi family proved the 5-section shape in production. Depth is preserved (relocated, not deleted) and stays discoverable via mandatory pointers in SKILL.md, so trigger reliability and authority are unaffected while the always-on token cost drops ~60–70%. | |
| 2026-06-19 | RPI sunset executed early (Slice 7, originally scheduled ~2026-09-01). Deleted the 4 rpi-* skill dirs + spec-implement, and the rpi-planner/rpi-implement agents in both runtimes; scrubbed all live rpi-* references from README, pi/SKILLS-local.md, docs/, and the qrspi-*/session-context/spec-coach skills. Counts: skills 103→98, agents 49/49→47/47, commands unchanged. The 3 read-only research-* subagents stay. | Both workflows were already deprecated (disable-model-invocation: true + DEPRECATED prefix); pulling the sunset forward removes the dead path now instead of carrying it to September. QRSPI (brownfield) + QRASPI (greenfield) fully subsume RPI and spec-implement. Historical thoughts/ logs left intact as records. | |
| 2026-06-20 | Quality prune: dropped 8 skills + 2 paired agents. Removed the device-specific edge/IoT/robotics cluster — picar-x-behavior, jetson-deploy, sensor-integration, edge-cv-pipeline, fleet-management, anomaly-detection (professional) — plus caveman (communication-mode gimmick, Pocock port) and tdd-pair (over-segmented third TDD variant; tdd + tdd-agent cover the loop + autonomous mode). Deleted paired agents sensor-anomaly-agent + fleet-deployment-agent in both runtimes; scrubbed README (badges, stats table, prose, suite tables, tree), pi/SKILLS-local.md, and .matt-pocock-attribution.yml (caveman entry). Counts: skills 98→90 (team 80→78, professional 18→12), agents 47/47→45/45, commands unchanged. Kept model-optimization + model-optimization-agent (quantization/ONNX is reusable beyond edge) and ollama-model-workflow (general local-LLM). | Toolkit targets general software teams; the hardware cluster requires specific boards (Jetson/Picar-X/SBC sensors) and delivers no value without that hardware. caveman/tdd-pair were thin/redundant. QRASPI/QRSPI retained in full — actively used. | |
| 2026-06-25 | tools/ houses standalone utilities — runnable programs that are not skills, agents, or commands. First entry: tools/pdf2md/ (Python CLI, PDF → RAG-ready Markdown), self-contained with its own pyproject.toml, tests, and README.md. These do not count toward skill/agent/command tallies and are excluded from platform-parity checks. | The toolkit's three primitives (skills/agents/commands) are prompt artifacts; a PDF converter is executable code with its own dependency graph and test suite, so it does not belong under skills/. A dedicated tools/ directory keeps executable utilities discoverable without polluting the primitive counts or the Claude/OpenCode parity invariant. | |
| 2026-06-28 | tools/web2md/ added and committed (commit 2aa467e on main) — Python CLI that converts web pages and documentation sites to RAG-ready Markdown using docling. Three modes: single-page (default), --crawl (BFS from a root URL, same-domain), and --sitemap (parse sitemap.xml including sitemap index files). Supports --chunk-by-heading, --metadata, --max-pages, --same-prefix, --max-depth (bounds crawl link-hops from the start URL; root = 0, unlimited by default). 49 tests, 92% coverage. | Companion to tools/pdf2md/; docling handles HTML natively so no custom extraction pipeline is needed — the tool is mostly orchestration (crawler + sitemap parser + mode routing). Same tools/ conventions: self-contained pyproject.toml + tests, excluded from skill/agent/command counts. | |
| 2026-07-05 | tools/ollama-evals/ added — Python CLI that evaluates and regression-tests local Ollama models across four suites: coding (code-execution against hidden tests), chat (LLM-as-judge rubric), tool-use (trajectory), and structured output (JSON-schema). Frontend-agnostic: Pi, Goose, and Open WebUI share the Ollama backend, so model quality is measured once at the OpenAI-compatible /v1 endpoint (LAN host via OLLAMA_BASE_URL / gitignored models.local.yaml, never committed). Ships a model-vs-model comparison matrix, pairwise win/loss/tie, and a compare regression gate that exits non-zero (CI-usable). Judge is a local Ollama rubric by default (offline, zero extra deps) with an optional DeepEval/remote path. 79 tests, 98% coverage (code-exec sandbox 100%, exceeding the 95% security-critical gate). | User wanted to confirm local Ollama models perform well and compare new models against previous ones across their Pi/Goose/Open WebUI setups. Because all three share the Ollama backend, one API-level harness covers all three; hand-rolled Python core (matches tools/pdf2md + tools/web2md) owns the comparison/regression report and the execution sandbox, with DeepEval folded in only for the optional judge. Excluded from skill/agent/command counts and parity checks per the tools/ convention. | |
| 2026-06-20 | Spun out the edge-AI/robotics/automation supplement repo. Created edge-ai-robotics-automation-toolkit (sibling repo) for Local AI, Edge AI, ML, Robotics, and Industrial Automation. Moved the remaining AI/edge skills out of ai-toolkit into it: model-optimization (+ model-optimization-agent, both runtimes), ollama-model-workflow, rag-pipeline-python, rag-pipeline-dotnet, mcp-server-scaffold. These join the 6 edge skills (picar-x-behavior, jetson-deploy, sensor-integration, edge-cv-pipeline, fleet-management, anomaly-detection) + 2 agents (sensor-anomaly-agent, fleet-deployment-agent) pruned earlier the same day — all now live in the supplement. Scrubbed README (badges, stats, AI/ML Bridge Suite, professional agent section, tree, prose), pi/SKILLS-local.md, and skill Integration cross-refs. The supplement does not duplicate global config — it layers on ai-toolkit. Counts: skills 90→85 (team 78→74, professional 12→11), agents 45/45→44/44, commands unchanged. | This earlier-kept cluster ("reusable beyond edge") is, in practice, the AI/ML/local-inference domain the new toolkit is built to own. Consolidating all AI/edge/robotics/automation skills in one supplement gives a clean two-repo portfolio split: ai-toolkit = general software engineering; the supplement = the physical/edge/AI stack. Single-homed skills, no duplication. | |
| 2026-06-26 | Lean-layout migration completed across all oversized full-template skills. 25 SKILL.md files brought under the 200-line ceiling (21 in a batch + the 4 stragglers rust-migration-analyzer, rust-feature-slice, spec-coach, architecture-review); oss-vetting refactored to the 5-section layout; the architecture-checklist/security-review families and task-decomposition had non-canonical headings normalized (Output Templates→Output Template, Core *Values→Core Philosophy, descriptive Workflow: headings→Workflow). Depth relocated to references/, never deleted; pre-existing dangling references/ pointers fixed. No skill/agent/command count change. | Closes the 2026-06-03 lean-layout decision: every full-template skill now follows the 5-section layout with depth in references/ and ≥2 reference files. Verified structurally — every SKILL.md is ≤200 lines with the 5 canonical sections and no dangling reference pointers. | |
| 2026-06-26 | CLAUDE.md and AGENTS.md made a byte-identical mirror pair. The two root context files now carry the same union of content (project overview, architecture, skill/agent/command conventions, hooks, validation, decisions, open loops, skill suites). Claude Code reads CLAUDE.md; OpenCode and Pi read AGENTS.md. Kept in sync manually with a banner + diff CLAUDE.md AGENTS.md check. | Whichever agent opens the project must get the same project context. Previously CLAUDE.md was a thin pointer to AGENTS.md, so a Claude Code session and an OpenCode session saw materially different guidance. Two real files (not a symlink) keep it portable across tools that don't follow symlinks. | |
| 2026-07-11 | code-review-agent slimmed to defer to the automated-code-review engine (both runtimes); Fowler code smell catalog added. The agent (394 → ~160 lines in each runtime) previously re-inlined the skill's entire SCAN→ANALYZE→SYNTHESIZE→REPORT workflow, five-category checklist, self-checks, and output template while also declaring the skill as a dependency. It now keeps only the autonomous-specific parts (guardrails, KB grounding, session lifecycle, its own unique <code-review-state> block) and defers the engine to automated-code-review. Landed Martin Fowler's Refactoring smell catalog as automated-code-review/references/code-smells.md — the canonical checklist for the maintainability category, carrying Matt Pocock's "repo overrides" suppression rule; the agent and /code-review command inherit it via deferral. No skill/agent/command count change. | Same smell the 2026-06-03 TDD consolidation fixed: an operating-mode agent re-deriving a loop the canonical skill already owns whole. Deferral removes ~250 duplicated lines with zero information loss (the engine holds all of it) and gives one place to maintain the review workflow. The Fowler catalog was the reusable nugget from mattpocock's code-review skill; folding it into the existing maintainability category (not a new 6th category or a competing skill) honors the five-category invariant and the non-overlap doctrine. Agent state tag kept distinct from the skill's <automated-review-state> per the uniqueness invariant. | |
| 2026-07-19 | Vue skill family added (second frontend family, mirroring React exactly): vue-architecture-checklist, vue-security-review, vue-feature-slice, vue-component-scaffolder, vue-app-scaffolder, vue-modernization-analyzer (6 skills) + 6 agents in both runtimes (vue-arch-checklist-agent, vue-security-agent, vue-modernization-agent, vue-feature-slice-agent, vue-component-scaffold-agent, vue-app-scaffold-agent). Same shape/doctrine as the 2026-06-03 React decision: 5-section lean layout, structural CQRS via composables instead of hooks, <script setup lang="ts"> + defineProps/defineEmits for type safety, Composition API reactivity discipline (no destructured reactive()) in place of hooks-rules checks, Vite + Vue Router + Vitest + Vue Testing Library skeleton, Options→Composition/Vue-CLI→Vite/Vue-2→3/Vuex→Pinia modernization paths. Counts: skills 87→93 (team 75→81), agents 45/45→51/51. | User asked for a Vue family alongside the existing React one — the toolkit's other major frontend framework was otherwise unrepresented (grounded_javascript already carries a Vue 2/3 corpus, unlike the React gap noted in the 2026-06-03 decision, so Vue skills ground TS/Vue idioms directly via collection="javascript" rather than falling back to an external-authority note only). Mirroring React's exact shape (not inventing a new pattern) keeps the two frontend families symmetric and keeps routing simple: same 6-skill/6-agent shape, same Integration cross-reference style, same no-commands-layer precedent. | |
| 2026-07-22 | Minimal-tier references/ requirement relaxed for sub-20-line skills — a SKILL.md under 20 lines needs no references/ directory at all. Applies to the vendored grill family (grilling 19, grill-with-docs 15, grill-me 14 lines). | The rule exists to keep depth out of the always-loaded SKILL.md. A skill that fits in 19 lines has no depth to relocate, so the requirement can only be satisfied by a filler file — boilerplate that costs a reader a click and buys nothing. The invariant should track the reason it exists, not be met for its own sake. | |
| 2026-07-22 | Re-vendored the mattpocock grill family in sync with upstream ed37663. Upstream split the inlined interview engine into three files; adopted as-is: grilling (the engine, model-invocable) + grill-me and grill-with-docs (thin disable-model-invocation entry points). grill-with-docs composes the local domain-model (upstream's domain-modeling) to capture ADRs + a glossary. Added /grill-with-docs in both runtimes. Backfilled the missing domain-model attribution entry and pinned source_commit on all four grill-family entries. Counts: skills 93→95 (team 81→83), commands 25→26, agents unchanged. | Staying in sync with upstream on vendored primitives beats carrying a diverged fork: the engine gained three real behavioral improvements the local copy lacked — wait for feedback between questions, look up facts but always put decisions to the human, and a terminal "do not act until I confirm" gate. The three-file split is upstream's, not invented here; the only local deviation is the composed skill's name. | |
| 2026-07-22 | Removed zoom-out; reviewed the other two vendored mattpocock skills against upstream ed37663. zoom-out deleted upstream in e112a6b (2026-06-17, "Remove zoom-out skill and all references") — not renamed, not deprecated — so the local fork was orphaned; removed here too along with its attribution entry. codebase-design: dropped the local disable-model-invocation to match upstream, which leaves it model-invocable so other skills can pull the vocabulary in on demand. improve-codebase-architecture: adopted two upstream ideas — the disable-model-invocation flag (missing locally, a real defect on an interactive skill) and a git-log hot-spot Scoping phase — but deliberately did NOT sync the rest. Counts: skills 95→94 (team 83→82). | Upstream rewrote improve-codebase-architecture to emit a Tailwind/Mermaid HTML report driven by an Explore subagent and a grilling loop. That deliverable cuts against this repo's markdown-native, no-build-system grain, and the local quantified issue table with S/M/L effort estimates matches the architecture-checklist family's house style. Recorded in .matt-pocock-attribution.yml as a standing decision so a future re-vendor doesn't read it as drift. | |
| 2026-07-22 | domain-model reviewed against upstream ed37663; four defects fixed. Dropped disable-model-invocation — it blocked the mid-session composition that grill-with-docs, improve-codebase-architecture, codebase-design, and qraspi-architecture all depend on. Replaced the hard "no CONTEXT.md, stop" gate with upstream's lazy file creation. Moved the ADR write path docs/decisions/ → docs/adr/NNNN-*.md, aligning with the 2026-06-03 decision and the four QRASPI skills. Added source/source_commit frontmatter (it was the only vendored skill without it). Also adopted upstream's CONTEXT-MAP.md multi-context layout and its three-part ADR test. Kept the local DDD interrogation protocol. No count change. | Three of the four were latent bugs independent of upstream: the ADR path made domain-model the only skill in the repo writing outside docs/adr/, so a qraspi-architecture session and a domain-model session scattered ADRs across two directories; the CONTEXT.md gate stalled any composing skill in a fresh repo. Upstream has since narrowed domain-modeling to an in-session maintenance discipline — explicitly not an interview — so the structured interrogation stays local; it is this skill's reason to exist and has no upstream equivalent to sync to. | |
| 2026-07-30 | Flattened skills/ from skills/{team,professional}/<name>/ to skills/<name>/; renamed the tdd skill to tdd-loop. Claude Code only discovers skills/<name>/SKILL.md one level deep, so the category subdirectory silently broke discovery for all 94 skills — none ever loaded. audience: frontmatter is retained as metadata (it still selects the install subdir for a skill's paired agent under claude/agents/<audience>/ and opencode/agents/<audience>/, which were NOT flattened). scripts/add_frontmatter.py now walks skills/*/ and no longer infers audience from the path — it warns instead of failing when a SKILL.md lacks the field. All four install-*.sh/install-*.ps1 pairs updated to prune by skills/*/ instead of the now-nonexistent team/professional dirs (the .ps1 variants had silently stopped pruning at all — Copy-Item only adds/overwrites, so a removed skill would have lingered and stayed invocable). The tdd skill collided with the /tdd command and always lost, so every skill({ name: "tdd" }) call resolved to the command instead; renamed to tdd-loop and updated 14 references across claude/, opencode/, skills/. | A structural bug this deep (nothing ever loaded) needed a mechanical, repo-wide fix rather than a per-skill patch. Flattening only skills/ and not claude/agents//opencode/agents/ keeps the fix minimal — those two trees' one-level nesting is correct for how Claude Code discovers agents, only skill discovery required the flat form. | |
| 2026-08-02 | tools/skill-evals/ added — the eval harness that makes evals.md executable. Four layers: L1 structural lint (no model; 30+ rules mapped to evals.md test cases; exits non-zero), L2 routing eval (60 stratified cases against the live 91-skill roster), L3 output quality (per-case SKILL.md injection, criteria derived from the skill's own Non-Negotiable Constraints), L4 rubric scorecard (skill-creator's rubric parsed at run time, one judge call per dimension, deterministic overrides on the mechanical dimensions). First run found 63 real errors; 55 were fixed (the tdd→tdd-loop rename tail across 18 Integration tables and 2 reference pointers, three inconsistent count sets in pi/SKILLS-local.md, stale counts in README/CLAUDE.md/AGENTS.md, four agent/skill state-tag collisions), 8 baselined with written rationale. The 4 SK041 findings (qraspi-graduate, qraspi-implement, qraspi-plan, qrspi-research) were resolved same-day by trimming genuine content back under the minimal-tier 100-line ceiling, leaving 4 baselined (evaluate-tests, substack-writer — SK021+SK030, never adopted the 5-section layout). State-tag rule amended: unique across families, shareable within a declared family. evals.md gained TC9/TC10, Automated-by pointers, and a corrected gate section. | evals.md was a specification nobody could run: every Last Run field was empty and its "CI gate" was six greps, one of which matched nothing at all (it assumed backticked rows that pi/SKILLS-local.md does not have) and so reported every skill as untriaged forever. A rule that cannot fail teaches nothing. Building the linter first, proving it against real defects, and only then fixing them keeps the acceptance tests honest. Reusing tools/ollama-evals as an optional extra keeps L1 — the layer run daily — installable with no LLM stack. | |
| 2026-08-08 | Removed the 9 vendored/adjacent skills whose upstream or rationale no longer held, plus doc sync. Deleted grilling, grill-me, grill-with-docs, codebase-design, domain-model, improve-codebase-architecture (mattpocock vendor — "his are more up-to-date," i.e. point users at his repo directly rather than carry a copy that drifts), para-file, para-review (PARA suite), and substack-writer (Writing & Portfolio). .matt-pocock-attribution.yml removed. Counts: skills 94→84 (team 83→73, professional 12→11 — substack-writer was the only professional-track loss). claude/agents/team/{qrspi-implement,tdd-agent,test-generation-agent,qraspi-builder}.md had a stale skills: - tdd frontmatter entry from the 2026-07-30 tdd→tdd-loop rename (OpenCode's skill() calls were already correct); fixed to tdd-loop. claude/commands/{grill-me,grill-with-docs,para-file,para-review}.md and their opencode/commands/ counterparts now point at deleted skills — left in place pending a decision on whether to delete or replace them. | The vendored-skill decisions (Companion Skills doctrine, 2026-07-22 grill re-vendor, 2026-07-22 domain-model fixes) assumed staying in sync with upstream was worth the carrying cost; that assumption changed — upstream is authoritative and closer, so the local copies were dropped rather than re-synced again. This entry exists because the removal commit (a2e1643) shipped without a paired doc update, leaving CLAUDE.md/AGENTS.md/README counts and Skill Suites tables stale against the actual skills/ tree for weeks. | |
| 2026-08-08 | Flattened claude/agents/ and opencode/agents/ from <team|professional>/<name>.md to <name>.md, completing the flatten the 2026-07-30 skills decision deliberately deferred. professional/ held zero agents (emptied by the edge-toolkit spin-out), so the split was pure indirection with no discovery benefit — unlike skills, agents were never broken by the nesting, just needlessly split. audience: frontmatter is now pure metadata everywhere (skills and agents both) — it groups a skill/agent into the README's Team/Professional sections and nothing else. No install-script changes needed: all four install-*.sh/install-*.ps1 already installed agents via a recursive find/Get-ChildItem -Recurse. Counts unchanged (51/51 agents, still in parity). | User-requested, mirroring the skills flatten for consistency across all three primitive trees (skills, commands, agents are now uniformly flat). Removes a documentation trap: the 2026-07-30 entry explicitly said "flattening only skills/... those two trees' one-level nesting is correct" — true at the time (nesting didn't break agent discovery), but the empty professional/ agent dir left since the edge-toolkit spin-out meant the split was already vestigial before this change. | |
| 2026-08-08 | Deleted the 4 orphaned commands flagged by the same-day removal: /grill-me, /grill-with-docs, /para-file, /para-review in both claude/commands/ and opencode/commands/. Each invoked a skill (grill-me/grill-with-docs/para-file/para-review) removed in the 2026-08-08 vendored-skill cleanup above, making all four non-functional. Counts: commands 26/26 → 22/22. | Deleting was chosen over repointing — none of the four had a replacement skill to point at, and the commands existed only to invoke the deleted ones. Resolves the "left in place pending a decision" note in the same-day removal entry. | |
| 2026-09-05 | Removed the jira-review skill (team, SKILL.md + 6 references/ files) — superseded by jira-comment-writer and downstream Jira tooling; no longer maintained as a standalone readiness-review skill. No paired agent or command existed. Counts: skills 84→83 (team 73→72). Same-day follow-up scrubbed the dangling jira-review references in jira-comment-writer, email-capture, transcript-capture, capture-consolidate (Integration tables), pi/SKILLS-local.md, and the README Skill Suites row/badge/tagline — the 2026-08-08 doc-desync mistake was not repeated. | Part of a broader local cleanup of Ollama modelfiles and Pi model config; jira-review was dropped in the same pass as stale. | |
| 2026-08-02 | Amend the 2026-06-26 lean-layout-complete claim: it was verified on line count only. skill-evals lint --rule SK023 found 125 non-canonical ## sections remaining across 38 full-template skills — AI Discipline Rules, Error Recovery, Knowledge Base Lookups, Domain Principles, Anti-Patterns, and others that the 2026-06-03 decision said must move to references/. These are section-level, not line-count, findings; SK023 reports them as warnings (non-gating). The 25-file line-count migration itself stands — this amends the completeness claim, not the work already done. Migrating those files is tracked as follow-up, not attempted in this session (large diff, 38 affected skills). | The migration's exit gate was "every SKILL.md ≤ 200 lines," necessary but not sufficient for the 5-section lean layout: a skill can be short and still carry non-canonical headings instead of the five canonical sections. tools/skill-evals/tests/test_real_corpus.py::test_lean_layout_migration_is_incomplete_on_sections pins SK023 as still-firing and is designed to fail (prompting this entry's removal) once the section migration is actually done. |
Open Loops
- Skill count (currently 83) — update this file and README when skills are added or removed.
jira-reviewremoved 2026-09-05 (was 84 → 83, team 73 → 72) — see the paired Persistent Decision entry. Vendored/adjacent skill removal 2026-08-08 (was 94 → 84, team 83 → 73, professional 12 → 11):grilling,grill-me,grill-with-docs,codebase-design,domain-model,improve-codebase-architecture(mattpocock vendor, sunset — see the 2026-08-08 Persistent Decision),para-file,para-review,substack-writer— commita2e1643/6904917.zoom-outremoved 2026-07-22 (was 95 → 94, team 83 → 82) — deleted upstream, local fork orphaned. Grill family re-vendored 2026-07-22 (was 93 → 95, team 81 → 83):grilling+grill-with-docsadded alongside the re-vendoredgrill-me;/grill-with-docsadded in both runtimes (commands 25 → 26). Vue family added 2026-07-19 (was 87 → 93, team 75 → 81): 6 skills (vue-architecture-checklist,vue-security-review,vue-feature-slice,vue-component-scaffolder,vue-app-scaffolder,vue-modernization-analyzer), mirroring the React family exactly; no commands (React has none either). Product & GitHub suite retired 2026-07-11 (was 90 → 87, team 78 → 75): droppedto-prd+to-issues(mattpocock PRD writer + PRD→GitHub-issues decomposer), thentriage-issue(GitHub/Jira bug triage) — all as out-of-scope for the engineering-workflow toolkit: specs live in Jira/Confluence and the QRSPI/QRASPI workflows own technical spec/plan. All three skill-only, no agents/commands.to-prd/to-issuesattribution entries removed from.matt-pocock-attribution.yml; the Product & GitHub suite row removed from the Skill Suites table.codebase-designadded 2026-07-11 (was 89 → 90): the mattpocock deep-module vocabulary skill (team, team 77 → 78) — glossary of module/interface/depth/seam/adapter/leverage/locality +references/DEEPENING.md+references/DESIGN-IT-TWICE.md;disable-model-invocationvocabulary provider, no agent/command. Fills the APOSD vocabulary dependency the earlierimprove-codebase-architectureport assumed but never imported; cross-linked from that skill's intro + Integration.substack-writeradded 2026-07-04 (was 88 → 89): multi-pass editorial pipeline turning raw technical notes into publication-quality Substack/blog posts (professional); skill-only, no agent/command (professional 11 → 12, team unchanged at 77).oss-vettingadded 2026-06-25 (was 87 → 88): federal OSS/SBOM vetting assessment skill (team), with pairedoss-vetting-agentin both runtimes (agents 44/44 → 45/45) and/oss-vettingcommand in both runtimes (commands 24/24 → 25/25). PARA knowledge-management pair added 2026-06-20 (was 85 → 87):para-file+para-review(team), each with/para-file+/para-reviewcommands in both runtimes (commands 22 → 24); no agents. Edge supplement spin-out 2026-06-20 moved 5 more out (was 90 → 85):model-optimization,ollama-model-workflow,rag-pipeline-python,rag-pipeline-dotnet,mcp-server-scaffold→edge-ai-robotics-automation-toolkit. Quality prune 2026-06-20 dropped 8 (was 98 → 90): the edge/IoT/robotics cluster (picar-x-behavior,jetson-deploy,sensor-integration,edge-cv-pipeline,fleet-management,anomaly-detection) +caveman+tdd-pair.dotnet-controller-api-scaffolderadded 2026-06-03 (was 102 → 103): controller-based Web API scaffolder that conforms to existing conventions; skill-only, no agent/command (matches the .NET family convention —minimal-api-scaffolderet al. have no agents). Same change madedotnet-architecture-checkliststyle-aware (layered/N-tier controller branch viareferences/layered-ntier.md) — no count change. QRSPI added 5 phase skills 2026-06-02 (was 81); QRASPI added 8 (fitness-functions+ the 7 phase/graduate skills) 2026-06-03 (was 86, → 94); TDD cluster consolidated 8→5 on 2026-06-03 (→ 91); cross-language architecture+security parity 2026-06-03 (renamedpython-arch-review→python-architecture-checklist; +php-architecture-checklist, +php-security-review, +security-review-federal; −dotnet-security-review-federal, −python-security-review-federal→ 92); PHP family parity 2026-06-03 (+php-feature-slice, +php-api-scaffolder, +php-package-scaffold, +php-migration-manager→ 96); React family parity 2026-06-03 (+react-architecture-checklist, +react-security-review, +react-feature-slice, +react-component-scaffolder, +react-app-scaffolder, +react-modernization-analyzer→ 102 → 103 withdotnet-controller-api-scaffolder); RPI sunset 2026-06-19 removed the 4rpi-*skills +spec-implement(→ 98). - Agent count parity — Claude Code (51) vs. OpenCode (51) — Vue family added
vue-arch-checklist-agent,vue-security-agent,vue-modernization-agent,vue-feature-slice-agent,vue-component-scaffold-agent,vue-app-scaffold-agentin both runtimes 2026-07-19 (was 45/45 → 51/51);oss-vetting-agentadded in both runtimes 2026-06-25 (was 44/44 → 45/45); edge supplement spin-out 2026-06-20 movedmodel-optimization-agenttoedge-ai-robotics-automation-toolkitin both runtimes (was 45/45 → 44/44); quality prune 2026-06-20 removedsensor-anomaly-agent+fleet-deployment-agentin both runtimes (was 47/47 → 45/45); QRSPI addedqrspi-orchestrator+qrspi-implement2026-06-02 (was 35/35, resolved 2026-05-19); QRASPI addedqraspi-orchestrator+qraspi-builder2026-06-03 (was 37/37); PHP family parity 2026-06-03 addedphp-feature-slice-agent,php-api-scaffold-agent,php-package-agent,php-migration-agentin both runtimes (was 39/39, → 43/43); React family parity 2026-06-03 addedreact-feature-slice-agent,react-component-scaffold-agent,react-app-scaffold-agent,react-security-agent,react-modernization-agent,react-arch-checklist-agentin both runtimes (was 43/43, → 49/49); RPI sunset 2026-06-19 removedrpi-planner/rpi-implementin both runtimes (→ 47/47). - Commands layer —
claude/commands/(22 commands) andopencode/commands/(22 commands) —/grill-me,/grill-with-docs,/para-file,/para-reviewdeleted 2026-08-08 (orphaned by the same-day skill cleanup; was 26/26 → 22/22)./grill-with-docsadded in both runtimes 2026-07-22 (was 25/25 → 26/26) —/oss-vettingadded in both runtimes 2026-06-25 (was 24/24 → 25/25) — PARA pair added/para-file+/para-review2026-06-20 (was 22/22) — QRSPI added 5 (/qrspi-questions…/qrspi-implement) 2026-06-02 (was 10/10); QRASPI added 7 (/qraspi-questions…/qraspi-graduate) 2026-06-03 (was 15/15). Norpi-*commands, so sunset leaves commands at 22. - Lean-layout migration (line count) — every full-template
SKILL.mdis ≤ 200 lines (completed 2026-06-26). Re-verify with the Contributor Validation commands after adding or editing a skill. - Lean-layout migration (section canonicalization) — 125 non-canonical
##sections remain, affecting 38 full-template skills, perskill-evals lint --rule SK023(amended 2026-08-02; see that Persistent Decision). Top offenders:AI Discipline Rules(28),Error Recovery(15),Knowledge Base Lookups(12),Domain Principles(8),Anti-Patterns(8).
Skill Suites
| Suite | Skills | Focus |
| TDD | tdd-loop (the canonical loop) + tdd-agent (autonomous operating mode) + evaluate-tests (quality & compliance audit) | Test-Driven Development lifecycle |
| Enterprise .NET | dotnet-vertical-slice, ef-migration-manager, nuget-package-scaffold, legacy-migration-analyzer, dotnet-architecture-checklist, dotnet-controller-api-scaffolder, dotnet-security-review, minimal-api-scaffolder, 4d-schema-migration | .NET patterns, migrations, security |
| Security (cross-language) | security-review-federal, oss-vetting | Shared language-agnostic federal/gov work. security-review-federal is the overlay (NIST 800-53, FIPS, CUI, POA&M, EO 14028, DOE 205.1B) applied on top of any base <lang>-security-review; oss-vetting produces a structured OSS/SBOM assessment for federal contractor environments (LANL/DOE/CUI) — security posture, supply chain risk, license compliance, CUI suitability against four governing frameworks; Confluence-ready report. |
| Coaching | architecture-review, pattern-tradeoff-analyzer, system-design-kata, dependency-mapper, code-review-coach, refactor-challenger, security-review-trainer, pr-feedback-writer, technical-debt-assessor, architecture-journal | Engineering judgment and communication modes. |
| Agent Support | automated-code-review, test-scaffold, doc-sync, supply-chain-audit, environment-health, research-synthesis, session-context, task-decomposition | Domain knowledge for agents |
| Agent Design | spec-coach | Interactive spec design coach — skills, agents, PRDs, and GitHub Spec Kit |
| QRSPI Workflow | qrspi-questions, qrspi-research, qrspi-spec, qrspi-plan, qrspi-implement | Questions-Research-Spec-Plan-Implement: instruction-budget-disciplined replacement for RPI. No-magic-words artifact gates, ticket-hidden research, Design Brain-Dump → Structure Outline, vertical-slice plans, per-slice Red-Green-Refactor. Driven by the qrspi-orchestrator (alignment) + qrspi-implement (execution) agents and the renamed research-* read-only subagents. For an EXISTING codebase / adding a feature. |
| QRASPI Workflow | fitness-functions, qraspi-questions, qraspi-research, qraspi-architecture, qraspi-skeleton, qraspi-plan, qraspi-implement, qraspi-graduate | Questions-Research-Architecture-Skeleton-Plan-Implement for a NEW system (greenfield V0/V1), then graduation to QRSPI. Locks path-dependent decisions as MADR ADRs with alternatives + Mermaid C4, lands a runnable walking skeleton with fitness functions as merge-blocking CI gates (CI-green exit gate), grows it slice-by-slice with Red-Green-Refactor, then hands off to QRSPI. Driven by qraspi-orchestrator (no-edit Q/R/A/P/graduate) + qraspi-builder (edit Skeleton/Implement); fitness-functions is the one extracted primitive. For a NEW system from scratch — the greenfield counterpart to QRSPI. |
| Python | python-architecture-checklist, python-security-review, python-feature-slice, alembic-migration-manager, python-modernization-analyzer, fastapi-scaffolder, pypi-package-scaffold | Python patterns, migrations, security, packaging |
| PHP | php-architecture-checklist, php-security-review, php-feature-slice, php-api-scaffolder, php-package-scaffold, php-migration-manager | PHP/Laravel architecture, security, scaffolding, migrations |
| Rust | rust-architecture-checklist, rust-security-review, rust-feature-slice, sqlx-migration-manager, rust-migration-analyzer, axum-scaffolder, cargo-package-scaffold | Rust architecture, security, migrations, API scaffolding, packaging |
| Vue | vue-architecture-checklist, vue-security-review, vue-feature-slice, vue-component-scaffolder, vue-app-scaffolder, vue-modernization-analyzer | Vue architecture, security, feature scaffolding, component/app scaffolding, modernization — second frontend family, mirrors the React suite |
| Other | jira-comment-writer, confluence-guide-writer | Language/tool-specific reviews and documentation generation |
Team
| Name | Role | Notes |
| Michael K. Alber | Owner / Primary contributor | Reviews all changes to global files and project-templates |
Project Boot Ritual
Follow the global Session Boot Ritual (see global CLAUDE.md / AGENTS.md). Repo-specific deltas:
read this file plus intent.md and constraints.md, and confirm the Persistent Decisions and
Open Loops above before starting. Tooling (grounded-code-mcp, Microsoft Learn MCP, grounding
workflow) is defined globally — not repeated here.
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.

