cue-ai 0.9.0 → 0.9.2

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.
Files changed (310) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +82 -33
  3. package/bin/cue-review-progress +107 -0
  4. package/bin/cue-review-watch +98 -0
  5. package/dist/cue.js +7352 -3744
  6. package/package.json +16 -5
  7. package/profiles/_types.ts +9 -0
  8. package/profiles/backend/profile.yaml +2 -0
  9. package/profiles/blog-writer/profile.yaml +10 -0
  10. package/profiles/browser/profile.yaml +9 -2
  11. package/profiles/builder/profile.yaml +3 -6
  12. package/profiles/career/profile.yaml +13 -2
  13. package/profiles/claude-api/profile.yaml +1 -1
  14. package/profiles/commerce/profile.yaml +27 -3
  15. package/profiles/core/logo.png +0 -0
  16. package/profiles/core/profile.yaml +62 -2
  17. package/profiles/dash-merge-test/profile.yaml +109 -0
  18. package/profiles/designer/profile.yaml +2 -0
  19. package/profiles/designer-medusa-next/profile.yaml +4 -1
  20. package/profiles/designer-medusa-vite/profile.yaml +4 -1
  21. package/profiles/docs-writer/profile.yaml +3 -1
  22. package/profiles/eu-tender-research/README.md +48 -0
  23. package/profiles/eu-tender-research/logo.png +0 -0
  24. package/profiles/eu-tender-research/profile.yaml +108 -0
  25. package/profiles/finance/logo.png +0 -0
  26. package/profiles/finance/profile.yaml +46 -0
  27. package/profiles/frontend/profile.yaml +5 -9
  28. package/profiles/growth/profile.yaml +2 -3
  29. package/profiles/gstack/profile.yaml +15 -0
  30. package/profiles/higgsfield/profile.yaml +3 -0
  31. package/profiles/hyperframes/logo.png +0 -0
  32. package/profiles/hyperframes/profile.yaml +59 -0
  33. package/profiles/improver/profile.yaml +88 -0
  34. package/profiles/marketing/profile.yaml +0 -3
  35. package/profiles/medusa-dev/profile.yaml +2 -0
  36. package/profiles/medusa-next/profile.yaml +2 -3
  37. package/profiles/medusa-vite/profile.yaml +2 -3
  38. package/profiles/n8n/logo.png +0 -0
  39. package/profiles/n8n/profile.yaml +50 -0
  40. package/profiles/nextjs/profile.yaml +2 -3
  41. package/profiles/ops/profile.yaml +2 -0
  42. package/profiles/postizz/profile.yaml +13 -3
  43. package/profiles/python/profile.yaml +3 -0
  44. package/profiles/research/profile.yaml +3 -1
  45. package/profiles/schema.json +10 -0
  46. package/profiles/secops/profile.yaml +2 -0
  47. package/profiles/seo/profile.yaml +56 -0
  48. package/profiles/skill-writer/profile.yaml +8 -0
  49. package/profiles/ssh/profile.yaml +32 -0
  50. package/profiles/strapi/logo.png +0 -0
  51. package/profiles/strapi/profile.yaml +45 -0
  52. package/profiles/stripe/logo.png +0 -0
  53. package/profiles/stripe/profile.yaml +1 -0
  54. package/profiles/supabase/logo.png +0 -0
  55. package/profiles/supabase/profile.yaml +85 -0
  56. package/profiles/vercel/logo.png +0 -0
  57. package/profiles/vercel/profile.yaml +25 -1
  58. package/profiles/vite/profile.yaml +4 -3
  59. package/profiles/web-frontend-base/profile.yaml +5 -4
  60. package/profiles/webshop/profile.yaml +23 -5
  61. package/profiles/x-growth-bot/profile.yaml +44 -0
  62. package/resources/icons/generate-icons.py +128 -2
  63. package/resources/mcps/configs/claude.sanitized.json +42 -0
  64. package/resources/mcps/configs/codex.sanitized.json +7 -0
  65. package/resources/skills/skills/career/resume-version-manager/SKILL.md +351 -0
  66. package/resources/skills/skills/career/salary-negotiation-prep/SKILL.md +378 -0
  67. package/resources/skills/skills/content/pdf/SKILL.md +2 -0
  68. package/resources/skills/skills/content/postiz-cards/SKILL.md +48 -0
  69. package/resources/skills/skills/content/postiz-cards/scripts/analytics.sh +38 -0
  70. package/resources/skills/skills/content/postiz-cards/scripts/card.sh +42 -0
  71. package/resources/skills/skills/content/postiz-cards/scripts/lint.py +38 -0
  72. package/resources/skills/skills/design/headless-gif-demo/SKILL.md +1 -1
  73. package/resources/skills/skills/design/readme-svg-design/SKILL.md +1 -1
  74. package/resources/skills/skills/eu-funding/grant-outreach/SKILL.md +70 -0
  75. package/resources/skills/skills/eu-funding/hu-grant-finder/SKILL.md +114 -0
  76. package/resources/skills/skills/eu-funding/hu-grant-finder/evals.md +26 -0
  77. package/resources/skills/skills/eu-funding/ted-tender-search/SKILL.md +80 -0
  78. package/resources/skills/skills/eu-funding/ted-tender-search/evals.md +26 -0
  79. package/resources/skills/skills/eu-funding/ted-tender-search/scripts/ted-search.sh +46 -0
  80. package/resources/skills/skills/event-design/wedding-invitations/SKILL.md +1 -1
  81. package/resources/skills/skills/github/gx-agents/SKILL.md +96 -0
  82. package/resources/skills/skills/gstack/design-shotgun/SKILL.md +1 -1
  83. package/resources/skills/skills/marketing/ab-test-analyzer/SKILL.md +1 -1
  84. package/resources/skills/skills/marketing/ab-test-setup-and-analysis/SKILL.md +1 -1
  85. package/resources/skills/skills/marketing/account-structure-review/SKILL.md +1 -1
  86. package/resources/skills/skills/marketing/ad-copy-variant-generator/SKILL.md +1 -1
  87. package/resources/skills/skills/marketing/ad-extension-audit/SKILL.md +1 -1
  88. package/resources/skills/skills/marketing/ad-spend-allocator/SKILL.md +1 -1
  89. package/resources/skills/skills/marketing/anomaly-detection/SKILL.md +1 -1
  90. package/resources/skills/skills/marketing/attribution-model-comparison/SKILL.md +1 -1
  91. package/resources/skills/skills/marketing/audience-overlap-analysis/SKILL.md +7 -1
  92. package/resources/skills/skills/marketing/bid-strategy-recommendations/SKILL.md +7 -1
  93. package/resources/skills/skills/marketing/budget-scenario-planner/SKILL.md +6 -1
  94. package/resources/skills/skills/marketing/campaign-naming-convention-builder/SKILL.md +7 -1
  95. package/resources/skills/skills/marketing/channel-mix-optimizer/SKILL.md +7 -1
  96. package/resources/skills/skills/marketing/client-report-narratives/SKILL.md +6 -1
  97. package/resources/skills/skills/marketing/competitor-creative-analysis/SKILL.md +1 -1
  98. package/resources/skills/skills/marketing/competitor-teardown/SKILL.md +1 -1
  99. package/resources/skills/skills/marketing/content-repurposer/SKILL.md +1 -1
  100. package/resources/skills/skills/marketing/conversion-path-analysis/SKILL.md +1 -1
  101. package/resources/skills/skills/marketing/cpa-diagnostics/SKILL.md +1 -1
  102. package/resources/skills/skills/marketing/creative-fatigue-detection/SKILL.md +1 -1
  103. package/resources/skills/skills/marketing/day-hour-performance-breakdown/SKILL.md +1 -1
  104. package/resources/skills/skills/marketing/device-performance-split/SKILL.md +1 -1
  105. package/resources/skills/skills/marketing/e2e-seo-assistant/SKILL.md +1 -1
  106. package/resources/skills/skills/marketing/email-sequence-writer/SKILL.md +1 -1
  107. package/resources/skills/skills/marketing/frequency-cap-recommendations/SKILL.md +1 -1
  108. package/resources/skills/skills/marketing/geo-performance-analysis/SKILL.md +1 -1
  109. package/resources/skills/skills/marketing/google-ads-audit/SKILL.md +1 -1
  110. package/resources/skills/skills/marketing/icp-research-assistant/SKILL.md +1 -1
  111. package/resources/skills/skills/marketing/keyword-cannibalization-check/SKILL.md +1 -1
  112. package/resources/skills/skills/marketing/landing-page-audit/SKILL.md +1 -1
  113. package/resources/skills/skills/marketing/landing-page-audit-quick/SKILL.md +1 -1
  114. package/resources/skills/skills/marketing/linkedin-ads-audit/SKILL.md +1 -1
  115. package/resources/skills/skills/marketing/meta-ads-audit/SKILL.md +1 -1
  116. package/resources/skills/skills/marketing/pacing-monitor/SKILL.md +1 -1
  117. package/resources/skills/skills/marketing/performance-benchmarking/SKILL.md +1 -1
  118. package/resources/skills/skills/marketing/programmatic-seo-builder/SKILL.md +1 -1
  119. package/resources/skills/skills/marketing/quality-score-breakdown/SKILL.md +1 -1
  120. package/resources/skills/skills/marketing/reddit-ads-audit/SKILL.md +1 -1
  121. package/resources/skills/skills/marketing/retargeting-window-analysis/SKILL.md +1 -1
  122. package/resources/skills/skills/marketing/roas-forecasting/SKILL.md +1 -1
  123. package/resources/skills/skills/marketing/search-term-mining/SKILL.md +1 -1
  124. package/resources/skills/skills/marketing/utm-tracking-generator/SKILL.md +1 -1
  125. package/resources/skills/skills/marketing/wasted-spend-finder/SKILL.md +1 -1
  126. package/resources/skills/skills/marketing/weekly-account-summary/SKILL.md +1 -1
  127. package/resources/skills/skills/meta/awesome-list-submit/SKILL.md +4 -4
  128. package/resources/skills/skills/meta/cue-dashboard/SKILL.md +109 -0
  129. package/resources/skills/skills/meta/cue-developer/SKILL.md +161 -0
  130. package/resources/skills/skills/meta/cue-developer/evals/evals.json +57 -0
  131. package/resources/skills/skills/meta/cue-developer/references/architecture.md +65 -0
  132. package/resources/skills/skills/meta/cue-developer/references/build_and_test.md +72 -0
  133. package/resources/skills/skills/meta/cue-developer/references/contributing.md +75 -0
  134. package/resources/skills/skills/meta/cue-developer/references/conventions.md +57 -0
  135. package/resources/skills/skills/meta/cue-developer/references/first_time_setup.md +51 -0
  136. package/resources/skills/skills/meta/cue-developer/references/skill_and_mcp_authoring.md +84 -0
  137. package/resources/skills/skills/meta/cue-developer/references/troubleshooting.md +42 -0
  138. package/resources/skills/skills/meta/delegation-check/SKILL.md +148 -0
  139. package/resources/skills/skills/meta/delegation-check/specs/scan-algorithm.md +125 -0
  140. package/resources/skills/skills/meta/delegation-check/specs/separation-rules.md +190 -0
  141. package/resources/skills/skills/meta/focus/SKILL.md +62 -0
  142. package/resources/skills/skills/meta/help/SKILL.md +1 -1
  143. package/resources/skills/skills/meta/integrity-tags/SKILL.md +2 -0
  144. package/resources/skills/skills/meta/next-steps/SKILL.md +124 -0
  145. package/resources/skills/skills/meta/next-steps/evals/eval-set.json +92 -0
  146. package/resources/skills/skills/meta/profile-from-docs/SKILL.md +141 -0
  147. package/resources/skills/skills/meta/ralph-loop/SKILL.md +83 -0
  148. package/resources/skills/skills/meta/ralph-loop/scripts/loop.sh +73 -0
  149. package/resources/skills/skills/meta/skill-simplify/SKILL.md +136 -0
  150. package/resources/skills/skills/meta/skill-simplify/phases/01-analysis.md +173 -0
  151. package/resources/skills/skills/meta/skill-simplify/phases/02-optimize.md +104 -0
  152. package/resources/skills/skills/meta/skill-simplify/phases/03-check.md +145 -0
  153. package/resources/skills/skills/meta/smart-loader/scripts/smart-lookup.sh +13 -4
  154. package/resources/skills/skills/meta/verify-council/SKILL.md +182 -0
  155. package/resources/skills/skills/meta/verify-council/references/lane-prompts.md +103 -0
  156. package/resources/skills/skills/meta/verify-council/references/workflow.js +217 -0
  157. package/resources/skills/skills/nvidia/aiq-research/SKILL.md +1 -1
  158. package/resources/skills/skills/nvidia/cuopt-developer/SKILL.md +16 -1
  159. package/resources/skills/skills/nvidia/cuopt-developer/resources/contributing.md +2 -2
  160. package/resources/skills/skills/nvidia/cuopt-developer/resources/numerical_debugging.md +128 -0
  161. package/resources/skills/skills/nvidia/cuopt-developer/resources/python_bindings.md +2 -9
  162. package/resources/skills/skills/nvidia/cuopt-developer/resources/vrp_skills.md +166 -0
  163. package/resources/skills/skills/nvidia/cuopt-install/SKILL.md +2 -10
  164. package/resources/skills/skills/nvidia/cuopt-numerical-optimization-api-c/SKILL.md +3 -23
  165. package/resources/skills/skills/nvidia/cuopt-numerical-optimization-api-c/resources/examples.md +40 -20
  166. package/resources/skills/skills/nvidia/cuopt-numerical-optimization-api-python/SKILL.md +5 -1
  167. package/resources/skills/skills/nvidia/skill-evolution/SKILL.md +4 -5
  168. package/resources/skills/skills/research/trendradar/SKILL.md +1 -1
  169. package/resources/skills/skills/ssh/ssh-config/SKILL.md +94 -0
  170. package/resources/skills/skills/ssh/ssh-copy/SKILL.md +92 -0
  171. package/resources/skills/skills/ssh/ssh-harden/SKILL.md +108 -0
  172. package/resources/skills/skills/ssh/ssh-keys/SKILL.md +82 -0
  173. package/resources/skills/skills/ssh/ssh-paste-image/LICENSE +28 -0
  174. package/resources/skills/skills/ssh/ssh-paste-image/SKILL.md +149 -0
  175. package/resources/skills/skills/ssh/ssh-paste-image/scripts/build.sh +29 -0
  176. package/resources/skills/skills/ssh/ssh-paste-image/scripts/client/go.mod +3 -0
  177. package/resources/skills/skills/ssh/ssh-paste-image/scripts/client/main.go +79 -0
  178. package/resources/skills/skills/ssh/ssh-paste-image/scripts/daemon/ccimgd.service +12 -0
  179. package/resources/skills/skills/ssh/ssh-paste-image/scripts/daemon/com.ccimgd.plist +20 -0
  180. package/resources/skills/skills/ssh/ssh-paste-image/scripts/daemon/go.mod +3 -0
  181. package/resources/skills/skills/ssh/ssh-paste-image/scripts/daemon/main.go +98 -0
  182. package/resources/skills/skills/ssh/ssh-tunnel/SKILL.md +96 -0
  183. package/resources/skills/skills/strapi/building-with-strapi/SKILL.md +112 -0
  184. package/resources/skills/skills/strapi/strapi-cli/SKILL.md +93 -0
  185. package/resources/skills/skills/strapi/strapi-content-api/SKILL.md +115 -0
  186. package/resources/skills/skills/strapi/strapi-deploy/SKILL.md +89 -0
  187. package/resources/skills/skills/strapi/strapi-mcp-setup/SKILL.md +101 -0
  188. package/resources/skills/skills/strapi/strapi-plugins/SKILL.md +97 -0
  189. package/resources/skills/skills/tools/context7/SKILL.md +101 -0
  190. package/resources/skills/skills/tools/opensrc/SKILL.md +1 -1
  191. package/resources/skills/skills/tools/portless/SKILL.md +186 -0
  192. package/resources/skills/skills/xbot/operate/SKILL.md +229 -0
  193. package/src/commands/_index.ts +8 -0
  194. package/src/commands/ai-score.e2e.test.ts +11 -4
  195. package/src/commands/ai.ts +3 -4
  196. package/src/commands/auto-detect.ts +1 -1
  197. package/src/commands/cli.test.ts +1 -2
  198. package/src/commands/cli.ts +1 -1
  199. package/src/commands/cloud.ts +1 -1
  200. package/src/commands/current.ts +1 -4
  201. package/src/commands/dash.test.ts +110 -0
  202. package/src/commands/dash.ts +194 -0
  203. package/src/commands/dashboard.ts +26 -0
  204. package/src/commands/diff.ts +1 -1
  205. package/src/commands/discover.test.ts +1 -1
  206. package/src/commands/discover.ts +90 -40
  207. package/src/commands/doctor.test.ts +58 -0
  208. package/src/commands/doctor.ts +79 -3
  209. package/src/commands/eval-behavior.ts +1 -1
  210. package/src/commands/eval.ts +2 -2
  211. package/src/commands/evolve.ts +4 -3
  212. package/src/commands/failures.test.ts +1 -1
  213. package/src/commands/features-batch1.test.ts +6 -1
  214. package/src/commands/icon.ts +1 -5
  215. package/src/commands/import-profile.ts +1 -1
  216. package/src/commands/init.ts +50 -7
  217. package/src/commands/install-sh.e2e.test.ts +65 -0
  218. package/src/commands/launch-handoff.e2e.test.ts +88 -0
  219. package/src/commands/launch.e2e.test.ts +8 -1
  220. package/src/commands/launch.test.ts +29 -0
  221. package/src/commands/launch.ts +185 -131
  222. package/src/commands/lock.ts +0 -1
  223. package/src/commands/marketplace.ts +0 -4
  224. package/src/commands/materialize.ts +1 -1
  225. package/src/commands/mem.ts +341 -0
  226. package/src/commands/optimizer.ts +0 -3
  227. package/src/commands/playground.ts +1 -2
  228. package/src/commands/profile-draft-skill.ts +1 -1
  229. package/src/commands/replay-whatif.ts +1 -6
  230. package/src/commands/score.ts +2 -2
  231. package/src/commands/security.test.ts +88 -0
  232. package/src/commands/security.ts +74 -28
  233. package/src/commands/shell.test.ts +65 -4
  234. package/src/commands/shell.ts +67 -7
  235. package/src/commands/skills-test.ts +0 -1
  236. package/src/commands/skills.ts +28 -2
  237. package/src/commands/sources.ts +1 -2
  238. package/src/commands/status.ts +2 -6
  239. package/src/commands/submit-profile.ts +1 -1
  240. package/src/commands/suggest.ts +35 -10
  241. package/src/commands/trigger-gaps.test.ts +50 -0
  242. package/src/commands/trigger-gaps.ts +63 -29
  243. package/src/commands/update.ts +1 -1
  244. package/src/commands/validate.ts +16 -4
  245. package/src/commands/watch-live.ts +1 -1
  246. package/src/commands/workspace.ts +1 -1
  247. package/src/index.ts +26 -10
  248. package/src/lib/active-sessions.ts +1 -1
  249. package/src/lib/agent-adapters.test.ts +100 -0
  250. package/src/lib/agent-adapters.ts +2 -2
  251. package/src/lib/analytics.test.ts +88 -0
  252. package/src/lib/analytics.ts +82 -1
  253. package/src/lib/auto-detect.test.ts +10 -4
  254. package/src/lib/auto-detect.ts +19 -23
  255. package/src/lib/brand-icons.ts +0 -1
  256. package/src/lib/cache.ts +2 -3
  257. package/src/lib/claude-mem-env.test.ts +148 -0
  258. package/src/lib/claude-mem-env.ts +172 -0
  259. package/src/lib/combo-history.test.ts +53 -0
  260. package/src/lib/combo-history.ts +83 -0
  261. package/src/lib/companion-detect.test.ts +108 -0
  262. package/src/lib/companion-detect.ts +140 -0
  263. package/src/lib/companion-fetch.ts +4 -6
  264. package/src/lib/conditional-skills.test.ts +1 -1
  265. package/src/lib/config-paths.test.ts +53 -0
  266. package/src/lib/config-paths.ts +33 -0
  267. package/src/lib/dashboard-server.test.ts +351 -0
  268. package/src/lib/dashboard-server.ts +1476 -27
  269. package/src/lib/debug-log.test.ts +66 -0
  270. package/src/lib/debug-log.ts +45 -0
  271. package/src/lib/mcp-catalog.test.ts +102 -0
  272. package/src/lib/mcp-catalog.ts +193 -0
  273. package/src/lib/pair-suggestions.test.ts +111 -0
  274. package/src/lib/pair-suggestions.ts +98 -5
  275. package/src/lib/permissions.test.ts +76 -0
  276. package/src/lib/permissions.ts +125 -0
  277. package/src/lib/picker.test.ts +1106 -1
  278. package/src/lib/picker.ts +1230 -142
  279. package/src/lib/plugin-discovery.ts +126 -0
  280. package/src/lib/pr-poster.ts +1 -1
  281. package/src/lib/pr-throttle.ts +2 -6
  282. package/src/lib/profile-linter.test.ts +67 -1
  283. package/src/lib/profile-linter.ts +59 -14
  284. package/src/lib/profile-loader.test.ts +21 -0
  285. package/src/lib/profile-loader.ts +22 -3
  286. package/src/lib/profile-metrics.ts +2 -6
  287. package/src/lib/profile-names.test.ts +58 -0
  288. package/src/lib/repos.test.ts +57 -0
  289. package/src/lib/repos.ts +167 -0
  290. package/src/lib/resolver-npx.ts +10 -1
  291. package/src/lib/runtime-materializer.test.ts +200 -3
  292. package/src/lib/runtime-materializer.ts +129 -20
  293. package/src/lib/shared-profiles.ts +2 -3
  294. package/src/lib/skill-clis.test.ts +113 -0
  295. package/src/lib/skill-clis.ts +232 -0
  296. package/src/lib/skill-dependencies.ts +9 -1
  297. package/src/lib/skill-deps.ts +1 -1
  298. package/src/lib/skill-linter.ts +1 -1
  299. package/src/lib/skill-quality.ts +0 -1
  300. package/src/lib/skill-sandbox.test.ts +1 -1
  301. package/src/lib/skills-lock.test.ts +1 -1
  302. package/src/lib/telemetry-consent.ts +3 -5
  303. package/src/lib/telemetry-report.test.ts +2 -2
  304. package/src/lib/token-budget.ts +111 -0
  305. package/src/lib/trigger-gaps.test.ts +70 -0
  306. package/src/lib/trigger-gaps.ts +48 -6
  307. package/src/lib/tui/data.ts +1 -5
  308. package/src/lib/workflow-store.ts +150 -0
  309. package/src/lib/workspace-secrets.ts +0 -4
  310. package/src/lib/workspaces.ts +1 -1
