@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.
- package/builtin/noir-backend/SKILL.md +32 -4
- package/builtin/noir-backend/references/backend-patterns.md +55 -0
- package/builtin/noir-brainstorming/SKILL.md +49 -0
- package/builtin/noir-checkpoint/SKILL.md +30 -12
- package/builtin/noir-context/SKILL.md +29 -10
- package/builtin/noir-doctor/SKILL.md +23 -4
- package/builtin/noir-executing-plans/SKILL.md +45 -0
- package/builtin/noir-exploring/SKILL.md +37 -0
- package/builtin/noir-frontend/SKILL.md +32 -4
- package/builtin/noir-frontend/references/ui-patterns.md +48 -0
- package/builtin/noir-parallel/SKILL.md +24 -35
- package/builtin/noir-planning/SKILL.md +46 -0
- package/builtin/noir-prd/SKILL.md +38 -27
- package/builtin/noir-readme/SKILL.md +25 -4
- package/builtin/noir-recall/SKILL.md +31 -12
- package/builtin/noir-remember/SKILL.md +31 -17
- package/builtin/noir-rules/SKILL.md +28 -27
- package/builtin/noir-security/SKILL.md +33 -4
- package/builtin/noir-security/references/security-checklist.md +49 -0
- package/builtin/noir-shipping/SKILL.md +34 -0
- package/builtin/noir-spec/SKILL.md +48 -14
- package/builtin/noir-spec/references/spec-template.md +43 -0
- package/builtin/noir-subagent/SKILL.md +29 -30
- package/builtin/noir-subagent/references/dispatch-guide.md +50 -0
- package/builtin/noir-sync/SKILL.md +39 -12
- package/builtin/noir-systematic-debugging/SKILL.md +71 -0
- package/builtin/noir-systematic-debugging/references/tracing.md +51 -0
- package/builtin/noir-test-driven-development/SKILL.md +73 -0
- package/builtin/noir-test-driven-development/references/tdd-worked-example.md +65 -0
- package/builtin/noir-verifying/SKILL.md +40 -0
- package/builtin/noir-verifying/references/verification-checklist.md +29 -0
- package/builtin/noir-worktree/SKILL.md +23 -4
- package/builtin/noir-wrap/SKILL.md +29 -13
- package/builtin/noir-writing-skills/SKILL.md +42 -0
- package/dist/index.d.ts +159 -9
- package/dist/index.js +240 -7
- package/dist/index.js.map +1 -1
- package/evals/noir-systematic-debugging/evals.json +25 -0
- package/evals/noir-test-driven-development/evals.json +25 -0
- package/integrations/noir-clickup/SKILL.md +319 -71
- package/package.json +3 -2
- package/builtin/noir-brainstorm/SKILL.md +0 -17
- package/builtin/noir-branch/SKILL.md +0 -12
- package/builtin/noir-clarify/SKILL.md +0 -17
- package/builtin/noir-commit/SKILL.md +0 -12
- package/builtin/noir-debug/SKILL.md +0 -38
- package/builtin/noir-document/SKILL.md +0 -17
- package/builtin/noir-execute/SKILL.md +0 -17
- package/builtin/noir-explore/SKILL.md +0 -16
- package/builtin/noir-intake/SKILL.md +0 -17
- package/builtin/noir-plan/SKILL.md +0 -20
- package/builtin/noir-pr/SKILL.md +0 -12
- package/builtin/noir-review/SKILL.md +0 -28
- package/builtin/noir-skill-author/SKILL.md +0 -12
- package/builtin/noir-tdd/SKILL.md +0 -49
- package/builtin/noir-test/SKILL.md +0 -12
- 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,
|
|
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
|
-
|
|
15
|
+
Backend architecture and implementation — APIs, databases, services, and server patterns.
|
|
9
16
|
|
|
10
|
-
|
|
17
|
+
## When to use
|
|
11
18
|
|
|
12
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
##
|
|
17
|
-
|
|
18
|
-
-
|
|
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 —
|
|
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
|
-
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
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 —
|
|
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
|
-
|
|
14
|
+
## When to use
|
|
15
|
+
- When the user triggers this skill.
|
|
11
16
|
|
|
12
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
17
|
+
## When to use
|
|
11
18
|
|
|
12
|
-
|
|
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
|
|
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
|
-
|
|
11
|
+
# noir-parallel
|
|
7
12
|
|
|
8
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
-
|
|
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
|
-
|
|
34
|
+
## When done → next skill
|
|
40
35
|
|
|
41
|
-
|
|
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
|
-
-
|
|
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?
|