@eltonssouza/development-utility-kit 0.10.0 → 0.10.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.
@@ -1,6 +1,6 @@
1
1
  # Skills — Cowork + Claude Code
2
2
 
3
- > **Breaking change (2026-05-25)**: command layer deleted. Architecture is now 100% Skills + Agents. The `project-manager` skill is the catch-all entry point that routes prompts to the appropriate specialist agent. Specific skills (run-sprint, auto-test-guard, prd-ready-check, grill-me, scaffold, pair-debug, api-integration-test, brain-keeper, test-coverage-auditor, update-template, active-project, caveman) still take priority via keyword match. Standard sprint flow: `analyst` (plan) → `architect` (ADR) `tech-lead` (approve) → `sprint-runner` (executes Sprint N delegating to `backend-developer` + `frontend-developer` + `database-engineer` in parallel) → `gate-keeper` (gate senior+) → `code-reviewer` → `tech-lead` (merge).
3
+ > **Breaking change (2026-05-25)**: command layer deleted. Architecture is now 100% Skills + Agents. The `project-manager` skill is the **front-controller** entry point (ADR-041): it intercepts every prompt, enforces the flow order, and routes/orchestrates to the appropriate specialist agent(s). Specific skills (run-sprint, auto-test-guard, prd-ready-check, grill-me, scaffold, pair-debug, api-integration-test, brain-keeper, test-coverage-auditor, update-template, active-project, caveman) still take priority via keyword match. Standard sprint flow: `analyst` (plan) → `tech-lead` (ADR + approve) → `sprint-runner` (executes Sprint N delegating to `backend-developer` + `frontend-developer` + `database-engineer` in parallel) → `gate-keeper` (gate senior+) → `code-reviewer` → `tech-lead` (merge).
4
4
 
5
5
  This directory contains the **Skills** that Cowork and Claude Code use to develop fullstack software Java 25+ / Spring Boot 4.0+ / Angular 21+ with this template's standard flow.
6
6
 
@@ -15,7 +15,7 @@ When the user describes a task, Cowork must **deliver it 100% production-ready f
15
15
  | Skill | Purpose | Triggers with |
16
16
  |---|---|---|
17
17
  | [`scaffold`](scaffold/SKILL.md) | Unified scaffold entry point — reads `## Project Identity` from CLAUDE.md, runs the appropriate pipeline: fullstack monorepo (Spring Boot 4 + Angular 21 + Docker Compose), backend-only, or frontend-only | "scaffold the project", "scaffold backend", "scaffold frontend", "bootstrap fullstack", "monta o esqueleto", "scaffolda o projeto" |
18
- | [`sprint-runner`](run-sprint/SKILL.md) | Runs a sprint from the plan task by task, with checkpoints | "run sprint X", "execute the sprint" |
18
+ | [`run-sprint`](run-sprint/SKILL.md) | Thin trigger dispatches the `sprint-runner` agent (single execution contract, ADR-042) | "run sprint X", "execute the sprint" |
19
19
  | [`api-integration-test`](api-integration-test/SKILL.md) | Boots backend + frontend, validates integration with curl + Chrome MCP | "test integration", "smoke", "validate flow" |
20
20
  | [`gate-keeper`](auto-test-guard/SKILL.md) | At the end of each task: **generates** the automated tests for the new code (JUnit+Mockito+Testcontainers, Jest+Testing Library, Playwright) and **runs the full project regression suite**. Blocks the task if any test breaks. | "run the tests", "generate the tests", "test everything", "full suite", "ensure nothing broke", "auto-test" |
21
21
  | [`test-coverage-auditor`](test-coverage-auditor/SKILL.md) | Audits test coverage, flags technical debt from manual verification, updates `tech-debt.md`. Mandatory gate inside `prd-ready-check`. | "audit the tests", "test debt?", "coverage ok?", "list what has no test" |
@@ -28,7 +28,7 @@ When the user describes a task, Cowork must **deliver it 100% production-ready f
28
28
  | [`caveman`](caveman/SKILL.md) | Telegraphic output style — drops articles, filler, pleasantries. 65-75% fewer tokens. Always active; adjustable via "caveman lite\|full\|ultra" or "stop caveman". | Passive (always active); "caveman lite", "caveman ultra", "stop caveman" |
29
29
  | [`to-prd`](to-prd/SKILL.md) | Transforms a `DISCOVERY_*.md` into a Product Requirements Document. Requires `grill-me` to have run first. Produces `docs/prd/PRD_*.md` with six required sections: Overview, Goals, User Stories (prose), Functional Requirements, Non-functional Requirements, Out of scope. Idempotent. Opt-in only — never auto-triggered. | "to-prd", "gera PRD", "cria PRD", "generate PRD", "create PRD" |
