cue-ai 0.9.1 → 0.9.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.
Files changed (284) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +148 -132
  3. package/bin/cue-learnings +30 -4
  4. package/bin/cue-review-progress +107 -0
  5. package/bin/cue-review-watch +98 -0
  6. package/dist/cue.js +4328 -3108
  7. package/package.json +2 -1
  8. package/plugins/cue/commands/cue-switch.md +1 -1
  9. package/plugins/cue/commands/cue.md +1 -1
  10. package/profiles/backend/profile.yaml +4 -0
  11. package/profiles/browser/profile.yaml +4 -0
  12. package/profiles/commerce/profile.yaml +0 -2
  13. package/profiles/coolify/profile.yaml +0 -1
  14. package/profiles/core/profile.yaml +78 -3
  15. package/profiles/dash-merge-test/profile.yaml +6 -1
  16. package/profiles/designer/profile.yaml +9 -1
  17. package/profiles/dropshipping/profile.yaml +69 -0
  18. package/profiles/frontend/profile.yaml +4 -0
  19. package/profiles/google-ads/profile.yaml +34 -0
  20. package/profiles/google-analytics/profile.yaml +34 -0
  21. package/profiles/google-drive/profile.yaml +34 -0
  22. package/profiles/gstack/profile.yaml +117 -27
  23. package/profiles/marketing/profile.yaml +0 -1
  24. package/profiles/media/README.md +70 -0
  25. package/profiles/media/profile.yaml +104 -0
  26. package/profiles/nano-banana/profile.yaml +52 -0
  27. package/profiles/ops/profile.yaml +1 -2
  28. package/profiles/secops/profile.yaml +3 -0
  29. package/profiles/skill-writer/profile.yaml +19 -0
  30. package/profiles/video/profile.yaml +3 -0
  31. package/profiles/web-frontend-base/profile.yaml +6 -0
  32. package/profiles/webshop/profile.yaml +0 -1
  33. package/profiles/webshop-google/profile.yaml +1 -0
  34. package/resources/mcps/configs/claude.sanitized.json +91 -6
  35. package/resources/mcps/configs/claude_runtime.sanitized.json +40 -1
  36. package/resources/mcps/configs/codex.sanitized.json +29 -0
  37. package/resources/skills/skills/career/job-hunter/LICENSE +21 -0
  38. package/resources/skills/skills/career/job-hunter/README.md +323 -0
  39. package/resources/skills/skills/career/job-hunter/SKILL.md +91 -0
  40. package/resources/skills/skills/career/job-hunter/agents/README.md +96 -0
  41. package/resources/skills/skills/career/job-hunter/agents/apply-assessment-prep.md +195 -0
  42. package/resources/skills/skills/career/job-hunter/agents/apply-ats-scan.md +155 -0
  43. package/resources/skills/skills/career/job-hunter/agents/apply-bias-audit.md +224 -0
  44. package/resources/skills/skills/career/job-hunter/agents/apply-cover-letter.md +69 -0
  45. package/resources/skills/skills/career/job-hunter/agents/apply-decode-jd.md +117 -0
  46. package/resources/skills/skills/career/job-hunter/agents/apply-fit-score.md +183 -0
  47. package/resources/skills/skills/career/job-hunter/agents/apply-linkedin-audit.md +74 -0
  48. package/resources/skills/skills/career/job-hunter/agents/apply-linkedin-scrape.md +255 -0
  49. package/resources/skills/skills/career/job-hunter/agents/apply-portfolio-brief.md +123 -0
  50. package/resources/skills/skills/career/job-hunter/agents/apply-reality-check.md +164 -0
  51. package/resources/skills/skills/career/job-hunter/agents/apply-reference-prep.md +150 -0
  52. package/resources/skills/skills/career/job-hunter/agents/apply-rejection-analysis.md +172 -0
  53. package/resources/skills/skills/career/job-hunter/agents/apply-resume.md +70 -0
  54. package/resources/skills/skills/career/job-hunter/agents/apply-skills-gap-filler.md +109 -0
  55. package/resources/skills/skills/career/job-hunter/agents/career-internal.md +94 -0
  56. package/resources/skills/skills/career/job-hunter/agents/career-linkedin-content.md +173 -0
  57. package/resources/skills/skills/career/job-hunter/agents/career-linkedin-scanner.md +262 -0
  58. package/resources/skills/skills/career/job-hunter/agents/career-network-message.md +108 -0
  59. package/resources/skills/skills/career/job-hunter/agents/career-promote.md +102 -0
  60. package/resources/skills/skills/career/job-hunter/agents/career-review.md +71 -0
  61. package/resources/skills/skills/career/job-hunter/agents/interview-debrief.md +117 -0
  62. package/resources/skills/skills/career/job-hunter/agents/interview-mock.md +171 -0
  63. package/resources/skills/skills/career/job-hunter/agents/interview-panel-decoder.md +152 -0
  64. package/resources/skills/skills/career/job-hunter/agents/interview-prep.md +184 -0
  65. package/resources/skills/skills/career/job-hunter/agents/interview-question-bank.md +133 -0
  66. package/resources/skills/skills/career/job-hunter/agents/interview-research.md +148 -0
  67. package/resources/skills/skills/career/job-hunter/agents/offer-compare.md +117 -0
  68. package/resources/skills/skills/career/job-hunter/agents/offer-counteroffer.md +144 -0
  69. package/resources/skills/skills/career/job-hunter/agents/offer-deadline-manager.md +148 -0
  70. package/resources/skills/skills/career/job-hunter/agents/offer-negotiate.md +126 -0
  71. package/resources/skills/skills/career/job-hunter/agents/offer-schedule.md +99 -0
  72. package/resources/skills/skills/career/job-hunter/agents/offer-thankyou.md +80 -0
  73. package/resources/skills/skills/career/job-hunter/agents/search-company-research.md +146 -0
  74. package/resources/skills/skills/career/job-hunter/agents/search-follow-up.md +129 -0
  75. package/resources/skills/skills/career/job-hunter/agents/search-ghost-job-detector.md +152 -0
  76. package/resources/skills/skills/career/job-hunter/agents/search-inbox-scan.md +193 -0
  77. package/resources/skills/skills/career/job-hunter/agents/search-interview-scorecard.md +164 -0
  78. package/resources/skills/skills/career/job-hunter/agents/search-jobs.md +149 -0
  79. package/resources/skills/skills/career/job-hunter/agents/search-momentum-check.md +194 -0
  80. package/resources/skills/skills/career/job-hunter/agents/search-outreach.md +85 -0
  81. package/resources/skills/skills/career/job-hunter/agents/search-referral-finder.md +124 -0
  82. package/resources/skills/skills/career/job-hunter/agents/search-salary.md +96 -0
  83. package/resources/skills/skills/career/job-hunter/agents/search-send-email.md +109 -0
  84. package/resources/skills/skills/career/job-hunter/agents/search-tracker-update.md +127 -0
  85. package/resources/skills/skills/career/job-hunter/inputs/README.md +26 -0
  86. package/resources/skills/skills/career/job-hunter/inputs/apply-linkedin-url.txt +8 -0
  87. package/resources/skills/skills/career/job-hunter/inputs/interview-context.md +24 -0
  88. package/resources/skills/skills/career/job-hunter/inputs/job-description.md +20 -0
  89. package/resources/skills/skills/career/job-hunter/inputs/job-search-criteria.md +36 -0
  90. package/resources/skills/skills/career/job-hunter/inputs/my-linkedin.md +24 -0
  91. package/resources/skills/skills/career/job-hunter/inputs/my-resume.md +28 -0
  92. package/resources/skills/skills/career/job-hunter/inputs/search-outreach-target.md +24 -0
  93. package/resources/skills/skills/career/job-hunter/rules/README.md +37 -0
  94. package/resources/skills/skills/career/job-hunter/rules/writing-rules.md +81 -0
  95. package/resources/skills/skills/career/resume-version-manager/SKILL.md +351 -0
  96. package/resources/skills/skills/career/salary-negotiation-prep/SKILL.md +378 -0
  97. package/resources/skills/skills/design/banana/SKILL.md +375 -0
  98. package/resources/skills/skills/design/banana/references/cost-tracking.md +47 -0
  99. package/resources/skills/skills/design/banana/references/gemini-models.md +236 -0
  100. package/resources/skills/skills/design/banana/references/mcp-tools.md +145 -0
  101. package/resources/skills/skills/design/banana/references/post-processing.md +192 -0
  102. package/resources/skills/skills/design/banana/references/presets.md +69 -0
  103. package/resources/skills/skills/design/banana/references/prompt-engineering.md +481 -0
  104. package/resources/skills/skills/design/banana/scripts/batch.py +97 -0
  105. package/resources/skills/skills/design/banana/scripts/cost_tracker.py +191 -0
  106. package/resources/skills/skills/design/banana/scripts/edit.py +159 -0
  107. package/resources/skills/skills/design/banana/scripts/generate.py +168 -0
  108. package/resources/skills/skills/design/banana/scripts/presets.py +154 -0
  109. package/resources/skills/skills/design/banana/scripts/setup_mcp.py +151 -0
  110. package/resources/skills/skills/design/banana/scripts/validate_setup.py +133 -0
  111. package/resources/skills/skills/eu-funding/grant-outreach/SKILL.md +70 -0
  112. package/resources/skills/skills/eu-funding/hu-grant-finder/SKILL.md +114 -0
  113. package/resources/skills/skills/eu-funding/hu-grant-finder/evals.md +26 -0
  114. package/resources/skills/skills/eu-funding/ted-tender-search/SKILL.md +80 -0
  115. package/resources/skills/skills/eu-funding/ted-tender-search/evals.md +26 -0
  116. package/resources/skills/skills/eu-funding/ted-tender-search/scripts/ted-search.sh +46 -0
  117. package/resources/skills/skills/github/gx-agents/SKILL.md +96 -0
  118. package/resources/skills/skills/gstack/ship/SKILL.md +13 -0
  119. package/resources/skills/skills/media/3d-logo-animation/SKILL.md +59 -0
  120. package/resources/skills/skills/media/action-figure-generator/SKILL.md +48 -0
  121. package/resources/skills/skills/media/ad-creative/SKILL.md +79 -0
  122. package/resources/skills/skills/media/ai-clipping/SKILL.md +194 -0
  123. package/resources/skills/skills/media/ai-clipping/scripts/run-ai-clipping.sh +200 -0
  124. package/resources/skills/skills/media/ai-fight-scene/SKILL.md +132 -0
  125. package/resources/skills/skills/media/amazon-product-listing/SKILL.md +68 -0
  126. package/resources/skills/skills/media/animal-video-generator/SKILL.md +59 -0
  127. package/resources/skills/skills/media/award-ceremony-video/SKILL.md +87 -0
  128. package/resources/skills/skills/media/blog-header/SKILL.md +61 -0
  129. package/resources/skills/skills/media/brand-kit/SKILL.md +72 -0
  130. package/resources/skills/skills/media/brochures/SKILL.md +65 -0
  131. package/resources/skills/skills/media/cartoon-dance-animation/SKILL.md +62 -0
  132. package/resources/skills/skills/media/character-story-video/SKILL.md +84 -0
  133. package/resources/skills/skills/media/chibi-collage-effect/SKILL.md +63 -0
  134. package/resources/skills/skills/media/cinema-director/SKILL.md +93 -0
  135. package/resources/skills/skills/media/cinema-director/scripts/generate-film.sh +78 -0
  136. package/resources/skills/skills/media/color-analysis-board/SKILL.md +71 -0
  137. package/resources/skills/skills/media/core-edit/SKILL.md +48 -0
  138. package/resources/skills/skills/media/core-edit/edit-image.sh +54 -0
  139. package/resources/skills/skills/media/core-edit/enhance-image.sh +191 -0
  140. package/resources/skills/skills/media/core-edit/lipsync.sh +144 -0
  141. package/resources/skills/skills/media/core-edit/video-effects.sh +193 -0
  142. package/resources/skills/skills/media/core-media/SKILL.md +49 -0
  143. package/resources/skills/skills/media/core-media/create-music.sh +169 -0
  144. package/resources/skills/skills/media/core-media/generate-image.sh +161 -0
  145. package/resources/skills/skills/media/core-media/generate-video.sh +137 -0
  146. package/resources/skills/skills/media/core-media/image-to-video.sh +228 -0
  147. package/resources/skills/skills/media/core-media/schema_data.json +18708 -0
  148. package/resources/skills/skills/media/core-media/upload.sh +41 -0
  149. package/resources/skills/skills/media/core-platform/SKILL.md +41 -0
  150. package/resources/skills/skills/media/core-platform/check-result.sh +37 -0
  151. package/resources/skills/skills/media/core-platform/setup.sh +31 -0
  152. package/resources/skills/skills/media/couple-grid-creator/SKILL.md +47 -0
  153. package/resources/skills/skills/media/design-guide/SKILL.md +73 -0
  154. package/resources/skills/skills/media/drone-style-video/SKILL.md +61 -0
  155. package/resources/skills/skills/media/fashion-try-on/SKILL.md +61 -0
  156. package/resources/skills/skills/media/floor-plan-rendering/SKILL.md +56 -0
  157. package/resources/skills/skills/media/freeze-effect-video/SKILL.md +100 -0
  158. package/resources/skills/skills/media/giant-product-showcase/SKILL.md +61 -0
  159. package/resources/skills/skills/media/instagram-post/SKILL.md +58 -0
  160. package/resources/skills/skills/media/interior-design/SKILL.md +61 -0
  161. package/resources/skills/skills/media/interior-design-visualizer/SKILL.md +57 -0
  162. package/resources/skills/skills/media/jewelry-product-video/SKILL.md +61 -0
  163. package/resources/skills/skills/media/kdenlive/SKILL.md +106 -0
  164. package/resources/skills/skills/media/kdenlive/scripts/assemble.sh +57 -0
  165. package/resources/skills/skills/media/kdenlive/scripts/common.sh +30 -0
  166. package/resources/skills/skills/media/kdenlive/scripts/inspect.sh +19 -0
  167. package/resources/skills/skills/media/kdenlive/scripts/reframe.sh +22 -0
  168. package/resources/skills/skills/media/kdenlive/scripts/render.sh +16 -0
  169. package/resources/skills/skills/media/kdenlive/scripts/title-card.sh +25 -0
  170. package/resources/skills/skills/media/keyboard-art-maker/SKILL.md +44 -0
  171. package/resources/skills/skills/media/logo-branding/SKILL.md +70 -0
  172. package/resources/skills/skills/media/logo-creator/SKILL.md +80 -0
  173. package/resources/skills/skills/media/logo-creator/scripts/create-logo.sh +38 -0
  174. package/resources/skills/skills/media/logo-generator/SKILL.md +56 -0
  175. package/resources/skills/skills/media/multi-angle-reshoot/SKILL.md +70 -0
  176. package/resources/skills/skills/media/multi-angle-shots/SKILL.md +73 -0
  177. package/resources/skills/skills/media/music-video/SKILL.md +61 -0
  178. package/resources/skills/skills/media/nano-banana/SKILL.md +80 -0
  179. package/resources/skills/skills/media/nano-banana/scripts/generate-nano-art.sh +54 -0
  180. package/resources/skills/skills/media/one-shot-video/SKILL.md +56 -0
  181. package/resources/skills/skills/media/photo-pack-generator/SKILL.md +205 -0
  182. package/resources/skills/skills/media/photo-pack-generator/scripts/generate-pack.sh +241 -0
  183. package/resources/skills/skills/media/product-ad-cinematic/SKILL.md +78 -0
  184. package/resources/skills/skills/media/product-campaign/SKILL.md +76 -0
  185. package/resources/skills/skills/media/product-showcase-video/SKILL.md +60 -0
  186. package/resources/skills/skills/media/product-video-ad-maker/SKILL.md +59 -0
  187. package/resources/skills/skills/media/rednote-cover/SKILL.md +57 -0
  188. package/resources/skills/skills/media/seedance-2/SKILL.md +632 -0
  189. package/resources/skills/skills/media/seedance-2/scripts/generate-seedance.sh +701 -0
  190. package/resources/skills/skills/media/selfie-with-celebrities/SKILL.md +64 -0
  191. package/resources/skills/skills/media/social-media-video/SKILL.md +277 -0
  192. package/resources/skills/skills/media/social-media-video/scripts/run-social-video.sh +316 -0
  193. package/resources/skills/skills/media/social-pack/SKILL.md +58 -0
  194. package/resources/skills/skills/media/storyboard/SKILL.md +57 -0
  195. package/resources/skills/skills/media/storyboard-to-cooking-video/SKILL.md +143 -0
  196. package/resources/skills/skills/media/talking-baby-video/SKILL.md +57 -0
  197. package/resources/skills/skills/media/ugc-ads-workflow/SKILL.md +70 -0
  198. package/resources/skills/skills/media/ugc-lifestyle-try-on/SKILL.md +65 -0
  199. package/resources/skills/skills/media/ugc-video-factory/SKILL.md +134 -0
  200. package/resources/skills/skills/media/ui-design/SKILL.md +81 -0
  201. package/resources/skills/skills/media/ui-design/scripts/generate-mockup.sh +49 -0
  202. package/resources/skills/skills/media/url-to-design/SKILL.md +61 -0
  203. package/resources/skills/skills/media/workflow/SKILL.md +197 -0
  204. package/resources/skills/skills/media/workflow/scripts/discover-workflow.sh +18 -0
  205. package/resources/skills/skills/media/workflow/scripts/generate-workflow.sh +33 -0
  206. package/resources/skills/skills/media/workflow/scripts/interactive-run.sh +16 -0
  207. package/resources/skills/skills/media/workflow/scripts/list-workflows.sh +20 -0
  208. package/resources/skills/skills/media/workflow/scripts/run-workflow.sh +34 -0
  209. package/resources/skills/skills/media/youtube-shorts/SKILL.md +173 -0
  210. package/resources/skills/skills/media/youtube-shorts/scripts/run-youtube-shorts.sh +141 -0
  211. package/resources/skills/skills/media/youtube-thumbnail/SKILL.md +66 -0
  212. package/resources/skills/skills/meta/cue-developer/references/architecture.md +2 -2
  213. package/resources/skills/skills/meta/cue-usage/SKILL.md +1 -1
  214. package/resources/skills/skills/meta/focus/SKILL.md +62 -0
  215. package/resources/skills/skills/meta/profile-fit-monitor/SKILL.md +2 -2
  216. package/resources/skills/skills/meta/profile-optimizer/SKILL.md +1 -1
  217. package/resources/skills/skills/meta/profile-suggest/SKILL.md +7 -7
  218. package/resources/skills/skills/meta/profile-summon/SKILL.md +159 -0
  219. package/resources/skills/skills/meta/profile-summon/evals/evals.json +53 -0
  220. package/resources/skills/skills/meta/save-profile/SKILL.md +1 -1
  221. package/resources/skills/skills/meta/skill-reviewer/SKILL.md +3 -0
  222. package/resources/skills/skills/meta/skill-reviewer/references/tdd-for-skills.md +55 -0
  223. package/resources/skills/skills/research/find-skills/SKILL.md +1 -1
  224. package/resources/skills/skills/review/code-review-deep/SKILL.md +20 -0
  225. package/resources/skills/skills/security/trivy-scan/SKILL.md +139 -0
  226. package/resources/skills/skills/security/trivy-scan/scripts/ensure-trivy.sh +21 -0
  227. package/resources/skills/skills/tools/ccusage/SKILL.md +142 -0
  228. package/resources/skills/skills/tools/portless/SKILL.md +186 -0
  229. package/src/commands/_index.ts +8 -0
  230. package/src/commands/ai.ts +2 -2
  231. package/src/commands/auto-detect.test.ts +74 -0
  232. package/src/commands/auto-detect.ts +9 -7
  233. package/src/commands/cli.test.ts +20 -4
  234. package/src/commands/cli.ts +36 -20
  235. package/src/commands/create-profile.ts +2 -2
  236. package/src/commands/debug.ts +2 -2
  237. package/src/commands/discover.ts +14 -4
  238. package/src/commands/export-docker.ts +1 -1
  239. package/src/commands/features-batch1.test.ts +1 -1
  240. package/src/commands/gates.ts +1 -1
  241. package/src/commands/import-profile.ts +1 -1
  242. package/src/commands/init.ts +15 -11
  243. package/src/commands/install.test.ts +192 -0
  244. package/src/commands/install.ts +610 -0
  245. package/src/commands/launch-handoff.e2e.test.ts +33 -1
  246. package/src/commands/launch.e2e.test.ts +15 -10
  247. package/src/commands/launch.ts +73 -116
  248. package/src/commands/materialize.ts +2 -2
  249. package/src/commands/prune.ts +1 -1
  250. package/src/commands/security-audit.ts +1 -1
  251. package/src/commands/shell.ts +7 -7
  252. package/src/commands/skill-report.ts +1 -1
  253. package/src/commands/skills.ts +3 -3
  254. package/src/commands/snapshot.ts +2 -2
  255. package/src/commands/summon.test.ts +116 -0
  256. package/src/commands/summon.ts +338 -0
  257. package/src/commands/trigger-gaps.ts +1 -1
  258. package/src/commands/use.ts +47 -3
  259. package/src/commands/watch-live.ts +5 -5
  260. package/src/commands/watch.ts +8 -8
  261. package/src/index.ts +2 -0
  262. package/src/lib/active-sessions.test.ts +3 -3
  263. package/src/lib/active-sessions.ts +4 -4
  264. package/src/lib/analytics.ts +13 -1
  265. package/src/lib/auto-detect.test.ts +172 -8
  266. package/src/lib/auto-detect.ts +191 -136
  267. package/src/lib/codex-persona-parity.test.ts +58 -0
  268. package/src/lib/companion-detect.test.ts +43 -1
  269. package/src/lib/companion-detect.ts +35 -0
  270. package/src/lib/credentials-sync.test.ts +121 -1
  271. package/src/lib/credentials-sync.ts +95 -1
  272. package/src/lib/cwd-resolver.test.ts +8 -8
  273. package/src/lib/cwd-resolver.ts +2 -2
  274. package/src/lib/dashboard-merge.test.ts +9 -4
  275. package/src/lib/dashboard-server.ts +1 -1
  276. package/src/lib/picker.test.ts +1 -1
  277. package/src/lib/picker.ts +5 -5
  278. package/src/lib/profile-merge.test.ts +8 -0
  279. package/src/lib/profile-names.test.ts +3 -3
  280. package/src/lib/runtime-install.ts +166 -0
  281. package/src/lib/runtime-materializer.test.ts +137 -0
  282. package/src/lib/runtime-materializer.ts +105 -2
  283. package/src/lib/skill-router.test.ts +38 -0
  284. package/src/lib/skill-router.ts +65 -4