@@ -0,0 +1,125 @@
1
+ # Scan algorithm
2
+
3
+ How to discover spawn sites, locate the spawned agent, parse both sides, and run
4
+ the 7 checks. Cue-native: no `ccw` CLI, no Gemini evaluator, no `.workflow/`
5
+ paths, no `ccw-tools` MCP. Plain Read / Grep / Glob / Bash, plus an optional
6
+ `Agent` for a fresh-context second pass on a large scan.
7
+
8
+ ## 1. Determine scan scope
9
+
10
+ Parse the user's request into a scope.
11
+
12
+ | Signal | Scope |
13
+ |---|---|
14
+ | Path to a skill `SKILL.md` or command `.md` | That file plus every agent it spawns |
15
+ | Path to an agent `.md` | That agent plus every spawn site that targets it |
16
+ | A directory | Every `SKILL.md` and command file under it |
17
+ | "all" or no argument | Every `resources/skills/skills/**/SKILL.md`, `.claude/commands/*.md`, `.claude/agents/*.md` |
18
+
19
+ If the scope is unclear, ask with `AskUserQuestion`: one skill, one command-agent
20
+ pair, or a full scan.
21
+
22
+ ## 2. Find spawn sites
23
+
24
+ Grep the in-scope skill and command files for spawn patterns. Both the current
25
+ `Agent(` form and the legacy `Task(` form, plus `subagent_type` dispatches.
26
+
27
+ ```bash
28
+ grep -rn 'Agent(\|Task(\|subagent_type' "$SCOPE"
29
+ ```
30
+
31
+ For each spawn site, extract three things:
32
+ - the `subagent_type` value (the agent name, or `general-purpose`)
33
+ - the full prompt string passed to the spawn
34
+ - the line range of that prompt
35
+
36
+ Many cue skills dispatch a `subagent_type: "general-purpose"` agent with an inline
37
+ prose prompt rather than a named agent file (see `gstack/ship`,
38
+ `review/code-review-deep`). For those, there is no agent file to cross-check, so
39
+ D1 to D6 score against the *inline role text inside the prompt itself* and D7 asks
40
+ whether the prompt states its own return contract. A `general-purpose` spawn with
41
+ no stated identity and no return contract is not a violation, it is the norm.
42
+
43
+ ## 3. Locate the agent definition
44
+
45
+ For each named `subagent_type`, look in the standard spots.
46
+
47
+ ```bash
48
+ ls .claude/agents/${AGENT}.md 2>/dev/null
49
+ ls resources/skills/skills/*/agents/${AGENT}.md 2>/dev/null
50
+ ```
51
+
52
+ If no file is found and the type is not `general-purpose`, record a `MISSING_AGENT`
53
+ finding. That is itself a D7 error: the skill spawns an agent that does not exist.
54
+
55
+ ## 4. Parse the prompt
56
+
57
+ Pull structured intent and anti-patterns out of the prompt string.
58
+
59
+ Intent blocks to find: objective, input file list, runtime parameters, output
60
+ location, expected return markers, downstream consumer, per-invocation quality
61
+ gate, revision instructions.
62
+
63
+ Anti-patterns to flag (these feed D1, D2, D5, D6):
64
+ - identity statements ("You are a...", "Your role is...")
65
+ - domain tables, heuristics, good/bad comparison pairs
66
+ - numbered process steps outside a revision block
67
+ - philosophy statements ("always prefer...", "never do...")
68
+ - technical decision nouns (library or pattern names) in free text
69
+
70
+ ## 5. Parse the agent
71
+
72
+ From the agent file (or the system prompt of a named subagent type), pull:
73
+ identity, spawner list, responsibilities, guiding principles, return contract
74
+ (the full set of markers it emits), self-check quality gate, domain sections,
75
+ anti-patterns.
76
+
77
+ ## 6. Run the 7 checks
78
+
79
+ For each spawn-site / agent pair, run D1 to D7 from
80
+ [separation-rules.md](separation-rules.md). Record severity and a one-line detail
81
+ for each dimension. Respect the exceptions: mode references, cross-cutting policy
82
+ blocks, and user-decision passthrough are not violations.
83
+
84
+ ## 7. Aggregate and report
85
+
86
+ Per pair, show the 7 dimensions as PASS / WARN / ERROR with a short detail each.
87
+ Roll up to a verdict per the table in separation-rules.md (CLEAN / REVIEW /
88
+ CONFLICT). For every error and warning, give a fix: file and line, what is wrong,
89
+ which owner the content should move to, and a before/after snippet when short.
90
+
91
+ ### Report shape
92
+
93
+ ```
94
+ DELEGATION-CHECK > SCAN COMPLETE
95
+
96
+ Scope: <description>
97
+ Pairs checked: <N>
98
+ Findings: <E> errors, <W> warnings, <I> info
99
+ Verdict: CLEAN | REVIEW | CONFLICT
100
+
101
+ | Pair | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
102
+ |------|----|----|----|----|----|----|----|
103
+ | <skill> -> <agent> | ok | warn | ok | ok | err | ok | ok |
104
+
105
+ Fix priority:
106
+ 1. <highest-severity fix, file:line, owner to move to>
107
+ 2. <next fix>
108
+ ```
109
+
110
+ ## Optional fresh-context pass
111
+
112
+ On a full-repo scan, dispatch the per-pair judging to a `general-purpose` agent
113
+ via the `Agent` tool so the parent context stays clean. The subagent reads one
114
+ pair, runs D1 to D7, and returns only the verdict row plus any fix lines. Skip
115
+ this for a single-pair check, the cost is not worth it.
116
+
117
+ ## Success criteria
118
+
119
+ - Scope resolved and every in-scope file read
120
+ - Every spawn site found, with its full prompt string and target agent
121
+ - Every named agent located or recorded as `MISSING_AGENT`
122
+ - 7 dimensions scored per pair
123
+ - No false positive on mode references, cross-cutting policy, or user-decision passthrough
124
+ - A fix given for every error and warning
125
+ - Per-pair table shown and an overall verdict reached
@@ -0,0 +1,190 @@
1
+ # Content separation rules
2
+
3
+ Rules for the boundary between **delegation prompts** (the `prompt` string passed
4
+ to an `Agent(...)` / `Task(...)` spawn, or a `subagent_type` dispatch in a cue
5
+ skill or `.claude/commands/` file) and **agent role definitions** (the spawned
6
+ agent's own file under `.claude/agents/<name>.md`, or the system prompt of a
7
+ named `subagent_type`).
8
+
9
+ Adapted from the CCW delegation-check spec. Same algorithm, cue-native targets:
10
+ cue skills live in `resources/skills/skills/**/SKILL.md`, commands in
11
+ `.claude/commands/*.md`, agents in `.claude/agents/*.md`.
12
+
13
+ ## Core principle
14
+
15
+ **The spawner owns WHEN and WHERE. The agent owns WHO and HOW.**
16
+
17
+ A delegation prompt tells the agent what to do *this time*. The agent definition
18
+ tells the agent who it *always* is. When the prompt restates identity, embeds
19
+ domain knowledge, or dictates process, it duplicates or fights the agent file.
20
+ They drift apart over time and the agent's self-understanding gets confused.
21
+
22
+ ## Ownership matrix
23
+
24
+ ### The delegation prompt owns
25
+
26
+ | Concern | Example |
27
+ |---|---|
28
+ | What to accomplish this run | "Audit test coverage for the diff on branch X" |
29
+ | Input file paths for this run | "Read src/foo.ts and the plan at .cue/plan.md" |
30
+ | Runtime parameters | "Mode: revision. Phase: 5." |
31
+ | Output location | "Write findings to /tmp/coverage.md" |
32
+ | Expected return markers (routing) | "Return `## PASS` or `## ISSUES FOUND`" |
33
+ | Who consumes the output | "Parent skill /ship reads your conclusion" |
34
+ | Revision context | "What changed: the checker flagged 3 gaps. Address them." |
35
+ | User interaction | `AskUserQuestion` calls |
36
+ | Banners / status display | "=== SHIP > coverage audit ===" |
37
+
38
+ ### The agent role definition owns
39
+
40
+ | Concern | Example |
41
+ |---|---|
42
+ | Identity | "You are a coverage auditor." |
43
+ | Spawner list | "Spawned by: /ship, /code-review-deep" |
44
+ | Responsibilities | "Find untested branches in the changed lines." |
45
+ | Mandatory read protocol | "Read every file in the input list before judging." |
46
+ | Guiding principles | "Prefer false negatives over noise." |
47
+ | Domain expertise | Decision tables, heuristics, good/bad examples |
48
+ | Return protocol | The full set of return markers it can emit |
49
+ | Self-check | Permanent quality checks run on every invocation |
50
+ | Anti-patterns | "Do not flag generated files." |
51
+
52
+ ## The 7 conflict dimensions
53
+
54
+ ### D1 Role re-definition
55
+
56
+ **Question:** does the prompt redefine the agent's identity?
57
+
58
+ **Detect:** scan the prompt string for `You are a`, `You are the`, `Your role is`,
59
+ `Your job is to`, `Your responsibility is`, `Core responsibilities:`, or any line
60
+ that contradicts the agent's identity section.
61
+
62
+ **Allowed:** referencing a mode the agent already lists ("run in revision mode").
63
+
64
+ **Severity:** `error` if the prompt redefines the role. `warning` if it adds
65
+ responsibilities the agent file does not list.
66
+
67
+ ### D2 Domain expertise leak
68
+
69
+ **Question:** does the prompt embed domain knowledge that belongs in the agent?
70
+
71
+ **Detect:**
72
+ - Decision or routing tables (`| Condition | Action |`) in the prompt
73
+ - Good-vs-bad comparison pairs (`| TOO VAGUE | JUST RIGHT |`)
74
+ - Heuristic rules ("If X then Y", "Always prefer Z")
75
+ - Anti-pattern lists ("DO NOT...", "NEVER...")
76
+ - Numbered rule lists over 3 items that are not revision instructions
77
+
78
+ **Exception:** a cross-cutting policy block (uniform rules applied to every agent
79
+ a skill spawns, such as anti-shallow-execution rules) is structural policy, not
80
+ domain knowledge. Flag it `info` unless its content duplicates an agent domain
81
+ section word for word.
82
+
83
+ **Severity:** `error` if the prompt holds domain tables or examples that duplicate
84
+ agent content. `warning` for heuristics not present in the agent.
85
+
86
+ ### D3 Quality gate duplication
87
+
88
+ **Question:** do the prompt's quality checks overlap or fight the agent's own
89
+ self-check list?
90
+
91
+ **Detect:** fuzzy-match quality items between prompt and agent (over 60% token
92
+ overlap is a duplicate).
93
+ - **Duplicate:** same check in both. `warning`. They can diverge later.
94
+ - **Conflict:** contradictory limits (prompt says "max 3 tasks", agent says "max 5"). `error`.
95
+ - **Gap:** prompt expects a check the agent lacks. `info`.
96
+
97
+ **When duplication is fine:** the prompt adds an *invocation-specific* check not in
98
+ the agent's permanent gate (for example "phase 5 requirement IDs all covered").
99
+
100
+ ### D4 Output format conflict
101
+
102
+ **Question:** does the prompt's expected output fight the agent's return contract?
103
+
104
+ **Detect:** extract return-marker strings from both sides and compare the sets.
105
+ - Prompt routes on `## DONE` but agent emits `## TASK COMPLETE` → markers differ.
106
+ - Prompt expects file output, agent contract defines only markers (or the reverse).
107
+
108
+ **Why it matters:** the spawner routes on markers. If they do not match, routing
109
+ breaks silently. The skill may hang or misread the result.
110
+
111
+ **Severity:** `error` if return markers conflict. `warning` if either side leaves
112
+ the format unspecified.
113
+
114
+ ### D5 Process override
115
+
116
+ **Question:** does the prompt dictate HOW the agent works?
117
+
118
+ **Detect:** scan for step-by-step process outside a revision block:
119
+ - Numbered steps ("Step 1:", "First..., Then..., Finally...")
120
+ - Process flow beyond the objective
121
+ - Tool instructions ("Use grep to...", "Run this bash command...")
122
+ - Execution ordering that fights the agent's own flow
123
+
124
+ **Allowed:** a revision block telling the agent *what changed*, not *how to work*.
125
+
126
+ **Severity:** `error` if the prompt overrides the agent's process. `warning` for
127
+ process hints.
128
+
129
+ ### D6 Scope authority conflict
130
+
131
+ **Question:** does the prompt make decisions the agent's domain should own?
132
+
133
+ **Detect:** technical nouns (library names, architecture patterns) in prompt free
134
+ text, outside an input-path description.
135
+ - Prompt picking the implementation (which library, which pattern) → conflict.
136
+ - Prompt passing through a user-locked decision from a context file → correct.
137
+ - Agent interpreting that locked decision → correct.
138
+
139
+ **Severity:** `error` if the prompt makes a domain decision the agent should own.
140
+ `info` if it passes through a user decision (the right behavior).
141
+
142
+ ### D7 Missing contracts
143
+
144
+ **Question:** are the handoff points complete?
145
+
146
+ | Missing element | Impact |
147
+ |---|---|
148
+ | Agent has no return contract | Spawner cannot route on markers |
149
+ | Spawner ignores some agent return markers | BLOCKED / CHECKPOINT silently dropped |
150
+ | Agent expects input files but prompt omits them | Agent starts without context |
151
+ | Agent's spawner list omits this command | Agent may not expect this call pattern |
152
+ | Agent expects a structured input the prompt does not match | Agent misreads input |
153
+
154
+ **Severity:** `error` if return-marker handling is missing. `warning` if the agent
155
+ expects input the prompt does not provide.
156
+
157
+ ## Severity classification
158
+
159
+ | Severity | When | Action |
160
+ |---|---|---|
161
+ | `error` | Actual conflict: contradictory content across prompt and agent | Must fix. Move content to the right owner. |
162
+ | `warning` | Duplication or boundary blur without contradiction | Should fix. Consolidate to one source of truth. |
163
+ | `info` | Acceptable pattern that looks like a violation but is not | No action. Note why it is fine. |
164
+
165
+ ## Verdict
166
+
167
+ | Verdict | Condition |
168
+ |---|---|
169
+ | **CLEAN** | 0 errors, 0 to 2 warnings |
170
+ | **REVIEW** | 0 errors, 3 or more warnings |
171
+ | **CONFLICT** | 1 or more errors |
172
+
173
+ ## Quick reference: is this content in the right place?
174
+
175
+ | Content | In prompt? | In agent? |
176
+ |---|---|---|
177
+ | "You are a..." | No, never | Yes, always |
178
+ | File paths for this run | Yes | No |
179
+ | Phase number, mode | Yes | No |
180
+ | Decision tables | No, never | Yes, always |
181
+ | Good/bad examples | No, never | Yes, always |
182
+ | "Write to: {path}" | Yes | No |
183
+ | Return-marker handling | Yes (routing) | Yes (definition) |
184
+ | Quality gate | Per-invocation only | Permanent self-check |
185
+ | "Read files first" | No, agent owns this | Yes, always |
186
+ | Cross-cutting policy block | OK as uniform policy | Preferred |
187
+ | Revision instructions | Yes (what changed) | No |
188
+ | Heuristics, philosophy | No, never | Yes, always |
189
+ | Banner display | Yes | No, never |
190
+ | `AskUserQuestion` | Yes | No, never |
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: focus
3
+ description: 'Use when user says "focus", "which skill", "what skill should I use", "route this", or faces a task in a profile with many loaded skills. Picks the best-fit loaded skill to invoke, fast.'
4
+ tags: [meta, routing, skills, focus]
5
+ ---
6
+
7
+ # Focus
8
+
9
+ Pick the right *loaded* skill for the task at hand. When a profile carries dozens of
10
+ skills, the cost is decision latency, not capability. Focus narrows the loaded set to the
11
+ one skill that fires, so you invoke it instead of freestyling.
12
+
13
+ Scope: skills already in the active profile. For a skill that is **not** loaded, use
14
+ [[smart-loader]] (it reads from disk). For catalog lookup or dedup before writing a new
15
+ skill, use [[skill-suggestion]].
16
+
17
+ ## Steps
18
+
19
+ 1. List what is loaded in the active profile:
20
+
21
+ ```bash
22
+ cue skills list
23
+ ```
24
+
25
+ 2. Narrow by intent (fuzzy match across the set):
26
+
27
+ ```bash
28
+ cue skills search "<task keywords>"
29
+ ```
30
+
31
+ 3. Confirm a candidate by the prompts that historically fired it:
32
+
33
+ ```bash
34
+ cue skills triggers <skill-id>
35
+ ```
36
+
37
+ 4. Invoke the top match via the Skill tool. If 2+ fit, name them and pick the most
38
+ specific. If none fits the loaded set, hand off to [[smart-loader]] or say so plainly.
39
+
40
+ ## How to match
41
+
42
+ - Read each candidate's `description:` trigger phrases against the task intent; the most
43
+ specific wins. A skill that names the exact tool or platform beats a generic one.
44
+ - One skill, one job: route to the single best fit, do not chain three skills for one task.
45
+ - Prefer a loaded skill over freestyling. Even a 70% fit usually beats raw improvisation,
46
+ because the skill carries the verified recipe.
47
+
48
+ ## Rules
49
+
50
+ - Only route to skills in the active profile (`cue skills list`). For unloaded skills use
51
+ [[smart-loader]]; this skill never loads from disk.
52
+ - Name the match and the reason in one line before invoking, so the choice is auditable.
53
+ - If nothing fits, say so and offer [[smart-loader]] or a new skill. Do not force a bad match.
54
+ - Recommend only what the task needs: one skill if one fits.
55
+
56
+ ## Example
57
+
58
+ User: "focus, I need to find EU tenders."
59
+
60
+ Run `cue skills list` and `cue skills search "tender"`, see `eu-funding/ted-tender-search`
61
+ match the intent and tool exactly, and invoke it. If the profile had no tender skill, hand
62
+ off to [[smart-loader]] to find one on disk.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: help
3
3
  description: >-
