@webpresso/claude-plugin 3.1.3
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 +30 -0
- package/.claude-plugin/plugin.json +22 -0
- package/LICENSE +104 -0
- package/README.md +25 -0
- package/bin/wp +89 -0
- package/commands/audit.md +29 -0
- package/commands/blueprint.md +27 -0
- package/commands/qa.md +5 -0
- package/commands/test.md +5 -0
- package/package.json +33 -0
- package/skills/best-practice-research/SKILL.md +89 -0
- package/skills/browse/SKILL.md +25 -0
- package/skills/claude/SKILL.md +202 -0
- package/skills/codex/SKILL.md +53 -0
- package/skills/deep-research/SKILL.md +258 -0
- package/skills/design-review/SKILL.md +26 -0
- package/skills/devex-review/SKILL.md +28 -0
- package/skills/fix/SKILL.md +129 -0
- package/skills/hooks-doctor/SKILL.md +78 -0
- package/skills/lore-protocol/SKILL.md +84 -0
- package/skills/opencode-go/SKILL.md +97 -0
- package/skills/plan-ceo-review/SKILL.md +27 -0
- package/skills/plan-design-review/SKILL.md +27 -0
- package/skills/plan-devex-review/SKILL.md +19 -0
- package/skills/plan-eng-review/SKILL.md +24 -0
- package/skills/plan-refine/SKILL.md +49 -0
- package/skills/plan-refine/references/full-methodology.md +646 -0
- package/skills/tech-debt/SKILL.md +79 -0
- package/skills/testing-philosophy/SKILL.md +53 -0
- package/skills/testing-philosophy/references/full-testing-philosophy.md +523 -0
- package/skills/tph/SKILL.md +35 -0
- package/skills/verify/SKILL.md +209 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: claude
|
|
3
|
+
description: "Claude CLI outside-voice wrapper for review, adversarial challenge, or consultation from non-Claude hosts."
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Claude outside voice
|
|
8
|
+
|
|
9
|
+
Use when a non-Claude host needs Claude to review a diff, challenge a plan, or answer a focused repo question. Keep it bounded/read-only unless asked otherwise, and report Claude output as advice, not verified fact.
|
|
10
|
+
|
|
11
|
+
## Auth check
|
|
12
|
+
|
|
13
|
+
Use local Claude CLI login directly; do not route through Anthropic API-key env vars.
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
AUTH_STATUS_FILE=$(mktemp -t wp-claude-auth.XXXXXX)
|
|
17
|
+
trap 'rm -f "$AUTH_STATUS_FILE"' EXIT
|
|
18
|
+
if ! claude auth status --json >"$AUTH_STATUS_FILE" 2>/dev/null; then
|
|
19
|
+
if ! claude auth status >"$AUTH_STATUS_FILE" 2>/dev/null; then
|
|
20
|
+
echo "CLAUDE_AUTH=missing: run claude auth login with the intended Claude Max account"
|
|
21
|
+
exit 1
|
|
22
|
+
fi
|
|
23
|
+
fi
|
|
24
|
+
if grep -E '"(authenticated|loggedIn|success)"[[:space:]]*:[[:space:]]*true' "$AUTH_STATUS_FILE" >/dev/null; then
|
|
25
|
+
echo "CLAUDE_AUTH=cli-login"
|
|
26
|
+
else
|
|
27
|
+
echo "CLAUDE_AUTH=missing: claude auth status did not report a recognized Claude CLI login"
|
|
28
|
+
exit 1
|
|
29
|
+
fi
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Portable prompt file
|
|
33
|
+
|
|
34
|
+
Use a suffix-free `mktemp -t` pattern so macOS and Linux both work:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
PROMPT_FILE=$(mktemp -t wp-claude-review.XXXXXX)
|
|
38
|
+
trap 'rm -f "$PROMPT_FILE"' EXIT
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Modes
|
|
42
|
+
|
|
43
|
+
### Review
|
|
44
|
+
|
|
45
|
+
Use single-file / single-question first for any non-trivial diff. Do not send a whole PR unless it already fits within the bounded payload below.
|
|
46
|
+
|
|
47
|
+
**Model policy:** default to `sonnet` via `CLAUDE_REVIEW_MODEL=${CLAUDE_REVIEW_MODEL:-sonnet}`. Override to `opus` only when the review is approval evidence or the user explicitly asks for Opus. Never use `fable` for Claude outside-voice review. Any review used as blueprint approval evidence MUST run with Claude Opus and record `"model": "opus"`.
|
|
48
|
+
|
|
49
|
+
#### Bounded prompt payload
|
|
50
|
+
|
|
51
|
+
Always include:
|
|
52
|
+
|
|
53
|
+
- current branch and base branch
|
|
54
|
+
- `git diff --stat`
|
|
55
|
+
- changed file list
|
|
56
|
+
- one targeted file diff or one narrow snippet/hunk only, capped to a fixed size
|
|
57
|
+
|
|
58
|
+
Prefer ~12 KB or ~200 lines per call. Split large reviews instead of raising the cap.
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
BASE_BRANCH=${BASE_BRANCH:-origin/main}
|
|
62
|
+
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
|
63
|
+
TARGET_FILE=${TARGET_FILE:?set TARGET_FILE to one changed file}
|
|
64
|
+
|
|
65
|
+
{
|
|
66
|
+
printf 'Outside review mode: focused diff review\n'
|
|
67
|
+
printf 'Base branch: %s\nCurrent branch: %s\n\n' "$BASE_BRANCH" "$CURRENT_BRANCH"
|
|
68
|
+
printf 'git diff --stat %s...HEAD\n' "$BASE_BRANCH"
|
|
69
|
+
git diff --stat "$BASE_BRANCH"...HEAD
|
|
70
|
+
printf '\nChanged files:\n'
|
|
71
|
+
git diff --name-only "$BASE_BRANCH"...HEAD
|
|
72
|
+
printf '\nTarget file: %s\n' "$TARGET_FILE"
|
|
73
|
+
printf 'Bounded target diff (max 12000 bytes):\n'
|
|
74
|
+
git diff --unified=3 "$BASE_BRANCH"...HEAD -- "$TARGET_FILE" | \
|
|
75
|
+
head -c 12000
|
|
76
|
+
printf '\n\nQuestion: Identify the highest-signal correctness, security, data-loss, or maintainability risk in %s. Quote only the smallest relevant excerpt. If context is insufficient, answer INSUFFICIENT_CONTEXT.\n' "$TARGET_FILE"
|
|
77
|
+
} >"$PROMPT_FILE"
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
#### Timed Claude artifact wrapper
|
|
81
|
+
|
|
82
|
+
Run Claude through the bounded Python wrapper. Use `claude --print --model "$CLAUDE_REVIEW_MODEL"`; do not recommend `--bare` for this path. Do not add artificial budget caps unless the user requested one. The wrapper is deterministic:
|
|
83
|
+
|
|
84
|
+
- it defaults to `CLAUDE_REVIEW_MODEL=sonnet` and allows only `opus` or `sonnet`
|
|
85
|
+
- it never passes `--tools ""`, because Claude's variadic `--tools` option can swallow the prompt
|
|
86
|
+
- it captures stdout and stderr for preflight and the full review
|
|
87
|
+
- it writes the artifact on success, non-zero exit, or timeout
|
|
88
|
+
- it runs one full review attempt only; retry only if you change the command shape for a specific diagnosed reason
|
|
89
|
+
|
|
90
|
+
Preflight must be only the tiny `claude-ok` prompt with the selected model. Do not use the real review prompt for preflight.
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
CLAUDE_REVIEW_MODEL=${CLAUDE_REVIEW_MODEL:-sonnet}
|
|
94
|
+
CLAUDE_REVIEW_EFFORT=${CLAUDE_REVIEW_EFFORT:-medium}
|
|
95
|
+
CLAUDE_REVIEW_PREFLIGHT_TIMEOUT_SECONDS=${CLAUDE_REVIEW_PREFLIGHT_TIMEOUT_SECONDS:-30}
|
|
96
|
+
CLAUDE_REVIEW_IDLE_TIMEOUT_SECONDS=${CLAUDE_REVIEW_IDLE_TIMEOUT_SECONDS:-180}
|
|
97
|
+
CLAUDE_REVIEW_ARTIFACT=${CLAUDE_REVIEW_ARTIFACT:-"$(pwd)/.webpresso/claude-review-$(date +%Y%m%dT%H%M%S).json"}
|
|
98
|
+
export CLAUDE_REVIEW_MODEL CLAUDE_REVIEW_EFFORT CLAUDE_REVIEW_PREFLIGHT_TIMEOUT_SECONDS CLAUDE_REVIEW_IDLE_TIMEOUT_SECONDS CLAUDE_REVIEW_ARTIFACT
|
|
99
|
+
mkdir -p "$(dirname "$CLAUDE_REVIEW_ARTIFACT")"
|
|
100
|
+
|
|
101
|
+
python3 - "$PROMPT_FILE" "$CLAUDE_REVIEW_ARTIFACT" <<'PY'
|
|
102
|
+
from __future__ import annotations
|
|
103
|
+
|
|
104
|
+
import json, os, subprocess, sys, time
|
|
105
|
+
from pathlib import Path
|
|
106
|
+
|
|
107
|
+
prompt_path = Path(sys.argv[1])
|
|
108
|
+
artifact_path = Path(sys.argv[2])
|
|
109
|
+
model = os.environ.get("CLAUDE_REVIEW_MODEL", "sonnet")
|
|
110
|
+
effort = os.environ.get("CLAUDE_REVIEW_EFFORT", "medium")
|
|
111
|
+
preflight_timeout = float(os.environ.get("CLAUDE_REVIEW_PREFLIGHT_TIMEOUT_SECONDS", "30"))
|
|
112
|
+
review_idle_timeout = float(os.environ.get("CLAUDE_REVIEW_IDLE_TIMEOUT_SECONDS", "180"))
|
|
113
|
+
if model not in {"opus", "sonnet"}: raise SystemExit("CLAUDE_REVIEW_MODEL must be one of: opus, sonnet")
|
|
114
|
+
if effort not in {"medium", "high"}: raise SystemExit("CLAUDE_REVIEW_EFFORT must be one of: medium, high")
|
|
115
|
+
if preflight_timeout <= 0 or review_idle_timeout <= 0: raise SystemExit("Claude timeout values must be positive numbers")
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def utc_now() -> str: return time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
|
|
119
|
+
|
|
120
|
+
artifact: dict[str, object] = {"tool": "claude-outside-voice", "model": model, "effort": effort, "startedAt": utc_now(), "artifactPath": str(artifact_path), "runs": []}
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def write_artifact(status: str, exit_code: int) -> None:
|
|
124
|
+
artifact.update({"finishedAt": utc_now(), "status": status, "exitCode": exit_code})
|
|
125
|
+
artifact_path.parent.mkdir(parents=True, exist_ok=True)
|
|
126
|
+
artifact_path.write_text(json.dumps(artifact, indent=2) + "\n", encoding="utf-8")
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def as_text(value: str | bytes | None) -> str:
|
|
130
|
+
return value.decode(errors="replace") if isinstance(value, bytes) else (value or "")
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def run_claude(stage: str, prompt: str, timeout_seconds: float, timeout_kind: str) -> int:
|
|
134
|
+
command = ["claude", "--print", "--model", model, "--effort", effort, prompt]
|
|
135
|
+
started = last_progress = time.monotonic()
|
|
136
|
+
last_progress_at = utc_now()
|
|
137
|
+
out = err = ""
|
|
138
|
+
record: dict[str, object] = {"stage": stage, "command": [*command[:-1], "<prompt>"], "timeoutKind": timeout_kind, "timeoutSeconds": timeout_seconds, "idleTimeoutSeconds": timeout_seconds if timeout_kind == "idle" else None, "startedAt": last_progress_at}
|
|
139
|
+
try:
|
|
140
|
+
process = subprocess.Popen(command, text=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
141
|
+
while True:
|
|
142
|
+
try:
|
|
143
|
+
new_out, new_err = process.communicate(timeout=0.5)
|
|
144
|
+
out, err = as_text(new_out), as_text(new_err)
|
|
145
|
+
code = int(process.returncode)
|
|
146
|
+
timed_out = False
|
|
147
|
+
break
|
|
148
|
+
except subprocess.TimeoutExpired as exc:
|
|
149
|
+
new_out, new_err = as_text(exc.stdout), as_text(exc.stderr)
|
|
150
|
+
if new_out != out or new_err != err:
|
|
151
|
+
out, err, last_progress, last_progress_at = new_out, new_err, time.monotonic(), utc_now()
|
|
152
|
+
reference = last_progress if timeout_kind == "idle" else started
|
|
153
|
+
if time.monotonic() - reference > timeout_seconds:
|
|
154
|
+
process.kill()
|
|
155
|
+
final_out, final_err = process.communicate()
|
|
156
|
+
out += as_text(final_out)[len(out):]
|
|
157
|
+
err += as_text(final_err)[len(err):]
|
|
158
|
+
code, timed_out = 124, True
|
|
159
|
+
break
|
|
160
|
+
except OSError as exc:
|
|
161
|
+
out, err, code, timed_out = "", str(exc), 1, False
|
|
162
|
+
record.update({"exitCode": code, "timedOut": timed_out, "stdout": out, "stderr": err, "finishedAt": utc_now(), "lastProgressAt": last_progress_at, "elapsedSeconds": round(time.monotonic() - started, 3)})
|
|
163
|
+
artifact["runs"].append(record)
|
|
164
|
+
return code
|
|
165
|
+
|
|
166
|
+
preflight_code = run_claude("preflight", "claude-ok", preflight_timeout, "wall-clock")
|
|
167
|
+
if preflight_code != 0:
|
|
168
|
+
write_artifact("preflight-timeout" if preflight_code == 124 else "preflight-failed", preflight_code)
|
|
169
|
+
print(f"CLAUDE_REVIEW_PREFLIGHT_EXIT={preflight_code}", file=sys.stderr)
|
|
170
|
+
print(f"CLAUDE_REVIEW_ARTIFACT={artifact_path}", file=sys.stderr)
|
|
171
|
+
raise SystemExit(preflight_code)
|
|
172
|
+
review_code = run_claude("review", prompt_path.read_text(encoding="utf-8"), review_idle_timeout, "idle")
|
|
173
|
+
write_artifact("idle-timeout" if review_code == 124 else ("success" if review_code == 0 else "failed"), review_code)
|
|
174
|
+
print(f"CLAUDE_REVIEW_EXIT={review_code}", file=sys.stderr)
|
|
175
|
+
print(f"CLAUDE_REVIEW_ARTIFACT={artifact_path}", file=sys.stderr)
|
|
176
|
+
raise SystemExit(review_code)
|
|
177
|
+
PY
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
After the wrapper exits, verify both the exit code and artifact path before summarizing Claude's raw output:
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
test -f "$CLAUDE_REVIEW_ARTIFACT" || {
|
|
184
|
+
echo "CLAUDE_REVIEW_ARTIFACT=missing: $CLAUDE_REVIEW_ARTIFACT" >&2
|
|
185
|
+
exit 1
|
|
186
|
+
}
|
|
187
|
+
echo "CLAUDE_REVIEW_ARTIFACT=$CLAUDE_REVIEW_ARTIFACT"
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
#### Retry policy
|
|
191
|
+
|
|
192
|
+
Do not perform blind retries. Run the full review once. Retry only after diagnosing and changing a command-shape problem; record the reason and artifact path. Do not fall back to an unbounded whole-PR prompt.
|
|
193
|
+
|
|
194
|
+
Summarize findings with severity, evidence, model, artifact path, and whether you independently verified them.
|
|
195
|
+
|
|
196
|
+
### Challenge
|
|
197
|
+
|
|
198
|
+
Ask Claude to argue against the current plan: hidden assumptions, failure modes, missing tests, and simpler alternatives.
|
|
199
|
+
|
|
200
|
+
### Consult
|
|
201
|
+
|
|
202
|
+
Ask a focused repo question. Include only the necessary file paths and snippets; do not send secrets.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: codex
|
|
3
|
+
description: "Codex CLI outside-voice wrapper for code review, plan challenge, or consultation from non-Codex hosts."
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Codex outside voice
|
|
8
|
+
|
|
9
|
+
Use this skill from Claude or another non-Codex host when the user wants Codex to independently review a diff, challenge a plan, or answer a repo question. Keep Codex read-only by default and treat its answer as external advice until independently verified.
|
|
10
|
+
|
|
11
|
+
## Auth check
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
if ! codex login status >/dev/null 2>&1; then
|
|
15
|
+
echo "CODEX_AUTH=missing: run codex login before using the codex outside-voice skill"
|
|
16
|
+
exit 1
|
|
17
|
+
fi
|
|
18
|
+
echo "CODEX_AUTH=ok"
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Portable prompt file
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
PROMPT_FILE=$(mktemp -t wp-codex-review.XXXXXX)
|
|
25
|
+
trap 'rm -f "$PROMPT_FILE"' EXIT
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Modes
|
|
29
|
+
|
|
30
|
+
### Review
|
|
31
|
+
|
|
32
|
+
1. Capture the current branch, base branch, and `git diff --stat`.
|
|
33
|
+
2. Write a concise prompt asking Codex to find correctness, security, data-loss, and maintainability risks.
|
|
34
|
+
3. Run Codex non-interactively in read-only mode:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
CODEX_REVIEW_EFFORT=${CODEX_REVIEW_EFFORT:-medium}
|
|
38
|
+
case "$CODEX_REVIEW_EFFORT" in
|
|
39
|
+
medium|high) ;;
|
|
40
|
+
*) echo "CODEX_REVIEW_EFFORT must be one of: medium, high" >&2; exit 2 ;;
|
|
41
|
+
esac
|
|
42
|
+
codex exec -c model_reasoning_effort="\"$CODEX_REVIEW_EFFORT\"" --sandbox read-only --cd "$PWD" - <"$PROMPT_FILE"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
4. Summarize findings with severity, evidence, and whether you independently verified them.
|
|
46
|
+
|
|
47
|
+
### Challenge
|
|
48
|
+
|
|
49
|
+
Ask Codex to argue against the current plan: hidden assumptions, failure modes, missing tests, and simpler alternatives.
|
|
50
|
+
|
|
51
|
+
### Consult
|
|
52
|
+
|
|
53
|
+
Ask a focused repo question. Include only the necessary file paths and snippets; do not send secrets.
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: skill
|
|
3
|
+
slug: deep-research
|
|
4
|
+
title: Deep Research
|
|
5
|
+
status: active
|
|
6
|
+
scope: repo
|
|
7
|
+
applies_to: [agents]
|
|
8
|
+
related: []
|
|
9
|
+
created: "2026-05-07"
|
|
10
|
+
last_reviewed: "2026-05-07"
|
|
11
|
+
name: deep-research
|
|
12
|
+
description: "Deep web research with dated credible sources, pro/con synthesis, and project-alignment notes."
|
|
13
|
+
argument-hint: "<subject or question to research>"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
<Purpose>
|
|
17
|
+
Deep Research is a multi-phase web research workflow that produces a balanced, citation-backed analysis of a subject. It collects both positive and negative sentiments from credible sources, evaluates alignment with the project's vision and tech stack, identifies 2026 state-of-the-art best practices, and logs the result to `docs/research/` with a date-prefixed filename.
|
|
18
|
+
</Purpose>
|
|
19
|
+
|
|
20
|
+
<Use_When>
|
|
21
|
+
|
|
22
|
+
- Evaluating a technology, library, pattern, or product direction
|
|
23
|
+
- Comparing alternatives before making an architectural or product decision
|
|
24
|
+
- The user says "research", "deep research", "investigate", or "what does the community think about"
|
|
25
|
+
- You need a balanced view of trade-offs before recommending something
|
|
26
|
+
</Use_When>
|
|
27
|
+
|
|
28
|
+
<Do_Not_Use_When>
|
|
29
|
+
|
|
30
|
+
- The user wants a quick factual lookup (use WebSearch directly)
|
|
31
|
+
- The user wants codebase exploration (use explore)
|
|
32
|
+
- The user wants a requirements interview (use deep-interview)
|
|
33
|
+
- The answer is already well-established and non-controversial
|
|
34
|
+
</Do_Not_Use_When>
|
|
35
|
+
|
|
36
|
+
<Output_Contract>
|
|
37
|
+
A single markdown file written to:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
docs/research/{YYYY-MM-DD}-{slug}.md
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Where `{YYYY-MM-DD}` is today's date and `{slug}` is a kebab-case summary of the subject.
|
|
44
|
+
|
|
45
|
+
The file MUST have this frontmatter and structure (see Phase 5 for full template).
|
|
46
|
+
</Output_Contract>
|
|
47
|
+
|
|
48
|
+
<Steps>
|
|
49
|
+
|
|
50
|
+
## Phase 0: Scope and Context Load
|
|
51
|
+
|
|
52
|
+
1. Parse `{{ARGUMENTS}}` into a research subject and any qualifiers (e.g., "for our use case", "vs X").
|
|
53
|
+
2. Derive a short kebab-case slug for the filename.
|
|
54
|
+
3. Read `docs/research/product/VISION.md` (or the project's equivalent — check `docs/` for a vision doc) to load the current vision context. Skip if not present.
|
|
55
|
+
4. Identify the relevant tech stack context by reading project config files (e.g., `package.json` workspaces, `tsconfig.json`, key dependencies) — keep this lightweight, just enough to judge alignment.
|
|
56
|
+
5. Announce the research plan to the user:
|
|
57
|
+
- Subject
|
|
58
|
+
- Key questions to investigate
|
|
59
|
+
- Output path
|
|
60
|
+
|
|
61
|
+
## Phase 1: Broad Discovery (parallel)
|
|
62
|
+
|
|
63
|
+
Run **5-8 parallel WebSearch queries** covering different angles:
|
|
64
|
+
|
|
65
|
+
1. **Overview**: `"{subject} 2026 overview best practices"`
|
|
66
|
+
2. **Positive sentiment**: `"{subject} benefits advantages why use 2026"`
|
|
67
|
+
3. **Negative sentiment / criticism**: `"{subject} problems criticism drawbacks 2026"`
|
|
68
|
+
4. **Community opinion**: `"{subject} reddit hacker news experience production 2026"`
|
|
69
|
+
5. **Comparison / alternatives**: `"{subject} vs alternatives comparison 2026"`
|
|
70
|
+
6. **State of the art**: `"{subject} state of the art latest 2026"`
|
|
71
|
+
7. **(If applicable)** Stack-specific: `"{subject} TypeScript Cloudflare Workers React 2026"`
|
|
72
|
+
8. **(If applicable)** Domain-specific query based on the project's problem space
|
|
73
|
+
|
|
74
|
+
For each search, record:
|
|
75
|
+
|
|
76
|
+
- Source URL
|
|
77
|
+
- Source type (docs, blog, forum, official, academic)
|
|
78
|
+
- Key claims or data points
|
|
79
|
+
- Sentiment direction (positive / negative / neutral)
|
|
80
|
+
|
|
81
|
+
## Phase 2: Deep Dive (sequential, selective)
|
|
82
|
+
|
|
83
|
+
From Phase 1 results, identify the **5-10 most credible and information-dense sources**.
|
|
84
|
+
|
|
85
|
+
Use `WebFetch` on each to extract deeper detail. Prioritize:
|
|
86
|
+
|
|
87
|
+
- Official documentation or announcements
|
|
88
|
+
- Production experience reports (postmortems, migration stories)
|
|
89
|
+
- Benchmark data or technical comparisons
|
|
90
|
+
- Strong critical takes with specific evidence
|
|
91
|
+
|
|
92
|
+
For each fetched source, extract:
|
|
93
|
+
|
|
94
|
+
- Specific claims with evidence
|
|
95
|
+
- Sentiment and strength (strong positive, mild positive, neutral, mild negative, strong negative)
|
|
96
|
+
- Credibility assessment (official docs > production experience > blog opinion > forum anecdote)
|
|
97
|
+
|
|
98
|
+
## Phase 3: Triangulate and Score
|
|
99
|
+
|
|
100
|
+
1. **Cluster findings** into themes (e.g., "developer experience", "performance", "ecosystem maturity", "production readiness").
|
|
101
|
+
2. **Cross-reference claims**: if only one source makes a claim, flag it as unverified. Claims supported by 2+ independent sources get higher weight.
|
|
102
|
+
3. **Score source credibility** using:
|
|
103
|
+
- Official docs / specs: high
|
|
104
|
+
- Production postmortems with data: high
|
|
105
|
+
- Respected engineering blogs: medium-high
|
|
106
|
+
- Community forums (HN, Reddit) with detail: medium
|
|
107
|
+
- Marketing material / vendor blogs: low (note bias)
|
|
108
|
+
- Undated or anonymous content: very low
|
|
109
|
+
4. **Identify gaps**: what questions remain unanswered? If critical gaps exist, run 1-2 additional targeted searches.
|
|
110
|
+
|
|
111
|
+
## Phase 4: Vision and Stack Alignment Analysis
|
|
112
|
+
|
|
113
|
+
Using the project's vision from Phase 0 and the research findings:
|
|
114
|
+
|
|
115
|
+
1. **Vision alignment**: How does this subject relate to the project's stated mission? Does it help or hinder current priorities?
|
|
116
|
+
2. **Tech stack fit**: How well does this integrate with the existing stack (read `package.json`, key deps, framework choices)? What's the integration cost?
|
|
117
|
+
3. **Trade-off assessment**: Given the project's current stage, what are the most relevant trade-offs?
|
|
118
|
+
4. **Recommendation**: Based on the evidence, what's the suggested path? Be explicit about confidence level.
|
|
119
|
+
|
|
120
|
+
## Phase 5: Write Report
|
|
121
|
+
|
|
122
|
+
Write the report to `docs/research/{YYYY-MM-DD}-{slug}.md` using this template:
|
|
123
|
+
|
|
124
|
+
```markdown
|
|
125
|
+
---
|
|
126
|
+
type: research
|
|
127
|
+
title: "{Title}"
|
|
128
|
+
subject: "{subject}"
|
|
129
|
+
date: { YYYY-MM-DD }
|
|
130
|
+
confidence: { high|medium|low }
|
|
131
|
+
verdict: { adopt|trial|assess|hold|reject }
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
# {Title}
|
|
135
|
+
|
|
136
|
+
> One-line summary of the finding.
|
|
137
|
+
|
|
138
|
+
## TL;DR
|
|
139
|
+
|
|
140
|
+
3-5 bullet executive summary covering: what it is, key finding, recommendation.
|
|
141
|
+
|
|
142
|
+
## What This Is
|
|
143
|
+
|
|
144
|
+
Brief neutral description of the subject being researched.
|
|
145
|
+
|
|
146
|
+
## State of the Art (2026)
|
|
147
|
+
|
|
148
|
+
Current best practices, latest developments, where the ecosystem stands today.
|
|
149
|
+
Cite sources inline as [Source Name](url).
|
|
150
|
+
|
|
151
|
+
## Positive Signals
|
|
152
|
+
|
|
153
|
+
Evidence-backed reasons in favor. Group by theme.
|
|
154
|
+
Each point should cite its source and note credibility level.
|
|
155
|
+
|
|
156
|
+
### {Theme 1}
|
|
157
|
+
|
|
158
|
+
- ...
|
|
159
|
+
|
|
160
|
+
### {Theme 2}
|
|
161
|
+
|
|
162
|
+
- ...
|
|
163
|
+
|
|
164
|
+
## Negative Signals
|
|
165
|
+
|
|
166
|
+
Evidence-backed criticism and risks. Group by theme.
|
|
167
|
+
Each point should cite its source and note credibility level.
|
|
168
|
+
|
|
169
|
+
### {Theme 1}
|
|
170
|
+
|
|
171
|
+
- ...
|
|
172
|
+
|
|
173
|
+
### {Theme 2}
|
|
174
|
+
|
|
175
|
+
- ...
|
|
176
|
+
|
|
177
|
+
## Community Sentiment
|
|
178
|
+
|
|
179
|
+
What practitioners actually say. Include direct quotes where available.
|
|
180
|
+
Note the balance: if sentiment skews one way, say so explicitly.
|
|
181
|
+
|
|
182
|
+
## Project Alignment
|
|
183
|
+
|
|
184
|
+
### Vision Fit
|
|
185
|
+
|
|
186
|
+
How this relates to the project's current goals.
|
|
187
|
+
|
|
188
|
+
### Tech Stack Fit
|
|
189
|
+
|
|
190
|
+
Integration with the project's stack (from `package.json`, framework configs).
|
|
191
|
+
|
|
192
|
+
### Trade-offs for Current Stage
|
|
193
|
+
|
|
194
|
+
What matters most given where the project is now.
|
|
195
|
+
|
|
196
|
+
## Recommendation
|
|
197
|
+
|
|
198
|
+
Clear recommendation with confidence level and reasoning.
|
|
199
|
+
Include conditions under which the recommendation would change.
|
|
200
|
+
|
|
201
|
+
## Sources
|
|
202
|
+
|
|
203
|
+
Numbered list of all sources used, with:
|
|
204
|
+
|
|
205
|
+
- [N] [Title](url) — type, credibility, sentiment direction
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Phase 6: Present Summary
|
|
209
|
+
|
|
210
|
+
After writing the file, present to the user:
|
|
211
|
+
|
|
212
|
+
1. The output file path
|
|
213
|
+
2. The verdict and confidence
|
|
214
|
+
3. A 3-line summary of the key finding
|
|
215
|
+
4. Any critical gaps or caveats
|
|
216
|
+
|
|
217
|
+
</Steps>
|
|
218
|
+
|
|
219
|
+
<Quality_Gates>
|
|
220
|
+
|
|
221
|
+
- Minimum 8 distinct sources cited
|
|
222
|
+
- At least 2 sources per major claim
|
|
223
|
+
- Both positive AND negative signals sections must be substantive (not token)
|
|
224
|
+
- Sources section must include credibility and sentiment annotations
|
|
225
|
+
- Vision alignment section must reference specific project goals (not generic)
|
|
226
|
+
- All inline citations must be clickable links
|
|
227
|
+
- Frontmatter must include confidence and verdict fields
|
|
228
|
+
</Quality_Gates>
|
|
229
|
+
|
|
230
|
+
<Verdict_Scale>
|
|
231
|
+
|
|
232
|
+
- **adopt**: Strong evidence, clear fit, community consensus positive. Use it.
|
|
233
|
+
- **trial**: Promising evidence, worth a bounded experiment. Try it in a limited scope.
|
|
234
|
+
- **assess**: Mixed signals or insufficient evidence. Research more before committing.
|
|
235
|
+
- **hold**: Significant concerns or poor fit. Don't invest now, revisit later.
|
|
236
|
+
- **reject**: Clear evidence against. Don't use this.
|
|
237
|
+
</Verdict_Scale>
|
|
238
|
+
|
|
239
|
+
<Tool_Usage>
|
|
240
|
+
|
|
241
|
+
- `WebSearch` for broad discovery (Phase 1) and gap-filling (Phase 3)
|
|
242
|
+
- `WebFetch` for deep source extraction (Phase 2)
|
|
243
|
+
- `Read` for loading vision and tech stack context (Phase 0)
|
|
244
|
+
- `Write` for the final report (Phase 5)
|
|
245
|
+
- `Agent` with `subagent_type=Explore` if codebase context is needed for alignment analysis
|
|
246
|
+
- Use parallel tool calls wherever searches are independent
|
|
247
|
+
</Tool_Usage>
|
|
248
|
+
|
|
249
|
+
<Common_Mistakes>
|
|
250
|
+
|
|
251
|
+
- Writing a report that's all positive or all negative — always find both sides
|
|
252
|
+
- Citing marketing material as if it were neutral evidence — flag vendor bias
|
|
253
|
+
- Making alignment claims without reading the actual vision doc
|
|
254
|
+
- Using stale search results — always include "2026" in queries
|
|
255
|
+
- Writing the report before triangulating — don't just concatenate search results
|
|
256
|
+
</Common_Mistakes>
|
|
257
|
+
|
|
258
|
+
Task: {{ARGUMENTS}}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: design-review
|
|
3
|
+
description: "Report-first visual/browser design audit for hierarchy, spacing, consistency, responsive, a11y, and interactions."
|
|
4
|
+
license: MIT
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Glob
|
|
8
|
+
- Grep
|
|
9
|
+
- Bash
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Design review
|
|
13
|
+
|
|
14
|
+
Use for live visual QA or design polish requests. For pre-implementation plan critique, use `/plan-design-review`.
|
|
15
|
+
|
|
16
|
+
## Default behavior
|
|
17
|
+
|
|
18
|
+
- The `allowed-tools` frontmatter is an audited disclosure for supported hosts;
|
|
19
|
+
pretool-guard remains the enforced mutation backstop when a host does not prove
|
|
20
|
+
skill-frontmatter enforcement.
|
|
21
|
+
- Report first; do not edit source unless the user explicitly asks for fixes.
|
|
22
|
+
- Inspect key viewports and states.
|
|
23
|
+
- Capture evidence with browser screenshots or precise observations.
|
|
24
|
+
- Rank findings by user impact and implementation effort.
|
|
25
|
+
|
|
26
|
+
If fixes are authorized, make small visual changes and verify before/after.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: devex-review
|
|
3
|
+
description: "Report-first developer-experience audit for onboarding, docs, examples, CLI help, and time-to-hello-world."
|
|
4
|
+
license: MIT
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Glob
|
|
8
|
+
- Grep
|
|
9
|
+
- Bash
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Live DX review
|
|
13
|
+
|
|
14
|
+
Use after or during developer-facing work to test the real user journey.
|
|
15
|
+
|
|
16
|
+
This is report-only by default. The `allowed-tools` frontmatter is an audited
|
|
17
|
+
disclosure for supported hosts; pretool-guard remains the enforced mutation
|
|
18
|
+
backstop when a host does not prove skill-frontmatter enforcement.
|
|
19
|
+
|
|
20
|
+
## Evidence to gather
|
|
21
|
+
|
|
22
|
+
- Docs route or README entrypoint.
|
|
23
|
+
- Install/setup command path.
|
|
24
|
+
- CLI help and error messages.
|
|
25
|
+
- Time-to-hello-world estimate.
|
|
26
|
+
- Browser evidence for docs or local app flows when relevant.
|
|
27
|
+
|
|
28
|
+
Return a scorecard with blockers, papercuts, screenshots/artifacts when available, and concrete next fixes.
|