Repository navigation
Spec and Dev Workflow
Mumcord is built spec first. Two project skills for Claude Code drive this, and they live in the repository under .claude/skills/:
| Skill | Purpose | Output |
|---|---|---|
/spec |
Turn an idea or roadmap epic into a written specification through round-based questions |
specs/{nr}-{name}-brainstorming.md, specs/{nr}-{name}-specification.md and a commit |
/dev |
Build a finished specification, verify it in the running client, write a report | Code, specs/{nr}-{name}-tasks.md (task list), specs/{nr}-{name}-implementation.md (report) |
Both skills are started by hand only (they never trigger on their own). The whole project assumes a non-technical product owner: technology choices come with a clear recommendation, explained in plain language. All documents are in English.
- New epic or feature, or an existing spec needs a revision:
/spec. - A specification exists and you want it implemented:
/dev. - Only a brainstorming file exists: finish it with
/specfirst./devrefuses to start without a specification. - Small bug fixes and tweaks do not need either; follow the normal rules in Development.
Invoke:
/spec <epic number or feature name or description>
Examples: /spec 2, /spec "mute sounds per channel". With no argument it lists roadmap epics and existing specs and asks which one you want.
Rules the skill follows:
- One round at a time. It writes one round of questions, tells you it is ready and stops. It never answers for you.
-
Questions live only in the brainstorming file (
specs/{nr}-{name}-brainstorming.md), not in chat. Chat replies stay short. - Append only. Existing questions, answers and notes are never changed. Corrections and follow-ups become new questions in the next round, so the file has no status markers.
- Pure client. It never offers options that need anything on the server side.
- MVP scope. Nice-to-haves are offered only as clearly labelled "later" options.
Each question has an ID like Q2.3 (round 2, question 3; IDs are never reused). Options use checkboxes:
-
◉single choice: exactly one[x]. Move thexto change your answer. -
☑multiple choice: tick as many as you like. - ⭐ marks the recommended option, which is already preselected. If you agree, change nothing.
- Every question ends with a
✍️ Note:line for free text: questions back, edge cases, or "not sure, explain this to me". An explanation request is answered in the next round under "Follow-ups & explanations".
Typical rounds: functionality and scope, UI/UX (with ASCII wireframes), audio and network, technology and platforms, data/state model and open points. Settled topics from earlier specs are not asked again.
You edit the file directly (checkboxes and notes), save it, and tell Claude Code the round is answered. The next round then starts.
When the last round is answered, the skill appends a ## Closing note and writes specs/{nr}-{name}-specification.md from the checked boxes and notes (a later answer overrides an earlier one). The structure is fixed:
- Goal and context, 2. Scope (in scope / out of scope), 3. Roles and permissions, 4. Functional requirements with IDs
FR-{N}.{n}, 5. UI and UX, 6. Audio and network, 7. Data and state model, 8. Technology and architecture, 9. Non-functional requirements, 10. Build, packaging and release, 11. Acceptance criteriaAC-{N}.{n}, 12. Decision log (referencing question IDs likeQ2.3), 13. Open points and risks, 14. Impact on the roadmap.
Each acceptance criterion is a concrete flow (starting point, action, expected result) that can be verified in the running client against a local test server. For example, AC-1.5 in the Epic 1 spec: connect to a test server with a self-signed certificate, accept the fingerprint, then replace the server certificate and check that the reconnect is blocked with a warning.
Finally the skill commits the brainstorming and specification files (only those, never git add -A) with a message like docs(spec): Epic 2 - channel tree & chat specification, and does not push. If an existing spec needs changes, /spec appends an Addendum round and later makes a new commit.
Invoke:
/dev <spec number | name | path> [--no-team]
Examples: /dev 1, /dev 01-foundation, /dev 1 --no-team. With no identifier it lists the specs and asks. If specs/{nr}-{name}-implementation.md already exists, it resumes from the existing report and task list.
| Phase | What happens |
|---|---|
| A. Analysis and breakdown | Spec, CLAUDE.md, earlier specs and code are read. Blocking questions go to you in plain language, with a recommended answer. A task list is created with dependencies, file ownership and a simple or complex rating per task. |
| B. Build | Tasks are implemented in dependency order, with tests alongside. |
| C. Verification | Tests, type checks and linters pass, and every AC-... is checked in the running client against a local Mumble test server (plus a second client or bot where needed). Failures become fix tasks, then verification runs again. |
| D. Wrap-up | The implementation report is written and you get a short final message. |
A task is complex when it touches more than about three files, adds a module, data format or dependency, touches the audio pipeline or real-time behaviour, the protocol, TLS, security or privacy, platform-specific code, packaging or CI, or needs an architecture decision. Complex tasks get a short written plan before any code is touched.
All work lives in a task list: nothing is built without a task, a task is completed only when done and verified, and newly found work becomes a new task. If Claude Code's task tools are unavailable, the list is kept in specs/{nr}-{name}-tasks.md: one table row per task with ID, title, status (open, in progress, done, blocked), owner, dependencies, complexity and covered AC-... and files. See specs/01-foundation-tasks.md for a real example. Only the lead edits this file.
The main session becomes a team lead that only coordinates. It delegates reading, coding, running tests and writing the report, and keeps its own context free.
- One task, one fresh agent. Each task (analysis, build step, fix, verification, report) goes to its own newly started agent with a short, self-contained prompt. The agent sends one final report of at most 10 lines and then ends. Follow-up work goes to a new agent. Agents never talk to each other; everything goes through the lead.
- Parallel where safe. Independent tasks run at the same time, but no two running agents edit the same files, and parallel QA agents use separate test-server ports.
-
Plan approval for complex tasks. The agent explores read-only, sends a plan (15 lines or fewer), and edits files only after the lead replies
APPROVED. -
Independent verification. The agent that verifies a task is never the one that built it. It reports per criterion:
AC-1.3passed, needs a manual listening check, or failed with a symptom. - Smallest suitable model per agent to save cost.
- Team mode needs agent teams enabled (
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1). Without it, use--no-team.
--no-team runs the same phases in one session. Broad searches and long test runs still go to subagents, and verification prefers a subagent that did not write the code.
"Done" means verified in the running client, not only green tests. Use the local servers from testenv/ (Development), the mumcord-bot for a second participant, netsim for bad networks, and the E2E suite (Testing). Never use public or third-party servers. Audio that cannot be judged automatically (how it sounds) is checked as far as possible by levels, packets and latency numbers and then flagged for a manual listening check.
A fresh agent writes specs/{nr}-{name}-implementation.md: result in one sentence, an acceptance-criteria table (passed, listening check pending, or failed, with evidence), "try it yourself" steps, completed tasks, deviations from the spec, open points and technical notes. Re-runs append a Run {n} section instead of rewriting.
-
/devnever commits, pushes, releases, signs with real keys or touches public servers without your explicit approval. At the end it asks whether to commit. - Commits are small and focused Conventional Commits, staged by file (never
git add -A), on a branch rather than the default branch. - Secrets never go into the repository.
- No AI attribution in commit messages or pull requests.
- You want multi-server read-along. Run
/spec 2. - Claude Code reads the roadmap and earlier specs, creates
specs/02-multi-server-read-along-brainstorming.mdwith round 1 (functionality and scope) and stops. - You open the file, accept the preselected ⭐ options, change one checkbox, and write a
✍️ Note:asking for an explanation of one term. You tell Claude Code the round is answered. - Round 2 starts with a "Follow-ups & explanations" section answering your note. You repeat until the last round.
- The skill writes
specs/02-multi-server-read-along-specification.mdwithFR-2.xrequirements andAC-2.xcriteria, and commits both files. - Run
/dev 2. The lead delegates analysis, asks you any blocking questions, and creates tasks. - Fresh agents build the tasks (complex ones wait for plan approval), then separate QA agents check every
AC-2.xagainst the local test servers. - A report agent writes
specs/02-multi-server-read-along-implementation.md. You get a pass/fail list per criterion, steps to try it yourself, and the question whether to commit. - You review, then ask for commits. Push and pull requests happen only on your request.
Mumcord is licensed under the AGPL-3.0 (versions up to 0.1.1: MIT) · Source code · Website · Website source
Mumcord
Contributing