@gcunharodrigues/wrxn 0.1.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/LICENSE +21 -0
- package/README.md +38 -0
- package/bin/wrxn.cjs +342 -0
- package/lib/connect.cjs +216 -0
- package/lib/executor.cjs +238 -0
- package/lib/install.cjs +105 -0
- package/lib/manifest.cjs +67 -0
- package/lib/migrate.cjs +93 -0
- package/lib/onboard.cjs +84 -0
- package/lib/semver.cjs +14 -0
- package/lib/update.cjs +91 -0
- package/lib/worktree.cjs +217 -0
- package/manifest.json +451 -0
- package/migrations/README.md +21 -0
- package/package.json +23 -0
- package/payload/.claude/constitution.local.md +13 -0
- package/payload/.claude/constitution.md +28 -0
- package/payload/.claude/hooks/code-intel-push.cjs +108 -0
- package/payload/.claude/hooks/enforce-managed-guard.cjs +68 -0
- package/payload/.claude/hooks/enforce-managed-precommit.cjs +74 -0
- package/payload/.claude/hooks/enforce-push-authority.cjs +51 -0
- package/payload/.claude/hooks/enforce-review-marker.cjs +62 -0
- package/payload/.claude/hooks/enforce-tests-on-push.cjs +40 -0
- package/payload/.claude/hooks/recall-surface.cjs +127 -0
- package/payload/.claude/hooks/reference-detect.cjs +83 -0
- package/payload/.claude/hooks/session-end.cjs +132 -0
- package/payload/.claude/hooks/session-history.cjs +76 -0
- package/payload/.claude/hooks/session-start.cjs +117 -0
- package/payload/.claude/hooks/synapse-engine.cjs +351 -0
- package/payload/.claude/hooks/wiki-lint.cjs +104 -0
- package/payload/.claude/settings.json +60 -0
- package/payload/.claude/skills/audit/SKILL.md +23 -0
- package/payload/.claude/skills/diagnose/SKILL.md +117 -0
- package/payload/.claude/skills/diagnose/scripts/hitl-loop.template.sh +41 -0
- package/payload/.claude/skills/grill-me/SKILL.md +10 -0
- package/payload/.claude/skills/grill-with-docs/ADR-FORMAT.md +47 -0
- package/payload/.claude/skills/grill-with-docs/CONTEXT-FORMAT.md +60 -0
- package/payload/.claude/skills/grill-with-docs/SKILL.md +88 -0
- package/payload/.claude/skills/handoff/SKILL.md +19 -0
- package/payload/.claude/skills/improve-codebase-architecture/DEEPENING.md +37 -0
- package/payload/.claude/skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
- package/payload/.claude/skills/improve-codebase-architecture/INTERFACE-DESIGN.md +44 -0
- package/payload/.claude/skills/improve-codebase-architecture/LANGUAGE.md +53 -0
- package/payload/.claude/skills/improve-codebase-architecture/SKILL.md +81 -0
- package/payload/.claude/skills/level-up/SKILL.md +28 -0
- package/payload/.claude/skills/memory/SKILL.md +79 -0
- package/payload/.claude/skills/onboard/SKILL.md +43 -0
- package/payload/.claude/skills/prototype/LOGIC.md +79 -0
- package/payload/.claude/skills/prototype/SKILL.md +30 -0
- package/payload/.claude/skills/prototype/UI.md +112 -0
- package/payload/.claude/skills/qa-walk/SKILL.md +227 -0
- package/payload/.claude/skills/qa-walk/references/cli-mode.md +28 -0
- package/payload/.claude/skills/qa-walk/references/finding-issue-template.md +48 -0
- package/payload/.claude/skills/qa-walk/references/walk-report-template.md +56 -0
- package/payload/.claude/skills/qa-walk/references/web-mode.md +112 -0
- package/payload/.claude/skills/setup-matt-pocock-skills/SKILL.md +121 -0
- package/payload/.claude/skills/setup-matt-pocock-skills/domain.md +51 -0
- package/payload/.claude/skills/setup-matt-pocock-skills/issue-tracker-github.md +22 -0
- package/payload/.claude/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +23 -0
- package/payload/.claude/skills/setup-matt-pocock-skills/issue-tracker-local.md +19 -0
- package/payload/.claude/skills/setup-matt-pocock-skills/triage-labels.md +15 -0
- package/payload/.claude/skills/skill-creator/LICENSE.txt +202 -0
- package/payload/.claude/skills/skill-creator/SKILL.md +209 -0
- package/payload/.claude/skills/skill-creator/scripts/init_skill.py +303 -0
- package/payload/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
- package/payload/.claude/skills/skill-creator/scripts/quick_validate.py +65 -0
- package/payload/.claude/skills/synapse/SKILL.md +132 -0
- package/payload/.claude/skills/synapse/assets/README.md +50 -0
- package/payload/.claude/skills/synapse/references/brackets.md +100 -0
- package/payload/.claude/skills/synapse/references/commands.md +118 -0
- package/payload/.claude/skills/synapse/references/domains.md +126 -0
- package/payload/.claude/skills/synapse/references/layers.md +186 -0
- package/payload/.claude/skills/synapse/references/manifest.md +142 -0
- package/payload/.claude/skills/tdd/SKILL.md +22 -0
- package/payload/.claude/skills/tech-search/SKILL.md +431 -0
- package/payload/.claude/skills/tech-search/prompts/page-extract.md +133 -0
- package/payload/.claude/skills/to-issues/SKILL.md +83 -0
- package/payload/.claude/skills/to-prd/SKILL.md +74 -0
- package/payload/.claude/skills/triage/AGENT-BRIEF.md +168 -0
- package/payload/.claude/skills/triage/OUT-OF-SCOPE.md +101 -0
- package/payload/.claude/skills/triage/SKILL.md +103 -0
- package/payload/.claude/skills/write-a-skill/SKILL.md +117 -0
- package/payload/.recon.json +3 -0
- package/payload/.synapse/global +6 -0
- package/payload/.synapse/manifest +38 -0
- package/payload/.synapse/pipeline +6 -0
- package/payload/.synapse/routing +8 -0
- package/payload/.wrxn/continuity/.gitkeep +0 -0
- package/payload/.wrxn/history/.gitkeep +0 -0
- package/payload/.wrxn/wiki/.gitkeep +0 -0
- package/payload/.wrxn/wiki/concepts/.gitkeep +0 -0
- package/payload/.wrxn/wiki/decisions/.gitkeep +0 -0
- package/payload/.wrxn/wiki/gotchas/.gitkeep +0 -0
- package/payload/.wrxn/wiki/sessions/.gitkeep +0 -0
- package/payload/.wrxn/wiki.cjs +164 -0
- package/payload/aios-intake.md +32 -0
- package/payload/connections.md +15 -0
- package/payload/decisions/log.md +18 -0
- package/payload/docs/agents/domain.md +38 -0
- package/payload/docs/agents/issue-tracker.md +25 -0
- package/payload/docs/agents/triage-labels.md +15 -0
- package/payload/docs/workspace/operator-layer.md +14 -0
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tech-search
|
|
3
|
+
description: |
|
|
4
|
+
Self-contained deep tech research. WebSearch + WebFetch + Haiku workers.
|
|
5
|
+
Pipeline: Query > Decompose > Parallel Search (Haiku) > Evaluate > Synthesize > Document.
|
|
6
|
+
Zero external dependencies. MCPs optional.
|
|
7
|
+
Salva em docs/research/{YYYY-MM-DD}-{slug}/.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Tech Search
|
|
11
|
+
|
|
12
|
+
Self-contained deep research pipeline. Zero external dependencies.
|
|
13
|
+
|
|
14
|
+
## Quick Start
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
/tech-search "React Server Components vs Client Components"
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Activation
|
|
21
|
+
|
|
22
|
+
1. Parse query from `$ARGUMENTS` (or ask if not provided)
|
|
23
|
+
2. Execute 6-phase workflow
|
|
24
|
+
3. Save to `docs/research/{YYYY-MM-DD}-{slug}/`
|
|
25
|
+
|
|
26
|
+
**CRITICAL:**
|
|
27
|
+
- NEVER implement code. Redirect to @pm or @dev.
|
|
28
|
+
- NEVER write files outside `docs/research/`.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## SKILL DEFINITION
|
|
33
|
+
|
|
34
|
+
```yaml
|
|
35
|
+
skill:
|
|
36
|
+
name: Tech Search
|
|
37
|
+
id: tech-search
|
|
38
|
+
|
|
39
|
+
veto_conditions:
|
|
40
|
+
- id: VETO_NO_RESULTS
|
|
41
|
+
trigger: "ALL search waves return 0 results"
|
|
42
|
+
action: "STOP + Report: 'No results found. Reformulate query or check connectivity.'"
|
|
43
|
+
|
|
44
|
+
- id: VETO_IMPLEMENTATION_REQUEST
|
|
45
|
+
trigger: "User asks to implement, code, create agent/skill, or deploy"
|
|
46
|
+
action: "REDIRECT: 'Implementation is not my scope. Use @pm for prioritization or @dev for execution.'"
|
|
47
|
+
keywords:
|
|
48
|
+
- "implementa"
|
|
49
|
+
- "cria o agent"
|
|
50
|
+
- "cria a skill"
|
|
51
|
+
- "faz o codigo"
|
|
52
|
+
- "escreve o codigo"
|
|
53
|
+
- "desenvolve"
|
|
54
|
+
- "deploy"
|
|
55
|
+
- "implement"
|
|
56
|
+
- "build this"
|
|
57
|
+
- "code this"
|
|
58
|
+
|
|
59
|
+
- id: VETO_FORBIDDEN_PATH
|
|
60
|
+
trigger: "Attempt to write outside docs/research/"
|
|
61
|
+
action: "BLOCK + Error: 'Writing outside docs/research/ is forbidden.'"
|
|
62
|
+
|
|
63
|
+
constraints:
|
|
64
|
+
forbidden_actions:
|
|
65
|
+
- NEVER implement code, agents, skills, or production artifacts
|
|
66
|
+
- NEVER create files outside docs/research/
|
|
67
|
+
- NEVER write to .claude/agents/, .claude/skills/, squads/, app/, lib/
|
|
68
|
+
|
|
69
|
+
tool_hierarchy:
|
|
70
|
+
search:
|
|
71
|
+
1_preferred: "Exa MCP (mcp__exa__web_search_exa) - if available"
|
|
72
|
+
2_fallback: "WebSearch (always available)"
|
|
73
|
+
detection: "Try Exa first. If 401/429/503, set exa_available=false, use WebSearch."
|
|
74
|
+
|
|
75
|
+
docs:
|
|
76
|
+
1_preferred: "Context7 MCP (mcp__context7__resolve-library-id + query-docs) - if available"
|
|
77
|
+
2_fallback: "WebSearch with 'site:{library}.dev docs' or 'site:{library}.io docs'"
|
|
78
|
+
detection: "Try Context7 first. If fails, set context7_available=false."
|
|
79
|
+
|
|
80
|
+
deep_read:
|
|
81
|
+
only: "WebFetch with prompts/page-extract.md prompt"
|
|
82
|
+
note: "No ETL, no Bash, no external scripts. Pure WebFetch."
|
|
83
|
+
|
|
84
|
+
workers:
|
|
85
|
+
type: "general-purpose"
|
|
86
|
+
model: "haiku"
|
|
87
|
+
max_parallel: 5
|
|
88
|
+
max_deep_reads_per_worker: 3
|
|
89
|
+
|
|
90
|
+
workflow:
|
|
91
|
+
phases:
|
|
92
|
+
|
|
93
|
+
# ──────────────────────────────────────────────
|
|
94
|
+
# PHASE 1: AUTO-CLARIFY
|
|
95
|
+
# ──────────────────────────────────────────────
|
|
96
|
+
1_auto_clarify:
|
|
97
|
+
name: "Auto-Clarification"
|
|
98
|
+
model_tier: "MAIN MODEL (inline)"
|
|
99
|
+
description: |
|
|
100
|
+
Pattern matching + technology detection on the user query.
|
|
101
|
+
Determines if clarification is needed or can be skipped.
|
|
102
|
+
|
|
103
|
+
execution: |
|
|
104
|
+
1. Read user query (original text, unmodified)
|
|
105
|
+
|
|
106
|
+
2. PATTERN MATCHING (case-insensitive):
|
|
107
|
+
- Technical keywords: "code", "implement", "how to", "api", "bug",
|
|
108
|
+
"error", "debug", "library", "sdk", "tutorial", "example"
|
|
109
|
+
→ inferred_context.focus = "technical"
|
|
110
|
+
- Comparison keywords: "compare", "vs", "versus", "difference",
|
|
111
|
+
"better", "alternative", "tradeoff", "pros and cons"
|
|
112
|
+
→ inferred_context.focus = "comparison"
|
|
113
|
+
- Recency keywords: "latest", "new", "2024", "2025", "2026",
|
|
114
|
+
"recent", "state of the art", "trending"
|
|
115
|
+
→ inferred_context.temporal = "recent"
|
|
116
|
+
→ Append current year to search queries
|
|
117
|
+
|
|
118
|
+
3. TECHNOLOGY DETECTION (case-insensitive):
|
|
119
|
+
Scan for known technologies:
|
|
120
|
+
- Languages: JavaScript/JS, TypeScript/TS, Python, Java, Go, Rust, C#, Ruby, PHP
|
|
121
|
+
- Frameworks: React, Next.js, Vue, Angular, Svelte, Express, FastAPI, Django, Flask
|
|
122
|
+
- Databases: PostgreSQL, MySQL, MongoDB, Redis, Supabase, Firebase, Elasticsearch
|
|
123
|
+
- AI/ML: LLM, RAG, LangChain, OpenAI, Claude, Anthropic, TensorFlow, PyTorch
|
|
124
|
+
- Infra: Docker, Kubernetes, AWS, Vercel, GraphQL, REST, WebSocket
|
|
125
|
+
→ Collect into inferred_context.domain = [list]
|
|
126
|
+
|
|
127
|
+
4. DECISION:
|
|
128
|
+
- IF any pattern OR technology detected → skip clarification
|
|
129
|
+
- IF nothing detected → ask ONE question:
|
|
130
|
+
"Your query seems broad. What is the focus and technical context?"
|
|
131
|
+
|
|
132
|
+
output: "inferred_context object {focus, temporal, domain, skip_clarification}"
|
|
133
|
+
|
|
134
|
+
# ──────────────────────────────────────────────
|
|
135
|
+
# PHASE 2: DECOMPOSE
|
|
136
|
+
# ──────────────────────────────────────────────
|
|
137
|
+
2_decompose:
|
|
138
|
+
name: "Query Decomposition"
|
|
139
|
+
model_tier: "MAIN MODEL"
|
|
140
|
+
description: |
|
|
141
|
+
Decomposes user query into 5-7 atomic, directly searchable sub-queries.
|
|
142
|
+
Uses extended thinking for deeper analysis.
|
|
143
|
+
|
|
144
|
+
execution: |
|
|
145
|
+
ultrathink
|
|
146
|
+
|
|
147
|
+
1. DEEP ANALYSIS (use extended thinking):
|
|
148
|
+
- What are the REAL questions behind this query?
|
|
149
|
+
- What would a domain expert want to know?
|
|
150
|
+
- What gaps might standard searches miss?
|
|
151
|
+
- What assumptions should be tested?
|
|
152
|
+
|
|
153
|
+
2. GENERATE 5-7 sub-queries that:
|
|
154
|
+
- Cover ORTHOGONAL angles (not overlapping)
|
|
155
|
+
- Include at least one "devil's advocate" query
|
|
156
|
+
- Include at least one "expert-level" query
|
|
157
|
+
- Are directly searchable (not abstract)
|
|
158
|
+
|
|
159
|
+
3. INCORPORATE inferred_context:
|
|
160
|
+
- If focus=comparison → ensure queries cover both/all sides
|
|
161
|
+
- If temporal=recent → add year constraints
|
|
162
|
+
- If domain detected → scope queries to those technologies
|
|
163
|
+
|
|
164
|
+
4. OUTPUT format:
|
|
165
|
+
{
|
|
166
|
+
"main_topic": "string",
|
|
167
|
+
"sub_queries": ["query1", "query2", ...],
|
|
168
|
+
"search_strategy": "parallel"
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
output: "decomposition_result JSON"
|
|
172
|
+
|
|
173
|
+
# ──────────────────────────────────────────────
|
|
174
|
+
# PHASE 3: PARALLEL SEARCH (Haiku Workers)
|
|
175
|
+
# ──────────────────────────────────────────────
|
|
176
|
+
3_parallel_search:
|
|
177
|
+
name: "Parallel Search via Haiku Workers"
|
|
178
|
+
model_tier: "HAIKU (via Task tool, general-purpose agent)"
|
|
179
|
+
description: |
|
|
180
|
+
Dispatches sub-queries as parallel Haiku workers.
|
|
181
|
+
Each worker: WebSearch → select top URLs → WebFetch on best → return JSON.
|
|
182
|
+
Max 5 workers in parallel. No external dependencies.
|
|
183
|
+
|
|
184
|
+
execution: |
|
|
185
|
+
1. PRE-CHECK MCP AVAILABILITY (main model, before dispatch):
|
|
186
|
+
- Try Context7: mcp__context7__resolve-library-id for detected library
|
|
187
|
+
→ If fails: context7_available = false
|
|
188
|
+
- Try Exa: mcp__exa__web_search_exa("test", 1)
|
|
189
|
+
→ If 401/429/503: exa_available = false
|
|
190
|
+
|
|
191
|
+
2. DISPATCH WORKERS:
|
|
192
|
+
For EACH sub-query, create a Task call:
|
|
193
|
+
|
|
194
|
+
Task(
|
|
195
|
+
subagent_type: "general-purpose",
|
|
196
|
+
model: "haiku",
|
|
197
|
+
prompt: <WORKER_PROMPT>
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
Dispatch ALL Task calls in a SINGLE message for parallel execution.
|
|
201
|
+
Max 5 workers.
|
|
202
|
+
|
|
203
|
+
WORKER PROMPT TEMPLATE:
|
|
204
|
+
```
|
|
205
|
+
You are a research worker. Search and extract information for ONE specific query.
|
|
206
|
+
|
|
207
|
+
QUERY: {sub_query}
|
|
208
|
+
CONTEXT: {inferred_context_json}
|
|
209
|
+
MCP AVAILABILITY: exa={exa_available}, context7={context7_available}
|
|
210
|
+
|
|
211
|
+
INSTRUCTIONS:
|
|
212
|
+
1. Search using the best available tool:
|
|
213
|
+
- If context7 available AND query is about a specific library:
|
|
214
|
+
→ Use mcp__context7__resolve-library-id then mcp__context7__query-docs
|
|
215
|
+
- If exa available:
|
|
216
|
+
→ Use mcp__exa__web_search_exa(query, numResults=5)
|
|
217
|
+
- Else:
|
|
218
|
+
→ Use WebSearch(query)
|
|
219
|
+
|
|
220
|
+
2. From search results, select top 2-3 most relevant URLs
|
|
221
|
+
|
|
222
|
+
3. Deep-read top 1-3 results using WebFetch:
|
|
223
|
+
- For each URL, use WebFetch with this prompt:
|
|
224
|
+
"Extract technical information relevant to: {sub_query}
|
|
225
|
+
Focus on: specific facts/numbers/benchmarks, code examples (preserve exactly),
|
|
226
|
+
best practices and warnings, expert recommendations.
|
|
227
|
+
Skip: navigation, ads, generic intros.
|
|
228
|
+
Format as structured markdown with Key Findings, Code/Examples,
|
|
229
|
+
Expert Quotes, and Actionable Insights sections."
|
|
230
|
+
|
|
231
|
+
4. Return results as JSON (no other text):
|
|
232
|
+
{
|
|
233
|
+
"sub_query": "the original sub-query",
|
|
234
|
+
"sources": [
|
|
235
|
+
{"url": "...", "title": "...", "snippet": "first 200 chars...",
|
|
236
|
+
"credibility": "HIGH|MEDIUM|LOW", "tool_used": "WebSearch|Exa|Context7"}
|
|
237
|
+
],
|
|
238
|
+
"key_findings": ["finding1 with specific data", "finding2", ...],
|
|
239
|
+
"code_examples": ["```lang\ncode\n```", ...],
|
|
240
|
+
"expert_quotes": ["quote — author", ...]
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
IMPORTANT:
|
|
244
|
+
- Do NOT synthesize or write reports. Just search and return raw findings.
|
|
245
|
+
- Be HONEST about credibility (LOW if source is generic/outdated).
|
|
246
|
+
- Preserve code examples EXACTLY as found.
|
|
247
|
+
- Max 3 deep reads per worker.
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
3. AGGREGATE RESULTS (main model):
|
|
251
|
+
- Collect all worker responses
|
|
252
|
+
- Parse JSON from each Task result
|
|
253
|
+
- Deduplicate by URL (keep highest credibility)
|
|
254
|
+
- Build unified results with tool attribution
|
|
255
|
+
|
|
256
|
+
4. HANDLE FAILURES:
|
|
257
|
+
- For failed workers (no response or invalid JSON):
|
|
258
|
+
→ Log warning, execute that sub-query directly in main context
|
|
259
|
+
- RULE: at least 1 successful result to proceed
|
|
260
|
+
|
|
261
|
+
output: |
|
|
262
|
+
{
|
|
263
|
+
"search_results": [...],
|
|
264
|
+
"tools_used": {"exa": N, "context7": N, "websearch": N, "webfetch": N},
|
|
265
|
+
"worker_stats": {"dispatched": N, "succeeded": N, "failed": N}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
# ──────────────────────────────────────────────
|
|
269
|
+
# PHASE 4: EVALUATE COVERAGE
|
|
270
|
+
# ──────────────────────────────────────────────
|
|
271
|
+
4_evaluate_coverage:
|
|
272
|
+
name: "Coverage Evaluation"
|
|
273
|
+
model_tier: "HAIKU (via Task tool)"
|
|
274
|
+
description: |
|
|
275
|
+
Evaluates if research is complete. Decides CONTINUE or STOP.
|
|
276
|
+
Max 2 waves total (simpler than tech-research's 3 waves).
|
|
277
|
+
|
|
278
|
+
execution: |
|
|
279
|
+
Wrap in Task(model: "haiku"):
|
|
280
|
+
|
|
281
|
+
1. Calculate metrics:
|
|
282
|
+
- coverage_score (0-100): How well do findings answer the original query?
|
|
283
|
+
- source_quality: Count HIGH/MEDIUM/LOW credibility sources
|
|
284
|
+
- new_info_ratio: Estimate unique facts vs total
|
|
285
|
+
|
|
286
|
+
2. STOPPING RULES:
|
|
287
|
+
HARD STOPS (always stop):
|
|
288
|
+
- wave >= 2 → "Max iterations reached"
|
|
289
|
+
- coverage_score >= 80 AND high_credibility >= 3 → "Sufficient coverage"
|
|
290
|
+
|
|
291
|
+
SOFT STOP:
|
|
292
|
+
- coverage_score >= 65 AND wave >= 1 → "Acceptable coverage"
|
|
293
|
+
|
|
294
|
+
MUST CONTINUE:
|
|
295
|
+
- coverage_score < 50 AND wave == 1 → "Insufficient first wave"
|
|
296
|
+
|
|
297
|
+
3. IF CONTINUE:
|
|
298
|
+
- Generate 2-3 targeted gap-filling queries
|
|
299
|
+
- Return to Phase 3 (search again with new queries)
|
|
300
|
+
|
|
301
|
+
4. IF STOP:
|
|
302
|
+
- Document final score and remaining gaps
|
|
303
|
+
|
|
304
|
+
output: |
|
|
305
|
+
{
|
|
306
|
+
"decision": "CONTINUE|STOP",
|
|
307
|
+
"coverage_score": 0-100,
|
|
308
|
+
"stop_reason": "reason",
|
|
309
|
+
"gaps": [...],
|
|
310
|
+
"next_queries": [...] (if CONTINUE)
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
# ──────────────────────────────────────────────
|
|
314
|
+
# PHASE 5: SYNTHESIZE
|
|
315
|
+
# ──────────────────────────────────────────────
|
|
316
|
+
5_synthesize:
|
|
317
|
+
name: "Synthesize"
|
|
318
|
+
model_tier: "MAIN MODEL"
|
|
319
|
+
description: |
|
|
320
|
+
Consolidates all findings into a comprehensive research report.
|
|
321
|
+
Produces DOCUMENTATION ONLY, never production code.
|
|
322
|
+
|
|
323
|
+
execution: |
|
|
324
|
+
1. Review all aggregated search results and findings
|
|
325
|
+
2. Identify patterns, consensus, and contradictions across sources
|
|
326
|
+
3. Rank techniques/solutions by evidence strength
|
|
327
|
+
4. Generate:
|
|
328
|
+
- Executive summary (TL;DR)
|
|
329
|
+
- Detailed findings organized by theme
|
|
330
|
+
- Code examples for REFERENCE only (not production)
|
|
331
|
+
- Decision matrix: when to use what
|
|
332
|
+
- Practical next steps recommending @pm or @dev
|
|
333
|
+
5. ALWAYS end with "Next Steps" section redirecting to implementation agents
|
|
334
|
+
|
|
335
|
+
output: "Synthesized report content"
|
|
336
|
+
|
|
337
|
+
# ──────────────────────────────────────────────
|
|
338
|
+
# PHASE 6: DOCUMENT
|
|
339
|
+
# ──────────────────────────────────────────────
|
|
340
|
+
6_document:
|
|
341
|
+
name: "Document"
|
|
342
|
+
model_tier: "MAIN MODEL"
|
|
343
|
+
description: "Save complete research to docs/research/"
|
|
344
|
+
structure:
|
|
345
|
+
folder: "docs/research/{YYYY-MM-DD}-{slug}/"
|
|
346
|
+
files:
|
|
347
|
+
- name: "README.md"
|
|
348
|
+
content: "Index + TL;DR"
|
|
349
|
+
- name: "00-query-original.md"
|
|
350
|
+
content: "Original question + inferred context"
|
|
351
|
+
- name: "01-deep-research-prompt.md"
|
|
352
|
+
content: "Generated structured prompt with sub-queries"
|
|
353
|
+
- name: "02-research-report.md"
|
|
354
|
+
content: "Complete research findings"
|
|
355
|
+
- name: "03-recommendations.md"
|
|
356
|
+
content: "Recommendations and next steps (NO production code)"
|
|
357
|
+
|
|
358
|
+
security:
|
|
359
|
+
- Never include API keys or secrets in research docs
|
|
360
|
+
- Sanitize sensitive paths before saving
|
|
361
|
+
- Validate URLs before fetching
|
|
362
|
+
- NEVER write files outside docs/research/
|
|
363
|
+
- NEVER create agents, skills, or production code
|
|
364
|
+
|
|
365
|
+
scope_boundaries:
|
|
366
|
+
allowed_paths:
|
|
367
|
+
- "docs/research/**"
|
|
368
|
+
forbidden_paths:
|
|
369
|
+
- ".claude/agents/"
|
|
370
|
+
- ".claude/skills/"
|
|
371
|
+
- "squads/"
|
|
372
|
+
- "app/"
|
|
373
|
+
- "lib/"
|
|
374
|
+
- "src/"
|
|
375
|
+
- "*.ts"
|
|
376
|
+
- "*.tsx"
|
|
377
|
+
- "*.js"
|
|
378
|
+
- "*.py"
|
|
379
|
+
exception: "Code examples within docs/research/ markdown are allowed for DOCUMENTATION only"
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
---
|
|
383
|
+
|
|
384
|
+
## Execution Flow
|
|
385
|
+
|
|
386
|
+
```
|
|
387
|
+
Query → Auto-Clarify → Decompose (ultrathink, MAIN MODEL)
|
|
388
|
+
|
|
|
389
|
+
[Sub-query 1] [Sub-query 2] ... [Sub-query 5]
|
|
390
|
+
| | |
|
|
391
|
+
[Haiku GP] [Haiku GP] [Haiku GP]
|
|
392
|
+
(search+read) (search+read) (search+read)
|
|
393
|
+
| | |
|
|
394
|
+
+------+-------+-------+-----------+
|
|
395
|
+
|
|
|
396
|
+
Aggregate (MAIN MODEL)
|
|
397
|
+
|
|
|
398
|
+
Evaluate Coverage (HAIKU)
|
|
399
|
+
|
|
|
400
|
+
(coverage OK?) ── NO ──→ [Wave 2, max 2 total]
|
|
401
|
+
| YES
|
|
402
|
+
|
|
|
403
|
+
Synthesize (MAIN MODEL)
|
|
404
|
+
|
|
|
405
|
+
Document (MAIN MODEL)
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
## What This Skill Does NOT Have
|
|
409
|
+
|
|
410
|
+
- No ETL service dependency
|
|
411
|
+
- No infrastructure/ references
|
|
412
|
+
- No squads/ references
|
|
413
|
+
- No Bash commands
|
|
414
|
+
- No custom agents (uses built-in general-purpose)
|
|
415
|
+
- No Python/JS scripts
|
|
416
|
+
- No npm dependencies
|
|
417
|
+
- No wave compression (max 2 waves, context is sufficient)
|
|
418
|
+
- No citation verification (simplifies without quality loss)
|
|
419
|
+
- No follow-up behavior (run again for more research)
|
|
420
|
+
- No BlogDiscovery or SemanticChunker
|
|
421
|
+
|
|
422
|
+
## Output Structure
|
|
423
|
+
|
|
424
|
+
```
|
|
425
|
+
docs/research/{YYYY-MM-DD}-{slug}/
|
|
426
|
+
├── README.md # Index + TL;DR
|
|
427
|
+
├── 00-query-original.md # Original question + context
|
|
428
|
+
├── 01-deep-research-prompt.md # Generated prompt with sub-queries
|
|
429
|
+
├── 02-research-report.md # Complete findings
|
|
430
|
+
└── 03-recommendations.md # Recommendations (NO production code)
|
|
431
|
+
```
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
## ROLE
|
|
2
|
+
Technical content extractor. Simulates Exa's content extraction when reading pages.
|
|
3
|
+
|
|
4
|
+
## TASK
|
|
5
|
+
Extract structured, relevant information from the page at {{URL}} related to: {{QUERY}}
|
|
6
|
+
|
|
7
|
+
## EXTRACTION RULES
|
|
8
|
+
|
|
9
|
+
### What to Extract
|
|
10
|
+
|
|
11
|
+
1. **Key Facts** - Concrete information, numbers, specifications
|
|
12
|
+
2. **Code Examples** - Actual code snippets (not just mentions)
|
|
13
|
+
3. **Process/Steps** - How-to instructions, workflows
|
|
14
|
+
4. **Comparisons** - Pros/cons, tradeoffs, benchmarks
|
|
15
|
+
5. **Expert Opinions** - Quotes, recommendations from authors
|
|
16
|
+
6. **Warnings/Gotchas** - Common mistakes, anti-patterns
|
|
17
|
+
|
|
18
|
+
### What to SKIP
|
|
19
|
+
|
|
20
|
+
- Navigation, headers, footers
|
|
21
|
+
- Ads, promotional content
|
|
22
|
+
- Generic introductions ("In this article we will...")
|
|
23
|
+
- Redundant content already covered
|
|
24
|
+
- Author bios (unless relevant)
|
|
25
|
+
|
|
26
|
+
## OUTPUT FORMAT
|
|
27
|
+
|
|
28
|
+
```markdown
|
|
29
|
+
## Source: {{TITLE}}
|
|
30
|
+
URL: {{URL}}
|
|
31
|
+
Relevance: HIGH|MEDIUM|LOW
|
|
32
|
+
|
|
33
|
+
### Key Findings
|
|
34
|
+
- {Finding 1 with specific data}
|
|
35
|
+
- {Finding 2 with specific data}
|
|
36
|
+
|
|
37
|
+
### Code/Examples
|
|
38
|
+
```{language}
|
|
39
|
+
{actual code from the page}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Expert Quote
|
|
43
|
+
> "{direct quote}" — {author if known}
|
|
44
|
+
|
|
45
|
+
### Actionable Insights
|
|
46
|
+
1. {What to do based on this source}
|
|
47
|
+
2. {What to avoid}
|
|
48
|
+
|
|
49
|
+
### Cross-Reference Notes
|
|
50
|
+
- Confirms: {what other sources said}
|
|
51
|
+
- Contradicts: {what differs from other sources}
|
|
52
|
+
- Adds: {new information not found elsewhere}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## QUALITY GATES
|
|
56
|
+
|
|
57
|
+
Before returning, verify:
|
|
58
|
+
- [ ] At least 3 key findings extracted
|
|
59
|
+
- [ ] Specific data (numbers, versions, dates) included when available
|
|
60
|
+
- [ ] Code examples preserved exactly (not paraphrased)
|
|
61
|
+
- [ ] Relevance score is honest (LOW if page didn't help)
|
|
62
|
+
|
|
63
|
+
## EXAMPLES
|
|
64
|
+
|
|
65
|
+
### Good Extraction
|
|
66
|
+
|
|
67
|
+
```markdown
|
|
68
|
+
## Source: Redis Caching Best Practices for Node.js
|
|
69
|
+
URL: https://example.com/redis-node-best-practices
|
|
70
|
+
Relevance: HIGH
|
|
71
|
+
|
|
72
|
+
### Key Findings
|
|
73
|
+
- Redis connection pooling reduces latency by 40% in high-traffic apps
|
|
74
|
+
- Default TTL of 3600s is recommended for session data
|
|
75
|
+
- Use `SCAN` instead of `KEYS` in production (KEYS blocks)
|
|
76
|
+
|
|
77
|
+
### Code/Examples
|
|
78
|
+
```javascript
|
|
79
|
+
const redis = require('redis');
|
|
80
|
+
const client = redis.createClient({
|
|
81
|
+
socket: { connectTimeout: 5000 },
|
|
82
|
+
retry_strategy: (options) => Math.min(options.attempt * 100, 3000)
|
|
83
|
+
});
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Expert Quote
|
|
87
|
+
> "Always set memory limits with maxmemory-policy allkeys-lru to prevent OOM kills" — Redis Labs documentation
|
|
88
|
+
|
|
89
|
+
### Actionable Insights
|
|
90
|
+
1. Implement connection pooling with 10-20 connections per instance
|
|
91
|
+
2. Never use KEYS command in production loops
|
|
92
|
+
|
|
93
|
+
### Cross-Reference Notes
|
|
94
|
+
- Confirms: TTL importance (also mentioned in Stack Overflow thread)
|
|
95
|
+
- Adds: Specific memory policy recommendation (new info)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Honest LOW Relevance
|
|
99
|
+
|
|
100
|
+
```markdown
|
|
101
|
+
## Source: Introduction to Caching Concepts
|
|
102
|
+
URL: https://example.com/caching-101
|
|
103
|
+
Relevance: LOW
|
|
104
|
+
|
|
105
|
+
### Key Findings
|
|
106
|
+
- Basic explanation of what caching is (generic)
|
|
107
|
+
- No Node.js specific content
|
|
108
|
+
- No code examples
|
|
109
|
+
|
|
110
|
+
### Actionable Insights
|
|
111
|
+
1. Skip this source for implementation details
|
|
112
|
+
|
|
113
|
+
### Cross-Reference Notes
|
|
114
|
+
- Adds: Nothing new, basic tutorial level
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## EXECUTION
|
|
118
|
+
|
|
119
|
+
When using WebFetch, pass this as the prompt:
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
Extract technical information relevant to: {original query}
|
|
123
|
+
|
|
124
|
+
Focus on:
|
|
125
|
+
1. Specific facts, numbers, benchmarks
|
|
126
|
+
2. Code examples (preserve exactly)
|
|
127
|
+
3. Best practices and warnings
|
|
128
|
+
4. Expert recommendations
|
|
129
|
+
|
|
130
|
+
Skip: navigation, ads, generic intros.
|
|
131
|
+
|
|
132
|
+
Format as structured markdown with Key Findings, Code Examples, Expert Quotes, and Actionable Insights sections.
|
|
133
|
+
```
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: to-issues
|
|
3
|
+
description: Break a plan, spec, or PRD into independently-grabbable issues on the project issue tracker using tracer-bullet vertical slices. Use when user wants to convert a plan into issues, create implementation tickets, or break down work into issues.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# To Issues
|
|
7
|
+
|
|
8
|
+
Break a plan into independently-grabbable issues using vertical slices (tracer bullets).
|
|
9
|
+
|
|
10
|
+
The issue tracker and triage label vocabulary should have been provided to you — run `/setup-matt-pocock-skills` if not.
|
|
11
|
+
|
|
12
|
+
## Process
|
|
13
|
+
|
|
14
|
+
### 1. Gather context
|
|
15
|
+
|
|
16
|
+
Work from whatever is already in the conversation context. If the user passes an issue reference (issue number, URL, or path) as an argument, fetch it from the issue tracker and read its full body and comments.
|
|
17
|
+
|
|
18
|
+
### 2. Explore the codebase (optional)
|
|
19
|
+
|
|
20
|
+
If you have not already explored the codebase, do so to understand the current state of the code. Issue titles and descriptions should use the project's domain glossary vocabulary, and respect ADRs in the area you're touching.
|
|
21
|
+
|
|
22
|
+
### 3. Draft vertical slices
|
|
23
|
+
|
|
24
|
+
Break the plan into **tracer bullet** issues. Each issue is a thin vertical slice that cuts through ALL integration layers end-to-end, NOT a horizontal slice of one layer.
|
|
25
|
+
|
|
26
|
+
Slices may be 'HITL' or 'AFK'. HITL slices require human interaction, such as an architectural decision or a design review. AFK slices can be implemented and merged without human interaction. Prefer AFK over HITL where possible.
|
|
27
|
+
|
|
28
|
+
<vertical-slice-rules>
|
|
29
|
+
- Each slice delivers a narrow but COMPLETE path through every layer (schema, API, UI, tests)
|
|
30
|
+
- A completed slice is demoable or verifiable on its own
|
|
31
|
+
- Prefer many thin slices over few thick ones
|
|
32
|
+
</vertical-slice-rules>
|
|
33
|
+
|
|
34
|
+
### 4. Quiz the user
|
|
35
|
+
|
|
36
|
+
Present the proposed breakdown as a numbered list. For each slice, show:
|
|
37
|
+
|
|
38
|
+
- **Title**: short descriptive name
|
|
39
|
+
- **Type**: HITL / AFK
|
|
40
|
+
- **Blocked by**: which other slices (if any) must complete first
|
|
41
|
+
- **User stories covered**: which user stories this addresses (if the source material has them)
|
|
42
|
+
|
|
43
|
+
Ask the user:
|
|
44
|
+
|
|
45
|
+
- Does the granularity feel right? (too coarse / too fine)
|
|
46
|
+
- Are the dependency relationships correct?
|
|
47
|
+
- Should any slices be merged or split further?
|
|
48
|
+
- Are the correct slices marked as HITL and AFK?
|
|
49
|
+
|
|
50
|
+
Iterate until the user approves the breakdown.
|
|
51
|
+
|
|
52
|
+
### 5. Publish the issues to the issue tracker
|
|
53
|
+
|
|
54
|
+
For each approved slice, publish a new issue to the issue tracker. Use the issue body template below. These issues are considered ready for AFK agents, so publish them with the correct triage label unless instructed otherwise.
|
|
55
|
+
|
|
56
|
+
Publish issues in dependency order (blockers first) so you can reference real issue identifiers in the "Blocked by" field.
|
|
57
|
+
|
|
58
|
+
<issue-template>
|
|
59
|
+
## Parent
|
|
60
|
+
|
|
61
|
+
A reference to the parent issue on the issue tracker (if the source was an existing issue, otherwise omit this section).
|
|
62
|
+
|
|
63
|
+
## What to build
|
|
64
|
+
|
|
65
|
+
A concise description of this vertical slice. Describe the end-to-end behavior, not layer-by-layer implementation.
|
|
66
|
+
|
|
67
|
+
Avoid specific file paths or code snippets — they go stale fast. Exception: if a prototype produced a snippet that encodes a decision more precisely than prose can (state machine, reducer, schema, type shape), inline it here and note briefly that it came from a prototype. Trim to the decision-rich parts — not a working demo, just the important bits.
|
|
68
|
+
|
|
69
|
+
## Acceptance criteria
|
|
70
|
+
|
|
71
|
+
- [ ] Criterion 1
|
|
72
|
+
- [ ] Criterion 2
|
|
73
|
+
- [ ] Criterion 3
|
|
74
|
+
|
|
75
|
+
## Blocked by
|
|
76
|
+
|
|
77
|
+
- A reference to the blocking ticket (if any)
|
|
78
|
+
|
|
79
|
+
Or "None - can start immediately" if no blockers.
|
|
80
|
+
|
|
81
|
+
</issue-template>
|
|
82
|
+
|
|
83
|
+
Do NOT close or modify any parent issue.
|