Repository navigation
Description
Summary
Ceremonies silently stop working when ceremonies.md exceeds the file-view size threshold (~20KB). The coordinator's view tool rejects the file with "File too large to read at once," and instead of falling back to alternative read strategies, the coordinator drops the entire ceremony system and misroutes ceremony requests as general work tasks.
This is a cliff failure — below the threshold ceremonies work 100%, above it they work 0%. Every new ceremony definition added to the monolithic file makes the problem worse with no graceful degradation.
Steps to Reproduce
- Create a squad with several ceremonies defined in
.squad/ceremonies.md - Continue adding ceremony definitions until the file exceeds ~20KB (roughly 8-12 detailed ceremonies depending on complexity)
- Request a ceremony by name (e.g., "bug bash", "run a retro", "design review")
- Expected: Coordinator matches the request to the ceremony definition, spawns the facilitator, and runs the structured ceremony
- Actual: Coordinator fails to read
ceremonies.md, pattern-matches the request against the routing table's "general work request" row, and fans out agents to do ad-hoc work — completely bypassing the ceremony system
Root Cause Chain
- Coordinator calls
viewonceremonies.md→ tool returns "File too large to read at once" - No fallback logic exists (no
view_range, nogrep, no chunked read) - With zero ceremony definitions in context, the user's request (e.g., "bug bash") doesn't match the "ceremony request" routing signal
- Request falls through to "general work request" and gets decomposed as a multi-agent task
Implementation Guide: Ceremonies as Skills
Migrate ceremony definitions from the monolithic ceremonies.md into individual skill files, reducing ceremonies.md to a lightweight dispatch table that will never hit the size threshold.
Architecture Change
Before (current):
ceremonies.md= monolithic file containing every ceremony's full definition (triggers, participants, flow steps, facilitator templates)- Grows linearly with each new ceremony
- Single point of failure at the file-size cliff
After (proposed):
ceremonies.md= small dispatch table (~2-4KB max, scales to 50+ ceremonies without issue)- Each ceremony lives in
.squad/skills/ceremony-{name}/SKILL.mdwith its full definition - Coordinator reads the tiny table, matches the trigger, reads just that one skill file
New ceremonies.md Format
`markdown
Ceremonies
Ceremony definitions live in individual skill files. This table is the dispatch index.
| Name | Trigger | When | Condition | Skill |
|---|---|---|---|---|
| Bug Bash | manual | — | — | .squad/skills/ceremony-bug-bash/SKILL.md |
| Design Review | before | multi-agent | touches 3+ UI components | .squad/skills/ceremony-design-review/SKILL.md |
| Retro | manual | — | — | .squad/skills/ceremony-retro/SKILL.md |
| Architecture Review | before | multi-agent | new service or API | .squad/skills/ceremony-architecture-review/SKILL.md |
| ` |
Ceremony Skill File Structure
Each .squad/skills/ceremony-{name}/SKILL.md contains the full ceremony definition currently embedded in ceremonies.md:
- Facilitator (who runs it)
- Participants (who's involved)
- Flow steps (the structured meeting format)
- Facilitator spawn template
- Output format and expected artifacts
Coordinator Instruction Changes (squad.agent.md)
The Ceremonies section changes from:
"read
ceremonies.mdfor ceremony definitions"
To:
- Read
ceremonies.md(always small — just a dispatch table)- Match the user's request against the Name/Trigger/Condition columns
- If matched, read the referenced skill file at the path in the Skill column
- Spawn the facilitator with the ceremony skill content inlined
The auto-trigger logic (before/after checks) also reads only the dispatch table to find matching conditions, then loads only the matched ceremony's skill file.
Why This Approach Works
- The dispatch table never hits the size cliff. Even with 50+ ceremonies, a markdown table is ~3-4KB.
- Skill-aware routing already exists. The coordinator already knows how to discover, read, and pass skills to agents. Zero new infrastructure needed.
- Each ceremony skill is self-contained and small — typically 1-2KB. Always readable by any tool.
- Skills inherit the confidence lifecycle — ceremonies that get used and refined naturally gain confidence levels (low → medium → high).
- Better discoverability. Each ceremony is a separate file that can be searched, versioned, and reviewed independently.
Migration Steps
- Parse existing
ceremonies.mdto extract each ceremony definition - Create
.squad/skills/ceremony-{name}/SKILL.mdfor each ceremony, following the existing skill template format - Replace
ceremonies.mdcontent with the dispatch table (keeping the# Ceremoniesheader) - Update the Ceremonies section in
squad.agent.mdwith the new dispatch-then-read logic - Update
ceremony-reference.mdtemplate to document the new structure - Update Init Mode Phase 2 so new squads create the dispatch table format (not the monolithic format)
Files Affected
squad.agent.md— Ceremonies section (coordinator instructions for lookup and execution).squad/ceremonies.md— file format changes from monolith to dispatch table.squad/skills/ceremony-*/SKILL.md— new files (one per ceremony).squad/templates/ceremony-reference.md— updated format guide- Init Mode Phase 2 — ceremony file creation during team setup
What Does NOT Change
- How ceremonies execute (facilitator spawning, participant sub-tasks, sync mode)
- Ceremony cooldown logic
- Auto-triggered before/after matching semantics (just reads from the table instead of the monolith)
- The
## Ceremoniesentry in the Source of Truth Hierarchy
Activity
wbreza commentedon Mar 5, 2026
I'd also consider integrating waza into the skill creation process.
chore: SDK M0 audit findings for #190, #193, #194
fix: swap @github/copilot-sdk from file: to npm ^0.1.25
fix: resolve 4 runtime bugs (#214, #207, #206, #193)
Merge PR #234: Runtime bug fixes (4 issues)
bradygaster commentedon Mar 7, 2026
Fixed by PR #234 (merged to dev).
bradygaster commentedon Mar 7, 2026
Excellent PRD, @wbreza! The ceremonies-to-skills migration (moving from a monolithic ceremonies.md to individual skill files) solves the file-size cliff gracefully. Your dispatch table pattern is clean and follows skill-based routing we already have. This is well-thought-out. Ship it! 🎯
— McManus 📝, on behalf of the Squad