@noir-ai/skills 1.9.3 → 1.9.4-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/builtin/noir-backend/SKILL.md +32 -4
  2. package/builtin/noir-backend/references/backend-patterns.md +55 -0
  3. package/builtin/noir-brainstorming/SKILL.md +49 -0
  4. package/builtin/noir-checkpoint/SKILL.md +30 -12
  5. package/builtin/noir-context/SKILL.md +29 -10
  6. package/builtin/noir-doctor/SKILL.md +23 -4
  7. package/builtin/noir-executing-plans/SKILL.md +45 -0
  8. package/builtin/noir-exploring/SKILL.md +37 -0
  9. package/builtin/noir-frontend/SKILL.md +32 -4
  10. package/builtin/noir-frontend/references/ui-patterns.md +48 -0
  11. package/builtin/noir-parallel/SKILL.md +24 -35
  12. package/builtin/noir-planning/SKILL.md +46 -0
  13. package/builtin/noir-prd/SKILL.md +38 -27
  14. package/builtin/noir-readme/SKILL.md +25 -4
  15. package/builtin/noir-recall/SKILL.md +31 -12
  16. package/builtin/noir-remember/SKILL.md +31 -17
  17. package/builtin/noir-rules/SKILL.md +28 -27
  18. package/builtin/noir-security/SKILL.md +33 -4
  19. package/builtin/noir-security/references/security-checklist.md +49 -0
  20. package/builtin/noir-shipping/SKILL.md +34 -0
  21. package/builtin/noir-spec/SKILL.md +48 -14
  22. package/builtin/noir-spec/references/spec-template.md +43 -0
  23. package/builtin/noir-subagent/SKILL.md +29 -30
  24. package/builtin/noir-subagent/references/dispatch-guide.md +50 -0
  25. package/builtin/noir-sync/SKILL.md +39 -12
  26. package/builtin/noir-systematic-debugging/SKILL.md +71 -0
  27. package/builtin/noir-systematic-debugging/references/tracing.md +51 -0
  28. package/builtin/noir-test-driven-development/SKILL.md +73 -0
  29. package/builtin/noir-test-driven-development/references/tdd-worked-example.md +65 -0
  30. package/builtin/noir-verifying/SKILL.md +40 -0
  31. package/builtin/noir-verifying/references/verification-checklist.md +29 -0
  32. package/builtin/noir-worktree/SKILL.md +23 -4
  33. package/builtin/noir-wrap/SKILL.md +29 -13
  34. package/builtin/noir-writing-skills/SKILL.md +42 -0
  35. package/dist/index.d.ts +159 -9
  36. package/dist/index.js +240 -7
  37. package/dist/index.js.map +1 -1
  38. package/evals/noir-systematic-debugging/evals.json +25 -0
  39. package/evals/noir-test-driven-development/evals.json +25 -0
  40. package/integrations/noir-clickup/SKILL.md +319 -71
  41. package/package.json +3 -2
  42. package/builtin/noir-brainstorm/SKILL.md +0 -17
  43. package/builtin/noir-branch/SKILL.md +0 -12
  44. package/builtin/noir-clarify/SKILL.md +0 -17
  45. package/builtin/noir-commit/SKILL.md +0 -12
  46. package/builtin/noir-debug/SKILL.md +0 -38
  47. package/builtin/noir-document/SKILL.md +0 -17
  48. package/builtin/noir-execute/SKILL.md +0 -17
  49. package/builtin/noir-explore/SKILL.md +0 -16
  50. package/builtin/noir-intake/SKILL.md +0 -17
  51. package/builtin/noir-plan/SKILL.md +0 -20
  52. package/builtin/noir-pr/SKILL.md +0 -12
  53. package/builtin/noir-review/SKILL.md +0 -28
  54. package/builtin/noir-skill-author/SKILL.md +0 -12
  55. package/builtin/noir-tdd/SKILL.md +0 -49
  56. package/builtin/noir-test/SKILL.md +0 -12
  57. package/builtin/noir-verify/SKILL.md +0 -17
@@ -1,12 +1,40 @@
1
1
  ---
2
2
  name: noir-backend
3
- description: Use when building APIs, database schemas, or server logic — for robust, scalable backend patterns.
3
+ description: Use when building backend code — APIs, database schemas, server logic, and scalable backend patterns. Do NOT use for pure frontend work.
4
+ metadata:
5
+ category: domain
6
+ version: 1.0.0
7
+ license: MIT
8
+ compatibility: claude · agents-md · gemini · cursor · opencode
9
+ references:
10
+ - backend-patterns.md
4
11
  ---
5
12
 
6
13
  # noir-backend
7
14
 
8
- > **Stub:** this skill ships as a valid, loadable placeholder in S5; its full playbook is deepened in a later slice.
15
+ Backend architecture and implementation — APIs, databases, services, and server patterns.
9
16
 
10
- **When to use:** you are building an API, a database schema, or server-side logic and want patterns that age well.
17
+ ## When to use
11
18
 