package/CHANGELOG.md ADDED
@@ -0,0 +1,41 @@
1
+ # Changelog
2
+
3
+ All notable changes to cue (`cue-ai`) are documented here.
4
+ The format follows [Keep a Changelog](https://keepachangelog.com/), and the project
5
+ adheres to [Semantic Versioning](https://semver.org/).
6
+
7
+ ## [0.9.2] — 2026-06-05
8
+
9
+ ### Added
10
+
11
+ - **Live code-review visibility.** Watch an independent review move file-by-file in
12
+ real time instead of staring at an opaque "Precipitating…" spinner.
13
+ - `bin/cue-review-watch` — live renderer; run it in a second pane to follow the
14
+ latest review (`--id <id>` for a specific one, `--once` for a snapshot).
15
+ - `bin/cue-review-progress` — append-only progress events to
16
+ `~/.config/cue/review-progress/<id>.jsonl` (the shared schema every reviewer writes).
17
+ - `/code-review` now emits per-file / per-dimension / per-finding progress events.
18
+ - The `auto-review` Stop-hook gate records its review to the same log, so the
19
+ independent merge-gate review is watchable too (verdict parsed with the progress
20
+ side-channel filtered out; invariants unchanged: recursion guard, fail-open,
21
+ binary verdict).
22
+ - Docs: [`docs/review-visibility.md`](./docs/review-visibility.md).
23
+ - **Self-learner (experimental · opt-in · default-OFF).** Profiles capture where their
24
+ skills fell short during a task and feed gated improvements back over time.
25
+ - `resources/hooks/profile-self-improve.sh` — friction-signal capture plus an optional
26
+ live critic agent. Recursion-guarded, never blocks Stop, runs the critic at most once
27
+ per session, fully fail-open.
28
+ - New `skill_gap` analytics event (`src/lib/analytics.ts`), inert to existing readers.
29
+ - Piloted on the `skill-writer` profile. Enable with
30
+ `touch ~/.config/cue/.auto-improve-enabled`. Docs: [`docs/self-learner.md`](./docs/self-learner.md).
31
+
32
+ ### Documentation
33
+
34
+ - **README — "what you'll see during a run — the reviewer".** Explains the independent
35
+ review gate that runs during a Claude Code session: why a red "Stop hook error" means
36
+ the gate is working (not a failure), how to suppress or disable it, and how to watch a
37
+ review live with `cue-review-watch`. Includes a real catch (a `weight` kg/g unit
38
+ ambiguity that would have rendered per-kg prices as `€0.00`).
39
+
40
+ [0.9.2]: https://github.com/opencue/cuecards/compare/v0.9.1...v0.9.2
41
+ [0.9.1]: https://github.com/opencue/cuecards/releases/tag/v0.9.1
package/README.md CHANGED
@@ -1,30 +1,3 @@
1
- <!--
2
- Structured data for AI search engines (ChatGPT, Perplexity, Google AI Overviews)
3
- and traditional crawlers. GitHub renders the README as raw HTML on github.com/<repo>
4
- and via GitHub Pages, so the JSON-LD blocks below are picked up by both Google's
5
- rich-results parser and LLM scrapers.
6
- -->
7
- <!--
8
- <script type="application/ld+json">
9
- {
10
- "@context": "https://schema.org",
11
- "@type": "SoftwareApplication",
12
- "name": "cuecards",
13
- "alternateName": ["cue", "cue-ai"],
14
- "applicationCategory": "DeveloperApplication",
15
- "operatingSystem": "Linux, macOS, Windows (WSL2)",
16
- "description": "cuecards is an open-source agent profile manager for Claude Code, OpenAI Codex, Cursor, Cline, Gemini CLI, GitHub Copilot, Windsurf, Roo Code, Sourcegraph Amp, and Aider. One cuecard per directory — skills, MCPs, plugins, persona, playbooks, gates. Cut per-message token cost 10–25×.",
17
- "url": "https://github.com/opencue/cuecards",
18
- "downloadUrl": "https://www.npmjs.com/package/cue-ai",
19
- "codeRepository": "https://github.com/opencue/cuecards",
20
- "license": "https://github.com/opencue/cuecards/blob/main/LICENSE",
21
- "programmingLanguage": "TypeScript",
22
- "runtimePlatform": "Bun",
23
- "offers": { "@type": "Offer", "price": "0", "priceCurrency": "USD" }
24
- }
25
- </script>
26
- -->
27
-
28
1
  <br>
29
2
 
30
3
  <p align="center">
@@ -36,11 +9,11 @@
36
9
  <h1 align="center">cuecards.</h1>
37
10
 
38
11
  <p align="center">
39
- <strong>The agent profile manager for AI coding agents.</strong>
12
+ <strong>The missing layer between you and your coding agent.</strong>
40
13
  </p>
41
14
 
42
15
  <p align="center">
43
- <sub>Your agent walks into a directory. The cuecard tells it who to be.</sub>
16
+ <sub>Your agent walks into a directory. The cuecard tells it who to be — and loads only what the job needs.</sub>
44
17
  </p>
45
18
 
46
19
  <br>
@@ -70,6 +43,43 @@
70
43
 
71
44
  ---
72
45
 
46
+ ## the problem.
47
+
48
+ You installed 330 skills and 15 MCP servers. Your agent re-reads **every one of them, on every message** — including the 320 it doesn't need for the task in front of it.
49
+
50
+ You pay for that context on every single turn. And the model gets *worse* at picking the right tool, because it's scanning a wall of irrelevant descriptions before it can act.
51
+
52
+ **cuecards loads only the cuecard for the directory you're in.** One project's skills, MCPs, persona, and gates — not your entire library. Less context, lower cost, sharper tool selection.
53
+
54
+ <br>
55
+
56
+ ---
57
+
58
+ ## the money shot.
59
+
60
+ > Loading everything taxes every message. cuecards cut your always-on context **~9–16×** — and you can reproduce every number below with `cue cost --compare`.
61
+
62
+ | Loadout | Always-on context | Cost / 100 msgs (Sonnet input) |
63
+ |---|---|---|
64
+ | **Without cuecards** — `full` (every skill + MCP) | ~81k tokens | ~$24 😱 |
65
+ | **With cuecards** — `backend` profile | ~9k tokens | ~$2.70 ✅ |
66
+ | **With cuecards** — `caveman-quick` | ~6.8k tokens | ~$2.00 🚀 |
67
+
68
+ That's **~9× fewer always-on tokens** on a backend loadout (≈12× on `caveman-quick`, up to ≈16× on the leanest profiles) versus loading everything. The savings compound on every message of every session.
69
+
70
+ ```bash
71
+ cue cost # token budget for your active profile
72
+ cue cost --compare # full table: every profile ranked vs the `full` baseline
73
+ ```
74
+
75
+ <p align="center">
76
+ <sub><strong>&lt; 5 ms</strong> warm launch&nbsp;·&nbsp;<strong>69</strong> pre-built cuecards&nbsp;·&nbsp;<strong>330+</strong> local skills&nbsp;·&nbsp;<strong>10</strong> AI agents&nbsp;·&nbsp;<strong>MIT</strong>&nbsp;·&nbsp;zero telemetry&nbsp;·&nbsp;no daemon</sub>
77
+ </p>
78
+
79
+ <br>
80
+
81
+ ---
82
+
73
83
  ## what is a cuecard.
74
84
 
75
85
  A **cuecard** is everything your AI coding agent needs to be useful in one directory — the skills it loads, the MCP servers it connects to, the plugins it boots with, the persona it adopts, the playbooks it follows, the quality gates that block its "done" claim.
@@ -85,6 +95,8 @@ One cuecard per project. Your agent reads the right one the moment you launch.
85
95
  | **playbooks** | the steps the agent follows for known tasks |
86
96
  | **gates** | what must pass before the agent says "done" |
87
97
 
98
+ This is what separates cuecards from a skills list: a cuecard is *composable expertise* — persona + playbooks + gates + evals + a failure loop — not just "more tools loaded."
99
+
88
100
  <br>
89
101
 
90
102
  ---
@@ -116,76 +128,29 @@ Search. Install. Use. No config files to edit. Works the same with `codex`, `cur
116
128
 
117
129
  ---
118
130
 
119
- ## works with.
120
-
121
- <p align="center">
122
- <a href="https://github.com/anthropics/claude-code"><img src="https://img.shields.io/badge/Claude_Code-cc785c?style=flat-square&logo=anthropic&logoColor=white" alt="Claude Code"></a>&nbsp;
123
- <a href="https://github.com/openai/codex"><img src="https://img.shields.io/badge/Codex-000000?style=flat-square&logo=openai&logoColor=white" alt="Codex"></a>&nbsp;
124
- <a href="https://cursor.sh"><img src="https://img.shields.io/badge/Cursor-000000?style=flat-square&logo=cursor&logoColor=white" alt="Cursor"></a>&nbsp;
125
- <a href="https://github.com/cline/cline"><img src="https://img.shields.io/badge/Cline-5A45FF?style=flat-square" alt="Cline"></a>&nbsp;
126
- <a href="https://github.com/google-gemini/gemini-cli"><img src="https://img.shields.io/badge/Gemini-4285F4?style=flat-square&logo=google&logoColor=white" alt="Gemini"></a>&nbsp;
127
- <a href="https://github.com/features/copilot"><img src="https://img.shields.io/badge/Copilot-000000?style=flat-square&logo=github&logoColor=white" alt="Copilot"></a>&nbsp;
128
- <a href="https://windsurf.com"><img src="https://img.shields.io/badge/Windsurf-06B6D4?style=flat-square" alt="Windsurf"></a>&nbsp;
129
- <a href="https://github.com/RooVetGit/Roo-Code"><img src="https://img.shields.io/badge/Roo-7C3AED?style=flat-square" alt="Roo"></a>&nbsp;
130
- <a href="https://sourcegraph.com/amp"><img src="https://img.shields.io/badge/Amp-FF4500?style=flat-square&logo=sourcegraph&logoColor=white" alt="Amp"></a>&nbsp;
131
- <a href="https://aider.chat"><img src="https://img.shields.io/badge/Aider-14B8A6?style=flat-square" alt="Aider"></a>
132
- </p>
133
-
134
- <p align="center">
135
- <sub>One cuecard. Ten supported agents.</sub>
136
- </p>
137
-
138
- <br>
139
-
140
- ---
141
-
142
- ## by the numbers.
143
-
144
- <p align="center">
145
- <strong>up to ~16×</strong>&nbsp;&nbsp;leaner always-on context
146
- <br><br>
147
- <strong>&lt; 5 ms</strong>&nbsp;&nbsp;warm launch overhead
148
- <br><br>
149
- <strong>69</strong>&nbsp;&nbsp;pre-built cuecards · <strong>330+</strong> local skills
150
- <br><br>
151
- <strong>10</strong>&nbsp;&nbsp;AI coding agents supported
152
- <br><br>
153
- <strong>MIT</strong>&nbsp;&nbsp;open source · zero telemetry · no daemon
154
- </p>
155
-
156
- <br>
157
-
158
- ---
159
-
160
- ## the money shot.
161
-
162
- > Loading everything costs you tokens on every single message. cuecards cut your always-on context ~9–16× — and you can reproduce every number below with `cue cost --compare`.
163
-
164
- | Loadout | Always-on context | Cost / 100 msgs (Sonnet input) |
165
- |---|---|---|
166
- | **Without cuecards** — `full` (every skill + MCP) | ~81k tokens | ~$24 😱 |
167
- | **With cuecards** — `backend` profile | ~9k tokens | ~$2.70 ✅ |
168
- | **With cuecards** — `caveman-quick` | ~6.8k tokens | ~$2.00 🚀 |
169
-
170
- That's **~9× fewer always-on tokens** on a backend loadout (≈12× on `caveman-quick`, up to ≈16× on the leanest profiles) versus loading everything. Your model also picks the right tool faster because it's not scanning irrelevant descriptions on every message.
171
-
172
- ```bash
173
- cue cost # token budget for your active profile
174
- cue cost --compare # full table: every profile ranked vs the `full` baseline
175
- ```
176
-
177
- <br>
178
-
179
- ---
180
-
181
- ## why cuecards.
131
+ ## why cuecards — and how it compares.
182
132
 
183
133
  - **Cut always-on context up to ~16×.** Skills, MCPs, and plugins scoped per directory, not globally loaded into every session — reproduce it with `cue cost --compare`.
184
- - **Five-dimensional agents.** Persona + playbooks + quality gates + evals + failure loop. Not just "more tools loaded" composable expertise.
134
+ - **Five-dimensional agents.** Persona + playbooks + quality gates + evals + failure loop. Composable expertise, not just a longer tool list.
185
135
  - **One cuecard, ten agents.** The same `profile.yaml` materializes into Claude Code, Codex, Cursor, Cline, Gemini, Copilot, Windsurf, Roo, Amp, and Aider native formats.
186
136
 
137
+ | | cuecards | skillport / agent-skills-cli | Kiro Powers |
138
+ |---|---|---|---|
139
+ | Skills | ✅ | ✅ | ✅ |
140
+ | MCPs | ✅ | — | ✅ |
141
+ | Plugins | ✅ | — | — |
142
+ | Per-directory profiles | ✅ | — | ◐ (IDE-only) |
143
+ | Inheritance | ✅ | — | — |
144
+ | Persona / playbooks / gates / evals | ✅ | — | — |
145
+ | Multi-agent (Cursor/Cline/Copilot/etc.) | ✅ (10) | Claude only | IDE-only |
146
+ | CLI installer | ✅ | — | — |
147
+ | Failure-feedback loop | ✅ | — | — |
148
+ | Daemon required | None | None | IDE process |
149
+
150
+ cuecards is the only one that treats agent expertise as a composable, per-directory system.
151
+
187
152
  <details>
188
- <summary><b>Other wins</b></summary>
153
+ <summary><b>More wins</b></summary>
189
154
 
190
155
  <br>
191
156
 
@@ -201,25 +166,6 @@ cue cost --compare # full table: every profile ranked vs the `full` b
201
166
 
202
167
  ---
203
168
 
204
- ## reading cue's output — the colored tags.
205
-
206
- cuecards-managed agents tag every research- or decision-relevant claim with a colored confidence marker so you can scan trust at a glance:
207
-
208
- | Tier | Tag | Meaning |
209
- |---|---|---|
210
- | 🟢 Green | `[VERIFIED]` / `[KNOWN]` | Trust it (~90–99%) |
211
- | 🟡 Yellow | `[INFERRED]` / `[ASSUMED]` | Verify if stakes matter (~50–85%) |
212
- | 🟠 Orange | `[GUESSED]` / `[STALE]` | Verify before acting (~20–45%) |
213
- | 🔴 Red | `[UNKNOWN]` | Don't trust; agent refused to fabricate |
214
-
215
- Optional decile calibration on yellow/orange: `🟡 [INFERRED ~80%]`, `🟠 [GUESSED ~30%]`. The `~` signals it's a rough self-estimate, not a true probability.
216
-
217
- Full system + when each tag fires: **[`resources/skills/skills/meta/integrity-tags/SKILL.md`](./resources/skills/skills/meta/integrity-tags/SKILL.md)** · Canonical protocol: **[`resources/personas/integrity-protocol.md`](./resources/personas/integrity-protocol.md)** (auto-injected into every profile via `persona_includes`).
218
-
219
- <br>
220
-
221
- ---
222
-
223
169
  ## the catalog.
224
170
 
225
171
  > One repo. 69 pre-built expert agents. Pin one with `cue use <name>` and `claude` launches with that cuecard's skills, MCPs, hooks, and commands materialized.
@@ -281,6 +227,19 @@ claude # launches with that cuecard's loadout
281
227
 
282
228
  The same `profile.yaml` materializes into each agent's native format — `.cursorrules`, `.clinerules`, `~/.gemini/skills/*.md`, `.github/copilot-instructions.md`, etc.
283
229
 
230
+ <p align="center">
231
+ <a href="https://github.com/anthropics/claude-code"><img src="https://img.shields.io/badge/Claude_Code-cc785c?style=flat-square&logo=anthropic&logoColor=white" alt="Claude Code"></a>&nbsp;
232
+ <a href="https://github.com/openai/codex"><img src="https://img.shields.io/badge/Codex-000000?style=flat-square&logo=openai&logoColor=white" alt="Codex"></a>&nbsp;
233
+ <a href="https://cursor.sh"><img src="https://img.shields.io/badge/Cursor-000000?style=flat-square&logo=cursor&logoColor=white" alt="Cursor"></a>&nbsp;
234
+ <a href="https://github.com/cline/cline"><img src="https://img.shields.io/badge/Cline-5A45FF?style=flat-square" alt="Cline"></a>&nbsp;
235
+ <a href="https://github.com/google-gemini/gemini-cli"><img src="https://img.shields.io/badge/Gemini-4285F4?style=flat-square&logo=google&logoColor=white" alt="Gemini"></a>&nbsp;
236
+ <a href="https://github.com/features/copilot"><img src="https://img.shields.io/badge/Copilot-000000?style=flat-square&logo=github&logoColor=white" alt="Copilot"></a>&nbsp;
237
+ <a href="https://windsurf.com"><img src="https://img.shields.io/badge/Windsurf-06B6D4?style=flat-square" alt="Windsurf"></a>&nbsp;
238
+ <a href="https://github.com/RooVetGit/Roo-Code"><img src="https://img.shields.io/badge/Roo-7C3AED?style=flat-square" alt="Roo"></a>&nbsp;
239
+ <a href="https://sourcegraph.com/amp"><img src="https://img.shields.io/badge/Amp-FF4500?style=flat-square&logo=sourcegraph&logoColor=white" alt="Amp"></a>&nbsp;
240
+ <a href="https://aider.chat"><img src="https://img.shields.io/badge/Aider-14B8A6?style=flat-square" alt="Aider"></a>
241
+ </p>
242
+
284
243
  ```bash
285
244
  cue materialize cursor --profile backend # → .cursorrules + .cursor/mcp.json
286
245
  cue materialize --all --profile backend # → all 10 agents at once
@@ -308,6 +267,58 @@ cue materialize --all --profile backend # → all 10 agents at once
308
267
 
309
268
  ---
310
269
 
270
+ ## built-in rigor.
271
+
272
+ cuecards don't just load tools — they hold your agent to a standard.
273
+
274
+ ### The reviewer gate
275
+
276
+ cuecards can ship an **independent review gate**. When the agent finishes a
277
+ code-producing turn in a cuecard that enables it, cue spawns a *fresh, separate*
278
+ reviewer agent over the working-tree diff **before the turn is allowed to finish**.
279
+
280
+ A real catch from a live session: the reviewer flagged a **load-bearing unit bug** —
281
+ a product's `weight` was treated as kilograms in one place but grams in two others
282
+ (`weight >= 1000 ? kg : g`). Left in, the per-kg price renders as `€0.00` and a cart
283
+ reads `20000 kg`. The gate held the merge until it was fixed.
284
+
285
+ Two things so the behavior isn't surprising:
286
+
287
+ - **A red "Stop hook error" is the gate working, not a failure.** Claude Code renders
288
+ any *blocking* hook that way. It means the reviewer found a CRITICAL/HIGH issue and is
289
+ holding the turn until you address it. It caps at 2 rounds, then releases. Suppress it
290
+ for one turn with `[skip-auto-review]` in your message; turn it off entirely with
291
+ `rm ~/.config/cue/auto-review-enabled`.
292
+ - **You can watch the review live.** Run `cue-review-watch` in a second pane to see it
293
+ move file-by-file with findings as they land:
294
+
295
+ ```
296
+ 16:42:03 📄 setup-plate-variants.ts
297
+ 16:42:03 → unit convention
298
+ 16:42:09 🔴 CRITICAL weight kg/g ambiguity → per-kg price shows €0.00
299
+ 16:45:30 ✅ review complete 1 CRITICAL
300
+ ```
301
+
302
+ Enable the gate with `touch ~/.config/cue/auto-review-enabled`. Full details:
303
+ [`docs/review-visibility.md`](./docs/review-visibility.md).
304
+
305
+ ### Confidence tags
306
+
307
+ cuecards-managed agents tag every research- or decision-relevant claim with a colored confidence marker so you can scan trust at a glance:
308
+
309
+ | Tier | Tag | Meaning |
310
+ |---|---|---|
311
+ | 🟢 Green | `[VERIFIED]` / `[KNOWN]` | Trust it (~90–99%) |
312
+ | 🟡 Yellow | `[INFERRED]` / `[ASSUMED]` | Verify if stakes matter (~50–85%) |
313
+ | 🟠 Orange | `[GUESSED]` / `[STALE]` | Verify before acting (~20–45%) |
314
+ | 🔴 Red | `[UNKNOWN]` | Don't trust; agent refused to fabricate |
315
+
316
+ Optional decile calibration on yellow/orange: `🟡 [INFERRED ~80%]`, `🟠 [GUESSED ~30%]`. The `~` signals it's a rough self-estimate, not a true probability. Full system: **[`integrity-tags/SKILL.md`](./resources/skills/skills/meta/integrity-tags/SKILL.md)** · canonical protocol auto-injected into every profile via `persona_includes`.
317
+
318
+ <br>
319
+
320
+ ---
321
+
311
322
  ## daily commands.
312
323
 
313
324
  ```bash
@@ -321,10 +332,14 @@ cue cost --compare # every profile ranked vs the `full` baseline
321
332
 
322
333
  # System dependencies
323
334
  cue cli install --all --yes # install every missing CLI
335
+ cue install <profile> # dry-run: prepare Claude/Codex runtimes
336
+ cue install <profile> --with-clis --yes
337
+ cue install repo owner/repo --profile <profile> --yes
324
338
 
325
339
  # Quality + discovery
326
340
  cue lint-skill <path> [--fix] # validate SKILL.md against R001-R008
327
341
  cue marketplace discover --cli-aware # find skill repos on GitHub
342
+ cue install doctor --all-profiles # audit prepared runtimes
328
343
  cue failures --propose [profile] # Claude drafts profile improvements
329
344
 
330
345
  # Audit
@@ -397,25 +412,6 @@ Cold start: 50–200 ms. Warm start: <5 ms (sha256 compare + `exec`). Impercepti
397
412
  No. Everything cue computes (including the per-skill usage bars in `cue optimizer`) reads from your local `~/.claude/projects/**/*.jsonl` transcripts. Nothing leaves the machine.
398
413
  </details>
399
414
 
400
- <details>
401
- <summary><b>What's the difference between cue and skillport / Kiro Powers?</b></summary>
402
-
403
- | | cue | skillport / agent-skills-cli | Kiro Powers |
404
- |---|---|---|---|
405
- | Skills | ✅ | ✅ | ✅ |
406
- | MCPs | ✅ | — | ✅ |
407
- | Plugins | ✅ | — | — |
408
- | Per-directory profiles | ✅ | — | ◐ (IDE-only) |
409
- | Inheritance | ✅ | — | — |
410
- | Persona / playbooks / gates / evals | ✅ | — | — |
411
- | Multi-agent (Cursor/Cline/Copilot/etc.) | ✅ (10) | Claude only | IDE-only |
412
- | CLI installer | ✅ | — | — |
413
- | Failure-feedback loop | ✅ | — | — |
414
- | Daemon required | None | None | IDE process |
415
-
416
- cuecards is the only one that treats agent expertise as a composable system.
417
- </details>
418
-
419
415
  <details>
420
416
  <summary><b>What does cue NOT do?</b></summary>
421
417
 
@@ -429,6 +425,26 @@ cuecards is the only one that treats agent expertise as a composable system.
429
425
 
430
426
  ---
431
427
 
428
+ ## api.
429
+
430
+ cuecards.cc has free public accounts and per-user API tokens. Register in the
431
+ **API tokens** view, mint a token (shown once), and call the API with a Bearer
432
+ header:
433
+
434
+ ```bash
435
+ curl https://cuecards.cc/api/v1/me \
436
+ -H "Authorization: Bearer <your-token>"
437
+ # -> { "ok": true, "data": { "id": "...", "email": "...", "name": "..." } }
438
+ ```
439
+
440
+ Auth is [BetterAuth](https://better-auth.com) (email + password) on Vercel
441
+ serverless functions backed by Neon Postgres. Setup, env vars, the migration,
442
+ local dev, and deploy steps live in [`web/AUTH.md`](./web/AUTH.md).
443
+
444
+ <br>
445
+
446
+ ---
447
+
432
448
  ## deep dives.
433
449
 
434
450
  The bits that didn't fit on the landing page:
package/bin/cue-learnings CHANGED
@@ -15,7 +15,9 @@
15
15
  #
16
16
  # Usage:
17
17
  # cue-learnings log --type <T> --key <K> --insight <S> --confidence <N> \
18
- # --source <S> [--files <comma,list>]
18
+ # --source <S> [--files <comma,list>] [--skill <cat/slug>]
19
+ # --skill: for a pitfall/pattern, also enqueue a skill_gap in analytics.jsonl
20
+ # so the auto-evolve loop improves that skill (closes learning→skill).
19
21
  # cue-learnings search [pattern] # most-recent first; jq if present, grep otherwise
20
22
  # cue-learnings list # same as search with no pattern
21
23
  # cue-learnings path # print the jsonl path for this project
@@ -41,7 +43,7 @@ cmd="${1:-}"
41
43
  case "$cmd" in
42
44
  log)
43
45
  shift
44
- TYPE="" KEY="" INSIGHT="" CONFIDENCE="" SOURCE="" FILES=""
46
+ TYPE="" KEY="" INSIGHT="" CONFIDENCE="" SOURCE="" FILES="" SKILL=""
45
47
  while [[ $# -gt 0 ]]; do
46
48
  case "$1" in
47
49
  --type) TYPE="$2"; shift 2 ;;
@@ -50,6 +52,7 @@ case "$cmd" in
50
52
  --confidence) CONFIDENCE="$2"; shift 2 ;;
51
53
  --source) SOURCE="$2"; shift 2 ;;
52
54
  --files) FILES="$2"; shift 2 ;;
55
+ --skill) SKILL="$2"; shift 2 ;;
53
56
  *) echo "cue-learnings log: unknown flag $1" >&2; exit 1 ;;
54
57
  esac
55
58
  done
@@ -73,9 +76,13 @@ case "$cmd" in
73
76
  fi
74
77
 
75
78
  # Sanitize key — JSONL is line-delimited; newlines break the format
79
+ # Strip ALL C0 control chars (not just CR/LF): a raw tab in any field would
80
+ # make the JSONL line unparseable, and every downstream reader silently skips
81
+ # a malformed line — losing the learning AND its bridged skill_gap signal.
76
82
  KEY=$(printf '%s' "$KEY" | tr -cd 'a-zA-Z0-9._-')
77
- INSIGHT=$(printf '%s' "$INSIGHT" | tr -d '\n\r')
78
- FILES=$(printf '%s' "$FILES" | tr -d '\n\r')
83
+ INSIGHT=$(printf '%s' "$INSIGHT" | tr -d '\000-\037')
84
+ FILES=$(printf '%s' "$FILES" | tr -d '\000-\037')
85
+ SKILL=$(printf '%s' "$SKILL" | tr -d '\000-\037')
79
86
 
80
87
  mkdir -p "$PROJECT_DIR"
81
88
  TS=$(date -u +%Y-%m-%dT%H:%M:%SZ)
@@ -108,6 +115,25 @@ case "$cmd" in
108
115
  >> "$LEARNINGS_FILE"
109
116
 
110
117
  echo "logged: $TYPE/$KEY ($CONFIDENCE/10) → $LEARNINGS_FILE"
118
+
119
+ # Bridge to the evolution loop: when a pitfall/pattern names a skill, also
120
+ # append a skill_gap event to analytics.jsonl so auto-evolve can pick that
121
+ # skill up. Closes the formerly-open learnings→skill-improvement loop. Only
122
+ # actionable types (pitfall/pattern) bridge; preferences/operational notes
123
+ # are about the user/process, not the skill, so they stay out of the queue.
124
+ if [[ -n "$SKILL" ]] && { [[ "$TYPE" == "pitfall" ]] || [[ "$TYPE" == "pattern" ]]; }; then
125
+ ANALYTICS="${XDG_CONFIG_HOME:-$HOME/.config}/cue/analytics.jsonl"
126
+ mkdir -p "$(dirname "$ANALYTICS")" 2>/dev/null || true
127
+ ATS=$(date -u +%Y-%m-%dT%H:%M:%S.000Z)
128
+ # The learning is already safely written; a bridge-write failure (disk full,
129
+ # perms) must NOT make this command exit non-zero — degrade to a warning.
130
+ if printf '{"ts":"%s","event":"skill_gap","agent":"claude-code","source":"learning","skill":"%s","gap_type":"weak-body","suggestion":"%s","confidence":%d}\n' \
131
+ "$ATS" "$(esc "$SKILL")" "$(esc "$INSIGHT")" "$CONFIDENCE" >> "$ANALYTICS" 2>/dev/null; then
132
+ echo "bridged: skill_gap for '$SKILL' → $ANALYTICS"
133
+ else
134
+ echo "cue-learnings: warning — could not bridge skill_gap to analytics (learning still logged)" >&2
135
+ fi
136
+ fi
111
137
  ;;
112
138
 
113
139
  search|list)
@@ -0,0 +1,107 @@
1
+ #!/usr/bin/env bash
2
+ # cue-review-progress — emit live code-review progress events to a tail-able JSONL
3
+ # so `cue-review-watch` (or a dashboard panel) can show what a reviewer is doing
4
+ # in REAL TIME instead of an opaque spinner. No external deps.
5
+ #
6
+ # Any reviewer (the auto-review Stop hook, a code-reviewer subagent, /ship Step 9,
7
+ # a review workflow) appends one event per file / dimension / finding. The shared
8
+ # schema is the contract — see docs/review-visibility.md.
9
+ #
10
+ # Storage: ~/.config/cue/review-progress/<id>.jsonl (append-only)
11
+ # ~/.config/cue/review-progress/latest (pointer file holding <id>)
12
+ #
13
+ # Event schema (one JSON object per line):
14
+ # ts ISO-8601 UTC (auto)
15
+ # id review id
16
+ # kind start | file | dim | finding | note | end
17
+ # file path under review (file/dim/finding)
18
+ # dim dimension/lens being checked (dim/finding)
19
+ # severity CRITICAL|HIGH|MEDIUM|LOW (finding)
20
+ # title short text (finding/note/start/end)
21
+ # detail longer text (optional)
22
+ #
23
+ # Usage:
24
+ # cue-review-progress start [--id <id>] [--label <text>] [--files <n>] # prints id
25
+ # cue-review-progress emit [--id <id>] --kind <file|dim|finding|note> \
26
+ # [--file <p>] [--dim <d>] [--severity <S>] \
27
+ # [--title <t>] [--detail <x>]
28
+ # cue-review-progress end [--id <id>] [--summary <text>]
29
+ # cue-review-progress path [--id <id>] # print the jsonl path
30
+ # cue-review-progress latest # print current latest id
31
+ set -euo pipefail
32
+
33
+ DIR="${XDG_CONFIG_HOME:-$HOME/.config}/cue/review-progress"
34
+ mkdir -p "$DIR"
35
+
36
+ # JSON string escape: drop C0 control chars (a raw tab/newline breaks the line),
37
+ # then escape backslash and double-quote.
38
+ esc() { printf '%s' "${1:-}" | tr -d '\000-\037' | sed 's/\\/\\\\/g; s/"/\\"/g'; }
39
+ now() { date -u +%Y-%m-%dT%H:%M:%S.000Z; }
40
+
41
+ resolve_id() { # $1 = explicit id (may be empty)
42
+ if [[ -n "${1:-}" ]]; then printf '%s' "$1"; return; fi
43
+ if [[ -r "$DIR/latest" ]]; then head -1 "$DIR/latest"; return; fi
44
+ printf ''
45
+ }
46
+
47
+ cmd="${1:-}"; shift || true
48
+ ID="" KIND="" FILE="" DIM="" SEV="" TITLE="" DETAIL="" LABEL="" FILES="" SUMMARY=""
49
+ while [[ $# -gt 0 ]]; do
50
+ case "$1" in
51
+ --id) ID="$2"; shift 2 ;;
52
+ --kind) KIND="$2"; shift 2 ;;
53
+ --file) FILE="$2"; shift 2 ;;
54
+ --dim) DIM="$2"; shift 2 ;;
55
+ --severity) SEV="$2"; shift 2 ;;
56
+ --title) TITLE="$2"; shift 2 ;;
57
+ --detail) DETAIL="$2"; shift 2 ;;
58
+ --label) LABEL="$2"; shift 2 ;;
59
+ --files) FILES="$2"; shift 2 ;;
60
+ --summary) SUMMARY="$2"; shift 2 ;;
61
+ *) echo "cue-review-progress: unknown flag $1" >&2; exit 1 ;;
62
+ esac
63
+ done
64
+
65
+ append() { # $1 = full json object (without trailing newline)
66
+ printf '%s\n' "$1" >> "$DIR/$RID.jsonl"
67
+ }
68
+
69
+ case "$cmd" in
70
+ start)
71
+ RID="${ID:-rev-$(date -u +%Y%m%dT%H%M%SZ)-$$}"
72
+ printf '%s' "$RID" > "$DIR/latest"
73
+ : > "$DIR/$RID.jsonl"
74
+ append "$(printf '{"ts":"%s","id":"%s","kind":"start","title":"%s","detail":"%s"}' \
75
+ "$(now)" "$(esc "$RID")" "$(esc "$LABEL")" "$(esc "$FILES")")"
76
+ printf '%s\n' "$RID"
77
+ ;;
78
+ emit)
79
+ RID="$(resolve_id "$ID")"
80
+ [[ -z "$RID" ]] && { echo "cue-review-progress emit: no review id (run 'start' first or pass --id)" >&2; exit 1; }
81
+ case "$KIND" in
82
+ file|dim|finding|note) ;;
83
+ "") echo "cue-review-progress emit: --kind required (file|dim|finding|note)" >&2; exit 1 ;;
84
+ *) echo "cue-review-progress emit: invalid --kind '$KIND'" >&2; exit 1 ;;
85
+ esac
86
+ append "$(printf '{"ts":"%s","id":"%s","kind":"%s","file":"%s","dim":"%s","severity":"%s","title":"%s","detail":"%s"}' \
87
+ "$(now)" "$(esc "$RID")" "$KIND" "$(esc "$FILE")" "$(esc "$DIM")" "$(esc "$SEV")" "$(esc "$TITLE")" "$(esc "$DETAIL")")"
88
+ ;;
89
+ end)
90
+ RID="$(resolve_id "$ID")"
91
+ [[ -z "$RID" ]] && exit 0
92
+ append "$(printf '{"ts":"%s","id":"%s","kind":"end","title":"%s"}' \
93
+ "$(now)" "$(esc "$RID")" "$(esc "$SUMMARY")")"
94
+ ;;
95
+ path)
96
+ RID="$(resolve_id "$ID")"; [[ -z "$RID" ]] && { echo "no review yet" >&2; exit 1; }
97
+ printf '%s\n' "$DIR/$RID.jsonl"
98
+ ;;
99
+ latest)
100
+ [[ -r "$DIR/latest" ]] && head -1 "$DIR/latest" || { echo "no review yet" >&2; exit 1; }
101
+ ;;
102
+ ""|-h|--help|help)
103
+ sed -n '2,/^set -e/p' "$0" | sed 's/^# \{0,1\}//; s/^set -.*//'
104
+ ;;
105
+ *)
106
+ echo "cue-review-progress: unknown subcommand '$cmd' (start|emit|end|path|latest)" >&2; exit 1 ;;
107
+ esac