@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.
@@ -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.