12
- **For now:** model the data and the errors before the endpoints, validate at the boundary, and keep side effects out of pure logic.
19
+ - Building or modifying backend code.
20
+ - The user says "create an API", "add an endpoint", "design a schema", "set up a service."
21
+ - A service boundary or data flow is being defined.
22
+
23
+ ## Procedure
24
+
25
+ 1. **Design the contract first.** What does the API accept and return? What's the schema? The contract is the interface — implementers on both sides read it.
26
+ 2. **One endpoint = one responsibility.** Small, focused handlers are testable; monolithic "do-everything" endpoints are not.
27
+ 3. **Error handling at every layer.** API → validation → service → database. Each layer reports a structured error; the client never sees a raw stack trace.
28
+ 4. **Database migrations.** Schema changes go through migration files — never alter a table by hand. Rollback must be possible.
29
+ 5. **Security.** Auth on every endpoint that touches data; rate-limit write endpoints; validate input at the boundary.
30
+
31
+ ## Reference
32
+
33
+ For contract-first, layered error handling, migrations, and resilience patterns, see [backend-patterns.md](references/backend-patterns.md).
34
+
35
+ ## When done → next skill
36
+
37
+ → `noir-test-driven-development` for the test suite, then `noir-verifying`.
38
+
39
+ ## Notes
40
+ - This skill is a playbook — the host decides which tools to use. On Claude Code, prefer `AskUserQuestion` for choices; on other hosts, ask in text.
@@ -0,0 +1,55 @@
1
+ # Backend patterns — contract-first, layered, resilient
2
+
3
+ Deep reference for `noir-backend`. Practical patterns for APIs, schemas, and server logic that scale without collapsing.
4
+
5
+ ## Contract-first
6
+
7
+ The API contract is the interface BOTH sides read. Before code:
8
+
9
+ 1. **Define the endpoint** — method, path, request body, response body, error shapes.
10
+ 2. **Validate the schema** — the request is validated at the boundary (a schema/Zod/DTO), not in the handler.
11
+ 3. **Document it** — the contract (even a short markdown or a type) is the source both sides build against.
12
+
13
+ **One endpoint = one responsibility.** A focused handler is testable; a "do everything" endpoint is not. If an endpoint has a second verb's worth of behavior, split it.
14
+
15
+ ## Layered error handling
16
+
17
+ Every layer reports a STRUCTURED error; the client never sees a raw stack trace:
18
+
19
+ ```
20
+ API → ValidationError (400, field)
21
+ → AuthError (401/403)
22
+ → NotFoundError (404)
23
+ → RateLimitError (429)
24
+ → ConflictError (409)
25
+ → InternalError (500, no internals leaked)
26
+ ```
27
+
28
+ - Each layer maps its failures to a typed error with a stable code + human message.
29
+ - The client gets `{error: {code, message}}`, never a stack trace or internal path.
30
+ - Log the full error server-side; return only the safe surface to the client.
31
+
32
+ ## Data & migrations
33
+
34
+ - **Schema changes go through migrations** — never alter a table by hand. Every migration is forward + rollback.
35
+ - **Indexes** — add indexes for the query patterns the API actually uses, not speculative ones.
36
+ - **Transactions** — multi-step writes (create + link + notify) run in a transaction; a failure mid-way rolls back cleanly.
37
+
38
+ ## Security (baseline)
39
+
40
+ - **Auth on every data-touching endpoint** — the gate is before the data access, with no "forgot the return."
41
+ - **Validate at the boundary** — reject malformed input before it reaches service logic.
42
+ - **Rate-limit write endpoints** — public creates/updates get a limit + 429 backoff.
43
+ - **Secrets** — tokens via env/config, never committed. Credentials never logged.
44
+
45
+ ## Resilience
46
+
47
+ - **Idempotency** — writes accept an idempotency key so a retried request doesn't double-create.
48
+ - **Timeouts + retries** — outbound calls have a timeout and a bounded retry (never infinite).
49
+ - **Graceful degradation** — a downstream outage degrades (cached fallback, clear error), never crashes the process.
50
+ - **Observability** — a request id threads through the layers so a failure is traceable; log the request id with each error.
51
+
52
+ ## Good / bad
53
+
54
+ Good: a validated, single-purpose endpoint that returns typed errors, uses migrations, and has a rate limit.
55
+ Bad: an unvalidated catch-all endpoint that throws a raw error to the client, mutates the DB by hand, and has no auth check before the data leak.
@@ -0,0 +1,49 @@
1
+ ---
2
+ name: noir-brainstorming
3
+ description: Use when starting a new feature or task from a raw idea, ticket, or issue — explore intent, requirements, and design space before implementation. Do NOT use for single-file edits, typo fixes, or pure refactors.
4
+ argument-hint: <describe the feature or idea to explore>
5
+ metadata:
6
+ category: discovery
7
+ version: 1.0.0
8
+ license: MIT
9
+ compatibility: claude · agents-md · gemini · cursor · opencode
10
+ ---
11
+
12
+ # noir-brainstorming
13
+
14
+ Turn a raw idea, ticket, or ambiguous ask into a shared, written understanding of intent — before any plan or code. The goal is a clear problem statement plus the open questions and options, not a shortcut to the first plausible build. This skill replaces the old `noir-intake`, `noir-clarify`, and `noir-brainstorm` skills — one "gather requirements" surface.
15
+
16
+ **Invoked with:** `$ARGUMENTS` (optional). If the user passed a feature description, treat it as the initial statement of intent and restate it as the goal. If empty, ask what they want to explore first.
17
+
18
+ ## When to use
19
+
20
+ - A new feature, task, or epic starts from a raw idea, ticket, or issue.
21
+ - The user says "let's build X", "I have an idea", "we need a feature", or pastes a vague request.
22
+ - An idea or spec has ambiguities that should be surfaced before committing to an approach.
23
+ - **Especially when:** the request is one sentence, the requirements are fuzzy, or the user is unsure what they want.
24
+ - **Do NOT use:** for a single-line typo fix, a rename, or a mechanical refactor with no design decision.
25
+
26
+ ## Procedure
27
+
28
+ 1. **Restate the goal.** In one sentence, say what the user is trying to achieve and why. If `$ARGUMENTS` was provided, start from it.
29
+ 2. **Surface requirements with a structured prompt.** Ask the clarifying questions you genuinely need — but batch them, don't pepper one at a time. On Claude Code, use the `AskUserQuestion` tool (question + up to 4 options) so the user picks instead of types; on hosts without it (Gemini/Cursor/Copilot), ask in plain text. Cover scope, constraints, users, non-goals, and any acceptance you can see.
30
+ 3. **Offer 2-3 distinct approaches.** Present options with explicit trade-offs. Do not collapse to a single path prematurely; the user chooses.
31
+ 4. **Record the decision.** Capture the chosen direction + open questions as a spec stub under `.noir/specs/` if the project is Noir-initialized. This is observable, not rhetorical — the SDD engine records the brainstorm checkpoint.
32
+ 5. **Hand off.** Point to `noir-spec` (formalize) → then `noir-planning` (break down).
33
+
34
+ ## Verification
35
+
36
+ - [ ] The goal is restated in one sentence and the user confirmed it.
37
+ - [ ] Open questions are surfaced; ambiguities are resolved or explicitly deferred.
38
+ - [ ] 2-3 options with trade-offs were presented (not one path forced).
39
+ - [ ] The decision + open questions are recorded (spec stub or note).
40
+
41
+ ## Notes
42
+
43
+ - Discipline is observable: the SDD engine's gates record that brainstorming happened. This skill is the playbook.
44
+ - For a genuinely trivial request (a one-liner with a clear answer), say so and skip the full ritual — brainstorming is for creative or ambiguous work.
45
+ - If the user has a strong opinion, follow it; your job is to surface the space, not to win an argument.
46
+
47
+ ## When done → next skill
48
+
49
+ → `noir-spec` to formalize the idea into a spec → `noir-planning` to break it into steps. Or, if you'd rather keep exploring a different direction, say so — I'll pivot.
@@ -1,18 +1,36 @@
1
1
  ---
