skills/spec-driven-development/SKILL.md
Build software via spec-driven development (github/spec-kit). Whenever the user asks for a feature larger than a one-line tweak, scaffold a spec-kit project, capture WHAT + WHY, declare tech stack, break into tasks, then iterate the implementation until tests pass.
npx skillsauth add bolivian-peru/os-moda spec-driven-developmentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You ship software through GitHub's spec-kit (92K stars, MIT, baked into every osModa spawn). The workflow makes you a closed loop: humans declare WHAT and WHY; you generate plan, tasks, code; tests are the inner-loop signal of success; the human is the outer-loop reviewer.
Use spec-kit when:
Skip spec-kit when:
system-monitor, self-healing, app-deployer instead| # | Skill | Purpose |
|---|---|---|
| 1 | speckit-constitution | Project governance: code style, test policy, language choice |
| 2 | speckit-specify | What & why (no tech stack yet). User stories with priorities. |
| 3 | speckit-clarify (optional) | Ask user for gaps before locking the plan |
| 4 | speckit-plan | Tech stack + architecture choices |
| 5 | speckit-tasks | Ordered actionable task list |
| 6 | speckit-analyze (optional) | Cross-artifact consistency check |
| 7 | speckit-checklist (optional) | Quality gates before implement |
| 8 | speckit-implement | Generate code, run tests, iterate until green |
The two MCP tools spec_kit_init + spec_kit_run wrap the spec-kit workflow. Use them — don't shell out to specify directly. Tool calls are audit-ledgered; raw shell isn't.
spec_kit_init({
project_name: "csv-exporter",
integration: "claude",
constitution_seed: "Python 3.12+, pytest for tests, no async, single binary"
})
Returns { project_path: "/workspace/csv-exporter", skills: [9 speckit-*], next_action }. The 9 skills become available as /speckit-* slash commands inside that project.
spec_kit_run({
project_path: "/workspace/csv-exporter",
command: "constitution",
prompt: "Python 3.12+, pytest, no async runtime, all functions have docstrings, max 200 LOC per module"
})
Writes /workspace/csv-exporter/memory/constitution.md. Read the user's .specify/.constitution-seed.md first if it exists — they may have pre-staged principles.
spec_kit_run({
project_path: ".../csv-exporter",
command: "specify",
prompt: "<user's exact feature request, expanded with their goals>"
})
Resist the urge to declare a tech stack here — that's step 4. Specify is purely product-level.
spec_kit_run({ command: "clarify", prompt: "" })
This is interactive in the user-facing flow. From your loop: skip unless specify output mentions ambiguities.
spec_kit_run({
command: "plan",
prompt: "Python 3.12, click for CLI, pandas for parsing, pytest for tests, single-file binary via shiv"
})
Writes /specs/<feature>/plan.md.
spec_kit_run({ command: "tasks", prompt: "" })
Writes /specs/<feature>/tasks.md with numbered ordered tasks.
spec_kit_run({
command: "implement",
prompt: "",
timeout_seconds: 1800 // give it 30 min for non-trivial features
})
This is the long step. The agent reads tasks.md, generates code, runs tests, iterates. Do not interrupt unless the user explicitly aborts. Token usage will be high — that's by design (token-max philosophy).
implement before plan — the implement step reads plan.md for the tech stack. Without it, the agent guesses (often wrong).clarify instead of inventing requirements.constitution for multi-feature projects. It's the cross-feature governance contract. Without it, feature 2 will violate decisions you implicitly made in feature 1.spec_kit_runs in parallel for the same project. They contend for the same .specify/ state. Sequence them.spec_kit_run is hash-chained in agentd's ledger. Querying agentctl events --type spec-kit shows the full project history. Show this to the user when they ask "what did you do?"After spec_kit_init: "Project scaffolded at /workspace/csv-exporter. Now capturing requirements."
After specify: "Spec captured. Read /workspace/csv-exporter/specs/0001-*/spec.md and review the user stories. Want me to clarify anything before locking the plan?"
After plan: "Tech stack locked: Python 3.12 + click + pytest. Tasks coming next."
During implement: report at task boundaries. Don't stream every line of compile output.
After implement (tests green): "Implementation complete. Tests pass. Specs and code are at /workspace/csv-exporter/. Next: review the diff (git diff if you initialized git) or run the binary."
If implement fails after N iterations: stop, report which tests failed, ask the user. Don't burn tokens flailing — they're cheap, but goodwill isn't.
The pre-deployed templates live at /var/lib/osmoda/templates/spec-kit/. Useful when:
spec-template.mdconstitution-template.mdspeckit-* skill output looks wrong — compare against the templateEvery spec_kit_* tool call writes to agentd's hash-chained ledger:
agentctl events --type spec-kit --limit 20
External integrators can query the per-server /api/v1/spec-kit/projects endpoint (see Phase 7-LITE) to discover all spec-kit projects on a given osModa server. This makes the substrate queryable in the YC sense — every action produces an artifact the intelligence at the center of the company can learn from.
osModa's positioning: GitHub gives you the workflow. osModa gives you the workstation. Spec-driven development is the canonical AI-coding-agent workflow as of 2026 — joining it is how we live the "software factories" YC principle structurally, not aspirationally. Use it for non-trivial work; the user is opting into a real software factory each time.
devops
Multi-perspective risk analysis using structured persona debate before deploying changes
development
Manage NixOS packages declaratively. Search, install (via configuration.nix rebuild), remove, rollback, and list generations. Understands the NixOS declarative model.
data-ai
Monitor system health: CPU, memory, disk, network, processes, services, and logs. Present data naturally. Correlate issues across subsystems. Alert on thresholds. Diagnose root causes.
development
Read and edit NixOS module options. Validate before applying. Show diffs before rebuild. Enumerate available options. Understand the NixOS declarative model deeply.