30
30
  | [`to-issues`](to-issues/SKILL.md) | Decomposes a `PRD_*.md` into trackable GitHub issues. Requires `to-prd` to have run first. Produces `docs/issues/ISSUES_*.md` with `[ISSUE-N]` blocks (Labels, Body, Acceptance criteria) ready for `gh issue create`. Idempotent. Opt-in only — never auto-triggered. | "to-issues", "quebra em issues", "gera issues", "break into issues", "generate issues" |
31
- | [`project-manager`](project-manager/SKILL.md) | **Catch-all fallback router + orchestrator** (per ADR-033). Three modes: **ROUTE** (1 domain -> 1 specialist via Task tool), **ORCHESTRATE** (2-5 domains -> mini-plan inline + parallel Task calls, no PLAN_*.md), **ESCALATE** (>5 subtasks or formal plan needed -> grill-me -> analyst -> sprint-runner). Covers the 17 specialist agents (`analyst`, `tech-lead`, `backend-developer`, `frontend-developer`, `code-reviewer`, `database-engineer`, `devops-engineer`, `mobile-developer`, `n8n-specialist`, `product-owner`, `qa-engineer`, `security-engineer`, `ux-designer`, `migrator`, `release-engineer`, `auditor`). | "create endpoint", "review my code", "dockerize", "audit security", "design DB", "create mobile app", "n8n workflow", "wireframe", "migrate spring boot 2", ad-hoc multi-domain <=5 subtasks ("CRUD products", "back + front pequenos"), any task without a more specific skill |
31
+ | [`project-manager`](project-manager/SKILL.md) | **Front-controller router + orchestrator** (ADR-041 + ADR-033). Intercepts every prompt and enforces the flow order. Three modes: **ROUTE** (1 domain -> 1 specialist via Task tool), **ORCHESTRATE** (2-5 domains -> mini-plan inline + parallel Task calls, no PLAN_*.md), **ESCALATE** (>5 subtasks or formal plan needed -> grill-me -> analyst -> sprint-runner). Covers the 17 specialist agents (`analyst`, `tech-lead`, `backend-developer`, `frontend-developer`, `code-reviewer`, `database-engineer`, `devops-engineer`, `mobile-developer`, `n8n-specialist`, `product-owner`, `qa-engineer`, `security-engineer`, `ux-designer`, `migrator`, `release-engineer`, `auditor`). | "create endpoint", "review my code", "dockerize", "audit security", "design DB", "create mobile app", "n8n workflow", "wireframe", "migrate spring boot 2", ad-hoc multi-domain <=5 subtasks ("CRUD products", "back + front pequenos"), any task without a more specific skill |
32
32
 
33
33
  ## Where the code is generated
34
34
 
@@ -139,7 +139,7 @@ There is no need to call explicitly — just describe the task. If you want to f
139
139
 
140
140
  ## Canonical precedence — skill ↔ agent
141
141
 
142
- Two-layer architecture. Commands layer was deleted on 2026-05-25 (replaced by the `project-manager` skill catch-all).
142
+ Two-layer architecture. Commands layer was deleted on 2026-05-25 (replaced by the `project-manager` skill, now the front-controller per ADR-041).
143
143
 
144
144
  | Layer | Role | Trigger | Owns what |
145
145
  |---|---|---|---|
@@ -166,7 +166,7 @@ USER MESSAGE
166
166
  │ caveman, pair-debug, project-manager, active-project,
167
167
  │ prd-ready-check, api-integration-test, test-coverage-auditor
168
168
 
169
- └─ no match → PROJECT-MANAGER SKILL (catch-all fallback)
169
+ └─ no specific skill → PROJECT-MANAGER SKILL (front-controller, ADR-041)
170
170
  ↓ analyzes prompt, picks ONE specialist
171
171
  ↓ Task(subagent_type="<agent>")
172
172
  AGENT (executor)
