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.
- package/CHANGELOG.md +41 -0
- package/README.md +148 -132
- package/bin/cue-learnings +30 -4
- package/bin/cue-review-progress +107 -0
- package/bin/cue-review-watch +98 -0
- package/dist/cue.js +4328 -3108
- package/package.json +2 -1
- package/plugins/cue/commands/cue-switch.md +1 -1
- package/plugins/cue/commands/cue.md +1 -1
- package/profiles/backend/profile.yaml +4 -0
- package/profiles/browser/profile.yaml +4 -0
- package/profiles/commerce/profile.yaml +0 -2
- package/profiles/coolify/profile.yaml +0 -1
- package/profiles/core/profile.yaml +78 -3
- package/profiles/dash-merge-test/profile.yaml +6 -1
- package/profiles/designer/profile.yaml +9 -1
- package/profiles/dropshipping/profile.yaml +69 -0
- package/profiles/frontend/profile.yaml +4 -0
- package/profiles/google-ads/profile.yaml +34 -0
- package/profiles/google-analytics/profile.yaml +34 -0
- package/profiles/google-drive/profile.yaml +34 -0
- package/profiles/gstack/profile.yaml +117 -27
- package/profiles/marketing/profile.yaml +0 -1
- package/profiles/media/README.md +70 -0
- package/profiles/media/profile.yaml +104 -0
- package/profiles/nano-banana/profile.yaml +52 -0
- package/profiles/ops/profile.yaml +1 -2
- package/profiles/secops/profile.yaml +3 -0
- package/profiles/skill-writer/profile.yaml +19 -0
- package/profiles/video/profile.yaml +3 -0
- package/profiles/web-frontend-base/profile.yaml +6 -0
- package/profiles/webshop/profile.yaml +0 -1
- package/profiles/webshop-google/profile.yaml +1 -0
- package/resources/mcps/configs/claude.sanitized.json +91 -6
- package/resources/mcps/configs/claude_runtime.sanitized.json +40 -1
- package/resources/mcps/configs/codex.sanitized.json +29 -0
- package/resources/skills/skills/career/job-hunter/LICENSE +21 -0
- package/resources/skills/skills/career/job-hunter/README.md +323 -0
- package/resources/skills/skills/career/job-hunter/SKILL.md +91 -0
- package/resources/skills/skills/career/job-hunter/agents/README.md +96 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-assessment-prep.md +195 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-ats-scan.md +155 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-bias-audit.md +224 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-cover-letter.md +69 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-decode-jd.md +117 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-fit-score.md +183 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-linkedin-audit.md +74 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-linkedin-scrape.md +255 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-portfolio-brief.md +123 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-reality-check.md +164 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-reference-prep.md +150 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-rejection-analysis.md +172 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-resume.md +70 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-skills-gap-filler.md +109 -0
- package/resources/skills/skills/career/job-hunter/agents/career-internal.md +94 -0
- package/resources/skills/skills/career/job-hunter/agents/career-linkedin-content.md +173 -0
- package/resources/skills/skills/career/job-hunter/agents/career-linkedin-scanner.md +262 -0
- package/resources/skills/skills/career/job-hunter/agents/career-network-message.md +108 -0
- package/resources/skills/skills/career/job-hunter/agents/career-promote.md +102 -0
- package/resources/skills/skills/career/job-hunter/agents/career-review.md +71 -0
- package/resources/skills/skills/career/job-hunter/agents/interview-debrief.md +117 -0
- package/resources/skills/skills/career/job-hunter/agents/interview-mock.md +171 -0
- package/resources/skills/skills/career/job-hunter/agents/interview-panel-decoder.md +152 -0
- package/resources/skills/skills/career/job-hunter/agents/interview-prep.md +184 -0
- package/resources/skills/skills/career/job-hunter/agents/interview-question-bank.md +133 -0
- package/resources/skills/skills/career/job-hunter/agents/interview-research.md +148 -0
- package/resources/skills/skills/career/job-hunter/agents/offer-compare.md +117 -0
- package/resources/skills/skills/career/job-hunter/agents/offer-counteroffer.md +144 -0
- package/resources/skills/skills/career/job-hunter/agents/offer-deadline-manager.md +148 -0
- package/resources/skills/skills/career/job-hunter/agents/offer-negotiate.md +126 -0
- package/resources/skills/skills/career/job-hunter/agents/offer-schedule.md +99 -0
- package/resources/skills/skills/career/job-hunter/agents/offer-thankyou.md +80 -0
- package/resources/skills/skills/career/job-hunter/agents/search-company-research.md +146 -0
- package/resources/skills/skills/career/job-hunter/agents/search-follow-up.md +129 -0
- package/resources/skills/skills/career/job-hunter/agents/search-ghost-job-detector.md +152 -0
- package/resources/skills/skills/career/job-hunter/agents/search-inbox-scan.md +193 -0
- package/resources/skills/skills/career/job-hunter/agents/search-interview-scorecard.md +164 -0
- package/resources/skills/skills/career/job-hunter/agents/search-jobs.md +149 -0
- package/resources/skills/skills/career/job-hunter/agents/search-momentum-check.md +194 -0
- package/resources/skills/skills/career/job-hunter/agents/search-outreach.md +85 -0
- package/resources/skills/skills/career/job-hunter/agents/search-referral-finder.md +124 -0
- package/resources/skills/skills/career/job-hunter/agents/search-salary.md +96 -0
- package/resources/skills/skills/career/job-hunter/agents/search-send-email.md +109 -0
- package/resources/skills/skills/career/job-hunter/agents/search-tracker-update.md +127 -0
- package/resources/skills/skills/career/job-hunter/inputs/README.md +26 -0
- package/resources/skills/skills/career/job-hunter/inputs/apply-linkedin-url.txt +8 -0
- package/resources/skills/skills/career/job-hunter/inputs/interview-context.md +24 -0
- package/resources/skills/skills/career/job-hunter/inputs/job-description.md +20 -0
- package/resources/skills/skills/career/job-hunter/inputs/job-search-criteria.md +36 -0
- package/resources/skills/skills/career/job-hunter/inputs/my-linkedin.md +24 -0
- package/resources/skills/skills/career/job-hunter/inputs/my-resume.md +28 -0
- package/resources/skills/skills/career/job-hunter/inputs/search-outreach-target.md +24 -0
- package/resources/skills/skills/career/job-hunter/rules/README.md +37 -0
- package/resources/skills/skills/career/job-hunter/rules/writing-rules.md +81 -0
- package/resources/skills/skills/career/resume-version-manager/SKILL.md +351 -0
- package/resources/skills/skills/career/salary-negotiation-prep/SKILL.md +378 -0
- package/resources/skills/skills/design/banana/SKILL.md +375 -0
- package/resources/skills/skills/design/banana/references/cost-tracking.md +47 -0
- package/resources/skills/skills/design/banana/references/gemini-models.md +236 -0
- package/resources/skills/skills/design/banana/references/mcp-tools.md +145 -0
- package/resources/skills/skills/design/banana/references/post-processing.md +192 -0
- package/resources/skills/skills/design/banana/references/presets.md +69 -0
- package/resources/skills/skills/design/banana/references/prompt-engineering.md +481 -0
- package/resources/skills/skills/design/banana/scripts/batch.py +97 -0
- package/resources/skills/skills/design/banana/scripts/cost_tracker.py +191 -0
- package/resources/skills/skills/design/banana/scripts/edit.py +159 -0
- package/resources/skills/skills/design/banana/scripts/generate.py +168 -0
- package/resources/skills/skills/design/banana/scripts/presets.py +154 -0
- package/resources/skills/skills/design/banana/scripts/setup_mcp.py +151 -0
- package/resources/skills/skills/design/banana/scripts/validate_setup.py +133 -0
- package/resources/skills/skills/eu-funding/grant-outreach/SKILL.md +70 -0
- package/resources/skills/skills/eu-funding/hu-grant-finder/SKILL.md +114 -0
- package/resources/skills/skills/eu-funding/hu-grant-finder/evals.md +26 -0
- package/resources/skills/skills/eu-funding/ted-tender-search/SKILL.md +80 -0
- package/resources/skills/skills/eu-funding/ted-tender-search/evals.md +26 -0
- package/resources/skills/skills/eu-funding/ted-tender-search/scripts/ted-search.sh +46 -0
- package/resources/skills/skills/github/gx-agents/SKILL.md +96 -0
- package/resources/skills/skills/gstack/ship/SKILL.md +13 -0
- package/resources/skills/skills/media/3d-logo-animation/SKILL.md +59 -0
- package/resources/skills/skills/media/action-figure-generator/SKILL.md +48 -0
- package/resources/skills/skills/media/ad-creative/SKILL.md +79 -0
- package/resources/skills/skills/media/ai-clipping/SKILL.md +194 -0
- package/resources/skills/skills/media/ai-clipping/scripts/run-ai-clipping.sh +200 -0
- package/resources/skills/skills/media/ai-fight-scene/SKILL.md +132 -0
- package/resources/skills/skills/media/amazon-product-listing/SKILL.md +68 -0
- package/resources/skills/skills/media/animal-video-generator/SKILL.md +59 -0
- package/resources/skills/skills/media/award-ceremony-video/SKILL.md +87 -0
- package/resources/skills/skills/media/blog-header/SKILL.md +61 -0
- package/resources/skills/skills/media/brand-kit/SKILL.md +72 -0
- package/resources/skills/skills/media/brochures/SKILL.md +65 -0
- package/resources/skills/skills/media/cartoon-dance-animation/SKILL.md +62 -0
- package/resources/skills/skills/media/character-story-video/SKILL.md +84 -0
- package/resources/skills/skills/media/chibi-collage-effect/SKILL.md +63 -0
- package/resources/skills/skills/media/cinema-director/SKILL.md +93 -0
- package/resources/skills/skills/media/cinema-director/scripts/generate-film.sh +78 -0
- package/resources/skills/skills/media/color-analysis-board/SKILL.md +71 -0
- package/resources/skills/skills/media/core-edit/SKILL.md +48 -0
- package/resources/skills/skills/media/core-edit/edit-image.sh +54 -0
- package/resources/skills/skills/media/core-edit/enhance-image.sh +191 -0
- package/resources/skills/skills/media/core-edit/lipsync.sh +144 -0
- package/resources/skills/skills/media/core-edit/video-effects.sh +193 -0
- package/resources/skills/skills/media/core-media/SKILL.md +49 -0
- package/resources/skills/skills/media/core-media/create-music.sh +169 -0
- package/resources/skills/skills/media/core-media/generate-image.sh +161 -0
- package/resources/skills/skills/media/core-media/generate-video.sh +137 -0
- package/resources/skills/skills/media/core-media/image-to-video.sh +228 -0
- package/resources/skills/skills/media/core-media/schema_data.json +18708 -0
- package/resources/skills/skills/media/core-media/upload.sh +41 -0
- package/resources/skills/skills/media/core-platform/SKILL.md +41 -0
- package/resources/skills/skills/media/core-platform/check-result.sh +37 -0
- package/resources/skills/skills/media/core-platform/setup.sh +31 -0
- package/resources/skills/skills/media/couple-grid-creator/SKILL.md +47 -0
- package/resources/skills/skills/media/design-guide/SKILL.md +73 -0
- package/resources/skills/skills/media/drone-style-video/SKILL.md +61 -0
- package/resources/skills/skills/media/fashion-try-on/SKILL.md +61 -0
- package/resources/skills/skills/media/floor-plan-rendering/SKILL.md +56 -0
- package/resources/skills/skills/media/freeze-effect-video/SKILL.md +100 -0
- package/resources/skills/skills/media/giant-product-showcase/SKILL.md +61 -0
- package/resources/skills/skills/media/instagram-post/SKILL.md +58 -0
- package/resources/skills/skills/media/interior-design/SKILL.md +61 -0
- package/resources/skills/skills/media/interior-design-visualizer/SKILL.md +57 -0
- package/resources/skills/skills/media/jewelry-product-video/SKILL.md +61 -0
- package/resources/skills/skills/media/kdenlive/SKILL.md +106 -0
- package/resources/skills/skills/media/kdenlive/scripts/assemble.sh +57 -0
- package/resources/skills/skills/media/kdenlive/scripts/common.sh +30 -0
- package/resources/skills/skills/media/kdenlive/scripts/inspect.sh +19 -0
- package/resources/skills/skills/media/kdenlive/scripts/reframe.sh +22 -0
- package/resources/skills/skills/media/kdenlive/scripts/render.sh +16 -0
- package/resources/skills/skills/media/kdenlive/scripts/title-card.sh +25 -0
- package/resources/skills/skills/media/keyboard-art-maker/SKILL.md +44 -0
- package/resources/skills/skills/media/logo-branding/SKILL.md +70 -0
- package/resources/skills/skills/media/logo-creator/SKILL.md +80 -0
- package/resources/skills/skills/media/logo-creator/scripts/create-logo.sh +38 -0
- package/resources/skills/skills/media/logo-generator/SKILL.md +56 -0
- package/resources/skills/skills/media/multi-angle-reshoot/SKILL.md +70 -0
- package/resources/skills/skills/media/multi-angle-shots/SKILL.md +73 -0
- package/resources/skills/skills/media/music-video/SKILL.md +61 -0
- package/resources/skills/skills/media/nano-banana/SKILL.md +80 -0
- package/resources/skills/skills/media/nano-banana/scripts/generate-nano-art.sh +54 -0
- package/resources/skills/skills/media/one-shot-video/SKILL.md +56 -0
- package/resources/skills/skills/media/photo-pack-generator/SKILL.md +205 -0
- package/resources/skills/skills/media/photo-pack-generator/scripts/generate-pack.sh +241 -0
- package/resources/skills/skills/media/product-ad-cinematic/SKILL.md +78 -0
- package/resources/skills/skills/media/product-campaign/SKILL.md +76 -0
- package/resources/skills/skills/media/product-showcase-video/SKILL.md +60 -0
- package/resources/skills/skills/media/product-video-ad-maker/SKILL.md +59 -0
- package/resources/skills/skills/media/rednote-cover/SKILL.md +57 -0
- package/resources/skills/skills/media/seedance-2/SKILL.md +632 -0
- package/resources/skills/skills/media/seedance-2/scripts/generate-seedance.sh +701 -0
- package/resources/skills/skills/media/selfie-with-celebrities/SKILL.md +64 -0
- package/resources/skills/skills/media/social-media-video/SKILL.md +277 -0
- package/resources/skills/skills/media/social-media-video/scripts/run-social-video.sh +316 -0
- package/resources/skills/skills/media/social-pack/SKILL.md +58 -0
- package/resources/skills/skills/media/storyboard/SKILL.md +57 -0
- package/resources/skills/skills/media/storyboard-to-cooking-video/SKILL.md +143 -0
- package/resources/skills/skills/media/talking-baby-video/SKILL.md +57 -0
- package/resources/skills/skills/media/ugc-ads-workflow/SKILL.md +70 -0
- package/resources/skills/skills/media/ugc-lifestyle-try-on/SKILL.md +65 -0
- package/resources/skills/skills/media/ugc-video-factory/SKILL.md +134 -0
- package/resources/skills/skills/media/ui-design/SKILL.md +81 -0
- package/resources/skills/skills/media/ui-design/scripts/generate-mockup.sh +49 -0
- package/resources/skills/skills/media/url-to-design/SKILL.md +61 -0
- package/resources/skills/skills/media/workflow/SKILL.md +197 -0
- package/resources/skills/skills/media/workflow/scripts/discover-workflow.sh +18 -0
- package/resources/skills/skills/media/workflow/scripts/generate-workflow.sh +33 -0
- package/resources/skills/skills/media/workflow/scripts/interactive-run.sh +16 -0
- package/resources/skills/skills/media/workflow/scripts/list-workflows.sh +20 -0
- package/resources/skills/skills/media/workflow/scripts/run-workflow.sh +34 -0
- package/resources/skills/skills/media/youtube-shorts/SKILL.md +173 -0
- package/resources/skills/skills/media/youtube-shorts/scripts/run-youtube-shorts.sh +141 -0
- package/resources/skills/skills/media/youtube-thumbnail/SKILL.md +66 -0
- package/resources/skills/skills/meta/cue-developer/references/architecture.md +2 -2
- package/resources/skills/skills/meta/cue-usage/SKILL.md +1 -1
- package/resources/skills/skills/meta/focus/SKILL.md +62 -0
- package/resources/skills/skills/meta/profile-fit-monitor/SKILL.md +2 -2
- package/resources/skills/skills/meta/profile-optimizer/SKILL.md +1 -1
- package/resources/skills/skills/meta/profile-suggest/SKILL.md +7 -7
- package/resources/skills/skills/meta/profile-summon/SKILL.md +159 -0
- package/resources/skills/skills/meta/profile-summon/evals/evals.json +53 -0
- package/resources/skills/skills/meta/save-profile/SKILL.md +1 -1
- package/resources/skills/skills/meta/skill-reviewer/SKILL.md +3 -0
- package/resources/skills/skills/meta/skill-reviewer/references/tdd-for-skills.md +55 -0
- package/resources/skills/skills/research/find-skills/SKILL.md +1 -1
- package/resources/skills/skills/review/code-review-deep/SKILL.md +20 -0
- package/resources/skills/skills/security/trivy-scan/SKILL.md +139 -0
- package/resources/skills/skills/security/trivy-scan/scripts/ensure-trivy.sh +21 -0
- package/resources/skills/skills/tools/ccusage/SKILL.md +142 -0
- package/resources/skills/skills/tools/portless/SKILL.md +186 -0
- package/src/commands/_index.ts +8 -0
- package/src/commands/ai.ts +2 -2
- package/src/commands/auto-detect.test.ts +74 -0
- package/src/commands/auto-detect.ts +9 -7
- package/src/commands/cli.test.ts +20 -4
- package/src/commands/cli.ts +36 -20
- package/src/commands/create-profile.ts +2 -2
- package/src/commands/debug.ts +2 -2
- package/src/commands/discover.ts +14 -4
- package/src/commands/export-docker.ts +1 -1
- package/src/commands/features-batch1.test.ts +1 -1
- package/src/commands/gates.ts +1 -1
- package/src/commands/import-profile.ts +1 -1
- package/src/commands/init.ts +15 -11
- package/src/commands/install.test.ts +192 -0
- package/src/commands/install.ts +610 -0
- package/src/commands/launch-handoff.e2e.test.ts +33 -1
- package/src/commands/launch.e2e.test.ts +15 -10
- package/src/commands/launch.ts +73 -116
- package/src/commands/materialize.ts +2 -2
- package/src/commands/prune.ts +1 -1
- package/src/commands/security-audit.ts +1 -1
- package/src/commands/shell.ts +7 -7
- package/src/commands/skill-report.ts +1 -1
- package/src/commands/skills.ts +3 -3
- package/src/commands/snapshot.ts +2 -2
- package/src/commands/summon.test.ts +116 -0
- package/src/commands/summon.ts +338 -0
- package/src/commands/trigger-gaps.ts +1 -1
- package/src/commands/use.ts +47 -3
- package/src/commands/watch-live.ts +5 -5
- package/src/commands/watch.ts +8 -8
- package/src/index.ts +2 -0
- package/src/lib/active-sessions.test.ts +3 -3
- package/src/lib/active-sessions.ts +4 -4
- package/src/lib/analytics.ts +13 -1
- package/src/lib/auto-detect.test.ts +172 -8
- package/src/lib/auto-detect.ts +191 -136
- package/src/lib/codex-persona-parity.test.ts +58 -0
- package/src/lib/companion-detect.test.ts +43 -1
- package/src/lib/companion-detect.ts +35 -0
- package/src/lib/credentials-sync.test.ts +121 -1
- package/src/lib/credentials-sync.ts +95 -1
- package/src/lib/cwd-resolver.test.ts +8 -8
- package/src/lib/cwd-resolver.ts +2 -2
- package/src/lib/dashboard-merge.test.ts +9 -4
- package/src/lib/dashboard-server.ts +1 -1
- package/src/lib/picker.test.ts +1 -1
- package/src/lib/picker.ts +5 -5
- package/src/lib/profile-merge.test.ts +8 -0
- package/src/lib/profile-names.test.ts +3 -3
- package/src/lib/runtime-install.ts +166 -0
- package/src/lib/runtime-materializer.test.ts +137 -0
- package/src/lib/runtime-materializer.ts +105 -2
- package/src/lib/skill-router.test.ts +38 -0
- 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
|
|
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>< 5 ms</strong> warm launch · <strong>69</strong> pre-built cuecards · <strong>330+</strong> local skills · <strong>10</strong> AI agents · <strong>MIT</strong> · zero telemetry · 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
|
-
##
|
|
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>
|
|
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>
|
|
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>
|
|
125
|
-
<a href="https://github.com/cline/cline"><img src="https://img.shields.io/badge/Cline-5A45FF?style=flat-square" alt="Cline"></a>
|
|
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>
|
|
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>
|
|
128
|
-
<a href="https://windsurf.com"><img src="https://img.shields.io/badge/Windsurf-06B6D4?style=flat-square" alt="Windsurf"></a>
|
|
129
|
-
<a href="https://github.com/RooVetGit/Roo-Code"><img src="https://img.shields.io/badge/Roo-7C3AED?style=flat-square" alt="Roo"></a>
|
|
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>
|
|
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> leaner always-on context
|
|
146
|
-
<br><br>
|
|
147
|
-
<strong>< 5 ms</strong> warm launch overhead
|
|
148
|
-
<br><br>
|
|
149
|
-
<strong>69</strong> pre-built cuecards · <strong>330+</strong> local skills
|
|
150
|
-
<br><br>
|
|
151
|
-
<strong>10</strong> AI coding agents supported
|
|
152
|
-
<br><br>
|
|
153
|
-
<strong>MIT</strong> 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.
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
234
|
+
<a href="https://github.com/cline/cline"><img src="https://img.shields.io/badge/Cline-5A45FF?style=flat-square" alt="Cline"></a>
|
|
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>
|
|
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>
|
|
237
|
+
<a href="https://windsurf.com"><img src="https://img.shields.io/badge/Windsurf-06B6D4?style=flat-square" alt="Windsurf"></a>
|
|
238
|
+
<a href="https://github.com/RooVetGit/Roo-Code"><img src="https://img.shields.io/badge/Roo-7C3AED?style=flat-square" alt="Roo"></a>
|
|
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>
|
|
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 '\
|
|
78
|
-
FILES=$(printf '%s' "$FILES" | tr -d '\
|
|
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
|