Appearance
Concept Overview
Concept. One-screen mental model. Each section links to its full reference. For hands-on, jump to Quickstart; for facts, see CLI Commands or Configuration.
The unit-types
nubos-pilot operates on three execution nouns plus three capture nouns:
| Unit | Lives in | Produces a commit? |
|---|---|---|
| Milestone | roadmap.yaml entry + .nubos-pilot/milestones/M<NNN>/ | Yes, via task commits + optional milestone-level commit |
| Slice (= execution wave) | .nubos-pilot/milestones/M<NNN>/slices/S<NNN>/ | Emerges from its tasks |
| Task | .nubos-pilot/milestones/M<NNN>/slices/S<NNN>/tasks/T<NNNN>/ | Yes — exactly one per task |
| Todo | .nubos-pilot/todos/pending/*.md | On create |
| Note | .nubos-pilot/notes/*.md (or ~/.nubos-pilot/notes/) | Project-scope yes, global-scope no |
| Thread | .nubos-pilot/threads/*.md | On create only |
Slices ARE waves: all tasks inside one slice run in parallel; slices run serially. Cross-slice dependencies flow forward only.
"Phase" = milestone in slash-command names. See Glossary.
The three orthogonal file-trees
ADR-0005 splits the world into three trees that never overlap at runtime:
- Source — the
tools/nubos-pilot/repo. Contributor-only. - Install-Payload — copied to
.claude/nubos-pilot/(and optionally.opencode/nubos-pilot/) on the user machine. Owned by the user, managed by the installer through a manifest. - Project-State —
.nubos-pilot/next to the user's code. Mutated only through workflows under a single-writer file lock.
You can rm -rf .claude/nubos-pilot to uninstall without losing plans, or rm -rf .nubos-pilot to reset state without uninstalling.
The project + milestone lifecycle
Two nested lifecycles ride the same .nubos-pilot/ tree. The milestone lifecycle handles each piece of work; the project lifecycle handles "the project is done, archive it, start the successor".
Milestone lifecycle:
new-project ──► discuss-phase ──► [research-phase] ──► plan-phase ──► execute-phase ──► verify-work
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
M<NNN>-CONTEXT M<NNN>-RESEARCH S<NNN>-PLAN task commits M<NNN>-VERIFICATION
+T<NNNN>-PLANProject lifecycle (sits above):
idle ──new-project──► active ──new-milestone/execute/verify──► active ──close-project──► completed
│
╲ │
╲ ▼
╲──new-project Phase -1──► archived
(.nubos-pilot/archive/<slug>-<date>/)/np:close-project is the single project-wide aggregate verification: it reads every M<NNN>-VERIFICATION.md and M<NNN>-VALIDATION.md, surfaces blockers, writes PROJECT-SUMMARY.md, and flips roadmap.yaml.project_status to "completed". /np:new-project Phase -1 then offers archive-then-init when a project (active or completed) already exists in the workspace; learnings and solutions carry over by default so the successor inherits prior knowledge. See project lifecycle and ADR-0016.
Atomic commit per task
Every completed task produces exactly one git commit. The format is:
task(M<NNN>-S<NNN>-T<NNNN>): <task title>Examples:
task(M001-S001-T0001): add login form
task(M001-S001-T0002): wire login handler
task(M001-S002-T0001): render profile pageThis is what makes /np:undo, /np:undo-task and /np:reset-slice mechanical git revert operations rather than heuristic search jobs.
Subagents
Workflows are markdown orchestrators. Subagents are markdown role-prompts spawned by workflows. Every agent has a fixed frontmatter contract (D-09):
yaml
---
name: <filename-stem>
description: <one-line summary>
tier: haiku | sonnet | opus
tools: Read, Write, Bash, Grep, …
color: <ui-hint>
---tier is the only model-selection knob. Concrete model IDs and model_profile are forbidden in agent frontmatter; model resolution lives in np-tools.cjs resolve-model, consulted by the workflow at spawn time.
Per-task runtime additions (opt-in surfaces)
Two surfaces extend the Nubosloop without changing its 6-step shape:
- Vector-Memory is an opt-in semantic-recall layer at
.nubos-pilot/memory/. Whenmemory.enabled = true, the Pre-flight cache combines BM25 and vector viaα·BM25 + (1−α)·vector, Researcher and Planner pre-recall prior decisions, and commit-phase writes the just-logged learning back. Dependencies (@huggingface/transformers,usearch) areoptionalDependencies, lazy-loaded (ADR-0014). - Named-Agent-Messaging is an always-on file-based addressed dialogue at
.nubos-pilot/messages/. Critic emits per-findingrequestmessages, Executor and Build-Fixer read the inbox in Round 2 and later, and commit-phase refuses whilependingReplies > 0, then sweeps task messages on success. It adds no new runtime dependency (ADR-0015).
Invariants
The shape of nubos-pilot is fixed by the accepted ADRs (0001 through 0019). The main ones:
- ADR-0001 — no daemon, no background process, no RPC.
- ADR-0002, amended by ADR-0006 and ADR-0014 — runtime dependencies stay scoped:
yaml@^2.8always-on,usearchand@huggingface/transformersasoptionalDependenciesfor the opt-in Vector-Memory layer. - ADR-0003 — six unit-types max.
- ADR-0004 — one commit per unit, no bundling, no splitting.
- ADR-0005 — Source, Install-Payload and Project-State stay disjoint;
.nubos-pilot/memory/and.nubos-pilot/messages/are Project-State sub-trees. - ADR-0007 — codebase documentation layer as shared agent memory under
.nubos-pilot/codebase/. - ADR-0008 — opt-in per-slice git worktree isolation;
.nubos-pilot/worktrees/must be gitignored. - ADR-0009 — no interactive TUI dependency for the dashboard;
/np:dashboardstays a one-shot read-only view. - ADR-0010 — every task runs through the Nubosloop; commit refuses without verify-green, zero findings, and zero
pendingReplies(ADR-0015 Layer-B extension). - ADR-0011 —
k=3Researcher-Schwarm with deterministic Mehrheit / Union / Schnittmenge merge. - ADR-0012 — Completeness Mandate as Pflicht-Boilerplate.
- ADR-0013 — learnings-store versioning and migration policy.
- ADR-0016 — project-level close and archive lifecycle.
- ADR-0017 — strict output-schema enforcement at write-time.
- ADR-0018 — Researcher-Schwarm schema, reconciler and disagreement-gate (amends 0011).
- ADR-0019 — plan-side trust layer: mechanical
PLAN.mdvalidation before promote.
Anything that would break one of these requires a superseding ADR before any code changes.