4
- Use when user says "help", "what can you do", or "skill help". Available workflow guidance: commands, routing, skill discovery.
4
+ Use when user says "/help", "skill help", "what can you do", or "what skills do I have". Available workflow guidance: commands, routing, skill discovery.
5
5
  ---
6
6
 
7
7
  # How OMX Works
@@ -22,6 +22,8 @@ The full protocol lives at `resources/personas/integrity-protocol.md` and is pul
22
22
  | 🟢 `[VERIFIED]` | I checked the source firsthand this session — read the code, ran the test, opened the spec | Act on it |
23
23
  | 🟢 `[KNOWN]` | Well-documented public fact from training data — RFCs, language specs, mainstream library APIs | Act on it, unless this project deviates from the norm |
24
24
 
25
+ > **Visual claims demand visual proof.** A claim about *rendered* UI (layout, spacing, color, alignment, responsive behavior) is only `[VERIFIED]` after an in-browser check at the target viewport — a screenshot, or stronger, a computed-style / bounding-box measurement (Playwright `getComputedStyle()` / `getBoundingClientRect()`) with the measured value quoted. Reading the CSS/JSX alone is at most 🟡 `[INFERRED]`. (Full rule in `resources/personas/integrity-protocol.md`.)
26
+
25
27
  ### 🟡 Yellow — reasonable, verify if stakes matter (~50–85%)
