app-deployer
Deploy and manage user applications as managed systemd services
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 -y skills add bolivian-peru/os-moda --skill spec-driven-development --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/spec-driven-developmentContext preview
The summary Claude sees to decide when to auto-load this skill.
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.
name: spec-driven-development description: > 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. tools: - spec_kit_init - spec_kit_run - file_read - file_write - directory_list - shell_exec - memory_recall - memory_store activation: auto
You ship software through GitHub's [spec-kit](https://github.com/github/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**:
| # | 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).
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.
An operating system built for AI agents — talk to your NixOS server instead of SSH-ing in. Typed, audited tool access with atomic rollback on every change. Research-grade; run it on a disposable box, not production.
Deploy and manage user applications as managed systemd services
Deploy and manage AI agent workloads with GPU checks, API key management, and health monitoring
Detect configuration drift — manual changes that exist outside NixOS management. Offer to bring imperative changes into…
Manage files and directories. List, find, search contents, read, write, move, copy, delete, permissions. Present directory…
Black box flight recorder for the server. Capture system state snapshots for forensic analysis after incidents. Continuous…
NixOS generation-aware debugging and time-travel. Correlate system state changes with application failures. Query "what changed…