@juicesharp/rpiv-pi 0.5.0 → 0.6.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/README.md +2 -0
- package/extensions/rpiv-core/siblings.ts +5 -0
- package/package.json +2 -1
- package/skills/explore/SKILL.md +207 -200
package/README.md
CHANGED
|
@@ -145,6 +145,7 @@ Invoke via `/skill:<name>` from inside a Pi Agent session.
|
|
|
145
145
|
| `/rpiv-setup` | Install all sibling plugins in one go |
|
|
146
146
|
| `/rpiv-update-agents` | Sync rpiv agent profiles: add new, update changed, remove stale |
|
|
147
147
|
| `/advisor` | Configure advisor model and reasoning effort |
|
|
148
|
+
| `/btw` | Ask a side question without polluting the main conversation |
|
|
148
149
|
| `/todos` | Show current todo list |
|
|
149
150
|
| `/web-search-config` | Set Brave Search API key |
|
|
150
151
|
|
|
@@ -180,6 +181,7 @@ Pi Agent discovers extensions via `"extensions": ["./extensions"]` and skills vi
|
|
|
180
181
|
|
|
181
182
|
- **Web search** — run `/web-search-config` to set the Brave Search API key, or set the `BRAVE_SEARCH_API_KEY` environment variable
|
|
182
183
|
- **Advisor** — run `/advisor` to select a reviewer model and reasoning effort
|
|
184
|
+
- **Side questions** — type `/btw <question>` anytime (even mid-stream) to ask the primary model a one-off question; answer appears in a borderless bottom overlay and never enters the main conversation
|
|
183
185
|
- **Agent concurrency** — `@tintinweb/pi-subagents` defaults to 4 concurrent agents; raise via `/agents → Settings → Max concurrency → 48` if skills stall on wide fan-outs
|
|
184
186
|
- **Agent profiles** — editable at `<cwd>/.pi/agents/`; sync from bundled defaults with `/rpiv-update-agents` (overwrites rpiv-managed files, preserves your custom agents)
|
|
185
187
|
|
|
@@ -40,6 +40,11 @@ export const SIBLINGS: readonly SiblingPlugin[] = [
|
|
|
40
40
|
matches: /rpiv-advisor/i,
|
|
41
41
|
provides: "advisor tool + /advisor command",
|
|
42
42
|
},
|
|
43
|
+
{
|
|
44
|
+
pkg: "npm:@juicesharp/rpiv-btw",
|
|
45
|
+
matches: /rpiv-btw/i,
|
|
46
|
+
provides: "/btw side-question command",
|
|
47
|
+
},
|
|
43
48
|
{
|
|
44
49
|
pkg: "npm:@juicesharp/rpiv-web-tools",
|
|
45
50
|
matches: /rpiv-web-tools/i,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juicesharp/rpiv-pi",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Skill-based development workflow for Pi Agent — discover, research, design, plan, implement, validate",
|
|
5
5
|
"keywords": ["pi-package", "pi-extension", "rpiv", "skills", "workflow"],
|
|
6
6
|
"license": "MIT",
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"@juicesharp/rpiv-ask-user-question": "*",
|
|
29
29
|
"@juicesharp/rpiv-todo": "*",
|
|
30
30
|
"@juicesharp/rpiv-advisor": "*",
|
|
31
|
+
"@juicesharp/rpiv-btw": "*",
|
|
31
32
|
"@juicesharp/rpiv-web-tools": "*"
|
|
32
33
|
}
|
|
33
34
|
}
|
package/skills/explore/SKILL.md
CHANGED
|
@@ -22,37 +22,38 @@ I'll analyze the current codebase, generate solution options, and provide recomm
|
|
|
22
22
|
|
|
23
23
|
Then wait for the user's request.
|
|
24
24
|
|
|
25
|
-
## Steps
|
|
25
|
+
## Steps
|
|
26
26
|
|
|
27
|
-
1
|
|
28
|
-
- If user mentions tickets, research docs, or other files, read them FULLY first
|
|
29
|
-
- **IMPORTANT**: Use Read tool WITHOUT limit/offset parameters
|
|
30
|
-
- **CRITICAL**: Read these files in main context before invoking skills
|
|
31
|
-
- Extract requirements, constraints, and goals
|
|
32
|
-
- Identify what problem we're solving
|
|
27
|
+
### Step 1: Read Mentioned Files
|
|
33
28
|
|
|
34
|
-
|
|
29
|
+
- If user mentions tickets, research docs, or other files, read them FULLY first
|
|
30
|
+
- **IMPORTANT**: Use Read tool WITHOUT limit/offset parameters
|
|
31
|
+
- **CRITICAL**: Read these files in main context before invoking skills
|
|
32
|
+
- Extract requirements, constraints, and goals
|
|
33
|
+
- Identify what problem we're solving
|
|
35
34
|
|
|
36
|
-
|
|
35
|
+
### Step 2: Generate Candidates and Dimensions
|
|
37
36
|
|
|
38
|
-
|
|
39
|
-
- **Design-space enumeration** — orchestrator names abstract shapes from first principles when applicable (pub/sub vs direct-call vs event-bus; sync vs async; manual mapping vs auto-mapper). One-line "what it is" per shape.
|
|
40
|
-
- **User shortlist** — if the user pre-named candidates in the entry prompt ("compare TanStack Query vs SWR"), include those verbatim.
|
|
37
|
+
**Generate 2–4 named candidates** from three sources, then merge into one shortlist:
|
|
41
38
|
|
|
42
|
-
|
|
39
|
+
- **Ecosystem scan** — spawn `web-search-researcher` for any topic where the candidate space includes external libraries, frameworks, or services. Prompt it to return 2–4 named options with one-line "what it is" + canonical doc link per option. Skip only when the topic is wholly internal (e.g., "how to organize this service layer") and the orchestrator's design-space enumeration plus the user shortlist already cover the space.
|
|
40
|
+
- **Design-space enumeration** — orchestrator names abstract shapes from first principles when applicable (pub/sub vs direct-call vs event-bus; sync vs async; manual mapping vs auto-mapper). One-line "what it is" per shape.
|
|
41
|
+
- **User shortlist** — if the user pre-named candidates in the entry prompt ("compare TanStack Query vs SWR"), include those verbatim.
|
|
43
42
|
|
|
44
|
-
|
|
43
|
+
Merge to 2–4 candidates total. Name each with a short noun phrase ("TanStack Query", "Direct event bus"). Deduplicate.
|
|
45
44
|
|
|
46
|
-
|
|
47
|
-
- **precedent-fit** (codebase-anchored) — does the existing code already use this pattern; how many call sites would adopt the new option.
|
|
48
|
-
- **integration-risk** (codebase-anchored) — which existing seams the candidate would touch; what breaks if it lands.
|
|
49
|
-
- **migration-cost** (external-anchored for libraries; codebase-anchored for in-house code) — work to introduce the candidate plus work to remove the incumbent if there is one.
|
|
50
|
-
- **verification-cost** (codebase-anchored) — test/CI surface needed to make the candidate safe to adopt.
|
|
51
|
-
- **novelty** (external-anchored) — how recently the candidate emerged, ecosystem momentum, deprecation risk.
|
|
45
|
+
**Default dimension list** (presented at Step 3; developer may drop irrelevant ones):
|
|
52
46
|
|
|
53
|
-
|
|
47
|
+
- **approach-shape** (hybrid) — what category of solution the candidate is, what core moving parts it requires.
|
|
48
|
+
- **precedent-fit** (codebase-anchored) — does the existing code already use this pattern; how many call sites would adopt the new option.
|
|
49
|
+
- **integration-risk** (codebase-anchored) — which existing seams the candidate would touch; what breaks if it lands.
|
|
50
|
+
- **migration-cost** (external-anchored for libraries; codebase-anchored for in-house code) — work to introduce the candidate plus work to remove the incumbent if there is one.
|
|
51
|
+
- **verification-cost** (codebase-anchored) — test/CI surface needed to make the candidate safe to adopt.
|
|
52
|
+
- **novelty** (external-anchored) — how recently the candidate emerged, ecosystem momentum, deprecation risk.
|
|
54
53
|
|
|
55
|
-
|
|
54
|
+
Hold the candidate set and default dimension list in working state for the Step 3 checkpoint. Do not dispatch fit agents yet.
|
|
55
|
+
|
|
56
|
+
### Step 3: Candidate Checkpoint
|
|
56
57
|
|
|
57
58
|
Present the candidate set and default dimensions to the developer before per-candidate fit dispatch.
|
|
58
59
|
|
|
@@ -74,251 +75,257 @@ Present the candidate set and default dimensions to the developer before per-can
|
|
|
74
75
|
|
|
75
76
|
3. **Handle developer input:**
|
|
76
77
|
|
|
77
|
-
**"Proceed"**: lock the candidate × dimension set; advance to Step
|
|
78
|
+
**"Proceed"**: lock the candidate × dimension set; advance to Step 4.
|
|
78
79
|
|
|
79
80
|
**"Adjust candidates or dimensions"**: ask the follow-up free-text question with prefix `❓ Question:` — "Which candidates and dimensions should be added, dropped, or renamed?" — apply edits to the working set, re-present, and confirm again with the same three-option `ask_user_question`.
|
|
80
81
|
|
|
81
|
-
**"Re-generate candidates"**: ask the follow-up free-text question with prefix `❓ Question:` — "What should be different in candidate generation? (narrower/wider scope, different ecosystem, exclude approach X, …)" — return to Step 2 with the updated scope, then re-enter Step
|
|
82
|
+
**"Re-generate candidates"**: ask the follow-up free-text question with prefix `❓ Question:` — "What should be different in candidate generation? (narrower/wider scope, different ecosystem, exclude approach X, …)" — return to Step 2 with the updated scope, then re-enter Step 3.
|
|
82
83
|
|
|
83
84
|
Loop until "Proceed" is selected.
|
|
84
85
|
|
|
85
|
-
|
|
86
|
+
### Step 4: Per-Candidate Fit Dispatch (parallel agents)
|
|
86
87
|
|
|
87
|
-
|
|
88
|
+
For each confirmed candidate, dispatch up to two agents in parallel — total ≤ 2 × N agents:
|
|
88
89
|
|
|
89
|
-
|
|
90
|
-
|
|
90
|
+
- **One `codebase-analyzer` per candidate** — when ≥1 kept dimension is codebase-anchored (precedent-fit, integration-risk, often migration-cost and verification-cost). The agent scores the candidate on every kept codebase-anchored dimension in a single pass, returning evidence per dimension with `file:line` references.
|
|
91
|
+
- **One `web-search-researcher` per candidate** — when ≥1 kept dimension is external-anchored (novelty, often migration-cost for libraries, approach-shape for ecosystem options). The agent scores the candidate on every kept external-anchored dimension in a single pass, returning evidence per dimension with doc/source links.
|
|
91
92
|
|
|
92
|
-
|
|
93
|
+
Skip either agent for a candidate when no dimension of that anchor-type was kept. Hybrid dimension `approach-shape` is scored by the orchestrator after both agents return, by combining their per-candidate findings.
|
|
93
94
|
|
|
94
|
-
|
|
95
|
+
**Per-candidate prompt shape** (use the same outer template, fill in candidate name and kept dimensions):
|
|
95
96
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
```
|
|
98
|
+
Candidate: [name] — [one-line what it is]
|
|
99
|
+
Topic: [topic from Step 1]
|
|
99
100
|
|
|
100
|
-
|
|
101
|
+
Score this single candidate on the following dimensions, each with concrete evidence ([file:line] for codebase, doc/source link for external). Report findings as one section per dimension.
|
|
101
102
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
103
|
+
Dimensions for this run:
|
|
104
|
+
- [dimension name] — [one-line of what to look for]
|
|
105
|
+
- ...
|
|
105
106
|
|
|
106
|
-
|
|
107
|
-
|
|
107
|
+
Do NOT compare against other candidates; another agent handles each one separately. Focus on depth of evidence for THIS candidate.
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Wait for ALL agents to complete before proceeding.
|
|
111
|
+
|
|
112
|
+
**Coverage check**: every (candidate × kept-dimension) cell is filled — by an agent's evidence or by an explicit `null` ("does not apply to this candidate"). Cells silently dropped indicate a missing dispatch — re-run that candidate's agent.
|
|
113
|
+
|
|
114
|
+
### Step 5: Synthesize and Recommend
|
|
115
|
+
|
|
116
|
+
- Cross-reference per-candidate findings — fill the candidate × dimension grid with evidence per cell.
|
|
117
|
+
- Apply the fit filter qualitatively per candidate: a candidate "clears" when no kept dimension surfaces a blocking concern (integration-risk that breaks load-bearing seams, migration-cost that exceeds the topic's scope, verification-cost with no path to coverage).
|
|
118
|
+
- **If ≥1 candidate clears the fit filter**: pick the strongest, document rationale with evidence, and explain why alternatives weren't chosen. Identify conditions that would change the recommendation.
|
|
119
|
+
- **If every candidate fails the fit filter**: produce a "no-fit" recommendation — list each candidate's blocking dimension with evidence, recommend re-scoping the question or expanding the candidate pool, and set Step 7 frontmatter `confidence: low` and `status: blocked`.
|
|
120
|
+
|
|
121
|
+
### Step 6: Determine Metadata and Filename
|
|
122
|
+
|
|
123
|
+
- Filename format: `thoughts/shared/solutions/YYYY-MM-DD_HH-MM-SS_[topic].md`
|
|
124
|
+
- YYYY-MM-DD_HH-MM-SS: Current date and time (e.g., 2025-10-11_14-30-22)
|
|
125
|
+
- [topic]: Brief kebab-case description
|
|
126
|
+
- Repository name: from git root basename, or current directory basename if not a git repo
|
|
127
|
+
- Use the git branch and commit from the git context injected at the start of the session (or run `git branch --show-current` / `git rev-parse --short HEAD` directly)
|
|
128
|
+
- Researcher: use the User from the git context injected at the start of the session (fallback: "unknown")
|
|
129
|
+
- If metadata unavailable: use "unknown" for commit/branch
|
|
130
|
+
|
|
131
|
+
### Step 7: Generate Solutions Document
|
|
132
|
+
|
|
133
|
+
- Use the metadata gathered in step 6
|
|
134
|
+
- Structure the document with YAML frontmatter followed by content:
|
|
135
|
+
|
|
136
|
+
```markdown
|
|
137
|
+
---
|
|
138
|
+
date: [Current date and time with timezone in ISO format]
|
|
139
|
+
researcher: [Researcher name]
|
|
140
|
+
git_commit: [Current commit hash]
|
|
141
|
+
branch: [Current branch name]
|
|
142
|
+
repository: [Repository name]
|
|
143
|
+
topic: "[Feature/Problem]"
|
|
144
|
+
confidence: high | medium | low
|
|
145
|
+
complexity: low | medium | high
|
|
146
|
+
status: ready | awaiting_input | blocked
|
|
147
|
+
tags: [solutions, component-names]
|
|
148
|
+
last_updated: [Current date in YYYY-MM-DD format]
|
|
149
|
+
last_updated_by: [Researcher name]
|
|
150
|
+
---
|
|
108
151
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
**Coverage check**: every (candidate × kept-dimension) cell is filled — by an agent's evidence or by an explicit `null` ("does not apply to this candidate"). Cells silently dropped indicate a missing dispatch — re-run that candidate's agent.
|
|
112
|
-
|
|
113
|
-
4. **Synthesize and recommend:**
|
|
152
|
+
# Solution Analysis: [Feature/Problem]
|
|
114
153
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
5. **Determine metadata and filename:**
|
|
121
|
-
- Filename format: `thoughts/shared/solutions/YYYY-MM-DD_HH-MM-SS_[topic].md`
|
|
122
|
-
- YYYY-MM-DD_HH-MM-SS: Current date and time (e.g., 2025-10-11_14-30-22)
|
|
123
|
-
- [topic]: Brief kebab-case description
|
|
124
|
-
- Repository name: from git root basename, or current directory basename if not a git repo
|
|
125
|
-
- Use the git branch and commit from the git context injected at the start of the session (or run `git branch --show-current` / `git rev-parse --short HEAD` directly)
|
|
126
|
-
- Researcher: use the User from the git context injected at the start of the session (fallback: "unknown")
|
|
127
|
-
- If metadata unavailable: use "unknown" for commit/branch
|
|
154
|
+
**Date**: [Current date and time with timezone from step 6]
|
|
155
|
+
**Researcher**: [Researcher name from step 6]
|
|
156
|
+
**Git Commit**: [Current commit hash from step 6]
|
|
157
|
+
**Branch**: [Current branch name from step 6]
|
|
158
|
+
**Repository**: [Repository name]
|
|
128
159
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
- Structure the document with YAML frontmatter followed by content:
|
|
132
|
-
```markdown
|
|
133
|
-
---
|
|
134
|
-
date: [Current date and time with timezone in ISO format]
|
|
135
|
-
researcher: [Researcher name]
|
|
136
|
-
git_commit: [Current commit hash]
|
|
137
|
-
branch: [Current branch name]
|
|
138
|
-
repository: [Repository name]
|
|
139
|
-
topic: "[Feature/Problem]"
|
|
140
|
-
confidence: high | medium | low
|
|
141
|
-
complexity: low | medium | high
|
|
142
|
-
status: ready | awaiting_input | blocked
|
|
143
|
-
tags: [solutions, component-names]
|
|
144
|
-
last_updated: [Current date in YYYY-MM-DD format]
|
|
145
|
-
last_updated_by: [Researcher name]
|
|
146
|
-
---
|
|
160
|
+
## Research Question
|
|
161
|
+
[Original user query]
|
|
147
162
|
|
|
148
|
-
|
|
163
|
+
## Summary
|
|
164
|
+
**Problem**: [What we're solving]
|
|
165
|
+
**Recommended**: [Option name] - [One sentence why]
|
|
166
|
+
**Effort**: [Low/Med/High] ([N days])
|
|
167
|
+
**Confidence**: [High/Med/Low]
|
|
149
168
|
|
|
150
|
-
|
|
151
|
-
**Researcher**: [Researcher name from step 5]
|
|
152
|
-
**Git Commit**: [Current commit hash from step 5]
|
|
153
|
-
**Branch**: [Current branch name from step 5]
|
|
154
|
-
**Repository**: [Repository name]
|
|
169
|
+
## Problem Statement
|
|
155
170
|
|
|
156
|
-
|
|
157
|
-
|
|
171
|
+
**Requirements:**
|
|
172
|
+
- [Requirement 1]
|
|
173
|
+
- [Requirement 2]
|
|
158
174
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
**Effort**: [Low/Med/High] ([N days])
|
|
163
|
-
**Confidence**: [High/Med/Low]
|
|
175
|
+
**Constraints:**
|
|
176
|
+
- [Hard constraint - must respect]
|
|
177
|
+
- [Soft constraint - should consider]
|
|
164
178
|
|
|
165
|
-
|
|
179
|
+
**Success criteria:**
|
|
180
|
+
- [What "done" looks like]
|
|
166
181
|
|
|
167
|
-
|
|
168
|
-
- [Requirement 1]
|
|
169
|
-
- [Requirement 2]
|
|
182
|
+
## Current State
|
|
170
183
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
- [Soft constraint - should consider]
|
|
184
|
+
**Existing implementation:**
|
|
185
|
+
[What exists with file:line references]
|
|
174
186
|
|
|
175
|
-
|
|
176
|
-
|
|
187
|
+
**Relevant patterns:**
|
|
188
|
+
- [Pattern 1]: `file.ext:line` - Used in [N] places
|
|
189
|
+
- [Pattern 2]: `file.ext:line` - Used in [N] places
|
|
177
190
|
|
|
178
|
-
|
|
191
|
+
**Integration points:**
|
|
192
|
+
- `file.ext:line` - [Where feature hooks in]
|
|
193
|
+
- `file.ext:line` - [Another integration point]
|
|
179
194
|
|
|
180
|
-
|
|
181
|
-
[What exists with file:line references]
|
|
195
|
+
## Solution Options
|
|
182
196
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
197
|
+
### Option 1: [Name]
|
|
198
|
+
**How it works:**
|
|
199
|
+
[2-3 sentence description + implementation approach]
|
|
186
200
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
201
|
+
**Pros:**
|
|
202
|
+
- [Advantage with evidence from codebase]
|
|
203
|
+
- [Advantage with evidence]
|
|
190
204
|
|
|
191
|
-
|
|
205
|
+
**Cons:**
|
|
206
|
+
- [Disadvantage with impact]
|
|
192
207
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
208
|
+
**Complexity:** [Low/Med/High] (~[N] days)
|
|
209
|
+
- Files to create: [N] (~[X] lines)
|
|
210
|
+
- Files to modify: [N] (~[X] lines)
|
|
211
|
+
- Risk level: [Low/Med/High]
|
|
196
212
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
- [Advantage with evidence]
|
|
213
|
+
### Option 2: [Alternative Name]
|
|
214
|
+
[Same structure as Option 1]
|
|
200
215
|
|
|
201
|
-
|
|
202
|
-
|
|
216
|
+
### Option 3: [Another Alternative]
|
|
217
|
+
[Same structure as Option 1]
|
|
203
218
|
|
|
204
|
-
|
|
205
|
-
- Files to create: [N] (~[X] lines)
|
|
206
|
-
- Files to modify: [N] (~[X] lines)
|
|
207
|
-
- Risk level: [Low/Med/High]
|
|
219
|
+
## Comparison
|
|
208
220
|
|
|
209
|
-
|
|
210
|
-
|
|
221
|
+
| Criteria | Option 1 | Option 2 | Option 3 |
|
|
222
|
+
|----------|----------|----------|----------|
|
|
223
|
+
| Complexity | [L/M/H] | [L/M/H] | [L/M/H] |
|
|
224
|
+
| Codebase fit | [H/M/L] | [H/M/L] | [H/M/L] |
|
|
225
|
+
| Risk | [L/M/H] | [L/M/H] | [L/M/H] |
|
|
211
226
|
|
|
212
|
-
|
|
213
|
-
[Same structure as Option 1]
|
|
227
|
+
## Recommendation
|
|
214
228
|
|
|
215
|
-
|
|
229
|
+
<!-- Render exactly ONE of the two blocks below, based on Step 5's fit-filter outcome. -->
|
|
216
230
|
|
|
217
|
-
|
|
218
|
-
|----------|----------|----------|----------|
|
|
219
|
-
| Complexity | [L/M/H] | [L/M/H] | [L/M/H] |
|
|
220
|
-
| Codebase fit | [H/M/L] | [H/M/L] | [H/M/L] |
|
|
221
|
-
| Risk | [L/M/H] | [L/M/H] | [L/M/H] |
|
|
231
|
+
**(A) When ≥1 candidate clears the fit filter:**
|
|
222
232
|
|
|
223
|
-
|
|
233
|
+
**Selected:** [Option N]
|
|
224
234
|
|
|
225
|
-
|
|
235
|
+
**Rationale:**
|
|
236
|
+
- [Key reason with evidence]
|
|
237
|
+
- [Key reason with evidence]
|
|
238
|
+
- ...
|
|
226
239
|
|
|
227
|
-
|
|
240
|
+
**Why not alternatives:**
|
|
241
|
+
- Option X: [Reason]
|
|
228
242
|
|
|
229
|
-
|
|
243
|
+
**Trade-offs:**
|
|
244
|
+
- Accepting [limitation] for [benefit]
|
|
230
245
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
- ...
|
|
246
|
+
**Implementation approach:**
|
|
247
|
+
1. [Phase 1] - [What to build]
|
|
248
|
+
2. ...
|
|
235
249
|
|
|
236
|
-
|
|
237
|
-
|
|
250
|
+
**Integration points:**
|
|
251
|
+
- `file.ext:line` - [Specific change]
|
|
252
|
+
- `file.ext:line` - [Specific change]
|
|
238
253
|
|
|
239
|
-
|
|
240
|
-
|
|
254
|
+
**Patterns to follow:**
|
|
255
|
+
- [Pattern]: `file.ext:line`
|
|
241
256
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
2. ...
|
|
257
|
+
**Risks:**
|
|
258
|
+
- [Risk]: [Mitigation]
|
|
245
259
|
|
|
246
|
-
|
|
247
|
-
- `file.ext:line` - [Specific change]
|
|
248
|
-
- `file.ext:line` - [Specific change]
|
|
260
|
+
**(B) When every candidate fails the fit filter:**
|
|
249
261
|
|
|
250
|
-
|
|
251
|
-
- [Pattern]: `file.ext:line`
|
|
262
|
+
**No-fit:** every candidate surfaced a blocking concern on at least one kept dimension.
|
|
252
263
|
|
|
253
|
-
|
|
254
|
-
|
|
264
|
+
**Per-candidate blockers:**
|
|
265
|
+
- [Option 1]: [blocking dimension] — [evidence with file:line or doc link]
|
|
266
|
+
- [Option 2]: [blocking dimension] — [evidence]
|
|
267
|
+
- ...
|
|
255
268
|
|
|
256
|
-
|
|
269
|
+
**Recommended next step:**
|
|
270
|
+
- [Re-scope the question] — [how the topic should narrow/widen so candidates can clear]
|
|
271
|
+
- OR [Expand the candidate pool] — [what new candidate sources to enumerate; e.g., named ecosystem option not surfaced by Step 2]
|
|
257
272
|
|
|
258
|
-
|
|
273
|
+
**Frontmatter overrides:** set `confidence: low` and `status: blocked`.
|
|
259
274
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
- ...
|
|
275
|
+
## Scope Boundaries
|
|
276
|
+
- [What we're building]
|
|
277
|
+
- [What we're NOT doing]
|
|
264
278
|
|
|
265
|
-
|
|
266
|
-
- [Re-scope the question] — [how the topic should narrow/widen so candidates can clear]
|
|
267
|
-
- OR [Expand the candidate pool] — [what new candidate sources to enumerate; e.g., named ecosystem option not surfaced by Step 2]
|
|
279
|
+
## Testing Strategy
|
|
268
280
|
|
|
269
|
-
|
|
281
|
+
**Unit tests:**
|
|
282
|
+
- [Key test scenario 1]
|
|
283
|
+
- ...
|
|
270
284
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
285
|
+
**Integration tests:**
|
|
286
|
+
- [End-to-end scenario 1]
|
|
287
|
+
- ...
|
|
274
288
|
|
|
275
|
-
|
|
289
|
+
**Manual verification:**
|
|
290
|
+
- [ ] [Manual test 1]
|
|
291
|
+
- [ ] ...
|
|
276
292
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
293
|
+
## Open Questions
|
|
294
|
+
**Resolved during research:**
|
|
295
|
+
- [Question that was answered] - [Answer with evidence from file:line]
|
|
280
296
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
- ...
|
|
297
|
+
**Requires user input:**
|
|
298
|
+
- [Business or design question] - [Default assumption for planning]
|
|
284
299
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
- [ ] ...
|
|
300
|
+
**Blockers:**
|
|
301
|
+
- [Critical unknown that prevents implementation] - [How to unblock]
|
|
288
302
|
|
|
289
|
-
|
|
290
|
-
**Resolved during research:**
|
|
291
|
-
- [Question that was answered] - [Answer with evidence from file:line]
|
|
303
|
+
## References
|
|
292
304
|
|
|
293
|
-
|
|
294
|
-
|
|
305
|
+
- `thoughts/shared/research/[file].md` - [Context]
|
|
306
|
+
- `src/file.ext:line` - [Similar implementation]
|
|
307
|
+
- `thoughts/shared/[file].md` - [Historical decision]
|
|
308
|
+
```
|
|
295
309
|
|
|
296
|
-
|
|
297
|
-
- [Critical unknown that prevents implementation] - [How to unblock]
|
|
310
|
+
### Step 8: Present Findings
|
|
298
311
|
|
|
299
|
-
|
|
312
|
+
- Present concise summary with clear recommendation
|
|
313
|
+
- Highlight key integration points
|
|
314
|
+
- Ask if they want to proceed to /skill:design with the chosen option or need clarification
|
|
300
315
|
|
|
301
|
-
|
|
302
|
-
- `src/file.ext:line` - [Similar implementation]
|
|
303
|
-
- `thoughts/shared/[file].md` - [Historical decision]
|
|
304
|
-
```
|
|
316
|
+
### Step 9: Handle Follow-up Questions
|
|
305
317
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
318
|
+
- If user has questions, append to same document
|
|
319
|
+
- Update frontmatter: `last_updated` and `last_updated_by`
|
|
320
|
+
- Add section: `## Follow-up Analysis [timestamp]`
|
|
321
|
+
- Spawn additional agents as needed
|
|
310
322
|
|
|
311
|
-
|
|
312
|
-
- If user has questions, append to same document
|
|
313
|
-
- Update frontmatter: `last_updated` and `last_updated_by`
|
|
314
|
-
- Add section: `## Follow-up Analysis [timestamp]`
|
|
315
|
-
- Spawn additional agents as needed
|
|
323
|
+
## Important Notes
|
|
316
324
|
|
|
317
|
-
## Important notes:
|
|
318
325
|
- Always use parallel Agent tool calls to maximize efficiency and minimize context usage
|
|
319
326
|
- Always spawn fresh research to validate current state - never rely on old research docs as source of truth
|
|
320
327
|
- Old research documents can provide historical context but must be validated against current code
|
|
321
|
-
- Generate 2-4 named candidates in Step 2; confirm them with the developer at Step
|
|
328
|
+
- Generate 2-4 named candidates in Step 2; confirm them with the developer at Step 3 before per-candidate fit dispatch
|
|
322
329
|
- Web-search-researcher is a first-class Step 2 agent for ecosystem candidate-source — skip only when the topic is wholly internal and design-space enumeration plus user shortlist cover the space
|
|
323
330
|
- Per-candidate fit dispatch caps at two agents per candidate (one codebase-analyzer, one web-search-researcher) — skip either when no dimension of its anchor-type was kept
|
|
324
331
|
- Solutions documents should be self-contained with all necessary context
|
|
@@ -332,7 +339,7 @@ Present the candidate set and default dimensions to the developer before per-can
|
|
|
332
339
|
- **File reading**: Always read mentioned files FULLY (no limit/offset) before invoking skills
|
|
333
340
|
- **Critical ordering**: Follow the numbered steps exactly
|
|
334
341
|
- ALWAYS read mentioned files first before invoking skills (step 1)
|
|
335
|
-
- ALWAYS generate candidates and run the Step
|
|
336
|
-
- ALWAYS wait for all per-candidate agents to complete before synthesizing (step
|
|
337
|
-
- ALWAYS gather metadata before writing the document (step
|
|
342
|
+
- ALWAYS generate candidates and run the Step 3 checkpoint before per-candidate dispatch (steps 2 → 3 → 4)
|
|
343
|
+
- ALWAYS wait for all per-candidate agents to complete before synthesizing (step 4)
|
|
344
|
+
- ALWAYS gather metadata before writing the document (step 6 before step 7)
|
|
338
345
|
- NEVER write the solutions document with placeholder values
|