* feat: add Loops component type with referenced components
Introduce "loops" as a new first-class component type — autonomous
agentic workflows (goal + interval + stop condition) inspired by Loop
Engineering and the Forward Future Loop Library. A loop references other
components (agents, skills, hooks, commands) and the dashboard renders
those references as clickable cards on the loop detail page.
- Add 10 starter loops under cli-tool/components/loops/
(engineering, evaluation, operations)
- Catalog generator: scan loops + write per-component content files
- Dashboard: new type in icons/types/data, /loops page, and a
"Referenced Components" section on the loop detail page
- CLI: --loop flag installs the loop to .claude/loops/ and
auto-installs its referenced components
- Docs: CLAUDE.md and cli-tool rule updated
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T9ynMiCHt8JwdMd8KjCkES
* feat: add 8 more loops (goal/loop/schedule patterns)
Expand the loops catalog to 18, drawing ideas from community "Loop
Engineering" patterns. Adds loops across the three trigger verbs
(/goal, /loop, /schedule) and emphasizes the verifier-in-the-loop and
budget / anti-spin guardrails:
- engineering/five-minute-maintainer-loop
- engineering/build-test-fix-loop
- engineering/anti-spin-build-loop
- engineering/completion-contract-loop (goal)
- engineering/goal-refiner-loop (goal)
- engineering/adversarial-review-loop (cross-model)
- operations/overnight-pr-routine-loop (schedule)
- evaluation/human-approval-loop (human-in-the-loop)
All referenced components verified to exist; catalog regenerated.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T9ynMiCHt8JwdMd8KjCkES
---------
Co-authored-by: Claude <noreply@anthropic.com>
* feat(cli-rust): add Rust port of the CLI core with npm distribution + CI
Adds a new `cli-rust/` crate (binary `cct`) that ports the CORE of the
claude-code-templates CLI to Rust, alongside the existing Node `cli-tool/`.
Native (byte-parity with the Node CLI, verified via `diff -r`):
- Component installation: --agent/--command/--mcp/--setting/--hook/--skill
and --workflow YAML, replicating the exact GitHub raw/API URLs, target
paths (flat dir, category dropped), .mcp.json/settings/hooks merge
semantics, .py/.sh sidecars, 2-space JSON + trailing newline.
- Fire-and-forget tracking (3 endpoints, detached threads, env opt-out).
Delegated to the Node CLI for now (commands/delegate.rs forwards argv via
CCT_NODE_BIN or `npx claude-code-templates@latest`): dashboards, sandbox,
global agents, stats, health-check, interactive setup.
Parity gotcha handled: serde_json Map::remove does swap-remove under
preserve_order; switched to shift_remove to match JS `delete` key order.
Distribution: npm shim (npm/cct/bin/cct.js) execs a prebuilt binary from
optionalDependencies (@davila7/cct-<os>-<arch>, esbuild pattern) so `npx`
keeps working; plus Homebrew, cargo-binstall, and install.sh from GitHub
Releases. build-rust-cli.yml builds all 5 targets on tag `cli-rust-v*`.
Tests: 23 offline unit/integration tests + 2 network integration tests
(#[ignore]). fmt + clippy clean.
CI: rust-ci.yml runs fmt + clippy + tests only when cli-rust/** changes and
posts a sticky PR comment with the results.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* fix(cli-rust): address cubic review (config safety, opt-out, packaging, CI)
Fixes from the cubic automated review on PR #640:
- install.rs: fail safe on a corrupt/unreadable existing .mcp.json/settings
file instead of silently overwriting it (MCP aborts; setting/hook skip the
location), matching Node's throw-on-bad-config behavior.
- tracking.rs: honor both `=1` and `=true` as opt-out values (the README
documents `=1`); Node only checks `=true`, so this is more privacy-safe.
- cli.rs/main.rs: implement --dry-run for the native install path (prints the
plan, writes nothing) instead of parsing the flag and ignoring it.
- main.rs: run_prompt surfaces a non-zero `claude` exit code (a missing
`claude` stays a soft warning since the install already succeeded).
- delegate.rs: propagate signal-based termination as 128+signal on Unix
instead of collapsing to exit code 1.
- github.rs: warn when a skill file fails to download (mirrors Node's
"Could not download" log) instead of skipping silently.
- npm/build-packages.mjs: accept the release `.tgz` artifacts (extract them)
in addition to unpacked binaries, matching build-rust-cli.yml output.
- npm/cct/package.json: add top-level os/cpu so npm rejects unsupported
platforms at install time instead of failing at runtime.
- build-rust-cli.yml: add `permissions: contents: write` (gh-release) and
Swatinem/rust-cache for the 5-target matrix.
- tests/integration.rs: tighten the 2-space-indent assertion.
Not changed (intentional parity with the Node CLI):
- merge.rs new-hook-type copy: Node copies the incoming value as-is for a
previously-absent hook type (no old-format normalization); kept identical.
fmt + clippy clean; 23 offline + 2 network tests pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* fix(cli-rust): abort install on corrupt existing settings/hook config
Follow-up to the cubic review: a corrupt/unreadable existing settings or
hook file now fails the whole component install (returns 0) instead of
skipping just that location, matching Node — where readJson throws out of
the per-location loop and fails the component. Prevents a multi-location
run from reporting success despite a bad target location.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* chore(cli-rust): prep v0.1.0 release via GitHub Releases + cargo-binstall
Wire up the two opt-in distribution channels that don't touch the existing
`claude-code-templates` npm package:
- Cargo.toml: fix cargo-binstall pkg-url to the `cli-rust-v<version>` tag
(was `v<version>`), so `cargo binstall --git ...` resolves the release asset.
- install.sh: resolve the latest `cli-rust-v*` release instead of the generic
/releases/latest, which could otherwise pick a Node-CLI `vX.Y.Z` release.
- README: install table now lists the available preview channels (curl|sh,
cargo-binstall via --git, from source) and marks Homebrew/npm as planned;
Release section documents the merge -> tag cli-rust-v0.1.0 -> verify flow.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
cli-tool/src/analytics.js and others require('../package.json') which
resolves to cli-tool/package.json — must be bundled in the npm package.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
CLI fails with MODULE_NOT_FOUND because root package.json was missing
these deps that cli-tool/src/index.js requires.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Package was 413 too large due to dashboard/public/component-content/.
Only cli-tool/bin, cli-tool/src, cli-tool/components/sandbox, and README needed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- logo.png → logo.webp: 95 KB → 11 KB (−88%)
- claude-code-logo.png → claude-code-logo.webp: 26 KB → 9.6 KB (−63%)
- braingrid-logo.png → braingrid-logo.webp: 17 KB → 7.6 KB (−55%)
- <picture> con fallback PNG para compatibilidad en Sidebar, index, JobsView
- fetchpriority="high" en el logo del Sidebar (LCP element en todas las páginas)
- <link rel="preload"> del logo.webp en el <head> para adelantar la descarga
- loading="lazy" en logos below-the-fold (JobsView)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
El commit anterior creó docs/component-content/ como directorio intermedio
y luego lo copió a dashboard/public/component-content/, resultando en 1774
archivos duplicados en el repo. Ahora el generador escribe directo al destino
final (dashboard/public/component-content/) y se agrega docs/component-content/
a .gitignore para evitar que se vuelva a trackear.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Split components.json: índice sin content (1.9 MB / 249 KB br vs 15.6 MB / 4.15 MB br).
Generador produce component-content/{type}/{slug}.json por componente y auto-copia
a dashboard/public/. Página de detalle carga contenido on-demand via fetchComponentContent().
- Restaurar cabeceras de caché y seguridad perdidas en la migración Vercel→Cloudflare:
_headers con Cache-Control max-age=86400 para JSONs, immutable para _astro/*,
y HSTS, X-Frame-Options, Referrer-Policy, Permissions-Policy en todas las rutas.
- Eliminar dashboard/vercel.json (config muerta desde migración a Cloudflare Pages).
- Diferir hidratación: ClerkIsland y AuthButton client:load → client:idle;
SaveToCollectionButton → client:visible.
- Eliminar gpt-tokenizer del bundle del navegador: reemplazado por estimación chars/4.
- Actualizar .claude/rules/dashboard.md para reflejar hosting en Cloudflare Pages.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Mueve Jobs Using Claude Code a panel vertical sticky en el lado derecho
(260px, visible en xl+, scroll independiente, hasta 12 jobs)
- Quita la sección horizontal de jobs del flujo principal para llegar
directo al grid de componentes al cargar
- Grid de componentes: 2 cols en xl, 3 cols en 2xl (corrige cards estrechos)
- Hero ASCII: logo claude-code-logo.png al lado del texto, centrado
- ASCII art y logo más grandes, sin scroll horizontal
- Subtítulo centrado con punto de estado verde
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds a browser game (Dino Runner, Snake, Flappy Bird) that launches
automatically when Claude enters Plan Mode. Users can play while
Claude thinks, with a live activity panel showing tool calls in real time.
- EnterPlanMode / /plan → starts Node.js server on port 3456, opens browser
- Read/Bash/Edit/etc → streams tool activity to the activity panel
- Write to ~/.claude/plans/ → also triggers the game (for /plan command)
- AskUserQuestion → pauses the game until user responds
- ExitPlanMode → shows "Claude Termino!" overlay with confetti
Features: 3 games with high score persistence, signed score sharing URLs,
pause overlay when Claude needs input, activity feed with tool icons.
Requires Node.js and curl. macOS only (uses 'open' command).
Install globally in ~/.claude/settings.json to work across all projects.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Paleta GitHub-dark (#0d1117 / #161b22 / #21262d, borde #30363d)
- Acento naranja #d57455 + verde terminal #3fb950 para badges/dots
- Banner ASCII-art naranja con punto de estado verde pulsante en hero
- Bordes nítidos con hover naranja en cards (sin scale ni sombras pesadas)
- Prompt > y cursor de bloque en barra de búsqueda del TopBar
- Títulos de cards y labels de sidebar en monospace (font-ui-mono)
- Badges de descargas en pill verde (.badge-download)
- Barra activa del sidebar en naranja en vez de indigo
- Esquinas más cuadradas en cards, features y nav items
- Nuevas utilidades CSS: .font-ui-mono, .terminal-prompt, .status-dot,
.terminal-cursor, .ascii-art, .badge-download, .card-terminal
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Analytics Dashboard (Phase 1 + Phase 2):
- Replace 8663-line vanilla JS monolith with Astro static build
- New bento-grid layout with Geist design system (dark/light themes)
- ECharts (offline, tree-shaken) replaces Chart.js CDN dependency
- React island with KPI cards, token timeline, activity heatmap, agent BarList
- WebSocket client with reconnect backoff; polling fallback when WS disconnects
- API client with 30s cache; normalizes backend field names (inputTokens→totalInput)
- Build source in analytics-ui/, output committed to src/analytics-web/
- Fix: /api/activity now uses in-memory cache (was re-scanning all files on each request)
- Fix: remove duplicate /api/agents route (dead code since Express uses first match)
- Fix: /api/data and /api/fast-update no longer mutate this.data.conversations in place
TUI Modernization:
- Add src/tui.js with @clack/prompts-powered banner and helpers
- Replace inline showBanner() in bin/create-claude-config.js with tui.showBanner()
- Migrate showMainMenu() in src/index.js to @clack select() (replaces inquirer)
- Add @clack/prompts ^1.5.1 and gradient-string ^2.0.2 to dependencies
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Integrate NVIDIA's SkillSpector static analyzer (Apache-2.0) to scan
AI agent skills under cli-tool/components/skills/ for security issues
(prompt injection, data exfiltration, supply chain, dangerous code, etc.).
- scripts/skillspector_scan.py: batch orchestrator that discovers skill
dirs (by SKILL.md), runs `skillspector scan --no-llm --format json` on
each, and aggregates results into a Markdown PR report + SARIF log.
Tolerates per-skill scan failures and the CLI's non-zero exit on high
scores without aborting the batch.
- skill-security-scan.yml (PR): scans only changed skills, posts an
idempotent report comment, and blocks on HIGH/CRITICAL (score > 50).
- skill-security-scan-all.yml (weekly + manual): scans all skills,
reports to run summary and SARIF, never blocks.
- CLAUDE.md: document the scanning workflow.
Co-authored-by: Claude <noreply@anthropic.com>
Adds the memex MCP server under mcps/integration. memex watches git
repos and builds a temporal knowledge graph of modules, symbols,
decisions, and open problems (Graphiti + Neo4j), serving it to AI
coding agents over MCP. 12 read/write tools.
npx -y stifler-memex-mcp serve --repo .
Adds the official Airtable marketplace (Airtable/skills) to the /plugins
page. Includes:
- Entry in scripts/generate_plugins_json.py REPOS list so the next
regeneration run picks it up.
- Manual entry in dashboard/public/plugins.json so the marketplace
appears immediately, matching the format used by recent direct
additions (e.g., Mercado Pago, PR #576).
The marketplace currently contains 1 plugin (airtable) bundling 3 skills
(airtable-cli, airtable-filters, airtable-overview) and 1 MCP server
(https://mcp.airtable.com/mcp).