This is an orchestration release. Personas, skills, and slash commands now compose as three explicit layers, and /ship runs three specialist personas in parallel against the current change before synthesizing a go/no-go decision. New tool integrations land for Gemini CLI, Kiro, and OpenCode, and source-driven-development gains an opt-in citation cache.
Orchestration
Three composable layers, defined in AGENTS.md and worked through in references/orchestration-patterns.md:
Personas - roles with a perspective and an output format (the who)
Skills - workflows with steps and exit criteria (the how)
Slash commands - user-facing entry points (the when)
Composition rule: the user (or a slash command) is the orchestrator. Personas do not invoke other personas.
Turned /ship into a parallel fan-out orchestrator that runs code-reviewer, security-auditor, and test-engineer concurrently and merges their reports
Replaced /ship's hand-wavy skip-fan-out rule with concrete thresholds (≤2 files, <50 lines, no auth/payments/data/config)
Added a Composition block to each persona file documenting how it composes with skills
Added a personas index (agents/README.md) with a composition decision matrix
Added an orchestration patterns catalog (references/orchestration-patterns.md)
Added an Agent Teams worked example for competing-hypothesis debugging
Documented Claude Code subagent and Agent Teams compatibility, including how skills, mcpServers, and permissionMode frontmatter are handled (silently dropped when used as teammates)
Corrected Agent Teams system-prompt handling — appended, not replaced
Noted /ship picks up user-defined personas in .claude/agents/ and ~/.claude/agents/ automatically (plugin scope is lowest priority)
New Tool Integrations
Gemini CLI
Added 7 slash commands under .gemini/commands/ (/spec, /planning, /build, /test, /review, /code-simplify, /ship) mirroring the Claude Code set
Used /planning instead of /plan to avoid colliding with a Gemini CLI internal command
Documented the commands in docs/gemini-cli-setup.md
Kiro IDE & CLI
Added Kiro to the README quick start with setup details and link formatting
OpenCode
Added a symlink so OpenCode resolves skills correctly out of the box
Hooks
Source-Driven Development citation cache
Opt-in citation cache so framework-doc lookups don't repeat across sessions
Session-start JSON robustness
Properly JSON-escape SKILL.md content via jq — fixes invalid JSON when content contains quotes or newlines
Gracefully fall back with an INFO-priority message when jq is missing on PATH instead of failing silently
Aligned the custom button example with native Space activation timing ([#79](#79))
Prevented the custom button example from teaching a scrolling interaction bug
Accessibility Checklist
Skip-to-content link must be visible on focus ([#54](#54))
Added autocomplete requirement for known fields in forms ([#55](#55))
Performance Checklist
Expanded INP coverage with concrete optimization techniques ([#84](#84))
Added a fonts section and the yieldToMain pattern ([#63](#63))
Skill Contribution Guidance
Aligned skill-contribution guidance across CLAUDE.md, AGENTS.md, docs/skill-anatomy.md, and the README — preserved third-person description guidance and corrected README formatting
Contributors
Thanks to everyone who landed changes in this release:
Source-Driven Development (#45) - New skill that grounds framework-specific implementation decisions in official documentation. Covers stack detection, citation format, handling conflicting sources, and an optional documentation cache. Framework-agnostic by design.
Distinguished synthetic (Lighthouse/CI) vs RUM (web-vitals) measurement, with guidance on when each applies.
Expanded TTFB diagnosis into a decision tree covering DNS, TCP/TLS, and server processing — mirrored in the checklist with TTFB "good" threshold aligned to web.dev (800ms).
Fixed image optimization examples: hero/LCP images now use aspect-ratio, fetchpriority="high", and explicit width/height; below-the-fold images use loading="lazy" + decoding="async". Removed decoding="sync" from hero examples to avoid blocking the main thread.
Added art direction + resolution switching example with <picture>, AVIF → WebP → JPG cascade, and realistic sizes attributes.
Corrected the date-fns tree-shaking example — modern bundlers handle named imports; replaced with dynamic imports and route-level code splitting.