@@ -256,7 +256,7 @@ A skill with **no companion agent**. It executes its logic inline (Bash, Read, W
256
256
  | Category | Description | Examples |
257
257
  |---|---|---|
258
258
  | **Mode/style** | Changes the output style of the parent session, not a task | `caveman` |
259
- | **Router** | Catch-all dispatcher by definition has no fixed agent target | `project-manager` |
259
+ | **Router/front-controller** | Intercepts every prompt, enforces flow order, dispatches (no fixed agent target) | `project-manager` |
260
260
  | **Inline transform** | Short-lived transformation that doesn't warrant a dedicated agent | `active-project` |
261
261
  | **Interview / generation** | Multi-turn interview + file write, no persistent agent needed | `pair-debug`, `to-prd`, `to-issues`, `grill-me`* |
262
262
 
@@ -268,7 +268,7 @@ A skill with **no companion agent**. It executes its logic inline (Bash, Read, W
268
268
  |---|---|
269
269
  | `caveman` | Mode — output style toggle |
270
270
  | `pair-debug` | Inline transform — hypothesis loop, no persistent executor |
271
- | `project-manager` | Router — catch-all; fixed agent target undefined by design |
271
+ | `project-manager` | Router/front-controller (ADR-041) intercepts every prompt; fixed agent target undefined by design |
272
272
  | `active-project` | Inline transform — fast-lane adoption, no dedicated agent |
273
273
  | `prd-ready-check` | Inline gate — production checklist executed in the calling session (per ADR-037); needs Chrome MCP + Bash inline, would lose tools if dispatched to a child |
274
274
  | `api-integration-test` | Inline probes — docker compose + curl + Chrome MCP run in the calling session (per ADR-037); dispatch to a child would lose Chrome MCP access |
@@ -289,7 +289,7 @@ When a skill+agent pair shares a name (Pattern 1), the split between skill (inte
289
289
 
290
290
  ### D3 — Defer promotion (specialist agents stay agent-only)
291
291
 
292
- Specialist agents (`release-engineer`, `migrator`, `code-reviewer`, `security-engineer`, etc.) remain **agent-only** — routed via `project-manager` catch-all. Promote a specialist to a paired skill only when **both** conditions are met:
292
+ Specialist agents (`release-engineer`, `migrator`, `code-reviewer`, `security-engineer`, etc.) remain **agent-only** — routed via the `project-manager` front-controller. Promote a specialist to a paired skill only when **both** conditions are met:
293
293
 
294
294
  1. Telemetry or repeated session history shows direct keyword invocation for this specialist that bypasses `project-manager`.
295
295
  2. The specialist has gained a ceremony of **three or more distinct phases** that benefit from a named orchestration entry point.
@@ -313,7 +313,7 @@ A new standalone skill (Pattern 3) MUST declare its justification category from
313
313
 
314
314
  ## Claude Code (terminal) usage
315
315
 
316
- Skills auto-trigger via `description` keywords. To force a specific skill, type `/skill <name>` (Claude Code) or mention by name ("use the `analyst` skill"). The `project-manager` skill catches anything that did not match a more specific skill.
316
+ Skills auto-trigger via `description` keywords. To force a specific skill, type `/skill <name>` (Claude Code) or mention by name ("use the `analyst` skill"). The `project-manager` skill is the front-controller (ADR-041): it intercepts every prompt and enforces the flow order, and also catches anything that did not match a more specific skill.
317
317
 
318
318
  ## Conventions of each SKILL.md
319
319
 
package/README.md CHANGED
@@ -10,9 +10,14 @@
10
10
  [![issues](https://img.shields.io/github/issues/eltonssouza/development-utility-kit)](https://github.com/eltonssouza/development-utility-kit/issues)
11
11
  [![roadmap](https://img.shields.io/badge/roadmap-public-blue)](ROADMAP.md)
12
12
  [![comparisons](https://img.shields.io/badge/comparisons-honest-orange)](docs/COMPARISONS.md)
13
+ [![release](https://img.shields.io/github/v/release/eltonssouza/development-utility-kit)](https://github.com/eltonssouza/development-utility-kit/releases/latest)
13
14
 
14
15
  CLI binary: `duk` · Node `>=18` · License: MIT
15
16
 
17
+ ```bash
18
+ npx @eltonssouza/development-utility-kit install
19
+ ```
20
+
16
21
  ---
17
22
 
18
23
  ## What it is
@@ -92,7 +97,7 @@ to-issues → docs/issues/ISSUES_<NAME>.md (gh issue create-ready)
92
97
 
93
98
  analyst → docs/plans/PLAN_<NAME>.md (goal-ready DoD)
94
99
 
95
- run-sprint → sprint-runner (mandatory TDD, Stage 0 stack-resolver)
100
+ run-sprint (thin) → sprint-runner (single execution contract; mandatory TDD, Stage 0 stack-resolver)
96
101
 
97
102
  gate-keeper → Senior+ gate (coverage, mutation, a11y, lighthouse, pyramid)
98
103
 
@@ -277,7 +282,7 @@ Reference: ADR-007 (a11y + Lighthouse + pyramid), ADR-027 (pack `## Security` ma
277
282
  ```
278
283
  development-utility-kit/
279
284
  ├── .claude/
280
- │ ├── skills/ # 20 skills (catch-all, run-sprint, stack-discovery, create-stack-pack, ...)
285
+ │ ├── skills/ # 20 skills (project-manager front-controller, run-sprint, stack-discovery, ...)
281
286
  │ ├── agents/ # 21 agents (Opus/Sonnet/Haiku per matrix)
282
287
  │ ├── stacks/ # 5 stack packs (java/spring-boot-3, spring-boot-4; typescript/angular-18,19,21)
283
288
  │ │ ├── _template.md
package/bin/cli.js CHANGED
@@ -415,6 +415,26 @@ function adoptProject(opts) {
415
415
  process.stdout.write(`Harness version: ${version}\n`);
416
416
  process.stdout.write('Written : .claude/ (+ HARNESS_VERSION, .MANIFEST, local/)\n');
417
417
  process.stdout.write('Written : CLAUDE.md\n');
418
+
419
+ // Auto-install duk globally when running via npx (duk not yet in PATH).
420
+ const dukCheck = spawnSync('duk', ['--version'], {
421
+ shell: process.platform === 'win32',
422
+ stdio: 'ignore',
423
+ });
424
+ if (dukCheck.error) {
425
+ process.stdout.write('\nInstalling duk CLI globally...\n');
426
+ const globalInstall = spawnSync(
427
+ 'npm',
428
+ ['install', '-g', '@eltonssouza/development-utility-kit'],
429
+ { stdio: 'inherit', shell: process.platform === 'win32' }
430
+ );
431
+ if (globalInstall.status === 0) {
432
+ process.stdout.write('duk installed globally. Run: duk help\n');
433
+ } else {
434
+ process.stdout.write('\nNote: global install failed. Run manually:\n');
435
+ process.stdout.write(' npm install -g @eltonssouza/development-utility-kit\n');
436
+ }
437
+ }
418
438
  }
419
439
 
420
440
  // ─── newProject (duk new <name>) ──────────────────────────────────────────────
@@ -2,7 +2,7 @@
2
2
 
3
3
  The development-utility-kit is a harness for fullstack development with Claude Code and Cowork. The architecture is **deliberately simple**: two functional layers (Skills + Agents), a single entry point (the Skill that matches the prompt), and a cross-cutting Hooks layer that intercepts tools and prompts.
4
4
 
5
- There is no command layer. The `commands/` layer was removed on 2026-05-25 and replaced by the catch-all Skill `project-manager`, which routes any prompt without a specific skill to the correct specialist agent.
5
+ There is no command layer. The `commands/` layer was removed on 2026-05-25 and replaced by the **front-controller** Skill `project-manager` (ADR-041): it intercepts every prompt, enforces the flow order (discovery → plan → sprint → gate → brain), and then routes or orchestrates to the correct specialist agent(s).
6
6
 
7
7
  This document describes the mental model you need to understand why a prompt about "create endpoint" ends up executing code in `backend-developer`, or why a request to "run sprint 3" dispatches `qa-engineer`, `backend-developer`, `frontend-developer`, and `gate-keeper` in parallel.
8
8
 
@@ -17,8 +17,8 @@ This document describes the mental model you need to understand why a prompt abo
17
17
 
18
18
  ┌────────────────────────────────────────────┐
19
19
  │ UserPromptSubmit hook │
20
- │ scripts/hooks/prompt-gate-reminder.sh
21
- gate reminders
20
+ │ scripts/hooks/flow-guard.js
21
+ injects [FLOW STATE] + blocks/nudges
22
22
  └────────────────────┬───────────────────────┘
23
23
 
24
24
 
@@ -33,7 +33,7 @@ This document describes the mental model you need to understand why a prompt abo
33
33
  ▼ ▼
34
34
  specific skill matched no specific skill matched
35
35
  e.g. run-sprint, grill-me, ▼
36
- bootstrap-fullstack project-manager (catch-all)
36
+ scaffold project-manager (front-controller)
37
37
  │ 3 modes (per ADR-033):
38
38
  │ · ROUTE → 1 specialist (1 domain)
39
39
  │ · ORCHESTRATE → 2–5 specialists in parallel
@@ -86,8 +86,8 @@ To force a specific skill, use `/skill <name>` in Claude Code or mention it expl
86
86
 
87
87
  ### Skill types
88
88
 
89
- - **Orchestration skills**: `run-sprint`, `grill-me`, `bootstrap-fullstack`, `auto-test-guard`, `prd-ready-check`. They have multiple stages with checkpoints (⏸️) and map each stage to an agent.
90
- - **Routing skills**: `project-manager`. Catch-all fallback that analyzes the prompt and dispatches to ONE specialist agent via Task tool.
89
+ - **Orchestration skills**: `run-sprint` (thin trigger → `sprint-runner` agent, ADR-042), `grill-me`, `scaffold`, `auto-test-guard`, `prd-ready-check`. They have multiple stages with checkpoints (⏸️) and map each stage to an agent.
90
+ - **Front-controller skill**: `project-manager` (ADR-041). Intercepts **every** prompt, enforces the flow order, then dispatches: ROUTE (1 specialist) | ORCHESTRATE (≤5 parallel, shared `run_group_id`) | ESCALATE (`grill-me → analyst → sprint-runner`).
91
91
  - **Passive skills**: `caveman` (telegraphic style, always active).
92
92
  - **Product skills**: `to-prd`, `to-issues`. Convert artifacts between pipeline stages.
93
93
  - **Adoption skills**: `update-template`, `active-project`. Synchronize projects with the latest harness version.
@@ -198,7 +198,7 @@ project/
198
198
 
199
199
  Follow what happens when you type `"create endpoint for product signup"`:
200
200
 
201
- 2. **Skill matcher** analyzes the enriched prompt. No specific orchestrator skill keyword → falls into `project-manager` (catch-all).
201
+ 2. **Skill matcher** analyzes the enriched prompt. No specific orchestrator skill keyword → `project-manager` (front-controller) takes the prompt and enforces the flow order.
202
202
  3. **project-manager** reads the prompt, consults the routing table, decides: "backend implementation" → picks `backend-developer`.
203
203
  4. **Task tool** dispatches `backend-developer` (Sonnet 4.6 model) with the full prompt + PLAN/PRD context if any.
204
204
  5. **backend-developer** executes: reads CLAUDE.md, consults the PLAN, picks the package (`com.company.product.web`), generates controller + DTOs + service + Flyway migration.
@@ -206,7 +206,7 @@ Follow what happens when you type `"create endpoint for product signup"`:
206
206
  7. **PostToolUse hooks** run on each Edit/Write: prettier formats the file; `post-edit-test-reminder` reminds the agent to invoke `qa-engineer`.
207
207
  8. **gate-keeper** (called by the `auto-test-guard` skill at the end) runs JaCoCo coverage, PIT mutation, ESLint, Lighthouse. If any threshold fails, it blocks.
208
208
  9. **Stop hook** fires `stop-brain-reminder.sh` reminding `brain-keeper` to record the feature in the Obsidian vault.
209
- 10. **SubagentStop hook** (future/optional) records telemetry per agent in `dashboard/data/telemetry.json` via `telemetry-writer.js`.
209
+ 10. **SubagentStop hook** records telemetry per agent (incl. `run_group_id` and project) via `telemetry-writer.js`, feeding the dashboard's per-project **Processes** view (ADR-045).
210
210
 
211
211
  ## Cowork and Claude Code CLI integration
212
212
 
@@ -220,7 +220,7 @@ Rule of thumb: **if Cowork alone covers it, use Cowork**. If you need bash hooks
220
220
 
221
221
  ## Telemetry
222
222
 
223
- Subagent telemetry is recorded via the `SubagentStop` hook (not configured by default opt-in). The flow:
223
+ Subagent telemetry is recorded via the `SubagentStop` hook. Each run carries a `run_group_id` (correlating a parallel orchestration fan) and the project path, powering the dashboard's per-project **Processes** view (ADR-045, Phase A). The flow:
224
224
 
225
225
  ```
226
226
  agent ends → SubagentStop hook → subagent-telemetry.sh
@@ -234,7 +234,7 @@ Captured metrics: agent name, model used, tokens in/out, duration, success/failu
234
234
  ## Design principles
235
235
 
236
236
  1. **Two layers, no more**. Skill (entry) + Agent (executor). End of story. Adding a third layer requires an ADR approved by `tech-lead`.
237
- 2. **Specific skill wins over catch-all**. If `run-sprint` matched, `project-manager` does not run.
237
+ 2. **Front-controller is the front door** (ADR-041). `project-manager` intercepts every prompt and enforces the flow order; a specific skill keyword (e.g. `run-sprint`) still dispatches directly, and the `flow-guard` hook guarantees the order either way.
238
238
  3. **Hooks are for policy, not logic**. Hooks block dangerous actions, format code, inject memory. Business logic lives in agents.
239
239
  4. **Each agent declares its model**. Opus is expensive and rare. Sonnet is the default. Haiku for mechanical work.
240
240
  5. **Everything is a file on disk**. `.claude/` is versioned. Harness changes are commits.
@@ -30,7 +30,7 @@ This document covers the 18 official skills of the harness, grouped by purpose.
30
30
 
31
31
  ---
32
32
 
33
- ## Catch-all router
33
+ ## Front-controller router (ADR-041)
34
34
 
35
35
  ### project-manager
36
36
 
@@ -38,7 +38,7 @@ This document covers the 18 official skills of the harness, grouped by purpose.
38
38
 
39
39
  **EN triggers**: "create endpoint", "implement controller", "create component", "review my code", "security audit", "design the database", "optimize query", "dockerize", "setup CI", "create mobile app", "n8n workflow", "refine backlog", "write tests", "wireframe", "migrate from spring boot 2", "release prep", "architecture decision", "analyze this task".
40
40
 
41
- **When to fire**: any development request that does **not** match a specific skill. It is the default entry point the wildcard that covers the 17 specialist agents without a dedicated skill.
41
+ **When to fire**: `project-manager` is the **front-controller** (ADR-041) it intercepts every prompt, enforces the flow order (discovery plan sprint → gate → brain), and covers the specialist agents without a dedicated skill. A specific skill keyword still dispatches directly; `project-manager` plus the `flow-guard` hook guarantee the order either way.
42
42
 
43
43
  **What it does**: reads the intent, decides one of three modes (per ADR-033), and dispatches accordingly:
44
44
 
@@ -52,9 +52,9 @@ Reference: **ADR-033** — orchestrate mode fills the fast-lane gap acknowledged
52
52
 
53
53
  **Output / artifacts**: ROUTE → single `Task(subagent_type="<agent>", description="...", prompt="...")` call. ORCHESTRATE → inline mini-plan table + multiple `Task` calls in the same content block. Final artifacts (code, ADR, report) come from the chosen specialist(s).
54
54
 
55
- **Prerequisites**: none — it is the catch-all.
55
+ **Prerequisites**: none — it is the front door. It runs the `flow-guard` precondition checks (DISCOVERY/PLAN present for qualified work) before dispatching.
56
56
 
57
- **When NOT to fire**: when a specific skill matches (`run-sprint`, `auto-test-guard`, `prd-ready-check`, `grill-me`, `bootstrap-*`, `pair-debug`, `api-integration-test`, `brain-keeper`, `test-coverage-auditor`, `update-template`, `active-project`, `caveman`). Specific skills always win by specificity. For formal sprint execution (with `PLAN_*.md`), use `run-sprint`. For tasks that need a persisted plan or discovery, escalate to `grill-me` → `analyst` first.
57
+ **When NOT to fire**: when a specific skill matches (`run-sprint`, `auto-test-guard`, `prd-ready-check`, `grill-me`, `scaffold`, `pair-debug`, `api-integration-test`, `brain-keeper`, `test-coverage-auditor`, `update-template`, `active-project`, `caveman`). Specific skills always win by specificity. For formal sprint execution (with `PLAN_*.md`), use `run-sprint`. For tasks that need a persisted plan or discovery, escalate to `grill-me` → `analyst` first.
58
58
 
59
59
  **Mode selection heuristic (deterministic)**: skill counts distinct domains touched (backend, frontend, mobile, database, devops, ux, security, n8n, product, tests, architecture, release). 1 domain → ROUTE. 2–5 domains, independent paths → ORCHESTRATE. >5 or any subtask needs further decomposition → ESCALATE.
60
60
 
@@ -24,8 +24,8 @@ Each item follows the pattern:
24
24
 
25
25
  ### Specific skill overridden by `project-manager`
26
26
 
27
- - **Symptom**: when asking "review code", `project-manager` (catch-all) answers instead of the more specific skill.
28
- - **Cause**: no specific skill matched the exact phrase; the catch-all takes over.
27
+ - **Symptom**: when asking "review code", `project-manager` (front-controller) answers instead of the more specific skill.
28
+ - **Cause**: no specific skill matched the exact phrase; the front-controller takes over.
29
29
  - **Solution**: prefer the canonical phrase from the skill (see the "Skills" table in `CLAUDE.md`). E.g., for PR review use "review the PR" or "audit this change". A more specific skill always wins on match.
30
30
 
31
31
  ### `caveman` cutting too much substance
@@ -194,7 +194,7 @@ tests, produce ADRs) and return to the skill, which returns to you.
194
194
  | `brain-keeper` | `record in the brain`, `update brain`, `daily log`, `save ADR to vault` |
195
195
  | `active-project` | `/active-project <path>`, `activate project at <path>` |
196
196
  | `update-template` | `update the template`, `sync with development-utility-kit`, `pull the new skills` |
197
- | `project-manager` | catch-allany prompt without a more specific skill |
197
+ | `project-manager` | front-controllerintercepts every prompt, enforces flow order, routes/orchestrates |
198
198
  | `caveman` | `caveman lite`, `caveman ultra`, `stop caveman` |
199
199
 
200
200
  ---
@@ -233,7 +233,7 @@ The harness exposes skills that trigger by **keyword** in Claude Code/Cowork con
233
233
  | `prd-ready-check` | GO/NO-GO for production | `is it production ready?`, `DoD` |
234
234
  | `brain-keeper` | Record history in Obsidian | `record in brain`, `update brain` |
235
235
  | `caveman` | Telegraphic mode (default ON) | `caveman lite/full/ultra`, `stop caveman` |
236
- | `project-manager` | Catch-all (default) | Any prompt without a specific skill |
236
+ | `project-manager` | Front-controller | Intercepts every prompt; enforces flow order |
237
237
 
238
238
  ### Detailed cards
239
239
 
@@ -302,7 +302,7 @@ The harness exposes skills that trigger by **keyword** in Claude Code/Cowork con
302
302
  - **Trigger**: `caveman lite/full/ultra` or `stop caveman`.
303
303
  - **Effect**: responses ~65-75% shorter.
304
304
 
305
- #### `project-manager` (catch-all)
305
+ #### `project-manager` (front-controller)
306
306
 
307
307
  - **When**: any prompt that doesn't match a specific skill.
308
308
  - **Output**: routes to ONE specialist agent via Task tool (`frontend-developer`, `ux-designer`, `qa-engineer`, etc.).
@@ -243,7 +243,7 @@ conversational.
243
243
  | `brain-keeper` | `record in brain`, `update the brain` | `docs/brain/` vault |
244
244
  | `active-project` | `/active-project <path>`, `adopt project at <path>` | Non-interactive adoption |
245
245
  | `update-template` | `update the template` | Sync `.claude/` + `CLAUDE.md` (merge) |
246
- | `project-manager` | catch-all | Routes to 1 agent |
246
+ | `project-manager` | front-controller | Intercepts all; ROUTE / ORCHESTRATE / ESCALATE |
247
247
 
248
248
  ### 5.1. `bootstrap-fullstack`
249
249
 
@@ -352,8 +352,7 @@ overwritten. A backup is created (`CLAUDE.md.bak-<timestamp>`).
352
352
 
353
353
  ### 5.13. `project-manager`
354
354
 
355
- Catch-all. Any prompt without a specific skill falls here and is routed to
356
- **one** agent.
355
+ Front-controller (ADR-041): it intercepts every prompt, enforces the flow order, and routes or orchestrates to the right specialist(s).
357
356
 
358
357
  ### 5.15. Impeccable — visual polish
359
358
 
@@ -1180,7 +1179,7 @@ Big table, ordered by intent.
1180
1179
  | Record in vault | `record in brain` | `brain-keeper` |
1181
1180
  | Migrate stack | `migrate from <X> to <Y>` | `migrator` agent |
1182
1181
  | Update template | `update the template` | `update-template` |
1183
- | Catch-all | any prompt without a keyword | `project-manager` |
1182
+ | Front-controller | every prompt (enforces flow order) | `project-manager` |
1184
1183
 
1185
1184
  CLI (terminal, outside chat):
1186
1185
 
@@ -33,7 +33,7 @@ duk update # alias for `duk install`
33
33
 
34
34
  ## 5-min onboarding
35
35
 
36
- Mobile has no `bootstrap-mobile` skill. Scaffolding is the responsibility of the `mobile-developer` agent via `project-manager` (catch-all skill). Step by step:
36
+ Mobile has no `bootstrap-mobile` skill. Scaffolding is the responsibility of the `mobile-developer` agent via `project-manager` (front-controller skill). Step by step:
37
37
 
38
38
  ```bash
39
39
  # 1. Create Expo project (manual, outside the harness)
@@ -127,7 +127,7 @@ Claude (project-manager -> mobile-developer):
127
127
 
128
128
  ## Skills applicable to mobile
129
129
 
130
- Mobile uses the harness's general skill catalog. There is no mobile-specific skill. `project-manager` does the catch-all routing to `mobile-developer`.
130
+ Mobile uses the harness's general skill catalog. There is no mobile-specific skill. `project-manager` (front-controller) routes to `mobile-developer`.
131
131
 
132
132
  | Skill | EN trigger | Output |
133
133
  |---|---|---|
@@ -144,7 +144,7 @@ Mobile uses the harness's general skill catalog. There is no mobile-specific ski
144
144
  | `update-template` | "update template" | Sync `.claude/` + `CLAUDE.md` |
145
145
  | `caveman` | always-on, "stop caveman" | Telegraphic output |
146
146
 
147
- ### `project-manager` (catch-all — replaces bootstrap-mobile)
147
+ ### `project-manager` (front-controller — replaces bootstrap-mobile)
148
148
 
149
149
  Since there is NO `bootstrap-mobile`, all scaffolding or structural changes go through `project-manager`:
150
150
 
@@ -151,7 +151,7 @@ If you adopt the harness on a real project and ship something with it, please co
151
151
  |---|---|---|
152
152
  | `duk doctor` reports Node < 18 | Old Node installed | Install Node 18+ from nodejs.org or your package manager |
153
153
  | `duk install` aborts with "drift detected" | You modified `.claude/` after the previous install | Move your changes to `.claude/local/` (preserved across installs) OR run `duk install --force` (overwrite + backup) |
154
- | Chat does not seem to trigger any skill | Keywords do not match any skill's `description` | Try a more explicit phrasing OR fall through to `project-manager` (catch-all) by phrasing as a normal dev request like "create endpoint POST /api/v1/foo" |
154
+ | Chat does not seem to trigger any skill | Keywords do not match any skill's `description` | Try a more explicit phrasing OR fall through to `project-manager` (front-controller) by phrasing as a normal dev request like "create endpoint POST /api/v1/foo" |
155
155
  | `duk dashboard` says "port 4242 in use" | Another process holds the port | Pass `--port 5000` (or any free port) |
156
156
  | RTK widget shows no data | RTK not on PATH (intentional fallback) | Install rtk separately if you want the metric; otherwise ignore |
157
157
  | `duk lint` reports ERRORs in skills you did not touch | Frontmatter incomplete in the harness | Open an issue with the lint output — likely a regression |
@@ -0,0 +1,39 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
2
+ <defs>
3
+ <linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" stop-color="#0f2847"/>
5
+ <stop offset="100%" stop-color="#0a1628"/>
6
+ </linearGradient>
7
+ <linearGradient id="core" x1="0%" y1="0%" x2="100%" y2="100%">
8
+ <stop offset="0%" stop-color="#1a6bff"/>
9
+ <stop offset="100%" stop-color="#ff6b2b"/>
10
+ </linearGradient>
11
+ <radialGradient id="glow" cx="50%" cy="50%" r="50%">
12
+ <stop offset="0%" stop-color="#6db3ff" stop-opacity="0.3"/>
13
+ <stop offset="100%" stop-color="#6db3ff" stop-opacity="0"/>
14
+ </radialGradient>
15
+ </defs>
16
+
17
+ <!-- Background -->
18
+ <rect width="32" height="32" rx="7" fill="url(#bg)"/>
19
+
20
+ <!-- Glow halo around center -->
21
+ <circle cx="16" cy="16" r="10" fill="url(#glow)"/>
22
+
23
+ <!-- Connection lines -->
24
+ <line x1="16" y1="16" x2="7" y2="7" stroke="#1a6bff" stroke-width="1.2" stroke-opacity="0.55" stroke-linecap="round"/>
25
+ <line x1="16" y1="16" x2="25" y2="7" stroke="#1a6bff" stroke-width="1.2" stroke-opacity="0.55" stroke-linecap="round"/>
26
+ <line x1="16" y1="16" x2="7" y2="25" stroke="#ff6b2b" stroke-width="1.2" stroke-opacity="0.55" stroke-linecap="round"/>
27
+ <line x1="16" y1="16" x2="25" y2="25" stroke="#ff6b2b" stroke-width="1.2" stroke-opacity="0.55" stroke-linecap="round"/>
28
+
29
+ <!-- Satellite nodes -->
30
+ <circle cx="7" cy="7" r="2.2" fill="#4d9aff" opacity="0.85"/>
31
+ <circle cx="25" cy="7" r="2.2" fill="#4d9aff" opacity="0.85"/>
32
+ <circle cx="7" cy="25" r="2.2" fill="#ff9a5c" opacity="0.85"/>
33
+ <circle cx="25" cy="25" r="2.2" fill="#ff9a5c" opacity="0.85"/>
34
+
35
+ <!-- Center node — gradient ring -->
36
+ <circle cx="16" cy="16" r="5.5" fill="url(#core)"/>
37
+ <!-- Center node — white core -->
38
+ <circle cx="16" cy="16" r="2.8" fill="#f0f4fa"/>
39
+ </svg>
@@ -4,6 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>development-utility-kit dashboard</title>
7
+ <link rel="icon" type="image/svg+xml" href="favicon.svg" />
7
8
  <link rel="preconnect" href="https://fonts.googleapis.com" />
8
9
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
9
10
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet" />
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eltonssouza/development-utility-kit",
3
- "version": "0.10.0",
3
+ "version": "0.10.1",
4
4
  "description": "npx installer for the development-utility-kit harness",
5
5
  "bin": {
6
6
  "duk": "bin/cli.js"