26
28
 
27
29
  | Tag | Meaning | Reader action |
@@ -0,0 +1,124 @@
1
+ ---
2
+ name: next-steps
3
+ description: >-
4
+ Use when finishing a substantive task, or the user says "what's next" or
5
+ "next steps". Close with a ranked Next steps block: <=3 specific items tied
6
+ to what changed, and offer the top one.
7
+ tags: [meta, output-format, workflow]
8
+ category: meta
9
+ version: 1.0.0
10
+ requires_mcps: []
11
+ allowed-tools: []
12
+ triggers:
13
+ - "what's next"
14
+ - "next steps"
15
+ - "what should i do now"
16
+ - "follow ups"
17
+ - "follow-up suggestions"
18
+ - "what now"
19
+ ---
20
+
21
+ # next-steps
22
+
23
+ When you finish a substantive task, the last thing you say is the user's launch pad for what comes next. Default closings fail in three ways: they vanish, they go vague ("let me know if you need anything"), or they dump every conceivable move. This skill replaces that with a short, ranked, specific Next steps block, and offers to do the top one.
24
+
25
+ Treat the closing as the most useful sentence in the turn, not filler: the user reads it last and acts on it first.
26
+
27
+ ## When to activate
28
+
29
+ Apply automatically right after you:
30
+
31
+ - built, fixed, refactored, or shipped something,
32
+ - produced a recommendation, plan, audit, or comparison,
33
+ - completed a multi-step request.
34
+
35
+ Concretely, the turn was substantive if you used Edit, Write, or a mutating command this turn, or produced a recommendation, a plan, or a list of three or more items. That is a signal a hook can see too, not a vibe.
36
+
37
+ Also when the user says "what's next", "next steps", "what should I do now", or "follow-ups".
38
+
39
+ Do not apply on trivial one-line answers, pure factual lookups, or mid-conversation clarifying questions. Under caveman or brief mode, collapse to a single terse line.
40
+
41
+ ## The rubric
42
+
43
+ 1. **Source every item from a real artifact this turn.** Each follow-up must trace to something concrete you can point at: a file you changed, a deferral you actually stated ("we'll do X later"), an error you hit, or the user's stated goal. If you cannot name its source, cut it. This is the line between "the freshness-guard path has no test, add one" and a generic "add tests."
44
+ 2. **Rank by the three flavors, in this fixed order:**
45
+ 1. **Continuation:** the obvious next step in this thread.
46
+ 2. **Loose end or risk:** something this work created or exposed (an untested path, an implied follow-up, a risk you introduced).
47
+ 3. **Upside:** optional polish or an adjacent win, marked optional.
48
+ The order is the priority. Lead with the continuation, never with the upside. Drop a flavor when nothing real fills it rather than padding.
49
+ 3. **Cap at three.** More than three means you are dumping, not suggesting. One or two is the honest count more often than you think.
50
+ 4. **Offer the top one as a do-it-now.** End with one question: "Want me to X?" One question, not a menu. The user should be able to reply "yes" and have you proceed.
51
+ 5. **Be willing to say nothing pressing.** If the task is genuinely closed, say so in one line. Do not manufacture follow-ups to fill the block. "Nothing needed here, ready to ship" is a valid Next steps.
52
+ 6. **Never re-suggest what you just did,** and never suggest a path you already know is blocked, out of scope, or declined this session.
53
+ 7. **ROI tags are optional.** Only when the follow-ups are improvement-like and ranking by impact genuinely helps, borrow `meta/roi-estimator` tags (dimension, percent, tier). For a normal closing, the flavor order is the rank and ROI math is overkill.
54
+
55
+ ## Pick the pattern by task type
56
+
57
+ Starting templates per task type. Always source the specifics from what actually happened (rubric item 1); these are scaffolds, not scripts.
58
+
59
+ | You just… | Typical Next steps |
60
+ |---|---|
61
+ | Fixed a bug | add a regression test for it; check whether the same bug exists elsewhere; state the root cause if it is not obvious |
62
+ | Built a feature | wire it into the caller or UI; add tests; document it; the one edge case you skipped |
63
+ | Refactored | run the suite to prove behavior held; the adjacent module with the same smell; delete code your change orphaned |
64
+ | Researched or answered | the one claim worth verifying independently; the obvious follow-up question; where to go deeper |
65
+ | Reviewed a diff | fix the top finding; re-review after fixes; the risk you flagged but did not block on |
66
+ | Set up or configured | the smoke test that proves it works; the next config step; document the setup |
67
+
68
+ ## Format
69
+
70
+ Default, after a substantive task:
71
+
72
+ > **Next steps**
73
+ > 1. <recommended specific action>: <one-clause why>
74
+ > 2. <loose end or risk>
75
+ > 3. <optional upside>
76
+ >
77
+ > Want me to <top action>?
78
+
79
+ One or two items is fine when that is the honest count. For a single item, drop the list and just ask.
80
+
81
+ Caveman or brief mode:
82
+
83
+ > Next: <one action>. Want it?
84
+
85
+ ## Anti-patterns
86
+
87
+ - **Vague filler.** "Let me know if you need anything else." Ranks nothing, offers nothing.
88
+ - **The dump.** Six bullets covering every branch. Now the user has to re-rank them, which was your job.
89
+ - **Generic follow-ups.** Items that fit any task ("add tests", "write docs") with no tie to what actually changed.
90
+ - **Manufactured urgency.** Inventing a next step when the task is closed. Padding erodes trust faster than silence.
91
+ - **Burying the offer.** Listing options but not offering to act. Keep the top item one "yes" away.
92
+
93
+ ## When to skip
94
+
95
+ - Trivial or single-fact answers.
96
+ - Mid-conversation: the user asked a question and wants the answer, not a roadmap.
97
+ - The user explicitly asked for output only, no commentary.
98
+ - You already offered next steps this turn. Do not stack two blocks.
99
+ - The user is **accepting** a step you just offered ("yes", "do #1", "go"). That
100
+ is your cue to *execute*, not to open a new block. Finish the accepted action,
101
+ then a fresh Next steps block is fine. One block per completed action, never
102
+ two in flight.
103
+
104
+ ## Example
105
+
106
+ After wiring a new profile and validating it:
107
+
108
+ > **Next steps**
109
+ > 1. Commit the three files on a branch off main: `cue validate` is green, so it is safe to land.
110
+ > 2. Wire `/goal` into the profile, the one piece we deferred earlier.
111
+ > 3. Optional: feature it in the picker so it shows under Featured.
112
+ >
113
+ > Want me to commit them?
114
+
115
+ Bad version of the same closing, for contrast:
116
+
117
+ > Let me know if you need anything else or want to make changes!
118
+
119
+ The bad one ranks nothing, ties to nothing, and offers no action to accept.
120
+
121
+ ## Linking
122
+
123
+ - Related: [[roi-estimator]], the ranking discipline this skill borrows when follow-ups are improvement-like.
124
+ - Related: [[retro]], end-of-session process reflection (next-steps is per-task, retro is per-session).
@@ -0,0 +1,92 @@
1
+ {
2
+ "skill_name": "next-steps",
3
+ "skill_path": "resources/skills/skills/meta/next-steps/SKILL.md",
4
+ "created": "2026-06-02",
5
+ "notes": "Auto-fire output-format skill. 'Trigger' = does Claude append a ranked Next steps block + offer-the-top-one after the turn? should_trigger:true means the block should appear; false means a block would be noise. Edge cases test the collapse/say-nothing rules.",
6
+ "scenarios": [
7
+ {
8
+ "id": 1,
9
+ "prompt": "Add a --dry-run flag to scripts/deploy.sh so it prints the planned actions without executing, and update the existing bats tests to cover it.",
10
+ "should_trigger": true,
11
+ "expected_behavior": "After implementing + updating tests, close with <=3 ranked Next steps: e.g. (1) run the test suite to confirm green, (2) loose end: document the flag in the README, (3) optional: add --dry-run to the sibling rollback.sh. Offer the top one."
12
+ },
13
+ {
14
+ "id": 2,
15
+ "prompt": "Take a look at src/auth/middleware.ts and tell me what I should harden before this goes to production.",
16
+ "should_trigger": true,
17
+ "expected_behavior": "Produces a findings/recommendation list, then a Next steps block ranking the highest-risk fix first, tied to the specific findings (not generic 'add tests'). Offers to apply the top fix."
18
+ },
19
+ {
20
+ "id": 3,
21
+ "prompt": "ok that profile work looks good. what's next?",
22
+ "should_trigger": true,
23
+ "expected_behavior": "Explicit ask. Ranked <=3 follow-ups tied to the profile work just done; lead with the most-likely continuation; offer the top one as a do-it-now."
24
+ },
25
+ {
26
+ "id": 4,
27
+ "prompt": "the profile picker throws when the profile list comes back empty — repro is just running it in a dir with no profiles. fix it.",
28
+ "should_trigger": true,
29
+ "expected_behavior": "Fixes the crash, then Next steps: (1) continuation = verify with the empty-dir repro, (2) loose end = add a regression test for the empty case, (3) optional = audit other list consumers for the same gap. Offer to add the test."
30
+ },
31
+ {
32
+ "id": 5,
33
+ "prompt": "draft me a migration plan to move the repo from npm to bun — scripts, lockfile, CI, the works.",
34
+ "should_trigger": true,
35
+ "expected_behavior": "Delivers the plan, then a Next steps block: start with the lowest-risk first phase, name a loose end (CI cache invalidation), optional polish. Offers to begin phase 1."
36
+ },
37
+ {
38
+ "id": 6,
39
+ "prompt": "sweet, that works now. what shoudl i do now",
40
+ "should_trigger": true,
41
+ "expected_behavior": "Casual + typos, explicit ask. Same ranked block tied to the prior fix. Offer top one."
42
+ },
43
+ {
44
+ "id": 7,
45
+ "prompt": "what's the default port postgres listens on?",
46
+ "should_trigger": false,
47
+ "why_not": "Pure factual lookup, one-line answer. A Next steps block here is manufactured filler — the skill's 'skip trivial/factual' rule."
48
+ },
49
+ {
50
+ "id": 8,
51
+ "prompt": "wait, back up — why did you put that function on the edge runtime instead of node?",
52
+ "should_trigger": false,
53
+ "why_not": "Mid-conversation clarifying question. User wants the reasoning, not a roadmap. Skill explicitly skips mid-convo questions."
54
+ },
55
+ {
56
+ "id": 9,
57
+ "prompt": "rename getUser to fetchUser in src/lib/user.ts",
58
+ "should_trigger": false,
59
+ "why_not": "Trivial unambiguous one-liner. 'Trivial work doesn't need a roadmap' — just do it and stop."
60
+ },
61
+ {
62
+ "id": 10,
63
+ "prompt": "give me the raw JSON for the config schema. output only, no commentary or suggestions.",
64
+ "should_trigger": false,
65
+ "why_not": "User explicitly asked for output only. Skill's 'user asked for output only' skip condition."
66
+ },
67
+ {
68
+ "id": 11,
69
+ "prompt": "yes, do #1",
70
+ "should_trigger": false,
71
+ "why_not": "User is accepting a previously-offered next step. Executing it is the action; opening a second full block mid-execution violates 'don't stack two blocks this turn'. A fresh block is fine only once #1 is fully done."
72
+ },
73
+ {
74
+ "id": 12,
75
+ "prompt": "/caveman — the import path in cli.ts is wrong, points at ../lib instead of ../../lib. fix it.",
76
+ "should_trigger": "maybe",
77
+ "notes": "Caveman/brief mode active AND a real (non-trivial-ish) fix. Acceptable to collapse to a single terse line ('Next: run the build to confirm. Want it?') rather than a full block. Full multi-line block here would be wrong."
78
+ },
79
+ {
80
+ "id": 13,
81
+ "prompt": "merge the two duplicate helper functions in utils.ts into one and update both call sites.",
82
+ "should_trigger": "maybe",
83
+ "notes": "Substantive refactor, but the task may be genuinely closed once done. Acceptable to fire with an honest 'Nothing pressing — tests green, ready to commit' single line rather than manufacturing three follow-ups. Tests the say-nothing rule."
84
+ },
85
+ {
86
+ "id": 14,
87
+ "prompt": "fix the typo 'recieve' -> 'receive' in the README heading and that's it.",
88
+ "should_trigger": false,
89
+ "why_not": "Trivial single edit, and user signalled 'that's it'. No block. Acceptable either way but leaning skip — counts as graceful if no block appears."
90
+ }
91
+ ]
92
+ }