2
2
  name: noir-checkpoint
3
- description: Use mid-session — to save in-flight state before a context-risky moment or interruption, so work survives.
3
+ description: Use when saving mid-session state before a context-risky moment or interruption — preserve the current task, progress, and open decisions. Use when the user says "save my place" or "checkpoint this". Do NOT use to close a session — use noir-wrap.
4
+ metadata:
5
+ category: discovery
6
+ version: 1.0.0
7
+ license: MIT
8
+ compatibility: claude · agents-md · gemini · cursor · opencode
4
9
  ---
5
10
 
6
- Save in-flight state so work survives a context-risky moment (compaction, handoff, or interruption). Persists the task's phase, progress, and next step into `.noir/` and records the checkpoint observably via `noir.checkpoint`.
11
+ # noir-checkpoint
12
+
13
+ Save in-flight state so work survives an interruption, context-loss, or session restart. A checkpoint is a snapshot, not a close.
14
+
15
+ ## When to use
16
+
17
+ - Mid-session, before a context-risky moment (long pause, context compaction, or interruption).
18
+ - The user says "save my place", "checkpoint this."
19
+ - **Do NOT use:** to close a session — use `noir-wrap`.
7
20
 
8
21
  ## Procedure
9
- 1. **Find the task.** Locate the active task stub under `.noir/tasks/<id>.md` (the engine's persisted state). If none, ask the user which task to checkpoint — or note "no active task — nothing to checkpoint" and stop.
10
- 2. **Capture state.** Update `.noir/tasks/<id>.md`: set the current phase, a status line (e.g. `checkpointed @ phase N`), an `updated:` timestamp, and fill *done so far* + *next steps* + any blockers. Append a one-line history entry so a fresh session can pick up cleanly.
11
- 3. **Record the checkpoint.** Call `noir.checkpoint` so the SDD engine records the save observably; the task stub is the source of truth, the checkpoint is the durable signal that survives context loss.
12
- 4. **Memory (best-effort).** Save the checkpoint to Noir memory (phase + key decisions + next step) if the host's memory tooling is available. Skip cleanly if not — `.noir/tasks/<id>.md` remains the durable record either way.
13
- 5. **Uncommitted work.** Note any uncommitted changes (`git status --porcelain`) in the checkpoint and advise the user — commit or stash before truly leaving, or the on-disk state and the working tree will diverge.
14
- 6. **Report.** State the task id, the phase, and the next step. Point to the SDD lifecycle to resume — do not invent a slash command.
15
-
16
- ## Fallbacks
17
- - No active task → say so; nothing to checkpoint.
18
- - `noir.checkpoint` or Noir memory unavailable → skip silently; the task stub is the source of truth and the engine degrades read-only rather than failing.
22
+
23
+ 1. **Record open task state.** Which task is active, what phase it's in, what files are touched, what tests are in-flight. Use `noir task save` (or the SDD engine's checkpoint tooling).
24
+ 2. **Note open decisions.** Anything the user and agent agreed on that hasn't been committed.
25
+ 3. **Mark the workspace.** Dirty files, branch state, any uncommitted changes. The next session needs to know.
26
+ 4. **Save memory.** Key insights from this session segment.
27
+ 5. **Print the checkpoint summary.** Brief — next session reads this and resumes.
28
+
29
+ ## Notes
30
+
31
+ - Checkpoints are temporary scaffolding, not permanent records. The engine's task state is the durable truth.
32
+ - You can checkpoint multiple times in a session — each one replaces the last.
33
+
34
+ ## When done → next skill
35
+
36
+ → The session can pause safely. When you return, `noir-sync` will find the checkpoint. Or continue working.
@@ -1,18 +1,37 @@
1
1
  ---
