@jgamaraalv/ts-dev-kit 3.1.3 → 3.3.0
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +26 -0
- package/agents/accessibility-pro.md +1 -1
- package/agents/api-builder.md +1 -1
- package/agents/code-reviewer.md +1 -1
- package/agents/database-expert.md +1 -1
- package/agents/debugger.md +1 -1
- package/agents/docker-expert.md +1 -1
- package/agents/performance-engineer.md +1 -1
- package/agents/playwright-expert.md +1 -1
- package/agents/react-specialist.md +1 -1
- package/agents/security-scanner.md +1 -1
- package/agents/test-generator.md +1 -1
- package/agents/typescript-pro.md +1 -1
- package/agents/ux-optimizer.md +1 -1
- package/package.json +1 -1
- package/skills/codebase-adapter/SKILL.md +12 -4
- package/skills/core-web-vitals/SKILL.md +11 -4
- package/skills/debug/references/debug-dispatch.md +8 -5
- package/skills/execute-task/SKILL.md +42 -12
- package/skills/execute-task/references/agent-dispatch.md +12 -3
- package/skills/yolo/SKILL.md +93 -7
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,32 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [3.3.0] - 2026-02-27
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- `/execute-task` orchestrator anti-patterns section: 4 explicit rules (never fix errors inline, never guess-loop configs, never announce parallel without delivering it, never write application code as orchestrator) with a pre-send self-check checklist
|
|
13
|
+
- `/execute-task` agent-dispatch rules 5–6: parallel dispatch enforcement ("parallel means parallel") and mandatory Context7-before-config policy
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- `/execute-task` Context7 guidance upgraded from optional recommendation to **mandatory** for all config and versioned API files — must query docs before writing any configuration
|
|
18
|
+
- `/execute-task` parallel dispatch rule now includes CRITICAL annotation: announcing N parallel agents requires exactly N Task() calls in the same message
|
|
19
|
+
- `/execute-task` quality gate failure handling: orchestrator must dispatch a specialist agent to fix errors instead of fixing inline (prevents context exhaustion and mid-task compaction)
|
|
20
|
+
|
|
21
|
+
## [3.2.0] - 2026-02-27
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- Cross-scope agent name resolution: `/execute-task` and `/debug` dispatch protocols now detect whether agents are registered with a plugin prefix (`ts-dev-kit:agent-name`) and use the correct `subagent_type` automatically
|
|
26
|
+
- `/yolo` Phase 1.5 — Ensure plugin availability: when ts-dev-kit is installed as a plugin, copies agents, skills, and agent-memory into the project before mounting the devcontainer so they're accessible inside the container
|
|
27
|
+
- `/codebase-adapter` scope-aware discovery: phase 2 now searches agents and skills across project scope (`.claude/`), plugin scope (`node_modules/`), and personal scope (`~/.claude/`)
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
- Agent memory paths in all 13 agents now use dynamic resolution (`agent-memory/<name>/` at project root first, fallback to `.claude/agent-memory/<name>/`) instead of a hardcoded `.claude/` prefix
|
|
32
|
+
- `/core-web-vitals` visualize script path no longer hardcoded to `~/.claude/skills/` — now discovers the correct path across all installation scopes
|
|
33
|
+
|
|
8
34
|
## [3.1.3] - 2026-02-27
|
|
9
35
|
|
|
10
36
|
### Fixed
|
|
@@ -88,7 +88,7 @@ Report when done:
|
|
|
88
88
|
</output>
|
|
89
89
|
|
|
90
90
|
<agent-memory>
|
|
91
|
-
You have a persistent memory directory at `.claude/agent-memory/accessibility-pro/`.
|
|
91
|
+
You have a persistent memory directory. Its contents persist across conversations. To find it, look for `agent-memory/accessibility-pro/` at the project root first, then fall back to `.claude/agent-memory/accessibility-pro/`. Use whichever path exists.
|
|
92
92
|
|
|
93
93
|
As you work, consult your memory files to build on previous experience. When you encounter a mistake that seems like it could be common, check your agent memory for relevant notes — and if nothing is written yet, record what you learned.
|
|
94
94
|
|
package/agents/api-builder.md
CHANGED
|
@@ -58,7 +58,7 @@ Report when done:
|
|
|
58
58
|
</output>
|
|
59
59
|
|
|
60
60
|
<agent-memory>
|
|
61
|
-
You have a persistent memory directory at `.claude/agent-memory/api-builder/`.
|
|
61
|
+
You have a persistent memory directory. Its contents persist across conversations. To find it, look for `agent-memory/api-builder/` at the project root first, then fall back to `.claude/agent-memory/api-builder/`. Use whichever path exists.
|
|
62
62
|
|
|
63
63
|
As you work, consult your memory files to build on previous experience. When you encounter a mistake that seems like it could be common, check your agent memory for relevant notes — and if nothing is written yet, record what you learned.
|
|
64
64
|
|
package/agents/code-reviewer.md
CHANGED
|
@@ -70,7 +70,7 @@ APPROVE / REQUEST CHANGES / NEEDS DISCUSSION
|
|
|
70
70
|
</output_format>
|
|
71
71
|
|
|
72
72
|
<agent-memory>
|
|
73
|
-
You have a persistent memory directory at `.claude/agent-memory/code-reviewer/`.
|
|
73
|
+
You have a persistent memory directory. Its contents persist across conversations. To find it, look for `agent-memory/code-reviewer/` at the project root first, then fall back to `.claude/agent-memory/code-reviewer/`. Use whichever path exists.
|
|
74
74
|
|
|
75
75
|
As you work, consult your memory files to build on previous experience. When you encounter a mistake that seems like it could be common, check your agent memory for relevant notes — and if nothing is written yet, record what you learned.
|
|
76
76
|
|
|
@@ -69,7 +69,7 @@ Report when done:
|
|
|
69
69
|
</output>
|
|
70
70
|
|
|
71
71
|
<agent-memory>
|
|
72
|
-
You have a persistent memory directory at `.claude/agent-memory/database-expert/`.
|
|
72
|
+
You have a persistent memory directory. Its contents persist across conversations. To find it, look for `agent-memory/database-expert/` at the project root first, then fall back to `.claude/agent-memory/database-expert/`. Use whichever path exists.
|
|
73
73
|
|
|
74
74
|
As you work, consult your memory files to build on previous experience. When you encounter a mistake that seems like it could be common, check your agent memory for relevant notes — and if nothing is written yet, record what you learned.
|
|
75
75
|
|
package/agents/debugger.md
CHANGED
|
@@ -119,7 +119,7 @@ Report when done:
|
|
|
119
119
|
</output>
|
|
120
120
|
|
|
121
121
|
<agent-memory>
|
|
122
|
-
You have a persistent memory directory at `.claude/agent-memory/debugger/`.
|
|
122
|
+
You have a persistent memory directory. Its contents persist across conversations. To find it, look for `agent-memory/debugger/` at the project root first, then fall back to `.claude/agent-memory/debugger/`. Use whichever path exists.
|
|
123
123
|
|
|
124
124
|
As you work, consult your memory files to build on previous experience. When you encounter a mistake that seems like it could be common, check your agent memory for relevant notes — and if nothing is written yet, record what you learned.
|
|
125
125
|
|
package/agents/docker-expert.md
CHANGED
|
@@ -43,7 +43,7 @@ Report when done:
|
|
|
43
43
|
</output>
|
|
44
44
|
|
|
45
45
|
<agent-memory>
|
|
46
|
-
You have a persistent memory directory at `.claude/agent-memory/docker-expert/`.
|
|
46
|
+
You have a persistent memory directory. Its contents persist across conversations. To find it, look for `agent-memory/docker-expert/` at the project root first, then fall back to `.claude/agent-memory/docker-expert/`. Use whichever path exists.
|
|
47
47
|
|
|
48
48
|
As you work, consult your memory files to build on previous experience. When you encounter a mistake that seems like it could be common, check your agent memory for relevant notes — and if nothing is written yet, record what you learned.
|
|
49
49
|
|
|
@@ -101,7 +101,7 @@ Report when done:
|
|
|
101
101
|
</output>
|
|
102
102
|
|
|
103
103
|
<agent-memory>
|
|
104
|
-
You have a persistent memory directory at `.claude/agent-memory/performance-engineer/`.
|
|
104
|
+
You have a persistent memory directory. Its contents persist across conversations. To find it, look for `agent-memory/performance-engineer/` at the project root first, then fall back to `.claude/agent-memory/performance-engineer/`. Use whichever path exists.
|
|
105
105
|
|
|
106
106
|
As you work, consult your memory files to build on previous experience. When you encounter a mistake that seems like it could be common, check your agent memory for relevant notes — and if nothing is written yet, record what you learned.
|
|
107
107
|
|
|
@@ -90,7 +90,7 @@ Report when done:
|
|
|
90
90
|
</output>
|
|
91
91
|
|
|
92
92
|
<agent-memory>
|
|
93
|
-
You have a persistent memory directory at `.claude/agent-memory/playwright-expert/`.
|
|
93
|
+
You have a persistent memory directory. Its contents persist across conversations. To find it, look for `agent-memory/playwright-expert/` at the project root first, then fall back to `.claude/agent-memory/playwright-expert/`. Use whichever path exists.
|
|
94
94
|
|
|
95
95
|
As you work, consult your memory files to build on previous experience. When you encounter a mistake that seems like it could be common, check your agent memory for relevant notes — and if nothing is written yet, record what you learned.
|
|
96
96
|
|
|
@@ -69,7 +69,7 @@ Report when done:
|
|
|
69
69
|
</output>
|
|
70
70
|
|
|
71
71
|
<agent-memory>
|
|
72
|
-
You have a persistent memory directory at `.claude/agent-memory/react-specialist/`.
|
|
72
|
+
You have a persistent memory directory. Its contents persist across conversations. To find it, look for `agent-memory/react-specialist/` at the project root first, then fall back to `.claude/agent-memory/react-specialist/`. Use whichever path exists.
|
|
73
73
|
|
|
74
74
|
As you work, consult your memory files to build on previous experience. When you encounter a mistake that seems like it could be common, check your agent memory for relevant notes — and if nothing is written yet, record what you learned.
|
|
75
75
|
|
|
@@ -71,7 +71,7 @@ If implementing fixes, run the project's standard quality checks for every packa
|
|
|
71
71
|
</quality_gates>
|
|
72
72
|
|
|
73
73
|
<agent-memory>
|
|
74
|
-
You have a persistent memory directory at `.claude/agent-memory/security-scanner/`.
|
|
74
|
+
You have a persistent memory directory. Its contents persist across conversations. To find it, look for `agent-memory/security-scanner/` at the project root first, then fall back to `.claude/agent-memory/security-scanner/`. Use whichever path exists.
|
|
75
75
|
|
|
76
76
|
As you work, consult your memory files to build on previous experience. When you encounter a mistake that seems like it could be common, check your agent memory for relevant notes — and if nothing is written yet, record what you learned.
|
|
77
77
|
|
package/agents/test-generator.md
CHANGED
|
@@ -115,7 +115,7 @@ Report when done:
|
|
|
115
115
|
</output>
|
|
116
116
|
|
|
117
117
|
<agent-memory>
|
|
118
|
-
You have a persistent memory directory at `.claude/agent-memory/test-generator/`.
|
|
118
|
+
You have a persistent memory directory. Its contents persist across conversations. To find it, look for `agent-memory/test-generator/` at the project root first, then fall back to `.claude/agent-memory/test-generator/`. Use whichever path exists.
|
|
119
119
|
|
|
120
120
|
As you work, consult your memory files to build on previous experience. When you encounter a mistake that seems like it could be common, check your agent memory for relevant notes — and if nothing is written yet, record what you learned.
|
|
121
121
|
|
package/agents/typescript-pro.md
CHANGED
|
@@ -110,7 +110,7 @@ Report when done:
|
|
|
110
110
|
</output>
|
|
111
111
|
|
|
112
112
|
<agent-memory>
|
|
113
|
-
You have a persistent memory directory at `.claude/agent-memory/typescript-pro/`.
|
|
113
|
+
You have a persistent memory directory. Its contents persist across conversations. To find it, look for `agent-memory/typescript-pro/` at the project root first, then fall back to `.claude/agent-memory/typescript-pro/`. Use whichever path exists.
|
|
114
114
|
|
|
115
115
|
As you work, consult your memory files to build on previous experience. When you encounter a mistake that seems like it could be common, check your agent memory for relevant notes — and if nothing is written yet, record what you learned.
|
|
116
116
|
|
package/agents/ux-optimizer.md
CHANGED
|
@@ -66,7 +66,7 @@ Report when done:
|
|
|
66
66
|
</output>
|
|
67
67
|
|
|
68
68
|
<agent-memory>
|
|
69
|
-
You have a persistent memory directory at `.claude/agent-memory/ux-optimizer/`.
|
|
69
|
+
You have a persistent memory directory. Its contents persist across conversations. To find it, look for `agent-memory/ux-optimizer/` at the project root first, then fall back to `.claude/agent-memory/ux-optimizer/`. Use whichever path exists.
|
|
70
70
|
|
|
71
71
|
As you work, consult your memory files to build on previous experience. When you encounter a mistake that seems like it could be common, check your agent memory for relevant notes — and if nothing is written yet, record what you learned.
|
|
72
72
|
|
package/package.json
CHANGED
|
@@ -19,7 +19,7 @@ Working directory: !`pwd`
|
|
|
19
19
|
|
|
20
20
|
Lockfile detected: !`ls bun.lock pnpm-lock.yaml yarn.lock package-lock.json 2>/dev/null | head -1 || echo "none"`
|
|
21
21
|
|
|
22
|
-
Agents installed: !`ls .claude/agents/ 2>/dev/null | tr '\n' ' ' || echo "(not found)"`
|
|
22
|
+
Agents installed: !`ls .claude/agents/ 2>/dev/null | tr '\n' ' ' || ls agents/ 2>/dev/null | tr '\n' ' ' || echo "(not found)"`
|
|
23
23
|
|
|
24
24
|
MCP servers configured: !`python3 -c "import json; s=json.load(open('.claude/settings.json')); print(', '.join(s.get('mcpServers',{}).keys()) or '(none)')" 2>/dev/null || echo "(not found)"`
|
|
25
25
|
|
|
@@ -91,9 +91,17 @@ Discover with Read, Glob, Grep — verify everything, assume nothing.
|
|
|
91
91
|
- typecheck, lint, test, build command names
|
|
92
92
|
- Compose the full run command per workspace (e.g., `pnpm --filter @acme/api typecheck`)
|
|
93
93
|
|
|
94
|
-
**Available skills** —
|
|
95
|
-
|
|
96
|
-
|
|
94
|
+
**Available skills** — search across all scopes in order:
|
|
95
|
+
1. `[plugin-root]/skills/` (plugin or project-local)
|
|
96
|
+
2. `.claude/skills/` in the project root (project scope)
|
|
97
|
+
3. `~/.claude/skills/` (personal scope)
|
|
98
|
+
Merge and deduplicate — plugin-root takes priority.
|
|
99
|
+
|
|
100
|
+
**Available agents** — search across all scopes in order:
|
|
101
|
+
1. `[plugin-root]/agents/` and `[plugin-root]/.claude/agents/` (plugin or project-local)
|
|
102
|
+
2. `.claude/agents/` in the project root (project scope)
|
|
103
|
+
3. `~/.claude/agents/` (personal scope)
|
|
104
|
+
Merge and deduplicate — plugin-root takes priority.
|
|
97
105
|
|
|
98
106
|
**Available MCPs** — read `.claude/settings.json` in project root (and `~/.claude/settings.json` as fallback). Extract `mcpServers` keys.
|
|
99
107
|
</phase_2_project_discovery>
|
|
@@ -75,18 +75,25 @@ correlates with INP but does not replace field measurement.
|
|
|
75
75
|
|
|
76
76
|
When the user provides metric values or a Lighthouse JSON file, generate an interactive HTML report and open it in the browser:
|
|
77
77
|
|
|
78
|
+
To locate the script, find `scripts/visualize.py` relative to this skill's directory. The path depends on how ts-dev-kit is installed:
|
|
79
|
+
- **Project scope**: `skills/core-web-vitals/scripts/visualize.py` or `.claude/skills/core-web-vitals/scripts/visualize.py`
|
|
80
|
+
- **Personal scope**: `~/.claude/skills/core-web-vitals/scripts/visualize.py`
|
|
81
|
+
- **Plugin scope**: resolve via `node_modules/@jgamaraalv/ts-dev-kit/skills/core-web-vitals/scripts/visualize.py`
|
|
82
|
+
|
|
83
|
+
Use `find` or `ls` to discover the actual path, then run:
|
|
84
|
+
|
|
78
85
|
```bash
|
|
79
|
-
# From manual values
|
|
80
|
-
python3
|
|
86
|
+
# From manual values (replace SCRIPT_PATH with the discovered path)
|
|
87
|
+
python3 SCRIPT_PATH/visualize.py \
|
|
81
88
|
--lcp 2.1 --inp 180 --cls 0.05 \
|
|
82
89
|
--url https://example.com
|
|
83
90
|
|
|
84
91
|
# From a Lighthouse JSON output
|
|
85
|
-
python3
|
|
92
|
+
python3 SCRIPT_PATH/visualize.py \
|
|
86
93
|
--lighthouse lighthouse-report.json
|
|
87
94
|
|
|
88
95
|
# Custom output path, no auto-open
|
|
89
|
-
python3
|
|
96
|
+
python3 SCRIPT_PATH/visualize.py \
|
|
90
97
|
--lcp 3.8 --inp 420 --cls 0.12 \
|
|
91
98
|
--output cwv-report.html --no-open
|
|
92
99
|
```
|
|
@@ -72,7 +72,7 @@ After investigation, dispatch the appropriate **specialist agent** (not necessar
|
|
|
72
72
|
[Specific changes needed — be precise about expected behavior]
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
-
Use the agent type that matches the fix domain:
|
|
75
|
+
Use the agent type that matches the fix domain. If ts-dev-kit is installed as a plugin, use the prefixed name (e.g., `ts-dev-kit:api-builder`). Check which agents are available in your context and use the exact registered name:
|
|
76
76
|
- API route fix -> `api-builder` (preloads fastify-best-practices)
|
|
77
77
|
- Database/query fix -> `database-expert` (preloads drizzle-pg, postgresql)
|
|
78
78
|
- Component fix -> `react-specialist` (preloads react-best-practices, composition-patterns)
|
|
@@ -84,6 +84,8 @@ Use the agent type that matches the fix domain:
|
|
|
84
84
|
|
|
85
85
|
## Role-specific prompts
|
|
86
86
|
|
|
87
|
+
> **Note:** All agent types below may be prefixed with `ts-dev-kit:` when the plugin is installed in plugin scope (e.g., `ts-dev-kit:debugger`). Check the available agents in your context and use the exact registered name.
|
|
88
|
+
|
|
87
89
|
### Backend debugger
|
|
88
90
|
|
|
89
91
|
**Agent type**: `debugger`
|
|
@@ -166,9 +168,10 @@ Verification focus:
|
|
|
166
168
|
# Dispatch: MULTI-LAYER
|
|
167
169
|
|
|
168
170
|
# Wave 1: Parallel investigation
|
|
171
|
+
# Use "debugger" or "ts-dev-kit:debugger" depending on scope
|
|
169
172
|
Task(
|
|
170
173
|
description: "Debug resource creation API endpoint",
|
|
171
|
-
subagent_type: "debugger",
|
|
174
|
+
subagent_type: "debugger", // or "ts-dev-kit:debugger" if plugin-scoped
|
|
172
175
|
model: "sonnet",
|
|
173
176
|
prompt: """
|
|
174
177
|
## Bug description
|
|
@@ -195,7 +198,7 @@ Returns 200, but GET /api/<resource> returns empty array.
|
|
|
195
198
|
|
|
196
199
|
Task(
|
|
197
200
|
description: "Debug resource list page",
|
|
198
|
-
subagent_type: "debugger",
|
|
201
|
+
subagent_type: "debugger", // or "ts-dev-kit:debugger" if plugin-scoped
|
|
199
202
|
model: "sonnet",
|
|
200
203
|
prompt: """
|
|
201
204
|
## Bug description
|
|
@@ -219,12 +222,12 @@ stale data.
|
|
|
219
222
|
)
|
|
220
223
|
|
|
221
224
|
# Wave 2: Dispatch fixes using specialist agents matching the fix domain
|
|
222
|
-
# e.g., api-builder
|
|
225
|
+
# e.g., api-builder (or ts-dev-kit:api-builder) for API fix
|
|
223
226
|
|
|
224
227
|
# Wave 3: E2E verification
|
|
225
228
|
Task(
|
|
226
229
|
description: "Verify resource creation flow",
|
|
227
|
-
subagent_type: "playwright-expert",
|
|
230
|
+
subagent_type: "playwright-expert", // or "ts-dev-kit:playwright-expert"
|
|
228
231
|
model: "haiku",
|
|
229
232
|
prompt: """
|
|
230
233
|
## Your task
|
|
@@ -150,10 +150,12 @@ Identify MCPs that can assist execution:
|
|
|
150
150
|
- chrome-devtools — inspect pages, debug network requests, check console
|
|
151
151
|
- firecrawl — fetch external documentation or references from the web
|
|
152
152
|
|
|
153
|
-
**Context7 usage**:
|
|
153
|
+
**Context7 usage — MANDATORY for config and versioned APIs**: Many tools have breaking config changes across minor versions. **Before writing or modifying ANY configuration file** for versioned tools (OTel collector, Prometheus, Grafana, Loki, Tempo, Docker Compose, Drizzle, Fastify, Next.js, Redis, BullMQ, Nginx, etc.), you MUST query Context7 first to verify the correct syntax for the installed version. Do NOT try variations blindly — guess-looping config fixes wastes context and compounds errors.
|
|
154
|
+
|
|
154
155
|
1. `mcp__context7__resolve-library-id` — resolve the library name (e.g., "fastify", "drizzle-orm", "next", "react", "bullmq") to its Context7 ID.
|
|
155
|
-
2. `mcp__context7__query-docs` — query with the specific API,
|
|
156
|
-
|
|
156
|
+
2. `mcp__context7__query-docs` — query with the specific API, config key, or pattern you need.
|
|
157
|
+
|
|
158
|
+
This applies to ALL roles: orchestrator, dispatched agents, and ad-hoc specialists. Check the project's package.json for installed versions first. In MULTI-ROLE mode, include these Context7 instructions in each agent prompt so agents query docs themselves before writing config.
|
|
157
159
|
</available_mcps>
|
|
158
160
|
</phase_2_role_assignment>
|
|
159
161
|
|
|
@@ -176,11 +178,11 @@ Do not decompose if:
|
|
|
176
178
|
Each role gets its own persona, skill set, context files, and success criteria.
|
|
177
179
|
|
|
178
180
|
<example>
|
|
179
|
-
Role A: Database specialist (sub-area: Database). Agent: database-expert. Task: design schema + migration for the new feature. Skills: drizzle-pg, postgresql.
|
|
180
|
-
Role B: API endpoint developer (sub-area: Endpoints). Agent: api-builder. Task: build REST routes consuming the new schema. Skills: fastify-best-practices.
|
|
181
|
-
Role C: Component architect (sub-area: Components). Agent: react-specialist. Task: build the result card and list components. Skills: react-best-practices, composition-patterns.
|
|
181
|
+
Role A: Database specialist (sub-area: Database). Agent: database-expert (or ts-dev-kit:database-expert if plugin-scoped). Task: design schema + migration for the new feature. Skills: drizzle-pg, postgresql.
|
|
182
|
+
Role B: API endpoint developer (sub-area: Endpoints). Agent: api-builder (or ts-dev-kit:api-builder). Task: build REST routes consuming the new schema. Skills: fastify-best-practices.
|
|
183
|
+
Role C: Component architect (sub-area: Components). Agent: react-specialist (or ts-dev-kit:react-specialist). Task: build the result card and list components. Skills: react-best-practices, composition-patterns.
|
|
182
184
|
Role D: Page builder (sub-area: Pages/routing). Agent: general-purpose (ad-hoc). Task: wire components into the search results page with data fetching. Skills: nextjs-best-practices.
|
|
183
|
-
Role E: TypeScript library developer. Agent: typescript-pro. Task: add shared schemas and types. Skills: none extra.
|
|
185
|
+
Role E: TypeScript library developer. Agent: typescript-pro (or ts-dev-kit:typescript-pro). Task: add shared schemas and types. Skills: none extra.
|
|
184
186
|
</example>
|
|
185
187
|
</rule_1_define_roles_independently>
|
|
186
188
|
|
|
@@ -188,8 +190,11 @@ Role E: TypeScript library developer. Agent: typescript-pro. Task: add shared sc
|
|
|
188
190
|
For each role, spawn a specialized subagent via the Task tool.
|
|
189
191
|
|
|
190
192
|
**Selecting the agent type:**
|
|
191
|
-
1.
|
|
192
|
-
|
|
193
|
+
1. **Resolve the agent name for the current scope.** Agents may be registered under different names depending on how ts-dev-kit is installed:
|
|
194
|
+
- **Project scope** (`.claude/agents/`): short name — e.g., `database-expert`
|
|
195
|
+
- **Plugin scope**: prefixed with the plugin namespace — e.g., `ts-dev-kit:database-expert`
|
|
196
|
+
Before dispatching, check which agents are available in your context. If you see agents with a `ts-dev-kit:` prefix, use the prefixed name as `subagent_type`. If agents are available by short name, use the short name.
|
|
197
|
+
2. If a matching agent exists (in any scope), use its resolved name as `subagent_type`.
|
|
193
198
|
3. If no matching agent exists, use `general-purpose` as `subagent_type` and embed the full role definition directly in the prompt — this creates an ad-hoc specialist without needing a .md file.
|
|
194
199
|
|
|
195
200
|
**Ad-hoc agent creation** — when `subagent_type: "general-purpose"` is used as a specialist surrogate, the prompt must include:
|
|
@@ -233,7 +238,7 @@ Each agent prompt must follow the template in references/agent-dispatch.md. The
|
|
|
233
238
|
|
|
234
239
|
<rule_3_execution_order>
|
|
235
240
|
Decide the execution order based on file conflicts and dependencies:
|
|
236
|
-
- **Parallel**: roles touch independent files with no data dependency → launch multiple Task calls in one message.
|
|
241
|
+
- **Parallel**: roles touch independent files with no data dependency → launch multiple Task calls in one message. **CRITICAL: "parallel" means sending ALL independent Task() calls in a SINGLE assistant message. If you announce "dispatching 3 agents in parallel" you MUST include exactly 3 Task() tool calls in that same message. Announcing parallel dispatch and then sending only 1 Task() is a violation of this protocol.**
|
|
237
242
|
- **Sequential**: one role's output is another's input → await the blocker first.
|
|
238
243
|
- **Worktree isolation**: roles touch overlapping files but are otherwise independent → set `isolation: "worktree"` on the Task tool.
|
|
239
244
|
</rule_3_execution_order>
|
|
@@ -363,7 +368,7 @@ As orchestrator, your responsibilities are: context gathering, agent dispatch, o
|
|
|
363
368
|
**Dispatch steps:**
|
|
364
369
|
1. Create TaskCreate entries for each role to track progress.
|
|
365
370
|
2. For each role, dispatch a specialized agent via the Task tool with a self-contained prompt. Set the `model` parameter according to rule_4_model_selection.
|
|
366
|
-
3. Launch independent agents in parallel. Launch dependent agents sequentially.
|
|
371
|
+
3. **Launch independent agents in parallel — this means multiple Task() calls in a SINGLE message.** Do NOT sequentialize independent agents. If you have 3 independent tasks, your message must contain 3 Task() tool calls. Launch dependent agents sequentially (wait for blockers to complete first).
|
|
367
372
|
4. Each agent runs its own quality gates before reporting completion. Review the agent's output and gate results before dispatching dependents.
|
|
368
373
|
5. After all agents complete, proceed to phase 5 for the final cross-package quality gates.
|
|
369
374
|
|
|
@@ -400,7 +405,7 @@ For monorepos, run these for each affected workspace/package. Discover the works
|
|
|
400
405
|
|
|
401
406
|
If a gate fails:
|
|
402
407
|
- Read the error output carefully.
|
|
403
|
-
-
|
|
408
|
+
- **CRITICAL: Dispatch an agent to fix the errors — do NOT fix them inline in the orchestrator session.** Fixing errors inline exhausts the context window and triggers compaction mid-task. Dispatch a `debugger` agent (for investigation) or the appropriate specialist agent (e.g., `typescript-pro` for type errors, `api-builder` for route errors) to fix the issues. The orchestrator's role is to read the error, decide which agent can fix it, and dispatch — never to edit application code itself.
|
|
404
409
|
- Re-run all gates from step 1, since a fix may introduce new issues.
|
|
405
410
|
- Repeat until all gates pass cleanly.
|
|
406
411
|
</phase_5_quality_gates>
|
|
@@ -427,6 +432,31 @@ After all quality gates pass, review whether the changes require documentation u
|
|
|
427
432
|
|
|
428
433
|
Only update documentation directly affected by the changes. Do not create new documentation files unless the changes introduce a new package or major feature with no existing docs.
|
|
429
434
|
</phase_6_documentation>
|
|
435
|
+
|
|
436
|
+
<orchestrator_anti_patterns>
|
|
437
|
+
## Orchestrator Anti-Patterns — NEVER do these
|
|
438
|
+
|
|
439
|
+
These are recurring mistakes. Violating any of these rules degrades execution quality and wastes context.
|
|
440
|
+
|
|
441
|
+
### 1. Never fix errors in the main thread
|
|
442
|
+
When quality gates (tsc/lint/test/build) fail during execution, **dispatch an isolated agent** to fix them. Do NOT attempt fixes in the main orchestrator session. Fixing inline exhausts the context window and triggers compaction mid-task, losing critical execution state.
|
|
443
|
+
|
|
444
|
+
### 2. Never guess-loop config fixes
|
|
445
|
+
When a tool or config isn't working (e.g., OTel collector pipeline, Prometheus scraping, Docker networking, Drizzle config, Fastify plugin options), use **Context7 immediately** to query the library docs for the installed version. Do NOT try variations blindly. Query with `mcp__context7__resolve-library-id` + `mcp__context7__query-docs` **before** touching any config file.
|
|
446
|
+
|
|
447
|
+
### 3. Never announce parallel dispatch without delivering it
|
|
448
|
+
If you announce "dispatching 3 agents in parallel", your message MUST contain exactly 3 Task() tool calls. Announcing parallel dispatch and then only sending 1 Task() is a protocol violation. Count your Task() calls before sending. If agents are independent, they go in the SAME message.
|
|
449
|
+
|
|
450
|
+
### 4. Never write application code as orchestrator
|
|
451
|
+
The orchestrator reads, analyzes, dispatches, reviews, and runs quality gates. It does NOT write components, hooks, routes, services, migrations, tests, or any application logic. The only code the orchestrator may write is trivial integration glue (under 15 lines): barrel exports, small wiring imports, or config one-liners.
|
|
452
|
+
|
|
453
|
+
### Self-check before sending each message
|
|
454
|
+
Before sending any message during execution, verify:
|
|
455
|
+
- [ ] Am I about to write application code? → STOP, dispatch an agent instead.
|
|
456
|
+
- [ ] Am I about to modify a config without querying docs? → STOP, use Context7 first.
|
|
457
|
+
- [ ] Did I announce N parallel agents? → Count my Task() calls. Are there N? If not, add the missing ones.
|
|
458
|
+
- [ ] Did a quality gate fail? → STOP, dispatch a specialist agent to fix it.
|
|
459
|
+
</orchestrator_anti_patterns>
|
|
430
460
|
</workflow>
|
|
431
461
|
|
|
432
462
|
<output>
|
|
@@ -44,6 +44,8 @@ Agents with preloaded skills (via `skills` frontmatter) do NOT need Skill() call
|
|
|
44
44
|
| typescript-pro | (none) | — |
|
|
45
45
|
| playwright-expert | (none) | — |
|
|
46
46
|
|
|
47
|
+
> **Note:** When ts-dev-kit is installed as a plugin, agent names are prefixed with the plugin namespace (e.g., `ts-dev-kit:api-builder` instead of `api-builder`). Always check the available agents in your context and use the full registered name as `subagent_type`.
|
|
48
|
+
|
|
47
49
|
### Agent tool restrictions
|
|
48
50
|
|
|
49
51
|
| Agent | Restriction |
|
|
@@ -68,9 +70,11 @@ All agents default to `sonnet`. Override with the Task tool's `model` parameter
|
|
|
68
70
|
## Dispatch example
|
|
69
71
|
|
|
70
72
|
```
|
|
73
|
+
// Use the agent name as registered in your context.
|
|
74
|
+
// Project-scoped: "api-builder". Plugin-scoped: "ts-dev-kit:api-builder".
|
|
71
75
|
Task(
|
|
72
76
|
description: "Build resource API routes",
|
|
73
|
-
subagent_type: "api-builder",
|
|
77
|
+
subagent_type: "api-builder", // or "ts-dev-kit:api-builder" if plugin-scoped
|
|
74
78
|
model: "sonnet",
|
|
75
79
|
prompt: """
|
|
76
80
|
## Your task
|
|
@@ -97,7 +101,10 @@ Discover from the codebase:
|
|
|
97
101
|
|
|
98
102
|
Before dispatching, resolve the agent type for each role:
|
|
99
103
|
|
|
100
|
-
1. **
|
|
104
|
+
1. **Resolve the agent name for the current scope.** Agents may be registered with a plugin prefix depending on how ts-dev-kit is installed:
|
|
105
|
+
- **Project scope** (`.claude/agents/`): short name — e.g., `api-builder`
|
|
106
|
+
- **Plugin scope**: prefixed — e.g., `ts-dev-kit:api-builder`
|
|
107
|
+
Check which agents are available in your context and use the exact registered name as `subagent_type`.
|
|
101
108
|
2. **Use a built-in agent type** — if the Task tool has a matching built-in type (e.g., `typescript-pro`, `performance-engineer`, `security-scanner`), use it directly.
|
|
102
109
|
3. **Create an ad-hoc specialist** — if no existing agent matches, use `subagent_type: "general-purpose"` and embed the full specialist definition in the prompt.
|
|
103
110
|
|
|
@@ -153,4 +160,6 @@ Report when done:
|
|
|
153
160
|
1. **Subagents cannot spawn other subagents.** All dispatch happens from the main session.
|
|
154
161
|
2. **Agent prompts should be concise and task-specific.** Project agents already include project context, conventions, principles, and quality gates in their system prompt. Only include information the agent doesn't already have.
|
|
155
162
|
3. **Ad-hoc prompts must be fully self-contained.** The `general-purpose` agent has no project context, so the prompt must include everything: role, project context, conventions, skills to load, quality gates, and output format.
|
|
156
|
-
4. **Review each agent's output before dispatching dependents.** If an agent failed or produced unexpected results, fix
|
|
163
|
+
4. **Review each agent's output before dispatching dependents.** If an agent failed or produced unexpected results, dispatch a fix agent — do NOT fix inline in the orchestrator.
|
|
164
|
+
5. **Parallel means parallel.** When dispatching independent agents, include ALL Task() calls in a single message. If you announce "dispatching 3 agents in parallel", there must be exactly 3 Task() tool calls in that message. Never sequentialize independent work.
|
|
165
|
+
6. **Context7 before config.** Before writing or modifying ANY configuration file for a versioned tool, query Context7 to verify the correct syntax for the installed version. Do not guess-loop config variations.
|
package/skills/yolo/SKILL.md
CHANGED
|
@@ -48,8 +48,11 @@ Follow this decision tree strictly. Each phase gates the next.
|
|
|
48
48
|
START
|
|
49
49
|
│
|
|
50
50
|
├─ Phase 1: Detect devcontainer
|
|
51
|
-
│ ├─ EXISTS → Phase
|
|
52
|
-
│ └─ MISSING → Phase 5 (install) → Phase
|
|
51
|
+
│ ├─ EXISTS → Phase 1.5
|
|
52
|
+
│ └─ MISSING → Phase 5 (install) → Phase 1.5
|
|
53
|
+
│
|
|
54
|
+
├─ Phase 1.5: Ensure plugin availability
|
|
55
|
+
│ └─ Copy agents/skills/agent-memory into project if missing → Phase 2
|
|
53
56
|
│
|
|
54
57
|
├─ Phase 2: Check Docker
|
|
55
58
|
│ ├─ RUNNING → Phase 3
|
|
@@ -62,7 +65,7 @@ START
|
|
|
62
65
|
│ └─ Start Docker Desktop/daemon → Phase 3
|
|
63
66
|
│
|
|
64
67
|
└─ Phase 5: Install devcontainer
|
|
65
|
-
└─ Scaffold .devcontainer/ → Phase
|
|
68
|
+
└─ Scaffold .devcontainer/ → Phase 1.5
|
|
66
69
|
```
|
|
67
70
|
|
|
68
71
|
<phase_1_detect>
|
|
@@ -72,9 +75,9 @@ START
|
|
|
72
75
|
Check whether `.devcontainer/devcontainer.json` exists in the project root.
|
|
73
76
|
|
|
74
77
|
1. Read the `<live_context>` above for the pre-injected detection result.
|
|
75
|
-
2. If **YES** — announce to the user and proceed to Phase
|
|
78
|
+
2. If **YES** — announce to the user and proceed to Phase 1.5:
|
|
76
79
|
|
|
77
|
-
> **DEVCONTAINER DETECTED** — `.devcontainer/` found. Checking
|
|
80
|
+
> **DEVCONTAINER DETECTED** — `.devcontainer/` found. Checking plugin availability...
|
|
78
81
|
|
|
79
82
|
3. If **NO** — announce and proceed to Phase 5:
|
|
80
83
|
|
|
@@ -82,6 +85,89 @@ Check whether `.devcontainer/devcontainer.json` exists in the project root.
|
|
|
82
85
|
|
|
83
86
|
</phase_1_detect>
|
|
84
87
|
|
|
88
|
+
<phase_1_5_ensure_plugin>
|
|
89
|
+
|
|
90
|
+
## Phase 1.5 — Ensure plugin availability
|
|
91
|
+
|
|
92
|
+
The devcontainer mounts only the project directory at `/workspace`. If ts-dev-kit is installed as a plugin (outside the project), its agents, skills, and agent-memory won't be available inside the container. This phase copies them into the project so they're accessible.
|
|
93
|
+
|
|
94
|
+
### Step 1 — Check if agents and skills already exist in the project
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
ls .claude/agents/*.md 2>/dev/null && echo "AGENTS_PRESENT" || echo "AGENTS_MISSING"
|
|
98
|
+
ls .claude/skills/*/SKILL.md 2>/dev/null && echo "SKILLS_PRESENT" || echo "SKILLS_MISSING"
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
If both are present, skip to Phase 2:
|
|
102
|
+
|
|
103
|
+
> **PLUGIN FILES PRESENT** — agents and skills found in project. Checking Docker status...
|
|
104
|
+
|
|
105
|
+
### Step 2 — Locate the plugin source
|
|
106
|
+
|
|
107
|
+
If agents or skills are missing, search for the plugin in these locations (in order):
|
|
108
|
+
|
|
109
|
+
1. `node_modules/@jgamaraalv/ts-dev-kit/` (npm-installed plugin)
|
|
110
|
+
2. The directory containing this skill file (if invoked from a known path)
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# Try npm location
|
|
114
|
+
PLUGIN_SRC="node_modules/@jgamaraalv/ts-dev-kit"
|
|
115
|
+
if [ ! -d "$PLUGIN_SRC/agents" ]; then
|
|
116
|
+
echo "Plugin not found in node_modules"
|
|
117
|
+
PLUGIN_SRC=""
|
|
118
|
+
fi
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
If the plugin source cannot be found, inform the user and proceed to Phase 2 (the devcontainer will work but without ts-dev-kit agents):
|
|
122
|
+
|
|
123
|
+
> **PLUGIN NOT FOUND** — Could not locate ts-dev-kit plugin files. The devcontainer will work but agents and skills won't be available. Install the plugin with `npm install -D @jgamaraalv/ts-dev-kit` to fix this.
|
|
124
|
+
|
|
125
|
+
### Step 3 — Copy plugin files into the project
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
# Copy agents
|
|
129
|
+
mkdir -p .claude/agents
|
|
130
|
+
cp "$PLUGIN_SRC"/agents/*.md .claude/agents/
|
|
131
|
+
|
|
132
|
+
# Copy skills (symlink directories to save space)
|
|
133
|
+
mkdir -p .claude/skills
|
|
134
|
+
for skill_dir in "$PLUGIN_SRC"/skills/*/; do
|
|
135
|
+
skill_name=$(basename "$skill_dir")
|
|
136
|
+
if [ ! -e ".claude/skills/$skill_name" ]; then
|
|
137
|
+
cp -r "$skill_dir" ".claude/skills/$skill_name"
|
|
138
|
+
fi
|
|
139
|
+
done
|
|
140
|
+
|
|
141
|
+
# Copy agent-memory scaffolds (don't overwrite existing memories)
|
|
142
|
+
if [ -d "$PLUGIN_SRC/agent-memory" ]; then
|
|
143
|
+
for mem_dir in "$PLUGIN_SRC"/agent-memory/*/; do
|
|
144
|
+
mem_name=$(basename "$mem_dir")
|
|
145
|
+
if [ ! -d "agent-memory/$mem_name" ]; then
|
|
146
|
+
mkdir -p "agent-memory/$mem_name"
|
|
147
|
+
cp -n "$mem_dir"* "agent-memory/$mem_name/" 2>/dev/null || true
|
|
148
|
+
fi
|
|
149
|
+
done
|
|
150
|
+
fi
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Step 4 — Suggest .gitignore update
|
|
154
|
+
|
|
155
|
+
Check if these copied directories are already in `.gitignore`. If not, inform the user:
|
|
156
|
+
|
|
157
|
+
> **PLUGIN FILES COPIED** — Agents, skills, and agent-memory copied into the project for devcontainer access.
|
|
158
|
+
>
|
|
159
|
+
> Consider adding these to `.gitignore` if you don't want to commit them:
|
|
160
|
+
> ```
|
|
161
|
+
> # ts-dev-kit plugin files (copied for devcontainer)
|
|
162
|
+
> .claude/agents/
|
|
163
|
+
> .claude/skills/
|
|
164
|
+
> agent-memory/
|
|
165
|
+
> ```
|
|
166
|
+
|
|
167
|
+
Proceed to Phase 2.
|
|
168
|
+
|
|
169
|
+
</phase_1_5_ensure_plugin>
|
|
170
|
+
|
|
85
171
|
<phase_2_check_docker>
|
|
86
172
|
|
|
87
173
|
## Phase 2 — Check Docker
|
|
@@ -288,9 +374,9 @@ cat .devcontainer/devcontainer.json | head -5
|
|
|
288
374
|
|
|
289
375
|
Announce completion:
|
|
290
376
|
|
|
291
|
-
> **DEVCONTAINER INSTALLED** — `.devcontainer/` is ready with Dockerfile, firewall script, and configuration.
|
|
377
|
+
> **DEVCONTAINER INSTALLED** — `.devcontainer/` is ready with Dockerfile, firewall script, and configuration. Checking plugin availability...
|
|
292
378
|
|
|
293
|
-
Return to Phase
|
|
379
|
+
Return to Phase 1.5.
|
|
294
380
|
|
|
295
381
|
</phase_5_install_devcontainer>
|
|
296
382
|
|