* feat: CLI-Matrix with multi-approach stages, skill discovery, and matrix search
Introduce CLI-Matrix — curated multi-CLI workflow matrices that agents can
install in one command. The video-creation matrix bundles 11 CLIs across 8
production stages (AI video gen, capture, audio, voice/TTS, music, NLE
editing, captions, thumbnails).
Each stage now exposes a goal, alternative approaches (Python libs, cloud
APIs, native commands), and skill_search_hints that encourage agents to
dynamically discover relevant skills via `npx skills search` rather than
relying on hard-coded tool lists.
Key changes:
- matrix_registry.json: extended stage schema with goal, alternatives,
skill_search_hints fields
- cli-hub matrix list/search/info/install commands
- matrix_skill.py: renders dynamic SKILL.md with stage tooling overview,
install status, and aggregated discovery commands
- Fixed brittle parents[2] repo root detection with git-based lookup
- 85 tests passing (10 new)
* update cli-matrix
* feat(cli-matrix): eco-first capability-based matrix, v2 schema + S2-S5 SKILLs
- Add docs/cli-matrix/matrix_registry.schema.md describing v2 capability-based
registry shape (capabilities[], providers with kind/requires/cost/quality/
offline, recipes[], known_gaps[], decision rubric, suggest-to-user template).
- Rewrite cli-hub-matrix/video-creation/SKILL.md and matrix_registry.json (S1)
around capabilities + providers + recipes instead of linear stages.
- Rename Vn -> Sn across cli-matrix-plan.md and test fixtures.
- Reorder scenarios by current completeness; rewrite S2 knowledge-research,
S3 3d-cad, S4 game-development, S5 image-design in v2 capability form with
full SKILL.md files.
- Add docs/cli-matrix/test-plans/video-creation.md with 13 long realistic
end-to-end tasks as checkable todo lists, each exercising 5-9 capabilities.
- Move cli-matrix-plan.md and matrix_registry.schema.md under docs/cli-matrix/.
* Document preview protocol and Audacity autosave
Add the preview bundle protocol plan, record video matrix review evidence, and make one-shot Audacity project mutations persist to disk with E2E coverage.
* Update CLI matrix skill registry and video workflow
* chore(git): always ignore docs/* — working documents stay local
* feat(cli-matrix): video-creation skill WIP — sound design, source triage, render doctor, NLE refs, video_doctor script
- SKILL.md: adds sound.design capability, bundled video_doctor.py provider,
recipe updates, and links to five new reference modules
- new references: art-direction-review, nle-shotcut-kdenlive, render-doctor,
sound-design, source-triage; captions and story-structure-audio updated
- scripts/video_doctor.py: bundled probe/diagnose helper
* fix(cli-hub): preflight detects packages by import name or PyPI dist name (P1-3)
_package_available() now tries find_spec as-is, dash->underscore
normalized, then importlib.metadata dist lookup (PEP 503), so registry
entries like edge-tts are detected when installed. All lookup failures
degrade to unavailable instead of crashing preflight. Adds 6 tests.
* feat(cli-hub): distribute matrix skill content to installed skills, wheels, and Pages (P1-4)
- matrix install renders to ~/.cli-hub/matrix/<name>/SKILL.md and copies
references/ and scripts/ beside it (pycache excluded, idempotent
reinstall purges stale files); legacy flat <name>.SKILL.md still read
- content lookup chain: repo checkout -> bundled cli_hub/_matrix_data
(vendored into sdist/wheel by setup.py build hooks + MANIFEST.in) ->
published Pages URL -> stub
- new 'matrix install --skill-only' renders skill + assets without
installing CLIs
- deploy-pages.yml: copy cli-hub-matrix/ into the site after the Jekyll
build (served verbatim at /matrix/<name>/); triggers remain main-only
- 12 new tests in tests/test_matrix_skill_dist.py (142 total pass)
* feat(cli-matrix): register S2-S5 matrices and resync video-creation registry (P1-1, P1-2)
- add knowledge-research (S2, 12 caps), 3d-cad (S3, 12), game-development
(S4, 10), image-design (S5, 9) derived from their SKILL.md drafts; full
v2 shape with capabilities, providers, recipes, known_gaps; clis lists
cross-checked against registry.json (unresolvable tools represented as
public-cli/native/python/api/agent-skill providers instead)
- video-creation: add sound.design capability (5 providers, wired into 5
recipes), register scripts/video_doctor.py as bundled-script provider
under quality.review, cite the 5 new reference modules in provider
notes, refresh description
- python provider package strings use import names (cv2, edge_tts,
ffmpeg, skimage, ...) so preflight detection is robust to dist-name
variants like opencv-python-headless
- fix homepage URLs to docs/cli-matrix/cli-matrix-plan.md; bump
meta.updated to 2026-06-11
* feat(cli-hub): ship the unified Gallery design as the production homepage
Replace docs/hub/index.html with the finalized "Gallery / R2 Flip" main page
(Steel Sky palette default, Newsreader serif hero title, liquid-glass flip
cards, JS masonry catalog, and the unified Matrices layer with bidirectional
stitching). Production-indexable robots meta retained.
Stop tracking docs/cli-matrix/* — the CLI-Matrix working docs stay local and
confidential; add an explicit /docs/cli-matrix/ ignore rule.
* feat: CLI-Matrix command family + Hub docs/demos pages and responsive nav
---------
CLI side (bumped to 0.2.3 so it ships to PyPI):
- track_install / track_uninstall: drop ":{cli_name}" suffix; event names
become static "cli-install" / "cli-uninstall" with CLI name moved to
properties.cli. Keeps PostHog's event catalog flat and makes breakdowns
by CLI a simple property filter.
- Add track_launch(cli_name) firing "cli-launch" from `cli-hub launch <name>`,
so we have a real usage signal distinct from install intent.
- Tests updated to match the flat event names; new test for cli-launch.
Web side:
- Replace frozen BASELINE_STATS + PostHog-increment flow with a live
merge of two sources fetched every 60s:
* PostHog HogQL (via Cloudflare Worker, allow-listed query) —
counts visit-human/agent, cli-hub call split, and both flattened
and legacy-colon-prefixed cli-install/cli-uninstall, plus cli-launch.
* Umami events/series (via same Worker, new /umami/events endpoint)
for pre-migration events that PostHog never saw.
BASELINE_STATS survives as last-resort fallback only.
- cli_hub_total now aggregates cli-hub call + cli-install + cli-uninstall
+ cli-launch so the footer's "cli-hub" number reflects end-to-end
activity; human/agent split stays tied to cli-hub call only because
Umami install events don't carry is_agent.
- docs/hub/index.html, index-modern.html: drop inline PostHog personal key
and direct us.posthog.com call; fetch from analytics.clianything.cc
(Cloudflare Worker at ~/clianything-analytics-worker) which holds the
scoped query:read key as a Worker secret. Key can no longer be harvested
or auto-revoked by secret scanning.
- cli-hub 0.2.1 -> 0.2.2 so the PostHog migration from 8cae111 actually
ships to PyPI (0.2.1 on PyPI still contains the old Umami code, which is
why cli-hub events from real users are under-represented).
- Page now runs a HogQL countIf query directly against PostHog on load
and every 60s, using a read-only personal API key scoped to query:read
on project 393992. Numbers are baseline (Umami cutover) + live increment.
- Remove the static snapshot pipeline: delete
.github/scripts/update_hub_analytics_stats.py,
docs/hub/analytics-stats.json, and the Generate hub analytics stats step
and path trigger in deploy-pages.yml.
- Drop the JS static-fallback branch that read analytics-stats.json.
- Switch cli-hub analytics client from Umami to PostHog (us.i.posthog.com),
with agent/human classification derived from env vars and parent-process
names, and persistent analytics id at ~/.cli-hub/.analytics_id.
- Add daily deploy-pages step running .github/scripts/update_hub_analytics_stats.py
to pull PostHog totals into docs/hub/analytics-stats.json.
- Redesign docs/hub footer analytics panel (index.html + index-modern.html)
as a compact Apple/OpenAI-style card: live eyebrow, total, 2px ratio bar,
and inline Human/Agent split with percentages computed client-side.
- Expand cli-hub tests to cover the new analytics context fields and
provider switch.
The hub previously always prepended the monorepo base URL to skill_md
values, breaking links for CLIs that moved to standalone repos. Now
absolute URLs (starting with "http") are passed through directly.
Also restores the zotero skill_md link pointing to its standalone repo.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>