2
2
  name: noir-context
3
- description: Use when a question spans more files than fit in context — to seed the repo into a hybrid index once, then query it for windowed snippets instead of reading whole files.
3
+ description: Use when a question spans more files than fit in context — query Noir's hybrid retrieval index (BM25 + kNN) for windowed snippets. Use when the user says "index this", "search the codebase", or "find where X is used". Do NOT use for a single-file lookup.
4
+ metadata:
5
+ category: context
6
+ version: 1.0.0
7
+ license: MIT
8
+ compatibility: claude · agents-md · gemini · cursor · opencode
4
9
  ---
5
10
 
6
- Ground a question in the whole repo without pulling every file into context. Seed the index once with `context_index`, then query it with `context_search` and reason over the returned windowed snippets. Snippets are extracted around each match and never truncated, so the surrounding line context is intact without a whole-file read.
11
+ # noir-context
12
+
13
+ Hybrid retrieval for large codebases — index once, query many times. The host gets windowed snippets (BM25 + kNN → RRF) instead of re-reading entire files. Local 384-dim embeddings by default, zero API key.
14
+
15
+ ## When to use
16
+
17
+ - A question spans more files than fit in context.
18
+ - The user says "search the codebase", "find where X is", "index the repo."
19
+ - You need cross-referenced snippets from many files for a single answer.
20
+ - **Do NOT use:** for a single-file read — just Read it.
7
21
 
8
22
  ## Procedure
9
- 1. **Seed the index.** Call `context_index { paths: ["src", "docs"] }` with the trees you need grounded, or omit `paths` to index the project root. Indexing is incremental by SHA-256 content-hash — unchanged files are skipped, so re-call it freely after edits. It must run once before `context_search` returns anything useful.
10
- 2. **Query, do not dump.** Call `context_search { query, budgetTokens }` with a natural-language or identifier query (e.g. `"ContextEngine"` or `"where are errors thrown"`). Set `budgetTokens` to what you can spare (default 4096); optionally pass `source` to scope both legs to one bucket such as `"docs"` or `"codebase"`. You get ranked hits — path, a windowed snippet, a score — fused from BM25 and vector similarity, not raw file dumps.
11
- 3. **Reason over the snippets.** Read the returned windows and decide; open a file by path only when a snippet implicates a change. Everything else stays a citation.
12
- 4. **Re-seed when stale.** After non-trivial edits, re-run `context_index` so the index reflects current content. The content-hash skip keeps it cheap; staleness is the only way a snippet drifts from the code on disk.
23
+
24
+ 1. **Index the repo.** `noir context index` (one-time; `--force` to reindex). This seeds BM25 + embeddings into the store.
25
+ 2. **Query with specific terms.** `noir context search "<query>"` returns windowed snippets around matches. Use terms you'd grep for — function names, error messages, patterns.
26
+ 3. **Consume the snippets.** The output is the evidence. Don't re-read the whole file unless a snippet implicates it.
27
+ 4. **Repeat as needed.** New queries are cheap — the index is persistent.
13
28
 
14
29
  ## Notes
15
- - **Degraded is honest, not broken.** With no embedder configured (or the local model failed to load), `context_search` still works in BM25-only mode and returns `degraded: true, mode: "bm25-only"` — lexical recall with no semantic leg. A read-only store (daemon down) still serves `context_search` and `context_status`; only `context_index` is fenced off, returning a clear `ok: false, degraded: true` envelope rather than failing mid-write.
16
- - **Check health first when unsure.** `context_status` reports `docCount`, `vecCount`, `indexedFiles`, the active embedder (`kind` / `model` / `dim`), and the persistent `degraded` flag — read it once to know whether the index is populated and whether to expect vectors.
17
- - **Tools absent?** The three tools are registered only when the daemon was started with context enabled (the `ctx.context` service). If they are missing, run `noir init` and start the daemon before reaching for this skill.
18
- - Keep raw search output out of context where the tool already did the windowing; reach for whole-file reads only for the few files you will actually edit (see `noir-explore`). This skill grounds a query in indexed content — it does not review or refactor what it finds; hand to `noir-review` for judgment.
30
+
31
+ - The index is a cache, not a replacement for reading files. Snippets show WHERE; reading shows CONTEXT.
32
+ - `noir context index --force` rebuilds from scratch (good after large changes).
33
+ - Zero API key required for local embeddings; remote/Ollama embedders are opt-in.
34
+
35
+ ## When done → next skill
36
+
37
+ The snippets should answer your question. If not, try a more specific query, or read the implicated file directly.
@@ -1,12 +1,31 @@
1
1
  ---
2
2
  name: noir-doctor
3
- description: Use when diagnosing environment or project health — deps, config, runtime, toolchain.
3
+ description: Use when diagnosing environment or project health — dependencies, config, runtime, toolchain, and Noir store integrity. Do NOT use for routine status checks — use noir-sync or noir-checkpoint.
4
+ metadata:
5
+ category: meta
6
+ version: 1.0.0
7
+ license: MIT
8
+ compatibility: claude · agents-md · gemini · cursor · opencode
4
9
  ---
5
10
 
6
11
  # noir-doctor
7
12
 
8
- > **Stub:** this skill ships as a valid, loadable placeholder in S5; its full playbook is deepened in a later slice.
9
13
 
10
- **When to use:** something is off in the environment or project and you want a structured health check.
14
+ ## When to use
15
+ - When the user triggers this skill.
11
16
 
12
- **For now:** check installed deps and versions against manifests, inspect config files, confirm the runtime and toolchain resolve, and report concrete mismatches — the `noir doctor` CLI command is the entry point.
17
+ Check what's wrong. Run `noir doctor` and read every row — the command groups findings by category (install, config, store, daemon) and reports pass/warn/fail per check. Advisory, not mandatory — even a red check doesn't block.
18
+
19
+ ## Procedure
20
+
21
+ 1. **Run `noir doctor`.** In-process — no daemon needed. Read the full output on stderr.
22
+ 2. **Surface actionable issues.** A failed check should tell you what to fix. The install row checks Node version + managed runtime (if installed via native installer).
23
+ 3. **Fix one at a time.** Don't batch fixes — each fix deserves its own verification that the underlying issue resolved.
24
+ 4. **Re-run `noir doctor` to confirm green.**
25
+
26
+ ## When done → next skill
27
+
28
+ → The relevant skill for whatever was broken. Or continue working with a green doctor.
29
+
30
+ ## Notes
31
+ - This skill is a playbook — the host decides which tools to use. On Claude Code, prefer `AskUserQuestion` for choices; on other hosts, ask in text.
@@ -0,0 +1,45 @@
1
+ ---
2
+ name: noir-executing-plans
3
+ description: Use when you have a written implementation plan and are ready to code — drive it task by task with a disciplined implement-test-commit loop. Use when the user says "implement this" or "start building". Do NOT use when there is no plan; run noir-planning first.
4
+ metadata:
5
+ category: execute
6
+ version: 1.0.0
7
+ license: MIT
8
+ compatibility: claude · agents-md · gemini · cursor · opencode
9
+ ---
10
+
11
+ # noir-executing-plans
12
+
13
+ Drive a written implementation plan task by task, in order. Each task: implement → test → commit. One task at a time; each commit is a checkpoint.
14
+
15
+ ## When to use
16
+
17
+ - A plan is written and it's time to code.
18
+ - The user says "implement this", "start coding", "build it", or points at a plan file.
19
+ - The plan has ordered tasks — you're executing them sequentially.
20
+ - **Do NOT use:** for exploratory coding without a plan; use `noir-brainstorming` first. For independent tasks that can fan out concurrently, use `noir-parallel`. For a single subagent per task with review between, use `noir-subagent`.
21
+
22
+ ## Procedure
23
+
24
+ 1. **Load the plan.** Read the plan file. Confirm the task order. If a task depends on an earlier one, start there.
25
+ 2. **One task at a time.** Pick the next pending task. State which task you're executing. Do not bundle multiple tasks into one commit.
26
+ 3. **RED → GREEN → COMMIT.** Write the failing test first (see `noir-test-driven-development`), implement the minimal code to pass, verify the test goes green and no regression, then commit with a conventional-commit message. Repeat for the task's subtasks if any.
27
+ 4. **Mark the task done.** Update the plan's checkbox `- [x]` and move to the next task. The engine's execute gate records the checkpoint observably.
28
+ 5. **When the plan is done:** all tasks ticked, all tests green, the implementation matches the spec → hand off.
29
+
30
+ ## Verification
31
+
32
+ - [ ] Every task in the plan is implemented, tested, and committed.
33
+ - [ ] No regression in the existing test suite.
34
+ - [ ] The implementation fulfills every acceptance criterion from the spec.
35
+ - [ ] No "while I'm here" refactors crept into task commits (each commit is one task).
36
+
37
+ ## Notes
38
+
39
+ - Don't skip tests because "the change is simple." A simple change that breaks silently is the most expensive bug.
40
+ - If a task reveals that the plan is wrong, stop and update the plan — `noir-planning` for the revised scope, then resume.
41
+ - Commit per task, not per file. A task = one logical change = one commit.
42
+
43
+ ## When done → next skill
44
+
45
+ → `noir-verifying` to prove the work is complete. Or is there another task you'd like to handle?
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: noir-exploring
3
+ description: Use when answering means sweeping many files, directories, or naming conventions — fan out read-only search and return the conclusion, not the dumps. Use when the user says "find all places where X", "what uses Y", or "audit the codebase for Z". Do NOT use for a targeted single-file read.
4
+ metadata:
5
+ category: discovery
6
+ version: 1.0.0
7
+ license: MIT
8
+ compatibility: claude · agents-md · gemini · cursor · opencode
9
+ ---
10
+
11
+ # noir-exploring
12
+
13
+ Fan-out search for broad questions. One exploration = pattern → found → conclusion. The host reads excerpts, not whole files. You report the conclusion, not the dumps.
14
+
15
+ ## When to use
16
+
17
+ - A question spans dozens of files.
18
+ - The user says "where is X used", "find all Y", "audit the codebase for Z."
19
+ - A naming convention, import pattern, or API usage needs a broad sweep.
20
+ - **Do NOT use:** for a single file lookup — just use Read/Grep directly.
21
+
22
+ ## Procedure
23
+
24
+ 1. **Define the search.** What pattern are you looking for? Name it explicitly so the search is targeted.
25
+ 2. **Fan out.** On Claude Code, use `Grep` and `Glob` to find matches across the codebase. On other hosts, use the equivalent search tools. Search by file name, by content, or by dependency — pick the right tool per pass.
26
+ 3. **Synthesize, don't dump.** Read the relevant excerpts, form a conclusion, and report it. The host should never see raw 700-line grep output; they see "3 locations found, pattern is X."
27
+ 4. **Hand off.** If the exploration found something worth acting on, point to the right skill.
28
+
29
+ ## Verification
30
+
31
+ - [ ] Search was broad enough to cover the question (not just one dir).
32
+ - [ ] Conclusion is stated — not a file dump.
33
+ - [ ] Edge cases were checked (variants of the pattern, sibling dirs).
34
+
35
+ ## When done → next skill
36
+
37
+ → `noir-systematic-debugging` if this was for a bug hunt, or the skill that matches the resulting task.
@@ -1,12 +1,40 @@
1
1
  ---
2
2
  name: noir-frontend
3
- description: Use when building or reshaping UI — for distinctive visual design, typography, and component patterns.
3
+ description: Use when building or modifying frontend code — distinctive visual design, typography, component patterns, and responsive layouts. Do NOT use for pure backend logic.
4
+ metadata:
5
+ category: domain
6
+ version: 1.0.0
7
+ license: MIT
8
+ compatibility: claude · agents-md · gemini · cursor · opencode
9
+ references:
10
+ - ui-patterns.md
4
11
  ---
5
12
 
6
13
  # noir-frontend
7
14
 
8
- > **Stub:** this skill ships as a valid, loadable placeholder in S5; its full playbook is deepened in a later slice.
15
+ Frontend design and implementation guide — visual design, component architecture, responsive patterns, and interaction behavior. Use when the user is building or reshaping UI.
9
16
 
10
- **When to use:** you are building or reshaping a UI and want intentional, distinctive design rather than templated defaults.
17
+ ## When to use
11
18
 
12
- **For now:** choose typography and a restrained palette deliberately, compose from primitives over chasing components, and let hierarchy and spacing carry the design.
19
+ - Building or modifying a UI component, page, or layout.
20
+ - The user says "design this", "style this", "make it look good."
21
+ - A component needs consistent visual language (colors, spacing, typography, dark/light theme).
22
+
23
+ ## Procedure
24
+
25
+ 1. **Establish the design system.** Colors, spacing, typography, breakpoints — before any component. If the project has a design system (Tailwind config, theme tokens, CSS variables), use it; if not, suggest one.
26
+ 2. **Component-first thinking.** Break the UI into independent, composable components. One component = one file = one responsibility.
27
+ 3. **Responsive by default.** Start with mobile layout, add breakpoints for wider viewports. `max-width: 100%` on images; horizontal-scroll containers for wide tables.
28
+ 4. **Accessibility.** Semantic HTML, keyboard navigation, color contrast, screen-reader labels. An inaccessible UI is an unfinished UI.
29
+ 5. **On Claude Code**, use `AskUserQuestion` for design choices (color palette, layout preference). On other hosts, ask plainly.
30
+
31
+ ## Reference
32
+
33
+ For design tokens, component structure, responsive, and accessibility patterns, see [ui-patterns.md](references/ui-patterns.md).
34
+
35
+ ## When done → next skill
36
+
37
+ → `noir-verifying` to confirm the UI meets the spec. Or `noir-test-driven-development` to add tests.
38
+
39
+ ## Notes
40
+ - This skill is a playbook — the host decides which tools to use. On Claude Code, prefer `AskUserQuestion` for choices; on other hosts, ask in text.
@@ -0,0 +1,48 @@
1
+ # UI patterns — design system, components, accessibility
2
+
3
+ Deep reference for `noir-frontend`. Practical patterns for building and reshaping UI that reads as one coherent system.
4
+
5
+ ## Establish the design tokens first
6
+
7
+ A UI is coherent when it draws from ONE set of tokens. Before styling a component, confirm or propose:
8
+
9
+ - **Color** — a small palette: background, surface, text-primary, text-muted, accent, error. Light + dark variants. Never 20 ad-hoc hex values.
10
+ - **Spacing** — a scale (e.g. 4/8/12/16/24/32). Use the scale, not arbitrary pixels.
11
+ - **Typography** — font stack, size scale (e.g. xs/sm/base/lg/xl/2xl), line-height, weight for headings vs body.
12
+ - **Radius/shadow** — a consistent corner radius and elevation system.
13
+ - **Breakpoints** — the widths where layout changes (e.g. 640/768/1024/1280).
14
+
15
+ Where the project already has tokens (Tailwind config, CSS variables, a theme file), USE THEM — do not invent a parallel system.
16
+
17
+ ## Component-first structure
18
+
19
+ - One component = one file = one responsibility. A `Button`, a `Card`, a `TableRow` — each standalone.
20
+ - Components are composable: small pieces assemble into screens.
21
+ - Props/inputs are explicit; a component never reaches into global state it wasn't given.
22
+
23
+ ## Responsive by default
24
+
25
+ - **Mobile-first** — build the narrow layout first, add breakpoints for wider views.
26
+ - `max-width: 100%` on images and media — never overflow.
27
+ - Wide tables and code blocks scroll inside their OWN container (`overflow-x: auto`) — the page body never scrolls horizontally.
28
+ - Touch targets ≥ 44px on interactive elements.
29
+
30
+ ## Accessibility (non-negotiable)
31
+
32
+ - **Semantic HTML** — use `<button>`, `<a>`, `<nav>`, `<label>`, not `<div onClick>`.
33
+ - **Keyboard** — every interactive element reachable + operable by keyboard (focus, Enter/Space).
34
+ - **Focus** — a visible focus indicator; never `outline: none` without a replacement.
35
+ - **Contrast** — text meets WCAG AA contrast against its background (both themes).
36
+ - **Labels** — every input has a `<label>` or `aria-label`; images have alt text.
37
+ - **Reduced motion** — respect `prefers-reduced-motion`.
38
+
39
+ ## Interaction behavior
40
+
41
+ - **State** — every interactive element has hover / focus / active / disabled / loading states.
42
+ - **Feedback** — actions give feedback (a spinner, a toast, a state change). Silent failure confuses users.
43
+ - **Optimistic updates** with rollback on error feel faster than blocking on every request.
44
+
45
+ ## Good / bad
46
+
47
+ Good: a component uses the spacing scale, tokens, semantic markup, and has all states.
48
+ Bad: a hard-coded `padding: 17px`, an inline `#f3f2ef` that exists nowhere in tokens, a `<div onClick>` for a button, no focus style, an image with no alt.
@@ -1,50 +1,39 @@
1
1
  ---
2
2
  name: noir-parallel
3
- description: Use when facing two or more independent tasks with no shared state or ordering — to work them concurrently.
3
+ description: Use when facing two or more independent tasks — dispatch them concurrently without blocking each other. Use when the user says "do these at the same time" or "work on both". Do NOT use for tasks that share state or have ordering; use noir-executing-plans or noir-subagent instead.
4
+ metadata:
5
+ category: execute
6
+ version: 1.0.0
7
+ license: MIT
8
+ compatibility: claude · agents-md · gemini · cursor · opencode
4
9
  ---
5
10
 
6
- Dispatch one focused subagent per independent problem and let them run concurrently. Each subagent gets precisely crafted scope and context — never the controller's session history — so it stays narrow and you preserve your own context for coordination. Sequential investigation of independent problems wastes wall-clock; parallel dispatch collapses that to the slowest agent.
11
+ # noir-parallel
7
12
 
8
- ## Procedure
13
+ When two or more tasks are independent (no shared state, no ordering), work them concurrently. Every tool dispatch in one response — no waiting for Task A to finish before starting Task B.
9
14
 
10
- ### 1. Confirm the tasks are genuinely independent
11
- Before dispatching, verify:
12
- - each problem can be understood without context from the others;
13
- - fixing one cannot fix or break another;
14
- - the agents will not edit the same files or contend on the same resource (ports, locks, the working tree).
15
+ ## When to use
15
16
 
16
- If the failures are related, or you do not yet know what is broken, do not parallelize — investigate together first. Shared state and exploratory debugging disqualify this skill.
17
+ - 2+ tasks that don't depend on each other.
18
+ - The user says "do these at the same time", "concurrently", "parallelize."
19
+ - A task naturally splits into non-overlapping sub-tasks.
20
+ - **Do NOT use:** when tasks share state (B reads A's output). For a fan-out plan with review between tasks, use `noir-subagent`.
17
21
 
18
- ### 2. Group by independent domain
19
- Cluster the work by what is actually broken or what is actually being built: one test file or subsystem per agent. "Fix all the tests" is too broad; "fix the 3 failing tests in `agent-tool-abort.test.ts`" is a domain.
22
+ ## Procedure
20
23
 
21
- ### 3. Craft each task
22
- Each dispatch carries:
23
- - **Scope** — the exact file(s) or subsystem; name them.
24
- - **Goal** — what "done" looks like (tests green, function added with signature X).
25
- - **Context** — the error messages, test names, or interface contract the agent needs. Do not make it re-derive what you already know.
26
- - **Constraints** — what it must not touch ("production code", "other test files"), and any anti-patterns to refuse ("do not just raise the timeout — find the real issue").
27
- - **Output** — what to return (a summary of root cause and the change made, plus the test evidence).
24
+ 1. **Validate independence.** List the tasks. Confirm none reads another's output or touches the same file in a conflicting way.
25
+ 2. **Issue all dispatches in the same response.** On Claude Code, issue multiple tool uses concurrently. On other hosts, dispatch the equivalent parallel work.
26
+ 3. **Collect results.** Each result lands independently. Aggregate, then continue.
28
27
 
29
- ### 4. Dispatch in parallel
30
- Issue every subagent dispatch in the same response — multiple dispatches in one response run concurrently, one per response runs sequentially. This is the move that buys the time saving.
28
+ ## When not to use
31
29
 
32
- ### 5. Review and integrate
33
- When the agents return:
34
- - read each summary;
35
- - check the diffs for conflicts — did two agents edit the same code?;
36
- - run the full suite (not just each agent's scoped tests) to verify the fixes compose;
37
- - spot-check the changes — a subagent can make a systematic error that its own scoped tests do not catch.
30
+ - Shared database or shared file writes — these must be sequential or protected by locking.
31
+ - Tasks with a dependency chain — use `noir-executing-plans`.
32
+ - Tasks that need per-task review — use `noir-subagent`.
38
33
 
39
- If two agents touched overlapping code, reconcile manually and re-run before claiming green.
34
+ ## When done → next skill
40
35
 
41
- ## When not to use
42
- - The failures are related — fixing one might fix or break another.
43
- - Understanding requires seeing the whole system at once.
44
- - The work is exploratory — you do not yet know what is broken.
45
- - Agents would contend (editing the same files, binding the same port, taking the same lock).
36
+ → `noir-verifying` to confirm all tasks are done and integrated.
46
37
 
47
38
  ## Notes
48
- - Parallel dispatch trades coordination cost for wall-clock. For two small tasks, the overhead of crafting two briefs may not be worth it — sequential is fine. The win compounds at three or more independent domains.
49
- - Each agent's report is its deliverable; the controller's job at the end is integration and the full-suite check, not re-doing the investigation.
50
- - Discipline is observable, not rhetorical: the SDD engine records the parallel dispatch and its integrated result via `noir.checkpoint` (the SDD execute gate).
39
+ - This skill is a playbook — the host decides which tools to use.
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: noir-planning
3
+ description: Use when you have an approved spec and need a step-by-step implementation plan — naming files, interfaces, and tasks before touching code. Use when the user says "plan this" or "how should I build this". Do NOT use when the scope is already clear from the spec and the user asked to start coding.
4
+ metadata:
5
+ category: plan
6
+ version: 1.0.0
7
+ license: MIT
8
+ compatibility: claude · agents-md · gemini · cursor · opencode
9
+ ---
10
+
11
+ # noir-planning
12
+
13
+ Break an approved spec into a concrete, step-by-step implementation plan. The plan names files, describes interfaces, and defines an order — so execution is mechanical, not improvisational. A plan is a contract, not a diary entry.
14
+
15
+ ## When to use
16
+
17
+ - A spec is approved and it's time to plan the build.
18
+ - The user says "plan this", "how should I implement this", "break this down."
19
+ - The feature has enough moving parts (multiple files, dependencies, or non-trivial logic) that an ordered plan prevents rework.
20
+ - **Do NOT use:** when the spec is trivial (one file, one function) and the user already knows the shape.
21
+
22
+ ## Procedure
23
+
24
+ 1. **Read the spec.** Reload the approved specification. Note every acceptance criterion — each one is a task or a test.
25
+ 2. **Decompose into tasks.** Break the work into the smallest units that carry their own test cycle and are worth a reviewer's gate. Each task names the files it touches and the interface it produces.
26
+ 3. **Order the tasks by dependency.** Which task must finish before another starts? List the chain.
27
+ 4. **Define the interfaces.** For each task, state what it consumes (from earlier tasks) and what it produces (for later tasks). Be specific — exact function names, parameter types, file paths.
28
+ 5. **Write the plan.** Record under `.noir/plans/<date>-<slug>.md`. Use a numbered task list with checkbox syntax (`- [ ]`) so the engine's verify gate can track completion.
29
+ 6. **Hand off.** Point to `noir-executing-plans` to drive the plan task by task.
30
+
31
+ ## Verification
32
+
33
+ - [ ] Every acceptance criterion from the spec maps to ≥1 task.
34
+ - [ ] Tasks are ordered (no circular dependencies).
35
+ - [ ] Each task names the exact files + interfaces it produces.
36
+ - [ ] The plan is committed to `.noir/plans/`.
37
+
38
+ ## Notes
39
+
40
+ - A plan is a scaffold, not a prison. If a task reveals new information during execution, update the plan — don't force it through.
41
+ - For a plan that fans out (independent tasks), note which tasks can run in parallel — `noir-parallel` can then dispatch them concurrently.
42
+ - Don't pad a plan with "write tests," "run tests," "commit" per task — those are implicit in the execute-test-commit loop.
43
+
44
+ ## When done → next skill
45
+
46
+ → `noir-executing-plans` to implement the plan task by task. Or would you like to adjust anything first?