323 Commits

Author SHA1 Message Date
Affaan Mustafa
f92dc544c4 test: cover mcp health edge paths 2026-04-29 18:08:45 -04:00
Affaan Mustafa
1c2d5dd389 fix: fail open on insaits monitor errors 2026-04-29 18:03:33 -04:00
Affaan Mustafa
b40de37ccb test: cover install lifecycle edge paths 2026-04-29 17:56:25 -04:00
Affaan Mustafa
63485a26bf fix: support windows insaits python shims 2026-04-29 17:53:07 -04:00
Affaan Mustafa
fe40a3d27b test: cover hook bootstrap and InsAIts monitor 2026-04-29 17:45:22 -04:00
Affaan Mustafa
2c56c9c69f test: relax windows install apply timeout 2026-04-29 17:42:19 -04:00
Affaan Mustafa
d9d52d8b77 test: cover install executor planning 2026-04-29 17:32:37 -04:00
Affaan Mustafa
2eaafc38f6 test(ecc2): normalize release workflow newlines 2026-04-29 17:31:01 -04:00
Affaan Mustafa
c7c7d37f29 Merge remote-tracking branch 'origin/main' into feat/ecc2-rc1-preview-surface 2026-04-28 22:15:34 -04:00
Affaan Mustafa
b6b5b6d08e test: cover CI catalog validator 2026-04-28 22:14:19 -04:00
Affaan Mustafa
f6acf6e19f Merge pull request #1606 from affaan-m/fix/1598-observer-sigusr1-wait
fix: retry observer wait after SIGUSR1
2026-04-28 22:12:04 -04:00
Affaan Mustafa
46aa301f1d Merge remote-tracking branch 'origin/main' into feat/ecc2-rc1-preview-surface
# Conflicts:
#	docs/fixes/HOOK-FIX-20260421-ADDENDUM.md
2026-04-28 22:11:54 -04:00
Affaan Mustafa
fd95cf6b29 fix: retry observer wait after signal 2026-04-28 22:11:47 -04:00
Affaan Mustafa
83d6bb230d Merge pull request #1605 from affaan-m/fix/1587-codex-skills-validation
fix: normalize codex skill metadata
2026-04-28 22:11:29 -04:00
Affaan Mustafa
6c8a6bd7c0 docs: remove unicode markers from hook addendum 2026-04-28 22:11:19 -04:00
Affaan Mustafa
d89f8d895d fix: normalize codex skill metadata 2026-04-28 22:10:17 -04:00
Affaan Mustafa
0a87323eda feat(ecc2): finalize rc1 release surface 2026-04-28 22:10:04 -04:00
Affaan Mustafa
5595c074fe Merge pull request #1555 from affaan-m/fix/install-uninstall-readme-clarity
docs: clarify install and uninstall paths
2026-04-28 22:10:03 -04:00
Affaan Mustafa
530088c77c docs: remove unicode safety violations from hook addendum 2026-04-23 02:14:28 -04:00
Affaan Mustafa
177b8f31da docs: clarify install and uninstall paths 2026-04-23 02:11:29 -04:00
Affaan Mustafa
4e66b2882d docs: fix plugin quick start for continuous learning v2 (#1546) 2026-04-21 18:41:36 -04:00
suusuu0927
e63241c699 fix(observe): skip Windows AppInstallerPythonRedirector.exe in resolve_python_cmd (#1511)
On Windows 10/11 without Python installed from the Microsoft Store, the
"App Execution Alias" stubs at %LOCALAPPDATA%\Microsoft\WindowsApps\python.exe
and python3.exe are symlinks to AppInstallerPythonRedirector.exe. These
stubs neither launch Python nor honor `-c`; calls print a bare "Python "
line and exit, silently breaking every JSON-parsing step in observe.sh.

Net effect: observations.jsonl is never written, CLV2 appears installed
correctly, and the only residual artifact is `.last-purge`.

This commit:
  1. Adds `_is_windows_app_installer_stub` helper that detects the stub
     via `command -v` output and optional `readlink -f` resolution.
  2. Teaches `resolve_python_cmd` to skip stub candidates and fall
     through to the next real interpreter (typically C:\...\Python3xx\python.exe).
  3. Exports the stub-aware CLV2_PYTHON_CMD before sourcing
     detect-project.sh, which already honors an already-set value,
     so the shared helper does not re-resolve and re-select the stub.

POSIX-compatible. No behavior change on macOS / Linux / WSL where no
such stub exists.

Refs: observations.jsonl empty on Windows Claude Desktop users.
2026-04-21 18:39:06 -04:00
Zhao-Ming Zhong
81bde5c3cd fix(continuous-learning-v2): accept claude-desktop as valid entrypoint (#1522) 2026-04-21 18:37:23 -04:00
livlign
602894efdd docs: fix bottom overflow in hero PNG, tighten stats labels (#1535)
The merged hero was being clipped at the bottom by the Puppeteer capture
because the HTML body used flex-centering with 24px padding, shifting the
stage below the viewport top.

- Captures now flush to (0,0) via a min-width 1300px media-query wrapper
  so the in-browser preview keeps its padding but the capture viewport
  does not.
- Shortens bottom-row labels so the stats row no longer overlaps the foot
  line at 1200px:
  Catalog, Harnesses, Rust plane, MIT  /  npm: ecc-universal · AgentShield

No other content changes.

Co-authored-by: livlign <livlign@users.noreply.github.com>
2026-04-21 18:36:59 -04:00
suusuu0927
df9a478ea1 fix(hooks): avoid Claude Code v2.1.116 argv-dup bug in settings.local.json (#1524)
* fix: resolve Claude Code Bash hook "cannot execute binary file" on Windows

Root cause in ~/.claude/settings.local.json (user-global):
1. UTF-8 BOM + CRLF line endings left by patch_settings_cl_v2_simple.ps1
2. Double-wrapped command "\"bash.exe\" \"wrapper.sh\"" broke Windows
   argument splitting on the space in "Program Files", making bash.exe
   try to execute itself as a script.

Fix:
- Rewrite settings.local.json as UTF-8 (no BOM), LF, with the hook command
  pointing directly at observe-wrapper.sh and passing "pre"/"post" as a
  positional arg so HOOK_PHASE is populated correctly in observe.sh.

Docs:
- docs/fixes/HOOK-FIX-20260421.md — full root-cause analysis.
- docs/fixes/apply-hook-fix.sh — idempotent applier script.

* docs: addendum for HOOK-FIX-20260421 (v2.1.116 argv duplication detail)

- Documents Claude Code v2.1.116 argv duplication bug as the underlying
  cause of the bash.exe:bash.exe:cannot execute binary file error
- Records night-session fix variant using explicit `bash <path>` prefix
  (matches hooks.json observer pattern, avoids EFTYPE on Node spawn)
- Keeps morning commit 527c18b intact; both variants are now documented

---------

Co-authored-by: suusuu0927 <sugi.go.go.gm@gmail.com>
2026-04-21 18:35:33 -04:00
Affaan Mustafa
92e0c7e9ff fix: install native Cursor hook and MCP config (#1543)
* fix: install native cursor hook and MCP config

* fix: avoid false healthy stdio mcp probes
2026-04-21 18:35:21 -04:00
Affaan Mustafa
8c422a76f4 docs: separate plugin install from full manual install (#1544) 2026-04-21 18:28:52 -04:00
Affaan Mustafa
8ae1499122 Merge pull request #1540 from suusuu0927/claude/install-hook-wrapper-argv-dup-fix-20260422
fix(hooks): rewrite install_hook_wrapper.ps1 to avoid argv-dup bug
2026-04-21 18:19:16 -04:00
Affaan Mustafa
c42818f103 Merge pull request #1542 from suusuu0927/claude/patch-settings-simple-fix-20260422
fix(hooks): rewrite patch_settings_cl_v2_simple.ps1 to avoid argv-dup bug
2026-04-21 18:18:47 -04:00
Affaan Mustafa
601c626b03 Merge pull request #1495 from ratorin/fix/session-end-transcript-path-isolation
fix(hooks): isolate session-end.js filename using transcript_path UUID (#1494)
2026-04-21 18:14:23 -04:00
Affaan Mustafa
14f8f66833 Merge pull request #1490 from gaurav0107/fix/1459-remove-agents-manifest-field
fix: remove unsupported `agents` field from plugin.json
2026-04-21 18:14:12 -04:00
Affaan Mustafa
32e3a31c3e Merge pull request #1539 from suusuu0927/claude/detect-project-locale-fix-20260421
fix: make detect-project.sh locale-independent and handle Windows bac…
2026-04-21 18:13:52 -04:00
Vishnu Pradeep
b27551897d fix(hooks): wrap SessionStart summary with stale-replay guard (#1536)
The SessionStart hook injects the most recent *-session.tmp as
additionalContext labelled only with 'Previous session summary:'.
After a /compact boundary, the model frequently re-executes stale
slash-skill invocations it finds inside that summary, re-running
ARGUMENTS-bearing skills (e.g. /fw-task-new, /fw-raise-pr) with the
last ARGUMENTS they saw.

Observed on claude-opus-4-7 with ECC v1.9.0 on a firmware project:
after compaction resume, the model spontaneously re-enters the prior
skill with stale ARGUMENTS, duplicating GitHub issues, Notion tasks,
and branches for work that is already merged.

ECC cannot fix Claude Code's skill-state replay across compactions,
but it can stop amplifying it. Wrap the injected summary in an
explicit HISTORICAL REFERENCE ONLY preamble with a STALE-BY-DEFAULT
contract and delimit the block with BEGIN/END markers so the model
treats everything inside as frozen reference material.

Tests: update the two hooks.test.js cases that asserted on the old
'Previous session summary' literal to assert on the new guard
preamble, the STALE-BY-DEFAULT contract, and both delimiters. 219/219
tests pass locally.

Tracked at: #1534
2026-04-21 18:02:19 -04:00
Junming
20041294d9 fix(gateguard): rewrite routineBashMsg to use fact-presentation pattern (#1531)
* fix(gateguard): rewrite routineBashMsg to use fact-presentation pattern

The imperative 'Quote user's instruction verbatim. Then retry.' phrasing
triggers Claude Code's runtime anti-prompt-injection filter, deadlocking
the first Bash call of every session. The sibling gates (edit, write,
destructive) use multi-point fact-list framing that the runtime accepts.

Align routineBashMsg with that pattern to restore the gate's intended
behavior without changing run(), state schema, or any public API.

Closes #1530

* docs(gateguard): sync SKILL.md routine gate spec with new message format

CodeRabbit flagged that skills/gateguard/SKILL.md still described the
pre-fix imperative message. Update the Routine Bash Gate section to
match the numbered fact-list format used by the new routineBashMsg().
2026-04-21 18:02:16 -04:00
Michael
163cdee60f fix(scripts): resolve claude.cmd on Windows by enabling shell for spawn (#1471)
Fixes #1469.

On Windows the `claude` binary installed via `npm i -g @anthropic-ai/claude-code`
is `claude.cmd`, and Node's spawn() cannot resolve .cmd wrappers via PATH
without shell: true. The call failed with `spawn claude ENOENT` and claw.js
returned an error string to the caller.

Mirrors the fix pattern applied in PR #1456 for the MCP health-check hook.
'claude' is a hardcoded literal (not user input), so enabling shell on Windows
only is safe.
2026-04-21 18:02:13 -04:00
suusuu0927
b6bce947f1 fix(hooks): add Windows PowerShell 5.1 compatibility to install_hook_wrapper.ps1
`ConvertFrom-Json -AsHashtable` is PowerShell 7+ only, and the Windows 11
reference machine used to validate this PR ships with Windows PowerShell
5.1 only (no `pwsh` on PATH). Without this follow-up, running the
installer on stock Windows fails at the parse step and leaves the
installation half-applied.

- Fall back to a manual `PSCustomObject` -> `Hashtable` conversion when
  `-AsHashtable` raises, so the script parses the existing
  settings.local.json on both PS 5.1 and PS 7+.
- Normalize both hook buckets (`PreToolUse`, `PostToolUse`) and their
  inner `hooks` arrays as `System.Collections.ArrayList` before
  serialization. PS 5.1 `ConvertTo-Json` otherwise collapses
  single-element arrays into bare objects, which breaks the canonical
  PR #1524 shape.
- Create the `skills/continuous-learning/hooks` destination directory
  when it does not exist yet, and emit a clearer error if
  settings.local.json is missing entirely.
- Update `INSTALL-HOOK-WRAPPER-FIX-20260422.md` to document the PS 5.1
  compatibility guarantee and to cross-link PR #1542 (companion simple
  patcher).

Verified on Windows 11 / Windows PowerShell 5.1.26100.8115 by running
`powershell -NoProfile -ExecutionPolicy Bypass -File
docs/fixes/install_hook_wrapper.ps1` against a sandbox `$env:USERPROFILE`
and against the real settings.local.json. Both produce the canonical
PR #1524 shape with LF-only output.
2026-04-22 06:55:29 +09:00
suusuu0927
1ebf45c533 fix(hooks): rewrite patch_settings_cl_v2_simple.ps1 to avoid argv-dup bug
- Use PATH-resolved `bash` as first token instead of quoted `.exe` path
  so Claude Code v2.1.116 argv duplication does not feed a binary to
  bash as its $0 (repro: exit 126 "cannot execute binary file").
- Point the command at `observe-wrapper.sh` and pass distinct `pre` /
  `post` positional arguments so PreToolUse and PostToolUse are
  registered as separate entries.
- Normalize the wrapper path to forward slashes before embedding in the
  hook command to avoid MSYS backslash surprises.
- Write UTF-8 (no BOM) with CRLF normalized to LF so downstream JSON
  parsers never see mixed line endings.
- Preserve existing hooks (legacy `observe.sh`, third-party entries)
  by appending only when the canonical command string is not already
  registered. Re-runs are idempotent ([SKIP] both phases).
- Keep the script compatible with Windows PowerShell 5.1: fall back to
  a manual PSCustomObject → Hashtable conversion when
  `ConvertFrom-Json -AsHashtable` is unavailable, and materialize hook
  arrays as `System.Collections.ArrayList` so single-element arrays
  survive PS 5.1 `ConvertTo-Json` serialization.

Companion to PR #1524 (settings.local.json shape fix) and PR #1540
(install_hook_wrapper.ps1 argv-dup fix).
2026-04-22 06:41:12 +09:00
suusuu0927
c32f0fffb1 fix(hooks): rewrite install_hook_wrapper.ps1 to avoid argv-dup bug
Under Claude Code v2.1.116 the first argv token of a hook command is
duplicated. When the token is a quoted Windows .exe path, bash.exe is
re-invoked with itself as script (exit 126). PR #1524 fixed the shape
of settings.local.json; this script keeps the installer consistent so
re-running it does not regenerate the broken form.

Changes:
- First token is now PATH-resolved `bash` instead of the quoted bash.exe
- Wrapper path is normalized to forward slashes for MSYS safety
- PreToolUse and PostToolUse get distinct pre/post positional arguments
- JSON output is written with LF endings (no mixed CRLF/LF)

Companion doc: docs/fixes/INSTALL-HOOK-WRAPPER-FIX-20260422.md
2026-04-22 06:19:15 +09:00
Affaan Mustafa
d87304573c Merge pull request #1532 from livlign/docs/add-hero-image 2026-04-21 14:49:55 -04:00
livlign
86511491a6 docs: remove stars/forks stats from hero, shrink file size
Re-renders hero.png without the baked-in stars (163k) and forks (25k) numbers
that were drifting from the README's own dynamic badges. Bottom stats now show
repo-derived catalog counts that don't rot: 310 total items (183 skills + 48
agents + 79 commands), 7 harnesses, ECC 2.0α, MIT.

Also shrinks the file from 534 KB to ~131 KB via tighter pngquant settings.

Addresses review comments from cubic and greptile (stat drift) and CodeRabbit
(file size).
2026-04-22 01:47:47 +07:00
livlign
7b53efc709 docs: add hero image to README 2026-04-22 00:57:49 +07:00
suusuu0927
797692d70f fix: make detect-project.sh locale-independent and handle Windows backslash paths
Two bugs in skills/continuous-learning-v2/scripts/detect-project.sh that
silently split the same project into multiple project_id records:

1. Locale-dependent SHA-256 input (HIGH)
   The project_id hash was computed with
     printf '%s' "$hash_input" | python -c 'sys.stdin.buffer.read()'
   which ships shell-locale-encoded bytes to Python. On a system with a
   non-UTF-8 LC_ALL (e.g. ja_JP.CP932 / CP1252) the same project root
   produced a different 12-char hash than the UTF-8 locale would produce,
   so observations/instincts were silently written under a separate
   project directory. Fixed by passing the value via an env var and
   encoding as UTF-8 inside Python, making the hash locale-independent.

2. basename cannot split Windows backslash paths (MEDIUM)
   basename "C:\Users\...\ECC作成" returns the whole string on POSIX
   bash, so project_name was garbled whenever CLAUDE_PROJECT_DIR was
   passed as a native Windows path. Normalize backslashes to forward
   slashes before calling basename.

Both the primary project_id hash and the legacy-compat fallback hash
are updated to use the env-var / UTF-8 approach.

Verified: id is stable across en_US.UTF-8, ja_JP.UTF-8, ja_JP.CP932, C,
and POSIX locales; Windows-path input yields project_name=ECC作成;
ASCII-only paths regress-free.
2026-04-21 18:46:39 +09:00
Affaan Mustafa
8bdf88e5ad Merge pull request #1501 from affaan-m/feat/ecc2-board-observability-integration
feat: add ECC2 board observability view
2026-04-19 14:02:52 -07:00
Taro Kawakami
0c3fc7074e review: broaden CLAUDE_TRANSCRIPT_PATH fallback to cover missing/empty JSON fields
Previously the env fallback ran only when JSON.parse threw. If stdin was valid
JSON but omitted transcript_path or provided a non-string/empty value, the
script dropped to the getSessionIdShort() fallback path, re-introducing the
collision this PR targets.

Validate the parsed transcript_path and apply the env-var fallback for any
unusable value, not just malformed JSON. Matches coderabbit's outside-diff
suggestion and keeps both input-source paths equivalent.

Refs #1494
2026-04-19 14:35:21 +09:00
Taro Kawakami
01d816781e review: apply sanitizeSessionId to UUID shortId, fix test comment
- Route the transcript-derived shortId through sanitizeSessionId so the
  fallback and transcript branches remain byte-for-byte equivalent for any
  non-UUID session IDs that still land in CLAUDE_SESSION_ID (greptile P1).
- Clarify the inline comment in the first regression test: clearing
  CLAUDE_SESSION_ID exercises the transcript_path branch, not the
  getSessionIdShort() fallback (coderabbit P2).

Refs #1494
2026-04-19 14:30:00 +09:00
Taro Kawakami
93cd5f4cff review: address P1/P2 bot feedback on shortId derivation
- Use last-8 chars of transcript UUID instead of first-8, matching
  getSessionIdShort()'s .slice(-8) convention. Same session now produces the
  same filename whether shortId comes from CLAUDE_SESSION_ID or transcript_path,
  so existing .tmp files are not orphaned on upgrade.
- Normalize extracted hex prefix to lowercase to avoid case-driven filename
  divergence from sanitizeSessionId()'s lowercase output.
- Explicitly clear CLAUDE_SESSION_ID in the first regression test so the env
  leak from parent test runs cannot hide the fallback path.
- Add regression tests for the lowercase-normalization path and for the case
  where CLAUDE_SESSION_ID and transcript_path refer to the same UUID (backward
  compat guarantee).

Refs #1494
2026-04-19 14:19:29 +09:00
Taro Kawakami
a35b2d125d fix(hooks): isolate session-end.js filename using transcript_path UUID
When session-end.js runs and CLAUDE_SESSION_ID is unset, getSessionIdShort()
falls back to the project/worktree name. If any other Stop-hook in the chain
spawns a claude subprocess (e.g. an AI-summary generator using 'claude -p'),
the subprocess also fires the full Stop chain and writes to the same project-
name-based filename, clobbering the parent's valid session summary with a
summary of the summarization prompt itself.

Fix: when stdin JSON (or CLAUDE_TRANSCRIPT_PATH) provides a transcript_path,
extract the first 8 hex chars of the session UUID from the filename and use
that as shortId. Falls back to the original getSessionIdShort() when no
transcript_path is available, so existing behavior is preserved for all
callers that do not set it.

Adds a regression test in tests/hooks/hooks.test.js.

Refs #1494
2026-04-19 11:37:32 +09:00
Gaurav Dubey
53a599fc03 docs: update README to reflect agents field removal from plugin manifest
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-18 23:29:47 +05:30
Gaurav Dubey
c19fde229a fix: remove agents field from plugin.json manifest (#1459)
The Claude Code plugin validator rejects the "agents" field entirely.
Remove it from the manifest, schema, and tests. Update schema notes
to document this as a known constraint alongside the hooks field.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-18 23:29:47 +05:30
Affaan Mustafa
7992f8fcb8 feat: integrate ecc2 board observability prototype 2026-04-18 01:37:44 -04:00
Affaan Mustafa
1a50145d39 Merge pull request #1462 from affaan-m/fix/remove-legacy-ecc-install-refs
fix: restore string hook commands for Claude Code schema
2026-04-15 20:07:04 -07:00
Affaan Mustafa
eb900ddd81 test: align hook install expectations with Claude schema 2026-04-15 19:33:34 -07:00
Affaan Mustafa
ccecb0b9f4 fix: restore string hook commands for Claude Code schema 2026-04-15 17:25:33 -07:00
Affaan Mustafa
9fb88c6700 Merge pull request #1449 from affaan-m/fix/bash-hook-dispatcher-forkstorm-clean
fix: consolidate bash hooks without fork storms
2026-04-15 17:23:09 -07:00
Affaan Mustafa
6b7bd7156c fix: relax pnpm strict build checks in CI 2026-04-15 16:44:58 -07:00
Affaan Mustafa
1fabf4d2cf fix: consolidate bash hooks without fork storms 2026-04-14 21:23:57 -07:00
Affaan Mustafa
7eb7c598fb Merge pull request #1448 from affaan-m/fix/manual-release-dispatch
fix: allow manual release workflow dispatch
2026-04-14 21:20:10 -07:00
Affaan Mustafa
8b5c0c1b07 fix: allow manual release workflow dispatch 2026-04-14 21:02:23 -07:00
Affaan Mustafa
c1e7a272cc Merge pull request #1446 from affaan-m/fix/release-publish-and-migration-docs
fix: publish npm releases and clarify install identifiers
2026-04-14 20:58:20 -07:00
Affaan Mustafa
5427c27930 Merge pull request #1445 from affaan-m/fix/plugin-installed-hook-root-resolution
fix: resolve plugin-installed hook root on marketplace installs
2026-04-14 20:43:40 -07:00
Affaan Mustafa
b5c4d2beb9 fix: wire npm auth into release publish 2026-04-14 20:43:22 -07:00
Affaan Mustafa
34380326c8 fix: publish npm releases and clarify install identifiers 2026-04-14 20:42:28 -07:00
Affaan Mustafa
9227d3cc30 docs: add ecc recovery guidance for wiped setups 2026-04-14 20:41:18 -07:00
Affaan Mustafa
8da668f1ac Merge pull request #1439 from affaan-m/fix/urgent-install-and-name
fix: unblock urgent install and gateguard regressions
2026-04-14 20:36:06 -07:00
Affaan Mustafa
1b7c5789fc fix: bootstrap plugin-installed hook commands safely 2026-04-14 20:24:21 -07:00
Affaan Mustafa
cdeb837838 Merge origin/main into fix/urgent-install-and-name 2026-04-14 20:23:54 -07:00
Affaan Mustafa
cca163c776 Merge pull request #1440 from affaan-m/fix/dashboard-terminal-safety
fix(dashboard): harden terminal launch and maximize behavior
2026-04-14 20:21:51 -07:00
Affaan Mustafa
c54b44edf3 test: fix harness audit env fallback 2026-04-14 20:03:57 -07:00
Affaan Mustafa
2691cfc0f1 fix: restore dashboard branch ci baseline 2026-04-14 19:54:28 -07:00
Affaan Mustafa
b2c4b7f51c Merge remote-tracking branch 'origin/main' into fix/urgent-install-and-name 2026-04-14 19:50:35 -07:00
Affaan Mustafa
c924290b5b fix: restore dashboard branch CI baseline 2026-04-14 19:46:00 -07:00
Affaan Mustafa
e46deb93c8 fix: harden dashboard terminal launch helpers 2026-04-14 19:44:32 -07:00
Affaan Mustafa
8776c4f8f3 fix: harden urgent install and gateguard patch 2026-04-14 19:44:08 -07:00
Affaan Mustafa
e5225db006 docs: sync catalog counts on urgent fix branch 2026-04-14 19:31:23 -07:00
Affaan Mustafa
48a30b53c8 Merge pull request #1402 from affaan-m/docs/community-skill-highlights
docs: add community skill ecosystem notes
2026-04-14 19:28:57 -07:00
Affaan Mustafa
3be24a5704 fix: restore urgent PR CI health 2026-04-14 19:26:24 -07:00
Affaan Mustafa
76b6e22b4d fix: unblock urgent install and gateguard regressions 2026-04-14 19:23:07 -07:00
Affaan Mustafa
ecc5e0e2d6 Merge pull request #1432 from S1lverline/fix/harness-audit-marketplaces
fix(harness-audit): detect ECC plugin under marketplaces/ subdirectory
2026-04-14 19:13:24 -07:00
S1lverline
aa96279ecc fix(harness-audit): detect ECC plugin under marketplaces/ subdirectory
`findPluginInstall()` in `scripts/harness-audit.js` scans two candidate
roots:

  {rootDir}/.claude/plugins/
  {HOME}/.claude/plugins/

Current Claude Code marketplace installs live one directory deeper:

  {HOME}/.claude/plugins/marketplaces/{ecc,everything-claude-code}/...

As a result, running `node scripts/harness-audit.js repo` on any
consumer project reports `consumer-plugin-install: false` even when ECC
is fully installed via marketplace, costing 4 points from Tool Coverage.

Add the `marketplaces/` intermediate directory to `candidateRoots` so
both legacy and current install layouts are recognized. The change is
purely additive: existing candidate paths still resolve, and the new
ones only match when the marketplace layout is present.

Reproduction:
  1. Install ECC via Claude Code plugin marketplace
  2. cd into any consumer project
  3. node ~/.claude/plugins/marketplaces/everything-claude-code/scripts/harness-audit.js repo
  4. Observe consumer-plugin-install=false despite a working install
2026-04-14 23:37:10 +09:00
Affaan Mustafa
e0ddb331f6 Merge pull request #1367 from ozoz5/feat/gateguard
feat(hooks,skills): add gateguard fact-forcing pre-action gate
2026-04-13 01:05:20 -07:00
Affaan Mustafa
85e331e49a Merge pull request #1369 from affaan-m/dependabot/github_actions/pnpm/action-setup-6.0.0
build(deps): bump pnpm/action-setup from 5.0.0 to 6.0.0
2026-04-13 01:05:16 -07:00
Affaan Mustafa
5eedc8adb4 Merge pull request #1377 from Anish29801/feat/dashboard-gui
Feat/dashboard gui
2026-04-13 01:04:14 -07:00
Affaan Mustafa
c64cc69eb2 Merge pull request #1363 from gnpthbalaji/feat/accessibility
feat(agent + skill): a11y-architect agent and accessibility skill
2026-04-13 00:59:57 -07:00
Affaan Mustafa
6c67566767 fix: keep gateguard session state alive 2026-04-13 00:58:50 -07:00
Affaan Mustafa
deb3b1dc14 fix: make dashboard GUI build surfaces opt-in safe 2026-04-13 00:56:56 -07:00
Affaan Mustafa
2e44beabc1 test: isolate gateguard state dir cleanup 2026-04-13 00:53:57 -07:00
Affaan Mustafa
e2b5353fec Merge pull request #1398 from affaan-m/fix/opencode-plugin-version-sync
fix: sync OpenCode hook banner version
2026-04-13 00:52:40 -07:00
Affaan Mustafa
9ae51bc3c1 Merge pull request #1393 from affaan-m/fix/cursor-rule-mdc-install
fix: install Cursor rules as .mdc files
2026-04-13 00:52:03 -07:00
Affaan Mustafa
7f7e2c2c52 fix: remove duplicate tools frontmatter key 2026-04-13 00:51:40 -07:00
Affaan Mustafa
7a33b2b3c9 Merge pull request #1395 from affaan-m/fix/npm-publish-surface
fix: narrow npm publish surface to the module graph
2026-04-13 00:46:15 -07:00
Affaan Mustafa
68ee51f1e3 docs: add community skill ecosystem notes 2026-04-13 00:45:51 -07:00
seto
dd2962ee92 fix: 5 bugs + 2 tests from 3-agent deep bughunt
Bugs fixed:
- B1: JS gate messages still said "cat one real record" -> redacted/synthetic
- B2: Destructive bash key used 200-char truncation (collision bypass) -> SHA256 hash
- B3: sanitizePath only stripped \n\r -> now strips null bytes, bidi overrides, all control chars
- B4: Tool name matching was case-sensitive (latent bypass) -> lookup map normalization
- B5: SKILL.md Gate Types missing MultiEdit -> added with explanation

Tests added:
- T1: MultiEdit gate denies first unchecked file (CRITICAL - was untested)
- T2: MultiEdit allows after all files gated

11/11 tests pass.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 16:32:46 +09:00
Affaan Mustafa
5c4570baa5 Merge pull request #1370 from affaan-m/dependabot/github_actions/softprops/action-gh-release-3.0.0
build(deps): bump softprops/action-gh-release from 2.6.1 to 3.0.0
2026-04-13 00:30:59 -07:00
Affaan Mustafa
1a950e4f83 fix: allow pnpm cache probe under node 18 2026-04-13 00:21:42 -07:00
seto
8cd6378c81 fix: cubic-dev-ai round 3 — SKILL.md consistency
P2: Description now says "Edit/Write/Bash (including MultiEdit)"
    instead of listing MultiEdit as a separate top-level gate

P2: Write Gate and Anti-Patterns now use same "redacted or synthetic
    values" wording as Edit Gate (was still "cat one real record")

All 3 gate doc sections now consistent. 9/9 tests pass.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 16:19:01 +09:00
Affaan Mustafa
ef7613c526 fix: use corepack pnpm on node 18 2026-04-13 00:17:17 -07:00
Affaan Mustafa
a0a1eda8fc fix: sync opencode hook banner version 2026-04-13 00:15:55 -07:00
Affaan Mustafa
bd207aabe1 fix: use pnpm 9 for node 18 workflow jobs 2026-04-13 00:13:54 -07:00
seto
4dbed5ff5b fix: cubic-dev-ai round 2 — 3 issues across SKILL.md + pruning
P1: Gate message asked for raw production data records — changed to
    "redacted or synthetic values" to prevent sensitive data exfiltration

P2: SKILL.md description now includes MultiEdit (was missing after
    MultiEdit gate was added in previous commit)

P2: Session key pruning now caps __prefixed keys at 50 to prevent
    unbounded growth even in theoretical edge cases

9/9 tests pass.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 16:11:33 +09:00
Affaan Mustafa
6eadf786f5 fix: pin pnpm version for setup action v6 2026-04-13 00:10:39 -07:00
Affaan Mustafa
9e607ebb30 fix: prefer cursor native hooks during install 2026-04-13 00:07:15 -07:00
Affaan Mustafa
30f6ae4253 test: align cursor manifest expectations 2026-04-12 23:58:59 -07:00
Affaan Mustafa
c826305060 fix: keep runtime schemas in npm package 2026-04-12 23:56:58 -07:00
Affaan Mustafa
db8247d701 chore: update release action version comments 2026-04-12 23:54:26 -07:00
Affaan Mustafa
adb46a95a6 chore: update pnpm action version comments 2026-04-12 23:53:57 -07:00
Affaan Mustafa
48e5a1fa75 Merge pull request #1371 from affaan-m/dependabot/github_actions/actions/github-script-9.0.0
build(deps): bump actions/github-script from 8.0.0 to 9.0.0
2026-04-12 23:53:17 -07:00
Affaan Mustafa
2fb041c6de Merge pull request #1368 from affaan-m/dependabot/github_actions/actions/upload-artifact-7.0.1
build(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1
2026-04-12 23:53:01 -07:00
Affaan Mustafa
7374ef6a73 fix: normalize cursor rule installs 2026-04-12 23:51:58 -07:00
Affaan Mustafa
bd2aec48ed fix: narrow npm publish surface to the module graph 2026-04-12 23:48:53 -07:00
Affaan Mustafa
6dc6b9266a Merge pull request #1394 from affaan-m/fix/grader-after-step-classified
fix(grader): handle forward after_step references
2026-04-12 23:47:25 -07:00
seto
5540282dcb fix: remove unnecessary disk I/O + fix test cleanup
- isChecked() no longer calls saveState() — read-only operation
  should not write to disk (was causing 3x writes per tool call)
- Test cleanup uses fs.rmSync(recursive) instead of fs.rmdirSync
  which failed with ENOTEMPTY when .tmp files remained

9/9 tests pass.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 15:41:58 +09:00
seto
67256194a0 fix: P1 test state-file PID mismatch + P2 session key eviction
P1 (cubic-dev-ai): Test process PID differs from spawned hook PID,
so test was seeding/clearing wrong state file. Fix: pass fixed
CLAUDE_SESSION_ID='gateguard-test-session' to spawned hooks.

P2 (cubic-dev-ai): Pruning checked array could evict __bash_session__
and other session keys, causing gates to re-fire mid-session. Fix:
preserve __prefixed keys during pruning, only evict file-path entries.

9/9 tests pass.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 15:40:13 +09:00
Affaan Mustafa
5b0e123c10 Merge pull request #1392 from affaan-m/fix/hook-failed-to-load
fix: document supported Claude hook install path
2026-04-12 23:39:33 -07:00
Affaan Mustafa
bb96fdc9dc test: wait for http mcp fixtures to accept connections 2026-04-12 23:38:46 -07:00
seto
6ed1c643e7 fix: MultiEdit gate bypass — handle edits[].file_path correctly
P1 bug reported by greptile-apps: MultiEdit uses toolInput.edits[].file_path,
not toolInput.file_path. The gate was silently allowing all MultiEdit calls.

Fix: separate MultiEdit into its own branch that iterates edits array
and gates on the first unchecked file_path.

9/9 tests pass.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 15:37:39 +09:00
Affaan Mustafa
0fcb43ea90 fix(grader): handle forward after_step references 2026-04-12 23:36:16 -07:00
Affaan Mustafa
133e881ce0 fix: install Cursor rules as mdc files 2026-04-12 23:32:39 -07:00
seto
45823fcede fix: session-scoped state to prevent cross-session race
Addresses reviewer feedback from @affaan-m:

1. State keyed by CLAUDE_SESSION_ID / ECC_SESSION_ID
   - Falls back to pid-based isolation when env vars absent
   - State file: state-{sessionId}.json (was .session_state.json)

2. Atomic write+rename semantics
   - Write to temp file, then fs.renameSync to final path
   - Prevents partial reads from concurrent hooks

3. Bounded checked list (MAX_CHECKED_ENTRIES = 500)
   - Prunes to last 500 entries when cap exceeded
   - Stale session files auto-deleted after 1 hour

9/9 tests pass.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 15:30:34 +09:00
Affaan Mustafa
18c90a7a17 fix: document supported claude hook install path 2026-04-12 23:29:45 -07:00
Affaan Mustafa
9da8e5f6ac Merge pull request #1391 from affaan-m/fix/workflow-run-fork-security
fix: block unsafe privileged workflow checkouts
2026-04-12 23:23:56 -07:00
Affaan Mustafa
3792b69a38 fix: block unsafe privileged workflow checkouts 2026-04-12 23:23:01 -07:00
Affaan Mustafa
a2ad68e7e6 Merge pull request #1390 from affaan-m/fix/slash-command-plugin-root
fix: use shared slash-command plugin root resolver
2026-04-12 23:16:14 -07:00
Affaan Mustafa
1b17c5c9d8 test: match published claude plugin name 2026-04-12 23:14:38 -07:00
Affaan Mustafa
94e8f29d19 fix: use shared slash-command plugin root resolver 2026-04-12 23:10:29 -07:00
Affaan Mustafa
de8a7dfef8 Merge pull request #1383 from YASoftwareDev/fix/plugin-name-ecc-to-everything-claude-code
fix: rename plugin id from ecc to everything-claude-code in manifests
2026-04-12 23:03:54 -07:00
Affaan Mustafa
2b09308224 Merge pull request #1384 from KeWang0622/fix/lint-md028-eqeqeq
fix: resolve markdownlint MD028 + ESLint eqeqeq lint failures
2026-04-12 23:03:19 -07:00
Affaan Mustafa
5f55484fa9 Merge pull request #1385 from KeWang0622/fix/block-no-verify-hook
fix: route block-no-verify hook through run-with-flags.js
2026-04-12 23:02:19 -07:00
Affaan Mustafa
e29da39eaf Merge pull request #1389 from affaan-m/fix/hook-plugin-root-resolution
fix: stop duplicating managed Claude hooks into settings
2026-04-12 23:00:04 -07:00
Affaan Mustafa
f4c7aac5b8 fix: remove unused hook install test constant 2026-04-12 22:51:03 -07:00
Affaan Mustafa
b749f5d772 fix: clean up hook install docs and tests 2026-04-12 22:47:25 -07:00
Affaan Mustafa
2ece2cfc90 fix: stop injecting managed hooks into claude settings 2026-04-12 22:39:48 -07:00
Affaan Mustafa
28edd197c2 fix: harden release surface version and packaging sync (#1388)
* fix: keep ecc release surfaces version-synced

* fix: keep lockfile release version in sync

* fix: remove release version drift from locks and tests

* fix: keep root release metadata version-synced

* fix: keep codex marketplace metadata version-synced

* fix: gate release workflows on full metadata sync

* fix: ship all versioned release metadata

* fix: harden manual release path

* fix: keep localized release docs version-synced

* fix: sync install architecture version examples

* test: cover shipped plugin metadata in npm pack

* fix: verify final npm payload in release script

* fix: ship opencode lockfile in npm package

* docs: sync localized release highlights

* fix: stabilize windows ci portability

* fix: tighten release script version sync

* fix: prefer repo-relative hook file paths

* fix: make npm pack test shell-safe on windows
2026-04-12 22:33:32 -07:00
Affaan Mustafa
fc5921a521 fix: detach ecc2 background session runners (#1387)
* fix: detach ecc2 background session runners

* fix: stabilize windows ci portability

* fix: persist detached runner startup stderr

* fix: prefer repo-relative hook file paths

* fix: make npm pack test shell-safe on windows
2026-04-12 22:29:05 -07:00
Ke Wang
809e0fa0a9 fix: address PR review comments on block-no-verify hook
- Add `minimal` profile so the security hook runs in all profiles
- Scope -n/--no-verify flag check to the detected subcommand region,
  preventing false positives on chained commands (e.g. `git log -n 10`)
- Guard stdin listeners with `require.main === module` so require()
  from run-with-flags.js does not register unnecessary listeners
- Verify subcommand token is preceded only by flags/flag-args after
  "git", preventing misclassification of argument values as subcommands
- Add integration tests for block-no-verify hook

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 20:29:01 -05:00
Ke Wang
dae663d856 fix: route block-no-verify hook through run-with-flags.js
Replace inline `npx block-no-verify@1.1.2` with a standalone Node.js
script routed through `run-with-flags.js`, matching every other hook.

Fixes two bugs:
1. npx inherits the project cwd and triggers EBADDEVENGINES in
   pnpm-only projects that set devEngines.packageManager.onFail=error.
2. The hook bypassed run-with-flags.js so ECC_DISABLED_HOOKS had no
   effect — the isHookEnabled() check never ran.

The new script replicates the full block-no-verify@1.1.2 detection
logic (--no-verify, -n shorthand for commit, core.hooksPath override)
with zero external dependencies.

Closes #1378
2026-04-12 19:53:15 -05:00
Ke Wang
6a247d4c43 fix: resolve markdownlint MD028 and ESLint eqeqeq warnings
Fix two lint issues that cause `npm run lint` to exit non-zero:

1. README.md (MD028): Two consecutive blockquotes separated by a bare
   blank line. Markdownlint treats this as one blockquote with an
   illegal blank line inside. Replace the blank line with a `>`
   continuation so both paragraphs stay in the same blockquote.

2. session-activity-tracker.js (eqeqeq): Three instances of `== null`
   replaced with explicit `=== null || === undefined` guards to satisfy
   the repo's `eqeqeq: warn` ESLint rule.

Closes #1366
2026-04-12 16:00:55 -05:00
Wojciech Pędzimąż
92e5b4d415 fix: rename plugin id from ecc to everything-claude-code in manifests
The marketplace is registered externally as `everything-claude-code`,
so the Claude Code CLI looks for a plugin named `everything-claude-code`
within it. Both `.claude-plugin/marketplace.json` and
`.claude-plugin/plugin.json` used the short alias `ecc` for the plugin
`name` field, causing a lookup miss at install/update time:

  Error: Plugin everything-claude-code not found in marketplace everything-claude-code

Change the `name` field in both files to match the external identifier.
2026-04-12 21:45:31 +02:00
seto
9a64e0d271 fix: gate MultiEdit tool alongside Edit/Write
MultiEdit was bypassing the fact-forcing gate because only Edit and
Write were checked. Now MultiEdit triggers the same edit gate (list
importers, public API, data schemas) before allowing file modifications.

Updated both the hook logic and hooks.json matcher pattern.

Addresses coderabbit/greptile/cubic-dev: "MultiEdit bypasses gate"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 18:18:16 +09:00
seto
b6a290d061 fix: allow destructive bash retry after facts presented
Destructive bash gate previously denied every invocation with no
isChecked call, creating an infinite deny loop. Now gates per-command
on first attempt and allows retry after the model presents the required
facts (targets, rollback plan, user instruction).

Addresses greptile P1: "Destructive bash gate permanently blocks"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 18:08:15 +09:00
seto
96139b2dad fix: address P2 review feedback (coderabbitai, cubic-dev-ai)
- GATEGUARD_STATE_DIR env var for test isolation (hook + tests)
- Exit code assertions on all 9 tests (no vacuous passes)
- Non-vacuous allow-path assertions (verify pass-through preserves input)
- Robust newline-injection assertion
- clearState() now reports errors instead of swallowing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 18:04:09 +09:00
seto
8a2d13187c fix: address P1 review feedback from greptile bot
1. Use run-with-flags.js wrapper (supports ECC_HOOK_PROFILE, ECC_DISABLED_HOOKS)
2. Add session timeout (30min inactivity = state reset, fixes "once ever" bug)
3. Add 9 integration tests (deny/allow/timeout/sanitize/disable)

Refactored hook to module.exports.run() pattern for direct require() by
run-with-flags.js (~50-100ms faster per invocation).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 17:42:32 +09:00
Anish
813755b879 Done 2026-04-12 12:56:20 +05:30
Anish
74b91cb3f3 fix: resolve git conflicts in LLM abstraction layer
- Fix gui() function import in __init__.py (use cli.selector)
- Fix prompt builder system message merging logic
- Add default max_tokens for Anthropic API in claude.py
- Fix openai tool_call arguments parsing with json.loads
- Fix test_builder.py PromptConfig import and assertions
2026-04-12 07:10:54 +00:00
Anish
d39a8a049a Small changes 2026-04-12 12:34:45 +05:30
Anish Agrawal
35aa02c645 Update pyproject.toml
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-04-12 12:31:22 +05:30
Anish Agrawal
fd0cde69d8 Update src/llm/__init__.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-04-12 12:31:03 +05:30
Anish Agrawal
0f6d06d779 Update pyproject.toml
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-04-12 12:26:12 +05:30
Anish Agrawal
c277b19ee8 Update tests/test_builder.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-04-12 12:25:56 +05:30
Anish Agrawal
5736b3b684 Update src/llm/prompt/builder.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-04-12 12:25:36 +05:30
Anish Agrawal
6691e7cc9e Update src/llm/providers/openai.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-04-12 12:25:15 +05:30
Anish Agrawal
a7f73576a9 Update src/llm/providers/claude.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-04-12 12:24:49 +05:30
Anish
7fc44c91b8 feat: add dashboard GUI with theme, font customization, and logo
- Add ecc_dashboard.py - Tkinter-based GUI for exploring ECC components
- Implement dark/light theme toggle in Settings tab
- Add font family and size customization
- Display project logo in header and taskbar
- Open in maximized window with native title bar
- Add 'dashboard' script to package.json
- Update README with dashboard documentation

Closes #XXX
2026-04-12 06:52:54 +00:00
Anish
bc42a34e9a Readme Commit 2026-04-12 12:18:14 +05:30
Anish
f53a89ff88 GUI Created, Dark Mode Created, npm script added, styling changed, Decoupled from Claude made more open source. 2026-04-12 12:16:49 +05:30
Anish
626c18f4c7 feat: add dashboard GUI with theme, font customization, and logo
- Add ecc_dashboard.py - a Tkinter-based GUI for exploring ECC components
- Implement dark/light theme toggle in Settings tab
- Add font family and size customization
- Display project logo in header and taskbar
- Open in maximized window with native title bar
- Add 'dashboard' script to package.json for easy launch
2026-04-12 06:35:14 +00:00
GB
2d044b8032 Apply suggestion from @greptile-apps[bot]
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-04-11 22:12:15 -07:00
dependabot[bot]
57de4129da build(deps): bump actions/github-script from 8.0.0 to 9.0.0
Bumps [actions/github-script](https://github.com/actions/github-script) from 8.0.0 to 9.0.0.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](ed597411d8...3a2844b7e9)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-version: 9.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-12 04:52:39 +00:00
dependabot[bot]
5ae63b301f build(deps): bump softprops/action-gh-release from 2.6.1 to 3.0.0
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2.6.1 to 3.0.0.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](153bb8e044...b430933298)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: 3.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-12 04:52:35 +00:00
dependabot[bot]
4b92288a27 build(deps): bump pnpm/action-setup from 5.0.0 to 6.0.0
Bumps [pnpm/action-setup](https://github.com/pnpm/action-setup) from 5.0.0 to 6.0.0.
- [Release notes](https://github.com/pnpm/action-setup/releases)
- [Commits](fc06bc1257...08c4be7e2e)

---
updated-dependencies:
- dependency-name: pnpm/action-setup
  dependency-version: 6.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-12 04:52:33 +00:00
dependabot[bot]
45faeb90a7 build(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 7.0.0 to 7.0.1.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](bbbca2ddaa...043fb46d1a)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-12 04:52:29 +00:00
Balaji Guntur
51abaf0fc0 fix: correct accessibility terminology and code fence in a11y skill and agent
- Fix inverted focus trap terms: Keyboard Traps -> Uncontained Modal Focus with WCAG SC 2.1.2 reference
- Fix Step 1 blocker example: missing keyboard traps -> missing focus containment in modals
- Attach [language] placeholder to opening triple-backtick fence in agent implementation template
2026-04-11 20:30:47 -07:00
seto
5a03922934 feat(hooks,skills): add gateguard fact-forcing pre-action gate
A PreToolUse hook that forces Claude to investigate before editing.
Instead of self-evaluation ("are you sure?"), it demands concrete facts:
importers, public API, data schemas, user instruction.

A/B tested: +2.25 quality points (9.0 vs 6.75) across two independent tasks.

- scripts/hooks/gateguard-fact-force.js — standalone Node.js hook
- skills/gateguard/SKILL.md — skill documentation
- hooks/hooks.json — PreToolUse entries for Edit|Write and Bash

Full package with config: pip install gateguard-ai
Repo: https://github.com/zunoworks/gateguard

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 11:41:33 +09:00
Balaji Guntur
33673fb37a Fix PR comments - renamed 'when to activate' to 'when to use', fixed the iOS reference link to current, added iOS HIG link 2026-04-11 13:33:17 -07:00
Balaji Guntur
228be4f8b8 renamed the inclusive-ui-agent to a11y-architect 2026-04-11 13:16:13 -07:00
Balaji Guntur
643d03575a Update the accessibility skill to include related skills 2026-04-11 12:58:21 -07:00
Balaji Guntur
aa8948d5cf Adding accessibility skill to go in with the inclusive-ui-agent 2026-04-11 12:51:21 -07:00
Balaji Guntur
50dc4b0492 feat(a11y):add inclusive-ui architect agent for WCAG 2.2 compliance 2026-04-11 01:44:13 -07:00
Affaan Mustafa
125d5e6199 feat: add ecc2 legacy plugin migration import 2026-04-10 11:53:17 -07:00
Affaan Mustafa
4ff5a7169f feat: add ecc2 legacy tool migration import 2026-04-10 11:49:38 -07:00
Affaan Mustafa
cee82417db feat: add ecc2 legacy skill migration import 2026-04-10 11:41:36 -07:00
Affaan Mustafa
f4b1b11e10 feat: add ecc2 legacy env migration import 2026-04-10 11:33:18 -07:00
Affaan Mustafa
e7dd7047b5 feat: add ecc2 legacy remote migration import 2026-04-10 11:23:10 -07:00
Affaan Mustafa
b6426ade32 feat: add ecc2 legacy workspace memory import 2026-04-10 11:10:40 -07:00
Affaan Mustafa
790cb0205c feat: add ecc2 legacy schedule migration import 2026-04-10 11:06:14 -07:00
Affaan Mustafa
046af44065 feat: add ecc2 legacy migration scaffold 2026-04-10 10:57:13 -07:00
Affaan Mustafa
d36e9c48a4 feat: add ecc2 legacy migration plan 2026-04-10 10:54:49 -07:00
Affaan Mustafa
0f028f38f6 feat: add ecc2 legacy migration audit 2026-04-10 10:50:17 -07:00
Affaan Mustafa
feee17ad02 feat: extend ecc2 harness marker coverage 2026-04-10 10:39:21 -07:00
Affaan Mustafa
7b7ec434df feat: add ecc2 package manager harness env 2026-04-10 10:33:07 -07:00
Affaan Mustafa
176efb7623 feat: add ecc2 harness compatibility env 2026-04-10 10:24:33 -07:00
Affaan Mustafa
b51792fe0e feat: auto-resolve ecc2 harnesses from repo markers 2026-04-10 10:12:35 -07:00
Affaan Mustafa
050d9a9707 fix: honor ecc2 default agent in cli commands 2026-04-10 09:55:06 -07:00
Affaan Mustafa
03e52f49e8 feat: normalize ecc2 profiles across harnesses 2026-04-10 09:49:05 -07:00
Affaan Mustafa
30913b2cc4 feat: add ecc2 computer use remote dispatch 2026-04-10 09:40:01 -07:00
Affaan Mustafa
7809518612 feat: add ecc2 remote dispatch intake 2026-04-10 09:21:30 -07:00
Affaan Mustafa
bbed46d3eb feat: detect custom ecc2 harness markers 2026-04-10 09:08:06 -07:00
Affaan Mustafa
4a1f3cbd3f feat: preserve custom ecc2 harness labels 2026-04-10 08:57:59 -07:00
Affaan Mustafa
bcd869d520 feat: add ecc2 configurable harness runners 2026-04-10 08:45:47 -07:00
Affaan Mustafa
2e6eeafabd feat: add ecc2 persistent task scheduling 2026-04-10 08:31:04 -07:00
Affaan Mustafa
52371f5016 feat: prioritize ecc2 handoff queues 2026-04-10 08:16:17 -07:00
Affaan Mustafa
d84c64fa0e feat: canonicalize ecc2 harness aliases 2026-04-10 08:03:25 -07:00
Affaan Mustafa
a4aaa30e93 feat: add ecc2 gemini runner support 2026-04-10 07:58:26 -07:00
Affaan Mustafa
97afd95451 feat: add ecc2 codex and opencode runners 2026-04-10 07:53:54 -07:00
Affaan Mustafa
29ff44e23e feat: add ecc2 harness metadata detection 2026-04-10 07:46:46 -07:00
Affaan Mustafa
9c525009d7 feat: add ecc2 memory connector status reporting 2026-04-10 07:16:41 -07:00
Affaan Mustafa
9c294f7815 feat: add ecc2 pinned memory observations 2026-04-10 07:06:37 -07:00
Affaan Mustafa
766bf31737 feat: add ecc2 memory observation priorities 2026-04-10 06:56:26 -07:00
Affaan Mustafa
9523575721 feat: add ecc2 connector sync checkpoints 2026-04-10 06:44:05 -07:00
Affaan Mustafa
406722b5ef feat: add ecc2 markdown directory memory connector 2026-04-10 06:38:33 -07:00
Affaan Mustafa
5258a75382 feat: add ecc2 bulk memory connector sync 2026-04-10 06:34:40 -07:00
Affaan Mustafa
966af37f89 feat: add ecc2 dotenv memory connectors 2026-04-10 06:30:32 -07:00
Affaan Mustafa
22a5a8de6d feat: add ecc2 markdown memory connectors 2026-04-10 06:26:42 -07:00
Affaan Mustafa
d3b680b6db feat: add ecc2 directory memory connectors 2026-04-10 06:20:15 -07:00
Affaan Mustafa
d49ceacb7d feat: add ecc2 memory connectors 2026-04-10 06:14:13 -07:00
Affaan Mustafa
8cc92c59a6 feat: add ecc2 graph compaction 2026-04-10 06:07:12 -07:00
Affaan Mustafa
77c9082deb feat: add ecc2 graph observations 2026-04-10 06:02:24 -07:00
Affaan Mustafa
727d9380cb style: format ecc2 manager 2026-04-10 05:50:03 -07:00
Affaan Mustafa
7a13564a8b feat: add ecc2 graph recall memory ranking 2026-04-10 05:49:43 -07:00
Affaan Mustafa
23348a21a6 feat: preview ecc2 graph-aware routing 2026-04-10 04:49:14 -07:00
Affaan Mustafa
0b68af123c feat: route ecc2 delegates by graph context 2026-04-10 04:41:00 -07:00
Affaan Mustafa
4b1ff48219 feat: surface ecc2 graph context in metrics 2026-04-10 04:35:34 -07:00
Affaan Mustafa
beaba1ca15 feat: add ecc2 graph coordination edges 2026-04-10 04:30:32 -07:00
Affaan Mustafa
315b87d391 feat: add ecc2 automatic graph relations 2026-04-10 04:18:18 -07:00
Affaan Mustafa
4adb3324ef feat: add ecc2 context graph dashboard view 2026-04-10 04:10:08 -07:00
Affaan Mustafa
08f0e86d76 feat: auto-populate ecc2 shared context graph 2026-04-10 03:59:04 -07:00
Affaan Mustafa
8653d6d5d5 feat: add ecc2 shared context graph cli 2026-04-10 03:50:21 -07:00
Affaan Mustafa
194bf605c2 feat: add ecc2 orchestration templates 2026-04-10 03:38:11 -07:00
Affaan Mustafa
1e4d6a4161 feat: add ecc2 agent profiles 2026-04-09 22:43:16 -07:00
Affaan Mustafa
e48468a9e7 feat: add ecc2 conflict resolution protocol 2026-04-09 22:20:35 -07:00
Affaan Mustafa
ea0fb3c0fc feat: add layered ecc2 toml config loading 2026-04-09 22:01:57 -07:00
Affaan Mustafa
b48a52f9a0 feat: add ecc2 decision log audit trail 2026-04-09 21:57:28 -07:00
Affaan Mustafa
913c00c74d feat: extend ecc2 draft pr prompt metadata 2026-04-09 21:46:26 -07:00
Affaan Mustafa
8936d09951 feat: add ecc2 hunk-level git patch actions 2026-04-09 21:41:07 -07:00
Affaan Mustafa
599a9d1e7b feat: auto-rebase blocked merge queue worktrees 2026-04-09 21:28:33 -07:00
Affaan Mustafa
5fb2e62216 feat: add ecc2 webhook notifications 2026-04-09 21:14:09 -07:00
Affaan Mustafa
b45a6ca810 feat: add ecc2 completion summary notifications 2026-04-09 20:59:24 -07:00
Affaan Mustafa
a4d0a4fc14 feat: add ecc2 desktop notifications 2026-04-09 20:43:33 -07:00
Affaan Mustafa
491ee81889 feat: add ecc2 draft PR prompt 2026-04-09 20:29:27 -07:00
Affaan Mustafa
75c2503abd feat: add ecc2 git staging ui controls 2026-04-09 20:22:51 -07:00
Affaan Mustafa
e2b24e43a2 feat: share dependency caches across ecc2 worktrees 2026-04-09 20:09:41 -07:00
Affaan Mustafa
d0dbb20805 feat: add ecc2 merge queue reporting 2026-04-09 20:04:04 -07:00
Affaan Mustafa
cf8b5473c7 feat: group ecc2 sessions by project and task 2026-04-09 19:54:28 -07:00
Affaan Mustafa
181bc26b29 docs: add ecc recovery guidance for wiped setups 2026-04-09 18:13:07 -07:00
Affaan Mustafa
0513898b9d feat: add otel export for ecc sessions 2026-04-09 09:02:39 -07:00
Affaan Mustafa
2048f0d6f5 feat: add word diff highlighting to tui diffs 2026-04-09 08:55:53 -07:00
Affaan Mustafa
f5437078e1 feat: add diff view modes and hunk navigation 2026-04-09 08:41:10 -07:00
Affaan Mustafa
13f99cbf1c feat: add worktree retention cleanup policy 2026-04-09 08:29:21 -07:00
Affaan Mustafa
491f213fbd feat: enforce queued parallel worktree limits 2026-04-09 08:23:01 -07:00
Affaan Mustafa
941d4e6172 feat(ecc2): enforce configurable worktree branch prefixes 2026-04-09 08:08:42 -07:00
Affaan Mustafa
b01a300c31 feat(ecc2): persist tool log params and trigger context 2026-04-09 08:04:18 -07:00
Affaan Mustafa
f28f55c41e feat(ecc2): surface overlapping file activity 2026-04-09 07:54:27 -07:00
Affaan Mustafa
31f672275e feat(ecc2): infer tracked write modifications 2026-04-09 07:48:29 -07:00
Affaan Mustafa
eee9768cd8 feat(ecc2): persist file activity patch previews 2026-04-09 07:45:37 -07:00
Affaan Mustafa
c395b42d2c feat(ecc2): persist file activity diff previews 2026-04-09 07:40:28 -07:00
Affaan Mustafa
edd027edd4 feat(ecc2): classify typed file activity 2026-04-09 07:33:42 -07:00
Affaan Mustafa
a0f69cec92 feat(ecc2): surface per-file session activity 2026-04-09 07:27:17 -07:00
Affaan Mustafa
24a3ffa234 feat(ecc2): add session heartbeat stale detection 2026-04-09 07:20:40 -07:00
Affaan Mustafa
48fd68115e feat(ecc2): sync hook activity into session metrics 2026-04-09 07:02:24 -07:00
Affaan Mustafa
6f08e78456 feat: auto-pause ecc2 sessions when budgets are exceeded 2026-04-09 06:47:28 -07:00
Affaan Mustafa
67d06687a0 feat: add ecc2 configurable budget thresholds 2026-04-09 06:36:22 -07:00
Affaan Mustafa
95c33d3c04 feat: add ecc2 budget alert thresholds 2026-04-09 06:31:54 -07:00
Affaan Mustafa
08f61f667d feat: sync ecc2 cost tracker metrics 2026-04-09 06:22:20 -07:00
Affaan Mustafa
cf9c68846c feat: add ecc2 ctrl-w pane commands 2026-04-09 06:08:59 -07:00
Affaan Mustafa
a54799127c feat: make ecc2 pane navigation shortcuts configurable 2026-04-09 06:05:27 -07:00
Affaan Mustafa
c6e26ddea4 feat: surface ecc2 tool and file metrics in sessions pane 2026-04-09 05:58:54 -07:00
Affaan Mustafa
f136a4e0d6 feat: add ecc2 direct pane focus shortcuts 2026-04-09 05:53:55 -07:00
Affaan Mustafa
3c16c85a75 feat: add ecc2 global timeline scope 2026-04-09 05:48:58 -07:00
Affaan Mustafa
0c509fe57e feat: add ecc2 session timeline mode 2026-04-09 05:43:34 -07:00
Affaan Mustafa
996edff6d1 feat: collapse ecc2 detail panes 2026-04-09 05:34:36 -07:00
Affaan Mustafa
f2cfaee6fe feat: jump ecc2 approval queue targets 2026-04-09 05:27:43 -07:00
Affaan Mustafa
dc36a636af feat: navigate delegates from ecc2 lead board 2026-04-09 05:21:02 -07:00
Affaan Mustafa
6fc3f7c3f4 feat: scroll ecc2 metrics across full teams 2026-04-09 05:10:40 -07:00
Affaan Mustafa
f29e70883c feat: add ecc2 delegate blocker hints 2026-04-09 05:05:53 -07:00
Affaan Mustafa
e50c97c29b feat: add ecc2 delegate progress signals 2026-04-09 04:59:45 -07:00
Affaan Mustafa
7e3bb3aec2 feat: add ecc2 delegate activity board 2026-04-09 04:56:26 -07:00
Affaan Mustafa
92c9d1f2c9 feat: keep ecc2 lead selected after multi-spawn 2026-04-09 04:52:36 -07:00
Affaan Mustafa
669d9cc790 feat: auto-split ecc2 after multi-agent spawn 2026-04-09 04:48:46 -07:00
Affaan Mustafa
1c27f7b29a feat: add ecc2 approval queue sidebar 2026-04-09 04:42:13 -07:00
Affaan Mustafa
cc5fe121bf feat: add ecc2 natural-language session spawner 2026-04-09 04:33:17 -07:00
Affaan Mustafa
15e05d96ad feat: add ecc2 output content filters 2026-04-09 04:26:06 -07:00
Affaan Mustafa
bab03bd8af feat: add ecc2 agent output filters 2026-04-09 04:21:23 -07:00
Affaan Mustafa
1755069df2 feat: add ecc2 global output search 2026-04-09 04:17:03 -07:00
Affaan Mustafa
3b700c8715 feat: add ecc2 output time filters 2026-04-09 04:10:51 -07:00
Affaan Mustafa
077f46b777 feat: add ecc2 stderr output filter 2026-04-09 04:04:25 -07:00
Affaan Mustafa
8fc40da739 feat: add ecc2 regex output search 2026-04-09 04:00:31 -07:00
Affaan Mustafa
8440181001 feat: add ecc2 output search mode 2026-04-09 03:57:12 -07:00
Affaan Mustafa
c7bf143450 feat: persist ecc2 pane sizes by layout 2026-04-09 03:50:29 -07:00
Affaan Mustafa
63299b15b3 feat: add ecc2 runtime theme toggle 2026-04-09 03:43:28 -07:00
Affaan Mustafa
3eb9bc8ef5 feat: add ecc2 runtime pane layout switching 2026-04-09 03:39:17 -07:00
Affaan Mustafa
1b3ccb85aa docs: mark continuous-learning v1 as legacy 2026-04-08 16:31:58 -07:00
Affaan Mustafa
2e5e94cb7f fix: harden claude plugin manifest surfaces 2026-04-08 16:27:30 -07:00
Affaan Mustafa
adfe8a8311 feat: auto-prune inactive ecc2 worktrees 2026-04-08 16:08:29 -07:00
Affaan Mustafa
b3f781a648 feat: default ecc2 worktrees through policy 2026-04-08 15:58:31 -07:00
Affaan Mustafa
86cbe3d616 feat: add c language compatibility 2026-04-08 15:42:49 -07:00
Affaan Mustafa
9bd8e8b3c7 fix: resolve markdownlint violations 2026-04-08 15:40:26 -07:00
Affaan Mustafa
e226772a72 feat: add gemini agent adapter 2026-04-08 15:38:49 -07:00
Affaan Mustafa
e363c54057 fix: treat oauth mcp 401 probes as reachable 2026-04-08 15:34:34 -07:00
Affaan Mustafa
eb274d25d9 feat: add ecc2 split diff viewer 2026-04-08 15:30:21 -07:00
Affaan Mustafa
dada133784 feat: surface ecc2 daemon auto-merge activity 2026-04-08 15:27:16 -07:00
Affaan Mustafa
d8c8178f92 feat: add ecc2 worktree conflict protocol 2026-04-08 15:17:45 -07:00
Affaan Mustafa
27d7964bb1 feat: add ecc2 worktree auto-merge policy 2026-04-08 15:11:22 -07:00
Affaan Mustafa
e6460534e3 feat: add ecc2 bulk worktree merge actions 2026-04-08 15:04:52 -07:00
Affaan Mustafa
4834dfd280 feat: add ecc2 worktree merge actions 2026-04-08 14:57:46 -07:00
Affaan Mustafa
7f2c14ecf8 feat: surface ecc2 worktree pressure 2026-04-08 14:43:42 -07:00
Affaan Mustafa
027d77468e feat: add ecc2 dashboard worktree pruning 2026-04-08 14:33:30 -07:00
Affaan Mustafa
689235af16 feat: add ecc2 worktree pruning command 2026-04-08 14:30:08 -07:00
Affaan Mustafa
4834b63b35 feat: add ecc2 global worktree status 2026-04-08 14:13:26 -07:00
Affaan Mustafa
2dee4072a3 feat: add ecc2 worktree patch previews 2026-04-08 14:10:24 -07:00
Affaan Mustafa
e7be2ddf8d feat: add ecc2 worktree status checks 2026-04-08 14:04:55 -07:00
Affaan Mustafa
10b8471e3c feat: add ecc2 worktree status command 2026-04-08 14:02:01 -07:00
Affaan Mustafa
dd14888f5f feat: add ecc2 worktree merge readiness 2026-04-08 13:54:31 -07:00
Affaan Mustafa
87d520f0b1 feat: add ecc2 diff viewer mode 2026-04-08 13:49:35 -07:00
Affaan Mustafa
5070b2d785 feat: add ecc2 worktree file previews 2026-04-08 13:45:32 -07:00
Affaan Mustafa
afb97961e3 feat: add ecc2 maintain coordination command 2026-04-08 13:31:11 -07:00
Affaan Mustafa
dc12e902b1 feat: add ecc2 coordinate backlog health checks 2026-04-08 13:26:45 -07:00
Affaan Mustafa
2b7b717664 feat: add ecc2 coordinate backlog json output 2026-04-08 13:24:32 -07:00
Affaan Mustafa
d738089e3e feat: add ecc2 looping backlog coordination 2026-04-08 13:22:02 -07:00
Affaan Mustafa
bcf8d0617e feat: add ecc2 coordination status health metadata 2026-04-08 13:19:24 -07:00
Affaan Mustafa
da4c7791fe feat: add ecc2 coordination status health checks 2026-04-08 13:16:45 -07:00
Affaan Mustafa
53d8cee6f8 feat: add ecc2 coordination status json output 2026-04-08 13:15:21 -07:00
Affaan Mustafa
cd94878374 feat: add ecc2 coordination status command 2026-04-08 13:13:46 -07:00
Affaan Mustafa
0ff58108e4 fix: restore agent yaml command export 2026-04-08 12:58:02 -07:00
Affaan Mustafa
1bc9b9c585 feat: escalate ecc2 chronic saturation 2026-04-08 12:39:34 -07:00
Affaan Mustafa
10e34aa47a feat: track ecc2 chronic saturation streak 2026-04-08 12:36:32 -07:00
Affaan Mustafa
9d766af025 docs: align ecc2 operator backlog language 2026-04-08 03:56:40 -07:00
Affaan Mustafa
2fba71fcdb feat: align ecc2 delegate backlog semantics 2026-04-08 03:55:03 -07:00
Affaan Mustafa
63c437b986 feat: align ecc2 backlog surfaces 2026-04-08 03:51:17 -07:00
Affaan Mustafa
3199120abe feat: route ecc2 by handoff backlog 2026-04-08 03:47:11 -07:00
Affaan Mustafa
478466168a feat: calm ecc2 stabilized attention 2026-04-08 03:43:46 -07:00
Affaan Mustafa
cf7d3ae584 feat: quiet ecc2 stabilized telemetry 2026-04-08 03:41:48 -07:00
Affaan Mustafa
051d47eb5f feat: relax ecc2 stabilized cycles 2026-04-08 03:40:26 -07:00
Affaan Mustafa
40ed9c7f6a feat: surface ecc2 stabilized mode 2026-04-08 03:37:48 -07:00
Affaan Mustafa
09f6bc3166 feat: surface ecc2 recovery events 2026-04-08 03:35:16 -07:00
273 changed files with 58776 additions and 2016 deletions

View File

@@ -6,6 +6,7 @@
"plugins": [
{
"name": "ecc",
"version": "2.0.0-rc.1",
"source": {
"source": "local",
"path": "../.."

View File

@@ -1,7 +1,6 @@
---
name: agent-introspection-debugging
description: Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports.
origin: ECC
---
# Agent Introspection Debugging

View File

@@ -0,0 +1,7 @@
interface:
display_name: "Agent Introspection Debugging"
short_description: "Structured self-debugging for AI agent failures"
brand_color: "#0EA5E9"
default_prompt: "Use $agent-introspection-debugging to diagnose and recover from an AI agent failure."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: agent-sort
description: Build an evidence-backed ECC install plan for a specific repo by sorting skills, commands, rules, hooks, and extras into DAILY vs LIBRARY buckets using parallel repo-aware review passes. Use when ECC should be trimmed to what a project actually needs instead of loading the full bundle.
origin: ECC
---
# Agent Sort

View File

@@ -0,0 +1,7 @@
interface:
display_name: "Agent Sort"
short_description: "Evidence-backed ECC install planning"
brand_color: "#0EA5E9"
default_prompt: "Use $agent-sort to build an evidence-backed ECC install plan."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: api-design
description: REST API design patterns including resource naming, status codes, pagination, filtering, error responses, versioning, and rate limiting for production APIs.
origin: ECC
---
# API Design Patterns

View File

@@ -2,6 +2,6 @@ interface:
display_name: "API Design"
short_description: "REST API design patterns and best practices"
brand_color: "#F97316"
default_prompt: "Design REST API: resources, status codes, pagination"
default_prompt: "Use $api-design to design production REST API resources and responses."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: article-writing
description: Write articles, guides, blog posts, tutorials, newsletter issues, and other long-form content in a distinctive voice derived from supplied examples or brand guidance. Use when the user wants polished written content longer than a paragraph, especially when voice consistency, structure, and credibility matter.
origin: ECC
---
# Article Writing

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Article Writing"
short_description: "Write long-form content in a supplied voice without sounding templated"
short_description: "Long-form content in a supplied voice"
brand_color: "#B45309"
default_prompt: "Draft a sharp long-form article from these notes and examples"
default_prompt: "Use $article-writing to draft polished long-form content in the supplied voice."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: backend-patterns
description: Backend architecture patterns, API design, database optimization, and server-side best practices for Node.js, Express, and Next.js API routes.
origin: ECC
---
# Backend Development Patterns

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Backend Patterns"
short_description: "API design, database, and server-side patterns"
short_description: "API, database, and server-side patterns"
brand_color: "#F59E0B"
default_prompt: "Apply backend patterns: API design, repository, caching"
default_prompt: "Use $backend-patterns to apply backend architecture and API patterns."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: brand-voice
description: Build a source-derived writing style profile from real posts, essays, launch notes, docs, or site copy, then reuse that profile across content, outreach, and social workflows. Use when the user wants voice consistency without generic AI writing tropes.
origin: ECC
---
# Brand Voice

View File

@@ -0,0 +1,7 @@
interface:
display_name: "Brand Voice"
short_description: "Source-derived writing style profiles"
brand_color: "#0EA5E9"
default_prompt: "Use $brand-voice to derive and reuse a source-grounded writing style."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: bun-runtime
description: Bun as runtime, package manager, bundler, and test runner. When to choose Bun vs Node, migration notes, and Vercel support.
origin: ECC
---
# Bun Runtime

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Bun Runtime"
short_description: "Bun as runtime, package manager, bundler, and test runner"
short_description: "Bun runtime, package manager, and test runner"
brand_color: "#FBF0DF"
default_prompt: "Use Bun for scripts, install, or run"
default_prompt: "Use $bun-runtime to choose and apply Bun runtime workflows."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: claude-api
description: Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.
origin: ECC
---
# Claude API

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Claude API"
short_description: "Anthropic Claude API patterns and SDKs"
short_description: "Claude API patterns for Python and TypeScript"
brand_color: "#D97706"
default_prompt: "Build applications with the Claude API using Messages, tool use, streaming, and Agent SDK"
default_prompt: "Use $claude-api to build with Claude API and Anthropic SDK patterns."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: coding-standards
description: Baseline cross-project coding conventions for naming, readability, immutability, and code-quality review. Use detailed frontend or backend skills for framework-specific patterns.
origin: ECC
---
# Coding Standards & Best Practices

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Coding Standards"
short_description: "Universal coding standards and best practices"
short_description: "Cross-project coding conventions and review"
brand_color: "#3B82F6"
default_prompt: "Apply standards: immutability, error handling, type safety"
default_prompt: "Use $coding-standards to review code against cross-project standards."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: content-engine
description: Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.
origin: ECC
---
# Content Engine

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Content Engine"
short_description: "Turn one idea into platform-native social and content outputs"
short_description: "Platform-native content systems and campaigns"
brand_color: "#DC2626"
default_prompt: "Turn this source asset into strong multi-platform content"
default_prompt: "Use $content-engine to turn source material into platform-native content."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: crosspost
description: Multi-platform content distribution across X, LinkedIn, Threads, and Bluesky. Adapts content per platform using content-engine patterns. Never posts identical content cross-platform. Use when the user wants to distribute content across social platforms.
origin: ECC
---
# Crosspost

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Crosspost"
short_description: "Multi-platform content distribution with native adaptation"
short_description: "Multi-platform social distribution"
brand_color: "#EC4899"
default_prompt: "Distribute content across X, LinkedIn, Threads, and Bluesky with platform-native adaptation"
default_prompt: "Use $crosspost to adapt content for multiple social platforms."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: deep-research
description: Multi-source deep research using firecrawl and exa MCPs. Searches the web, synthesizes findings, and delivers cited reports with source attribution. Use when the user wants thorough research on any topic with evidence and citations.
origin: ECC
---
# Deep Research

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Deep Research"
short_description: "Multi-source deep research with firecrawl and exa MCPs"
short_description: "Multi-source cited research reports"
brand_color: "#6366F1"
default_prompt: "Research the given topic using firecrawl and exa, produce a cited report"
default_prompt: "Use $deep-research to produce a cited multi-source research report."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: dmux-workflows
description: Multi-agent orchestration using dmux (tmux pane manager for AI agents). Patterns for parallel agent workflows across Claude Code, Codex, OpenCode, and other harnesses. Use when running multiple agent sessions in parallel or coordinating multi-agent development workflows.
origin: ECC
---
# dmux Workflows

View File

@@ -2,6 +2,6 @@ interface:
display_name: "dmux Workflows"
short_description: "Multi-agent orchestration with dmux"
brand_color: "#14B8A6"
default_prompt: "Orchestrate parallel agent sessions using dmux pane manager"
default_prompt: "Use $dmux-workflows to orchestrate parallel agent sessions with dmux."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: documentation-lookup
description: Use up-to-date library and framework docs via Context7 MCP instead of training data. Activates for setup questions, API references, code examples, or when the user names a framework (e.g. React, Next.js, Prisma).
origin: ECC
---
# Documentation Lookup (Context7)

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Documentation Lookup"
short_description: "Fetch up-to-date library docs via Context7 MCP"
short_description: "Current library docs via Context7"
brand_color: "#6366F1"
default_prompt: "Look up docs for a library or API"
default_prompt: "Use $documentation-lookup to fetch current library documentation via Context7."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: e2e-testing
description: Playwright E2E testing patterns, Page Object Model, configuration, CI/CD integration, artifact management, and flaky test strategies.
origin: ECC
---
# E2E Testing Patterns

View File

@@ -1,7 +1,7 @@
interface:
display_name: "E2E Testing"
short_description: "Playwright end-to-end testing"
short_description: "Playwright E2E testing patterns"
brand_color: "#06B6D4"
default_prompt: "Generate Playwright E2E tests with Page Object Model"
default_prompt: "Use $e2e-testing to design Playwright end-to-end test coverage."
policy:
allow_implicit_invocation: true

View File

@@ -1,8 +1,7 @@
---
name: eval-harness
description: Formal evaluation framework for Claude Code sessions implementing eval-driven development (EDD) principles
origin: ECC
tools: Read, Write, Edit, Bash, Grep, Glob
allowed-tools: Read, Write, Edit, Bash, Grep, Glob
---
# Eval Harness Skill

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Eval Harness"
short_description: "Eval-driven development with pass/fail criteria"
short_description: "Eval-driven development harnesses"
brand_color: "#EC4899"
default_prompt: "Set up eval-driven development with pass/fail criteria"
default_prompt: "Use $eval-harness to define eval-driven development checks."
policy:
allow_implicit_invocation: true

View File

@@ -1,5 +1,5 @@
---
name: everything-claude-code-conventions
name: everything-claude-code
description: Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.
---

View File

@@ -1,6 +1,7 @@
interface:
display_name: "Everything Claude Code"
short_description: "Repo-specific patterns and workflows for everything-claude-code"
default_prompt: "Use the everything-claude-code repo skill to follow existing architecture, testing, and workflow conventions."
short_description: "Repo workflows for everything-claude-code"
brand_color: "#0EA5E9"
default_prompt: "Use $everything-claude-code to follow this repository's conventions and workflows."
policy:
allow_implicit_invocation: true
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: exa-search
description: Neural search via Exa MCP for web, code, and company research. Use when the user needs web search, code examples, company intel, people lookup, or AI-powered deep research with Exa's neural search engine.
origin: ECC
---
# Exa Search

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Exa Search"
short_description: "Neural search via Exa MCP for web, code, and companies"
short_description: "Neural search via Exa MCP"
brand_color: "#8B5CF6"
default_prompt: "Search using Exa MCP tools for web content, code, or company research"
default_prompt: "Use $exa-search to search web, code, or company data through Exa."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: fal-ai-media
description: Unified media generation via fal.ai MCP — image, video, and audio. Covers text-to-image (Nano Banana), text/image-to-video (Seedance, Kling, Veo 3), text-to-speech (CSM-1B), and video-to-audio (ThinkSound). Use when the user wants to generate images, videos, or audio with AI.
origin: ECC
---
# fal.ai Media Generation

View File

@@ -1,7 +1,7 @@
interface:
display_name: "fal.ai Media"
short_description: "AI image, video, and audio generation via fal.ai"
short_description: "AI media generation via fal.ai"
brand_color: "#F43F5E"
default_prompt: "Generate images, videos, or audio using fal.ai models"
default_prompt: "Use $fal-ai-media to generate image, video, or audio assets with fal.ai."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: frontend-design
description: Create distinctive, production-grade frontend interfaces with high design quality. Use when the user asks to build web components, pages, or applications and the visual direction matters as much as the code quality.
origin: ECC
---
# Frontend Design

View File

@@ -0,0 +1,7 @@
interface:
display_name: "Frontend Design"
short_description: "Production-grade frontend interface design"
brand_color: "#0EA5E9"
default_prompt: "Use $frontend-design to build a distinctive production-grade interface."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: frontend-patterns
description: Frontend development patterns for React, Next.js, state management, performance optimization, and UI best practices.
origin: ECC
---
# Frontend Development Patterns

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Frontend Patterns"
short_description: "React and Next.js patterns and best practices"
short_description: "React and Next.js frontend patterns"
brand_color: "#8B5CF6"
default_prompt: "Apply React/Next.js patterns and best practices"
default_prompt: "Use $frontend-patterns to apply React and Next.js frontend patterns."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: frontend-slides
description: Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to build a presentation, convert a PPT/PPTX to web, or create slides for a talk/pitch. Helps non-designers discover their aesthetic through visual exploration rather than abstract choices.
origin: ECC
---
# Frontend Slides

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Frontend Slides"
short_description: "Create distinctive HTML slide decks and convert PPTX to web"
short_description: "Animation-rich HTML presentation decks"
brand_color: "#FF6B3D"
default_prompt: "Create a viewport-safe HTML presentation with strong visual direction"
default_prompt: "Use $frontend-slides to create an animation-rich HTML presentation deck."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: investor-materials
description: Create and update pitch decks, one-pagers, investor memos, accelerator applications, financial models, and fundraising materials. Use when the user needs investor-facing documents, projections, use-of-funds tables, milestone plans, or materials that must stay internally consistent across multiple fundraising assets.
origin: ECC
---
# Investor Materials

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Investor Materials"
short_description: "Create decks, memos, and financial materials from one source of truth"
short_description: "Investor decks, memos, and financial materials"
brand_color: "#7C3AED"
default_prompt: "Draft investor materials that stay numerically consistent across assets"
default_prompt: "Use $investor-materials to draft consistent investor-facing fundraising assets."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: investor-outreach
description: Draft cold emails, warm intro blurbs, follow-ups, update emails, and investor communications for fundraising. Use when the user wants outreach to angels, VCs, strategic investors, or accelerators and needs concise, personalized, investor-facing messaging.
origin: ECC
---
# Investor Outreach

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Investor Outreach"
short_description: "Write concise, personalized outreach and follow-ups for fundraising"
short_description: "Personalized investor outreach and follow-ups"
brand_color: "#059669"
default_prompt: "Draft a personalized investor outreach email with a clear low-friction ask"
default_prompt: "Use $investor-outreach to write concise personalized investor outreach."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: market-research
description: Conduct market research, competitive analysis, investor due diligence, and industry intelligence with source attribution and decision-oriented summaries. Use when the user wants market sizing, competitor comparisons, fund research, technology scans, or research that informs business decisions.
origin: ECC
---
# Market Research

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Market Research"
short_description: "Source-attributed market, competitor, and investor research"
short_description: "Source-attributed market research"
brand_color: "#2563EB"
default_prompt: "Research this market and summarize the decision-relevant findings"
default_prompt: "Use $market-research to research markets with source-attributed findings."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: mcp-server-patterns
description: Build MCP servers with Node/TypeScript SDK — tools, resources, prompts, Zod validation, stdio vs Streamable HTTP. Use Context7 or official MCP docs for latest API.
origin: ECC
---
# MCP Server Patterns

View File

@@ -0,0 +1,7 @@
interface:
display_name: "MCP Server Patterns"
short_description: "MCP server tools, resources, and prompts"
brand_color: "#0EA5E9"
default_prompt: "Use $mcp-server-patterns to build MCP tools, resources, and prompts."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: nextjs-turbopack
description: Next.js 16+ and Turbopack — incremental bundling, FS caching, dev speed, and when to use Turbopack vs webpack.
origin: ECC
---
# Next.js and Turbopack

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Next.js Turbopack"
short_description: "Next.js 16+ and Turbopack dev bundler"
short_description: "Next.js and Turbopack workflow guidance"
brand_color: "#000000"
default_prompt: "Next.js dev, Turbopack, or bundle optimization"
default_prompt: "Use $nextjs-turbopack to work through Next.js and Turbopack decisions."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: product-capability
description: Translate PRD intent, roadmap asks, or product discussions into an implementation-ready capability plan that exposes constraints, invariants, interfaces, and unresolved decisions before multi-service work starts. Use when the user needs an ECC-native PRD-to-SRS lane instead of vague planning prose.
origin: ECC
---
# Product Capability

View File

@@ -0,0 +1,7 @@
interface:
display_name: "Product Capability"
short_description: "Implementation-ready product capability plans"
brand_color: "#0EA5E9"
default_prompt: "Use $product-capability to turn product intent into an implementation plan."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: security-review
description: Use this skill when adding authentication, handling user input, working with secrets, creating API endpoints, or implementing payment/sensitive features. Provides comprehensive security checklist and patterns.
origin: ECC
---
# Security Review Skill

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Security Review"
short_description: "Comprehensive security checklist and vulnerability detection"
short_description: "Security checklist and vulnerability review"
brand_color: "#EF4444"
default_prompt: "Run security checklist: secrets, input validation, injection prevention"
default_prompt: "Use $security-review to review sensitive code with the security checklist."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: strategic-compact
description: Suggests manual context compaction at logical intervals to preserve context through task phases rather than arbitrary auto-compaction.
origin: ECC
---
# Strategic Compact Skill

View File

@@ -2,6 +2,6 @@ interface:
display_name: "Strategic Compact"
short_description: "Context management via strategic compaction"
brand_color: "#14B8A6"
default_prompt: "Suggest task boundary compaction for context management"
default_prompt: "Use $strategic-compact to choose a useful context compaction boundary."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: tdd-workflow
description: Use this skill when writing new features, fixing bugs, or refactoring code. Enforces test-driven development with 80%+ coverage including unit, integration, and E2E tests.
origin: ECC
---
# Test-Driven Development Workflow

View File

@@ -1,7 +1,7 @@
interface:
display_name: "TDD Workflow"
short_description: "Test-driven development with 80%+ coverage"
short_description: "Test-driven development with coverage gates"
brand_color: "#22C55E"
default_prompt: "Follow TDD: write tests first, implement, verify 80%+ coverage"
default_prompt: "Use $tdd-workflow to drive the change with tests before implementation."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: verification-loop
description: "A comprehensive verification system for Claude Code sessions."
origin: ECC
---
# Verification Loop Skill

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Verification Loop"
short_description: "Build, test, lint, typecheck verification"
short_description: "Build, test, lint, and typecheck verification"
brand_color: "#10B981"
default_prompt: "Run verification: build, test, lint, typecheck, security"
default_prompt: "Use $verification-loop to run build, test, lint, and typecheck verification."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: video-editing
description: AI-assisted video editing workflows for cutting, structuring, and augmenting real footage. Covers the full pipeline from raw capture through FFmpeg, Remotion, ElevenLabs, fal.ai, and final polish in Descript or CapCut. Use when the user wants to edit video, cut footage, create vlogs, or build video content.
origin: ECC
---
# Video Editing

View File

@@ -1,7 +1,7 @@
interface:
display_name: "Video Editing"
short_description: "AI-assisted video editing for real footage"
short_description: "AI-assisted editing for real footage"
brand_color: "#EF4444"
default_prompt: "Edit video using AI-assisted pipeline: organize, cut, compose, generate assets, polish"
default_prompt: "Use $video-editing to plan an AI-assisted edit for real footage."
policy:
allow_implicit_invocation: true

View File

@@ -1,7 +1,6 @@
---
name: x-api
description: X/Twitter API integration for posting tweets, threads, reading timelines, search, and analytics. Covers OAuth auth patterns, rate limits, and platform-native content posting. Use when the user wants to interact with X programmatically.
origin: ECC
---
# X API

View File

@@ -1,7 +1,7 @@
interface:
display_name: "X API"
short_description: "X/Twitter API integration for posting, threads, and analytics"
short_description: "X API posting, timelines, and analytics"
brand_color: "#000000"
default_prompt: "Use X API to post tweets, threads, or retrieve timeline and search data"
default_prompt: "Use $x-api to build X API posting, timeline, or analytics workflows."
policy:
allow_implicit_invocation: true

View File

@@ -45,60 +45,37 @@ Example:
The following fields **must always be arrays**:
* `agents`
* `commands`
* `skills`
* `hooks` (if present)
Even if there is only one entry, **strings are not accepted**.
### Invalid
```json
{
"agents": "./agents"
}
```
### Valid
```json
{
"agents": ["./agents/planner.md"]
}
```
This applies consistently across all component path fields.
---
## Path Resolution Rules (Critical)
## The `agents` Field: DO NOT ADD
### Agents MUST use explicit file paths
> WARNING: **CRITICAL:** Do NOT add an `"agents"` field to `plugin.json`. The Claude Code plugin validator rejects it entirely.
The validator **does not accept directory paths for `agents`**.
### Why This Matters
Even the following will fail:
The `agents` field is not part of the Claude Code plugin manifest schema. Any form of it -- string path, array of paths, or array of directories -- causes a validation error:
```json
{
"agents": ["./agents/"]
}
```
agents: Invalid input
```
Instead, you must enumerate agent files explicitly:
Agent `.md` files under `agents/` are discovered automatically by convention (similar to hooks). They do not need to be declared in the manifest.
```json
{
"agents": [
"./agents/planner.md",
"./agents/architect.md",
"./agents/code-reviewer.md"
]
}
```
### History
This is the most common source of validation errors.
Previously this repo listed agents explicitly in `plugin.json` as an array of file paths. This passed the repo's own schema but failed Claude Code's actual validator, which does not recognize the field. Removed in #1459.
---
## Path Resolution Rules
### Commands and Skills
@@ -160,7 +137,7 @@ The test `plugin.json does NOT have explicit hooks declaration` in `tests/hooks/
These look correct but are rejected:
* String values instead of arrays
* Arrays of directories for `agents`
* **Adding `"agents"` in any form** - not a recognized manifest field, causes `Invalid input`
* Missing `version`
* Relying on inferred paths
* Assuming marketplace behavior matches local validation
@@ -175,10 +152,6 @@ Avoid cleverness. Be explicit.
```json
{
"version": "1.1.0",
"agents": [
"./agents/planner.md",
"./agents/code-reviewer.md"
],
"commands": ["./commands/"],
"skills": ["./skills/"]
}
@@ -186,7 +159,7 @@ Avoid cleverness. Be explicit.
This structure has been validated against the Claude plugin validator.
**Important:** Notice there is NO `"hooks"` field. The `hooks/hooks.json` file is loaded automatically by convention. Adding it explicitly causes a duplicate error.
**Important:** Notice there is NO `"hooks"` field and NO `"agents"` field. Both are loaded automatically by convention. Adding either explicitly causes errors.
---
@@ -194,9 +167,9 @@ This structure has been validated against the Claude plugin validator.
Before submitting changes that touch `plugin.json`:
1. Use explicit file paths for agents
2. Ensure all component fields are arrays
3. Include a `version`
1. Ensure all component fields are arrays
2. Include a `version`
3. Do NOT add `agents` or `hooks` fields (both are auto-loaded by convention)
4. Run:
```bash

View File

@@ -1,6 +1,6 @@
### Plugin Manifest Gotchas
If you plan to edit `.claude-plugin/plugin.json`, be aware that the Claude plugin validator enforces several **undocumented but strict constraints** that can cause installs to fail with vague errors (for example, `agents: Invalid input`). In particular, component fields must be arrays, `agents` must use explicit file paths rather than directories, and a `version` field is required for reliable validation and installation.
If you plan to edit `.claude-plugin/plugin.json`, be aware that the Claude plugin validator enforces several **undocumented but strict constraints** that can cause installs to fail with vague errors (for example, `agents: Invalid input`). In particular, component fields must be arrays, `agents` is not a supported manifest field and must not be included in plugin.json, and a `version` field is required for reliable validation and installation.
These constraints are not obvious from public examples and have caused repeated installation failures in the past. They are documented in detail in `.claude-plugin/PLUGIN_SCHEMA_NOTES.md`, which should be reviewed before making any changes to the plugin manifest.

View File

@@ -1,7 +1,5 @@
{
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
"name": "ecc",
"description": "Battle-tested Claude Code configurations from an Anthropic hackathon winner — agents, skills, hooks, rules, and legacy command shims evolved over 10+ months of intensive daily use",
"name": "everything-claude-code",
"owner": {
"name": "Affaan Mustafa",
"email": "me@affaanmustafa.com"
@@ -11,10 +9,10 @@
},
"plugins": [
{
"name": "ecc",
"name": "everything-claude-code",
"source": "./",
"description": "The most comprehensive Claude Code plugin — 38 agents, 156 skills, 72 legacy command shims, selective install profiles, and production-ready hooks for TDD, security scanning, code review, and continuous learning",
"version": "1.10.0",
"description": "The most comprehensive Claude Code plugin — 48 agents, 184 skills, 79 legacy command shims, selective install profiles, and production-ready hooks for TDD, security scanning, code review, and continuous learning",
"version": "2.0.0-rc.1",
"author": {
"name": "Affaan Mustafa",
"email": "me@affaanmustafa.com"

View File

@@ -1,7 +1,7 @@
{
"name": "ecc",
"version": "1.10.0",
"description": "Battle-tested Claude Code plugin for engineering teams — 38 agents, 156 skills, 72 legacy command shims, production-ready hooks, and selective install workflows evolved through continuous real-world use",
"name": "everything-claude-code",
"version": "2.0.0-rc.1",
"description": "Battle-tested Claude Code plugin for engineering teams — 48 agents, 184 skills, 79 legacy command shims, production-ready hooks, and selective install workflows evolved through continuous real-world use",
"author": {
"name": "Affaan Mustafa",
"url": "https://x.com/affaanmustafa"
@@ -22,46 +22,6 @@
"automation",
"best-practices"
],
"agents": [
"./agents/architect.md",
"./agents/build-error-resolver.md",
"./agents/chief-of-staff.md",
"./agents/code-reviewer.md",
"./agents/cpp-build-resolver.md",
"./agents/cpp-reviewer.md",
"./agents/csharp-reviewer.md",
"./agents/dart-build-resolver.md",
"./agents/database-reviewer.md",
"./agents/doc-updater.md",
"./agents/docs-lookup.md",
"./agents/e2e-runner.md",
"./agents/flutter-reviewer.md",
"./agents/gan-evaluator.md",
"./agents/gan-generator.md",
"./agents/gan-planner.md",
"./agents/go-build-resolver.md",
"./agents/go-reviewer.md",
"./agents/harness-optimizer.md",
"./agents/healthcare-reviewer.md",
"./agents/java-build-resolver.md",
"./agents/java-reviewer.md",
"./agents/kotlin-build-resolver.md",
"./agents/kotlin-reviewer.md",
"./agents/loop-operator.md",
"./agents/opensource-forker.md",
"./agents/opensource-packager.md",
"./agents/opensource-sanitizer.md",
"./agents/performance-optimizer.md",
"./agents/planner.md",
"./agents/python-reviewer.md",
"./agents/pytorch-build-resolver.md",
"./agents/refactor-cleaner.md",
"./agents/rust-build-resolver.md",
"./agents/rust-reviewer.md",
"./agents/security-reviewer.md",
"./agents/tdd-guide.md",
"./agents/typescript-reviewer.md"
],
"skills": ["./skills/"],
"commands": ["./commands/"]
}

View File

@@ -1,6 +1,6 @@
{
"name": "ecc",
"version": "1.10.0",
"version": "2.0.0-rc.1",
"description": "Battle-tested Codex workflows — 156 shared ECC skills, production-ready MCP configs, and selective-install-aligned conventions for TDD, security scanning, code review, and autonomous development.",
"author": {
"name": "Affaan Mustafa",

View File

@@ -1,4 +1,5 @@
{
"version": 1,
"hooks": {
"sessionStart": [
{

View File

@@ -2,7 +2,8 @@ name: CI
on:
push:
branches: [main]
branches: [main, 'release/**']
tags: ['v*']
pull_request:
branches: [main]
@@ -43,10 +44,18 @@ jobs:
# Package manager setup
- name: Setup pnpm
if: matrix.pm == 'pnpm'
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4
if: matrix.pm == 'pnpm' && matrix.node != '18.x'
uses: pnpm/action-setup@08c4be7e2e672a47d11bd04269e27e5f3e8529cb # v6.0.0
with:
version: latest
# Keep an explicit pnpm major because this repo's packageManager is Yarn.
version: 10
- name: Setup pnpm (via Corepack)
if: matrix.pm == 'pnpm' && matrix.node == '18.x'
shell: bash
run: |
corepack enable
corepack prepare pnpm@9 --activate
- name: Setup Yarn (via Corepack)
if: matrix.pm == 'yarn'
@@ -79,6 +88,8 @@ jobs:
if: matrix.pm == 'pnpm'
id: pnpm-cache-dir
shell: bash
env:
COREPACK_ENABLE_STRICT: '0'
run: echo "dir=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Cache pnpm
@@ -130,7 +141,10 @@ jobs:
run: |
case "${{ matrix.pm }}" in
npm) npm ci ;;
pnpm) pnpm install --no-frozen-lockfile ;;
# pnpm v10 can fail CI on ignored native build scripts
# (for example msgpackr-extract) even though this repo is Yarn-native
# and pnpm is only exercised here as a compatibility lane.
pnpm) pnpm install --config.strict-dep-builds=false --no-frozen-lockfile ;;
# Yarn Berry (v4+) removed --ignore-engines; engine checking is no longer a core feature
yarn) yarn install ;;
bun) bun install ;;
@@ -146,7 +160,7 @@ jobs:
# Upload test artifacts on failure
- name: Upload test artifacts
if: failure()
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: test-results-${{ matrix.os }}-node${{ matrix.node }}-${{ matrix.pm }}
path: |
@@ -190,6 +204,10 @@ jobs:
run: node scripts/ci/validate-install-manifests.js
continue-on-error: false
- name: Validate workflow security
run: node scripts/ci/validate-workflow-security.js
continue-on-error: false
- name: Validate rules
run: node scripts/ci/validate-rules.js
continue-on-error: false

View File

@@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Update monthly metrics issue
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
with:
script: |
const owner = context.repo.owner;

View File

@@ -6,6 +6,7 @@ on:
permissions:
contents: write
id-token: write
jobs:
release:
@@ -22,6 +23,7 @@ jobs:
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: '20.x'
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
run: npm ci
@@ -31,25 +33,41 @@ jobs:
- name: Validate version tag
run: |
if ! [[ "${REF_NAME}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Invalid version tag format. Expected vX.Y.Z"
if ! [[ "${REF_NAME}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.-]+)?$ ]]; then
echo "Invalid version tag format. Expected vX.Y.Z or vX.Y.Z-prerelease"
exit 1
fi
env:
REF_NAME: ${{ github.ref_name }}
- name: Verify plugin.json version matches tag
- name: Verify package version matches tag
env:
TAG_NAME: ${{ github.ref_name }}
run: |
TAG_VERSION="${TAG_NAME#v}"
PLUGIN_VERSION=$(grep -oE '"version": *"[^"]*"' .claude-plugin/plugin.json | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
if [ "$TAG_VERSION" != "$PLUGIN_VERSION" ]; then
echo "::error::Tag version ($TAG_VERSION) does not match plugin.json version ($PLUGIN_VERSION)"
PACKAGE_VERSION=$(node -p "require('./package.json').version")
if [ "$TAG_VERSION" != "$PACKAGE_VERSION" ]; then
echo "::error::Tag version ($TAG_VERSION) does not match package.json version ($PACKAGE_VERSION)"
echo "Run: ./scripts/release.sh $TAG_VERSION"
exit 1
fi
- name: Verify release metadata stays in sync
run: node tests/plugin-manifest.test.js
- name: Check npm publish state
id: npm_publish_state
run: |
PACKAGE_NAME=$(node -p "require('./package.json').name")
PACKAGE_VERSION=$(node -p "require('./package.json').version")
NPM_DIST_TAG=$(node -p "require('./package.json').version.includes('-') ? 'next' : 'latest'")
if npm view "${PACKAGE_NAME}@${PACKAGE_VERSION}" version >/dev/null 2>&1; then
echo "already_published=true" >> "$GITHUB_OUTPUT"
else
echo "already_published=false" >> "$GITHUB_OUTPUT"
fi
echo "dist_tag=${NPM_DIST_TAG}" >> "$GITHUB_OUTPUT"
- name: Generate release highlights
id: highlights
env:
@@ -70,11 +88,21 @@ jobs:
- Improved release-note generation and changelog hygiene
### Notes
- npm package: \`ecc-universal\`
- Claude marketplace/plugin identifier: \`everything-claude-code@everything-claude-code\`
- For migration tips and compatibility notes, see README and CHANGELOG.
EOF
- name: Create GitHub Release
uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2
uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0
with:
body_path: release_body.md
generate_release_notes: true
prerelease: ${{ contains(github.ref_name, '-') }}
make_latest: ${{ contains(github.ref_name, '-') && 'false' || 'true' }}
- name: Publish npm package
if: steps.npm_publish_state.outputs.already_published != 'true'
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npm publish --access public --provenance --tag "${{ steps.npm_publish_state.outputs.dist_tag }}"

View File

@@ -12,9 +12,24 @@ on:
required: false
type: boolean
default: true
secrets:
NPM_TOKEN:
required: false
workflow_dispatch:
inputs:
tag:
description: 'Version tag to release or republish (e.g., v2.0.0-rc.1)'
required: true
type: string
generate-notes:
description: 'Auto-generate release notes'
required: false
type: boolean
default: true
permissions:
contents: write
id-token: write
jobs:
release:
@@ -26,11 +41,13 @@ jobs:
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
ref: ${{ inputs.tag }}
- name: Setup Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: '20.x'
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
run: npm ci
@@ -42,11 +59,39 @@ jobs:
env:
INPUT_TAG: ${{ inputs.tag }}
run: |
if ! [[ "$INPUT_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Invalid version tag format. Expected vX.Y.Z"
if ! [[ "$INPUT_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.-]+)?$ ]]; then
echo "Invalid version tag format. Expected vX.Y.Z or vX.Y.Z-prerelease"
exit 1
fi
- name: Verify package version matches tag
env:
INPUT_TAG: ${{ inputs.tag }}
run: |
TAG_VERSION="${INPUT_TAG#v}"
PACKAGE_VERSION=$(node -p "require('./package.json').version")
if [ "$TAG_VERSION" != "$PACKAGE_VERSION" ]; then
echo "::error::Tag version ($TAG_VERSION) does not match package.json version ($PACKAGE_VERSION)"
echo "Run: ./scripts/release.sh $TAG_VERSION"
exit 1
fi
- name: Verify release metadata stays in sync
run: node tests/plugin-manifest.test.js
- name: Check npm publish state
id: npm_publish_state
run: |
PACKAGE_NAME=$(node -p "require('./package.json').name")
PACKAGE_VERSION=$(node -p "require('./package.json').version")
NPM_DIST_TAG=$(node -p "require('./package.json').version.includes('-') ? 'next' : 'latest'")
if npm view "${PACKAGE_NAME}@${PACKAGE_VERSION}" version >/dev/null 2>&1; then
echo "already_published=true" >> "$GITHUB_OUTPUT"
else
echo "already_published=false" >> "$GITHUB_OUTPUT"
fi
echo "dist_tag=${NPM_DIST_TAG}" >> "$GITHUB_OUTPUT"
- name: Generate release highlights
env:
TAG_NAME: ${{ inputs.tag }}
@@ -59,11 +104,23 @@ jobs:
- Harness reliability and cross-platform compatibility
- Eval-driven quality improvements
- Better workflow and operator ergonomics
### Package Notes
- npm package: \`ecc-universal\`
- Claude marketplace/plugin identifier: \`everything-claude-code@everything-claude-code\`
EOF
- name: Create GitHub Release
uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2
uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0
with:
tag_name: ${{ inputs.tag }}
body_path: release_body.md
generate_release_notes: ${{ inputs.generate-notes }}
prerelease: ${{ contains(inputs.tag, '-') }}
make_latest: ${{ contains(inputs.tag, '-') && 'false' || 'true' }}
- name: Publish npm package
if: steps.npm_publish_state.outputs.already_published != 'true'
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npm publish --access public --provenance --tag "${{ steps.npm_publish_state.outputs.dist_tag }}"

View File

@@ -35,10 +35,18 @@ jobs:
node-version: ${{ inputs.node-version }}
- name: Setup pnpm
if: inputs.package-manager == 'pnpm'
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4
if: inputs.package-manager == 'pnpm' && inputs.node-version != '18.x'
uses: pnpm/action-setup@08c4be7e2e672a47d11bd04269e27e5f3e8529cb # v6.0.0
with:
version: latest
# Keep an explicit pnpm major because this repo's packageManager is Yarn.
version: 10
- name: Setup pnpm (via Corepack)
if: inputs.package-manager == 'pnpm' && inputs.node-version == '18.x'
shell: bash
run: |
corepack enable
corepack prepare pnpm@9 --activate
- name: Setup Yarn (via Corepack)
if: inputs.package-manager == 'yarn'
@@ -70,6 +78,8 @@ jobs:
if: inputs.package-manager == 'pnpm'
id: pnpm-cache-dir
shell: bash
env:
COREPACK_ENABLE_STRICT: '0'
run: echo "dir=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Cache pnpm
@@ -120,7 +130,10 @@ jobs:
run: |
case "${{ inputs.package-manager }}" in
npm) npm ci ;;
pnpm) pnpm install --no-frozen-lockfile ;;
# pnpm v10 can fail CI on ignored native build scripts
# (for example msgpackr-extract) even though this repo is Yarn-native
# and pnpm is only exercised here as a compatibility lane.
pnpm) pnpm install --config.strict-dep-builds=false --no-frozen-lockfile ;;
# Yarn Berry (v4+) removed --ignore-engines; engine checking is no longer a core feature
yarn) yarn install ;;
bun) bun install ;;
@@ -134,7 +147,7 @@ jobs:
- name: Upload test artifacts
if: failure()
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: test-results-${{ inputs.os }}-node${{ inputs.node-version }}-${{ inputs.package-manager }}
path: |

View File

@@ -42,6 +42,9 @@ jobs:
- name: Validate install manifests
run: node scripts/ci/validate-install-manifests.js
- name: Validate workflow security
run: node scripts/ci/validate-workflow-security.js
- name: Validate rules
run: node scripts/ci/validate-rules.js

2
.opencode/.npmignore Normal file
View File

@@ -0,0 +1,2 @@
node_modules
bun.lock

View File

@@ -1,15 +1,15 @@
{
"name": "ecc-universal",
"version": "1.10.0",
"version": "2.0.0-rc.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ecc-universal",
"version": "1.10.0",
"version": "2.0.0-rc.1",
"license": "MIT",
"devDependencies": {
"@opencode-ai/plugin": "^1.0.0",
"@opencode-ai/plugin": "^1.4.3",
"@types/node": "^20.0.0",
"typescript": "^5.3.0"
},
@@ -21,22 +21,37 @@
}
},
"node_modules/@opencode-ai/plugin": {
"version": "1.1.53",
"resolved": "https://registry.npmjs.org/@opencode-ai/plugin/-/plugin-1.1.53.tgz",
"integrity": "sha512-9ye7Wz2kESgt02AUDaMea4hXxj6XhWwKAG8NwFhrw09Ux54bGaMJFt1eIS8QQGIMaD+Lp11X4QdyEg96etEBJw==",
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/@opencode-ai/plugin/-/plugin-1.4.3.tgz",
"integrity": "sha512-Ob/3tVSIeuMRJBr2O23RtrnC5djRe01Lglx+TwGEmjrH9yDBJ2tftegYLnNEjRoMuzITgq9LD8168p4pzv+U/A==",
"dev": true,
"license": "MIT",
"dependencies": {
"@opencode-ai/sdk": "1.1.53",
"@opencode-ai/sdk": "1.4.3",
"zod": "4.1.8"
},
"peerDependencies": {
"@opentui/core": ">=0.1.97",
"@opentui/solid": ">=0.1.97"
},
"peerDependenciesMeta": {
"@opentui/core": {
"optional": true
},
"@opentui/solid": {
"optional": true
}
}
},
"node_modules/@opencode-ai/sdk": {
"version": "1.1.53",
"resolved": "https://registry.npmjs.org/@opencode-ai/sdk/-/sdk-1.1.53.tgz",
"integrity": "sha512-RUIVnPOP1CyyU32FrOOYuE7Ge51lOBuhaFp2NSX98ncApT7ffoNetmwzqrhOiJQgZB1KrbCHLYOCK6AZfacxag==",
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/@opencode-ai/sdk/-/sdk-1.4.3.tgz",
"integrity": "sha512-X0CAVbwoGAjTY2iecpWkx2B+GAa2jSaQKYpJ+xILopeF/OGKZUN15mjqci+L7cEuwLHV5wk3x2TStUOVCa5p0A==",
"dev": true,
"license": "MIT"
"license": "MIT",
"dependencies": {
"cross-spawn": "7.0.6"
}
},
"node_modules/@types/node": {
"version": "20.19.33",
@@ -48,6 +63,61 @@
"undici-types": "~6.21.0"
}
},
"node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"dev": true,
"license": "ISC"
},
"node_modules/path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
"license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/typescript": {
"version": "5.9.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
@@ -69,6 +139,22 @@
"dev": true,
"license": "MIT"
},
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
"node-which": "bin/node-which"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/zod": {
"version": "4.1.8",
"resolved": "https://registry.npmjs.org/zod/-/zod-4.1.8.tgz",

View File

@@ -1,6 +1,6 @@
{
"name": "ecc-universal",
"version": "1.10.0",
"version": "2.0.0-rc.1",
"description": "Everything Claude Code (ECC) plugin for OpenCode - agents, commands, hooks, and skills",
"main": "dist/index.js",
"types": "dist/index.d.ts",
@@ -60,7 +60,7 @@
"@opencode-ai/plugin": ">=1.0.0"
},
"devDependencies": {
"@opencode-ai/plugin": "^1.0.0",
"@opencode-ai/plugin": "^1.4.3",
"@types/node": "^20.0.0",
"typescript": "^5.3.0"
},

View File

@@ -456,7 +456,7 @@ export const ECCHooksPlugin: ECCHooksPluginFn = async ({
const contextBlock = [
"# ECC Context (preserve across compaction)",
"",
"## Active Plugin: Everything Claude Code v1.8.0",
"## Active Plugin: Everything Claude Code v2.0.0-rc.1",
"- Hooks: file.edited, tool.execute.before/after, session.created/idle/deleted, shell.env, compacting, permission.ask",
"- Tools: run-tests, check-coverage, security-audit, format-code, lint-check, git-summary, changed-files",
"- Agents: 13 specialized (planner, architect, tdd-guide, code-reviewer, security-reviewer, build-error-resolver, e2e-runner, refactor-cleaner, doc-updater, go-reviewer, go-build-resolver, database-reviewer, python-reviewer)",

View File

@@ -1,8 +1,8 @@
# Everything Claude Code (ECC) — Agent Instructions
This is a **production-ready AI coding plugin** providing 47 specialized agents, 181 skills, 79 commands, and automated hook workflows for software development.
This is a **production-ready AI coding plugin** providing 48 specialized agents, 184 skills, 79 commands, and automated hook workflows for software development.
**Version:** 1.10.0
**Version:** 2.0.0-rc.1
## Core Principles
@@ -25,8 +25,8 @@ This is a **production-ready AI coding plugin** providing 47 specialized agents,
| e2e-runner | End-to-end Playwright testing | Critical user flows |
| refactor-cleaner | Dead code cleanup | Code maintenance |
| doc-updater | Documentation and codemaps | Updating docs |
| cpp-reviewer | C++ code review | C++ projects |
| cpp-build-resolver | C++ build errors | C++ build failures |
| cpp-reviewer | C/C++ code review | C and C++ projects |
| cpp-build-resolver | C/C++ build errors | C and C++ build failures |
| docs-lookup | Documentation lookup via Context7 | API/docs questions |
| go-reviewer | Go code review | Go projects |
| go-build-resolver | Go build errors | Go build failures |
@@ -145,8 +145,8 @@ Troubleshoot failures: check test isolation → verify mocks → fix implementat
## Project Structure
```
agents/ — 47 specialized subagents
skills/ — 181 workflow skills and domain knowledge
agents/ — 48 specialized subagents
skills/ — 184 workflow skills and domain knowledge
commands/ — 79 slash commands
hooks/ — Trigger-based automations
rules/ — Always-follow guidelines (common + per-language)

View File

@@ -1,5 +1,25 @@
# Changelog
## 2.0.0-rc.1 - 2026-04-28
### Highlights
- Adds the public ECC 2.0 release-candidate surface for the Hermes operator story.
- Documents ECC as the reusable cross-harness substrate across Claude Code, Codex, Cursor, OpenCode, and Gemini.
- Adds a sanitized Hermes import skill surface instead of publishing private operator state.
### Release Surface
- Updated package, plugin, marketplace, OpenCode, agent, and README metadata to `2.0.0-rc.1`.
- Added `docs/releases/2.0.0-rc.1/` with release notes, social drafts, launch checklist, handoff notes, and demo prompts.
- Added `docs/architecture/cross-harness.md` and regression coverage for the ECC/Hermes boundary.
- Kept `ecc2/` versioning independent for now; it remains an alpha control-plane scaffold unless release engineering decides otherwise.
### Notes
- This is a release candidate, not a GA claim for the full ECC 2.0 control-plane roadmap.
- Prerelease npm publishing should use the `next` dist-tag unless release engineering explicitly chooses otherwise.
## 1.10.0 - 2026-04-05
### Highlights

204
README.md
View File

@@ -2,6 +2,8 @@
# Everything Claude Code
![Everything Claude Code — the performance system for AI agent harnesses](assets/hero.png)
[![Stars](https://img.shields.io/github/stars/affaan-m/everything-claude-code?style=flat)](https://github.com/affaan-m/everything-claude-code/stargazers)
[![Forks](https://img.shields.io/github/forks/affaan-m/everything-claude-code?style=flat)](https://github.com/affaan-m/everything-claude-code/network/members)
[![Contributors](https://img.shields.io/github/contributors/affaan-m/everything-claude-code?style=flat)](https://github.com/affaan-m/everything-claude-code/graphs/contributors)
@@ -38,6 +40,8 @@ Not just configs. A complete system: skills, instincts, memory optimization, con
Works across **Claude Code**, **Codex**, **Cursor**, **OpenCode**, **Gemini**, and other AI agent harnesses.
ECC v2.0.0-rc.1 adds the public Hermes operator story on top of that reusable layer: start with the [Hermes setup guide](docs/HERMES-SETUP.md), then review the [rc.1 release notes](docs/releases/2.0.0-rc.1/release-notes.md) and [cross-harness architecture](docs/architecture/cross-harness.md).
---
## The Guides
@@ -82,8 +86,9 @@ This repo is the raw code only. The guides explain everything.
## What's New
### v1.10.0 — Surface Refresh, Operator Workflows, and ECC 2.0 Alpha (Apr 2026)
### v2.0.0-rc.1 — Surface Refresh, Operator Workflows, and ECC 2.0 Alpha (Apr 2026)
- **Dashboard GUI** — New Tkinter-based desktop application (`ecc_dashboard.py` or `npm run dashboard`) with dark/light theme toggle, font customization, and project logo in header and taskbar.
- **Public surface synced to the live repo** — metadata, catalog counts, plugin manifests, and install-facing docs now match the actual OSS surface: 38 agents, 156 skills, and 72 legacy command shims.
- **Operator and outbound workflow expansion** — `brand-voice`, `social-graph-ranker`, `connections-optimizer`, `customer-billing-ops`, `ecc-tools-cost-audit`, `google-workspace-ops`, `project-flow-ops`, and `workspace-surface-audit` round out the operator lane.
- **Media and launch tooling** — `manim-video`, `remotion-video-creation`, and upgraded social publishing surfaces make technical explainers and launch content part of the same system.
@@ -164,7 +169,17 @@ See the full changelog in [Releases](https://github.com/affaan-m/everything-clau
Get up and running in under 2 minutes:
### Step 1: Install the Plugin
### Pick one path only
Most Claude Code users should use exactly one install path:
- **Recommended default:** install the Claude Code plugin, then copy only the rule folders you actually want.
- **Use the manual installer only if** you want finer-grained control, want to avoid the plugin path entirely, or your Claude Code build has trouble resolving the self-hosted marketplace entry.
- **Do not stack install methods.** The most common broken setup is: `/plugin install` first, then `install.sh --profile full` or `npx ecc-install --profile full` afterward.
If you already layered multiple installs and things look duplicated, skip straight to [Reset / Uninstall ECC](#reset--uninstall-ecc).
### Step 1: Install the Plugin (Recommended)
> NOTE: The plugin is convenient, but the OSS installer below is still the most reliable path if your Claude Code build has trouble resolving self-hosted marketplace entries.
@@ -173,12 +188,30 @@ Get up and running in under 2 minutes:
/plugin marketplace add https://github.com/affaan-m/everything-claude-code
# Install plugin
/plugin install ecc@ecc
/plugin install everything-claude-code@everything-claude-code
```
### Naming + Migration Note
ECC now has three public identifiers, and they are not interchangeable:
- GitHub source repo: `affaan-m/everything-claude-code`
- Claude marketplace/plugin identifier: `everything-claude-code@everything-claude-code`
- npm package: `ecc-universal`
This is intentional. Anthropic marketplace/plugin installs are keyed by a canonical plugin identifier, so ECC standardized on `everything-claude-code@everything-claude-code` to keep the listing name, `/plugin install`, `/plugin list`, and repo docs aligned to one public install surface. Older posts may still show the old short-form nickname; that shorthand is deprecated. Separately, the npm package stayed on `ecc-universal`, so npm installs and marketplace installs intentionally use different names.
### Step 2: Install Rules (Required)
> WARNING: **Important:** Claude Code plugins cannot distribute `rules` automatically. Install them manually:
> WARNING: **Important:** Claude Code plugins cannot distribute `rules` automatically.
>
> If you already installed ECC via `/plugin install`, **do not run `./install.sh --profile full`, `.\install.ps1 --profile full`, or `npx ecc-install --profile full` afterward**. The plugin already loads ECC skills, commands, and hooks. Running the full installer after a plugin install copies those same surfaces into your user directories and can create duplicate skills plus duplicate runtime behavior.
>
> For plugin installs, manually copy only the `rules/` directories you want. Start with `rules/common` plus one language or framework pack you actually use. Do not copy every rules directory unless you explicitly want all of that context in Claude.
>
> Use the full installer only when you are doing a fully manual ECC install instead of the plugin path.
>
> If your local Claude setup was wiped or reset, that does not mean you need to repurchase ECC. Start with `node scripts/ecc.js list-installed`, then run `node scripts/ecc.js doctor` and `node scripts/ecc.js repair` before reinstalling anything. That usually restores ECC-managed files without rebuilding your setup. If the problem is account or marketplace access for ECC Tools, handle billing/account recovery separately.
```bash
# Clone the repo first
@@ -188,38 +221,81 @@ cd everything-claude-code
# Install dependencies (pick your package manager)
npm install # or: pnpm install | yarn install | bun install
# macOS/Linux
# Plugin install path: copy only rules
mkdir -p ~/.claude/rules
cp -R rules/common ~/.claude/rules/
cp -R rules/typescript ~/.claude/rules/
# Recommended: install everything (full profile)
./install.sh --profile full
# Or install for specific languages only
./install.sh typescript # or python or golang or swift or php
# ./install.sh typescript python golang swift php
# ./install.sh --target cursor typescript
# ./install.sh --target antigravity typescript
# ./install.sh --target gemini --profile full
# Fully manual ECC install path (use this instead of /plugin install)
# ./install.sh --profile full
```
```powershell
# Windows PowerShell
# Recommended: install everything (full profile)
.\install.ps1 --profile full
# Plugin install path: copy only rules
New-Item -ItemType Directory -Force -Path "$HOME/.claude/rules" | Out-Null
Copy-Item -Recurse rules/common "$HOME/.claude/rules/"
Copy-Item -Recurse rules/typescript "$HOME/.claude/rules/"
# Or install for specific languages only
.\install.ps1 typescript # or python or golang or swift or php
# .\install.ps1 typescript python golang swift php
# .\install.ps1 --target cursor typescript
# .\install.ps1 --target antigravity typescript
# .\install.ps1 --target gemini --profile full
# npm-installed compatibility entrypoint also works cross-platform
npx ecc-install typescript
# Fully manual ECC install path (use this instead of /plugin install)
# .\install.ps1 --profile full
# npx ecc-install --profile full
```
For manual install instructions see the README in the `rules/` folder. When copying rules manually, copy the whole language directory (for example `rules/common` or `rules/golang`), not the files inside it, so relative references keep working and filenames do not collide.
### Fully manual install (Fallback)
Use this only if you are intentionally skipping the plugin path:
```bash
./install.sh --profile full
```
```powershell
.\install.ps1 --profile full
# or
npx ecc-install --profile full
```
If you choose this path, stop there. Do not also run `/plugin install`.
### Reset / Uninstall ECC
If ECC feels duplicated, intrusive, or broken, do not keep reinstalling it on top of itself.
- **Plugin path:** remove the plugin from Claude Code, then delete the specific rule folders you manually copied under `~/.claude/rules/`.
- **Manual installer / CLI path:** from the repo root, preview removal first:
```bash
node scripts/uninstall.js --dry-run
```
Then remove ECC-managed files:
```bash
node scripts/uninstall.js
```
You can also use the lifecycle wrapper:
```bash
node scripts/ecc.js list-installed
node scripts/ecc.js doctor
node scripts/ecc.js repair
node scripts/ecc.js uninstall --dry-run
```
ECC only removes files recorded in its install-state. It will not delete unrelated files it did not install.
If you stacked methods, clean up in this order:
1. Remove the Claude Code plugin install.
2. Run the ECC uninstall command from the repo root to remove install-state-managed files.
3. Delete any extra rule folders you copied manually and no longer want.
4. Reinstall once, using a single path.
### Step 3: Start Using
```bash
@@ -233,10 +309,27 @@ For manual install instructions see the README in the `rules/` folder. When copy
# /plan "Add user authentication"
# Check available commands
/plugin list ecc@ecc
/plugin list everything-claude-code@everything-claude-code
```
**That's it!** You now have access to 47 agents, 181 skills, and 79 legacy command shims.
**That's it!** You now have access to 48 agents, 184 skills, and 79 legacy command shims.
### Dashboard GUI
Launch the desktop dashboard to visually explore ECC components:
```bash
npm run dashboard
# or
python3 ./ecc_dashboard.py
```
**Features:**
- Tabbed interface: Agents, Skills, Commands, Rules, Settings
- Dark/Light theme toggle
- Font customization (family & size)
- Project logo in header and taskbar
- Search and filter across all components
### Multi-model commands require additional setup
@@ -351,7 +444,7 @@ everything-claude-code/
| |-- market-research/ # Source-attributed market, competitor, and investor research (NEW)
| |-- investor-materials/ # Pitch decks, one-pagers, memos, and financial models (NEW)
| |-- investor-outreach/ # Personalized fundraising outreach and follow-up (NEW)
| |-- continuous-learning/ # Auto-extract patterns from sessions (Longform Guide)
| |-- continuous-learning/ # Legacy v1 Stop-hook pattern extraction
| |-- continuous-learning-v2/ # Instinct-based learning with confidence scoring
| |-- iterative-retrieval/ # Progressive context refinement for subagents
| |-- strategic-compact/ # Manual compaction suggestions (Longform Guide)
@@ -498,6 +591,12 @@ everything-claude-code/
|-- mcp-configs/ # MCP server configurations
| |-- mcp-servers.json # GitHub, Supabase, Vercel, Railway, etc.
|
|-- ecc_dashboard.py # Desktop GUI dashboard (Tkinter)
|
|-- assets/ # Assets for dashboard
| |-- images/
| |-- ecc-logo.png
|
|-- marketplace.json # Self-hosted marketplace config (for /plugin marketplace add)
```
@@ -515,7 +614,7 @@ Use the `/skill-create` command for local analysis without external services:
```bash
/skill-create # Analyze current repo
/skill-create --instincts # Also generate instincts for continuous-learning
/skill-create --instincts # Also generate instincts for continuous-learning-v2
```
This analyzes your git history locally and generates SKILL.md files.
@@ -580,6 +679,7 @@ The instinct-based learning system automatically learns your patterns:
```
See `skills/continuous-learning-v2/` for full documentation.
Keep `continuous-learning/` only when you explicitly want the legacy v1 Stop-hook learned-skill flow.
---
@@ -621,7 +721,7 @@ The easiest way to use this repo - install as a Claude Code plugin:
/plugin marketplace add https://github.com/affaan-m/everything-claude-code
# Install the plugin
/plugin install ecc@ecc
/plugin install everything-claude-code@everything-claude-code
```
Or add directly to your `~/.claude/settings.json`:
@@ -637,7 +737,7 @@ Or add directly to your `~/.claude/settings.json`:
}
},
"enabledPlugins": {
"ecc@ecc": true
"everything-claude-code@everything-claude-code": true
}
}
```
@@ -700,9 +800,27 @@ mkdir -p ~/.claude/commands
cp everything-claude-code/commands/*.md ~/.claude/commands/
```
#### Add hooks to settings.json
#### Install hooks
Copy the hooks from `hooks/hooks.json` to your `~/.claude/settings.json`.
Do not copy the raw repo `hooks/hooks.json` into `~/.claude/settings.json` or `~/.claude/hooks/hooks.json`. That file is plugin/repo-oriented and is meant to be installed through the ECC installer or loaded as a plugin, so raw copying is not a supported manual install path.
Use the installer to install only the Claude hook runtime so command paths are rewritten correctly:
```bash
# macOS / Linux
bash ./install.sh --target claude --modules hooks-runtime
```
```powershell
# Windows PowerShell
pwsh -File .\install.ps1 --target claude --modules hooks-runtime
```
That writes resolved hooks to `~/.claude/hooks/hooks.json` and leaves any existing `~/.claude/settings.json` untouched.
If you installed ECC via `/plugin install`, do not copy those hooks into `settings.json`. Claude Code v2.1+ already auto-loads plugin `hooks/hooks.json`, and duplicating them in `settings.json` causes duplicate execution and cross-platform hook conflicts.
Windows note: the Claude config directory is `%USERPROFILE%\\.claude`, not `~/claude`.
#### Configure MCPs
@@ -837,7 +955,7 @@ Slash forms below are shown because they are still the fastest familiar entrypoi
<summary><b>How do I check which agents/commands are installed?</b></summary>
```bash
/plugin list ecc@ecc
/plugin list everything-claude-code@everything-claude-code
```
This shows all available agents, commands, and skills from the plugin.
@@ -968,6 +1086,14 @@ Please contribute! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
- Testing strategies (different frameworks, visual regression)
- Domain-specific knowledge (ML, data engineering, mobile)
### Community Ecosystem Notes
These are not bundled with ECC and are not audited by this repo, but they are worth knowing about if you are exploring the broader Claude Code skills ecosystem:
- [claude-seo](https://github.com/AgriciDaniel/claude-seo) — SEO-focused skill and agent collection
- [claude-ads](https://github.com/AgriciDaniel/claude-ads) — Ad-audit and paid-growth workflow collection
- [claude-cybersecurity](https://github.com/AgriciDaniel/claude-cybersecurity) — Security-oriented skill and agent collection
---
## Cursor IDE Support
@@ -1152,9 +1278,9 @@ The configuration is automatically detected from `.opencode/opencode.json`.
| Feature | Claude Code | OpenCode | Status |
|---------|-------------|----------|--------|
| Agents | PASS: 47 agents | PASS: 12 agents | **Claude Code leads** |
| Agents | PASS: 48 agents | PASS: 12 agents | **Claude Code leads** |
| Commands | PASS: 79 commands | PASS: 31 commands | **Claude Code leads** |
| Skills | PASS: 181 skills | PASS: 37 skills | **Claude Code leads** |
| Skills | PASS: 184 skills | PASS: 37 skills | **Claude Code leads** |
| Hooks | PASS: 8 event types | PASS: 11 events | **OpenCode has more!** |
| Rules | PASS: 29 rules | PASS: 13 instructions | **Claude Code leads** |
| MCP Servers | PASS: 14 servers | PASS: Full | **Full parity** |
@@ -1261,9 +1387,9 @@ ECC is the **first plugin to maximize every major AI coding tool**. Here's how e
| Feature | Claude Code | Cursor IDE | Codex CLI | OpenCode |
|---------|------------|------------|-----------|----------|
| **Agents** | 47 | Shared (AGENTS.md) | Shared (AGENTS.md) | 12 |
| **Agents** | 48 | Shared (AGENTS.md) | Shared (AGENTS.md) | 12 |
| **Commands** | 79 | Shared | Instruction-based | 31 |
| **Skills** | 181 | Shared | 10 (native format) | 37 |
| **Skills** | 184 | Shared | 10 (native format) | 37 |
| **Hook Events** | 8 types | 15 types | None yet | 11 types |
| **Hook Scripts** | 20+ scripts | 16 scripts (DRY adapter) | N/A | Plugin hooks |
| **Rules** | 34 (common + lang) | 34 (YAML frontmatter) | Instruction-based | 13 instructions |
@@ -1273,7 +1399,7 @@ ECC is the **first plugin to maximize every major AI coding tool**. Here's how e
| **Context File** | CLAUDE.md + AGENTS.md | AGENTS.md | AGENTS.md | AGENTS.md |
| **Secret Detection** | Hook-based | beforeSubmitPrompt hook | Sandbox-based | Hook-based |
| **Auto-Format** | PostToolUse hook | afterFileEdit hook | N/A | file.edited hook |
| **Version** | Plugin | Plugin | Reference config | 1.10.0 |
| **Version** | Plugin | Plugin | Reference config | 2.0.0-rc.1 |
**Key architectural decisions:**
- **AGENTS.md** at root is the universal cross-tool file (read by all 4 tools)

View File

@@ -78,6 +78,17 @@
---
## 最新动态
### v2.0.0-rc.1 — 表面同步、运营工作流与 ECC 2.0 Alpha2026年4月
- **公共表面已与真实仓库同步** —— 元数据、目录数量、插件清单以及安装文档现在都与实际开源表面保持一致。
- **运营与外向型工作流扩展** —— `brand-voice``social-graph-ranker``customer-billing-ops``google-workspace-ops` 等运营型 skill 已纳入同一系统。
- **媒体与发布工具补齐** —— `manim-video``remotion-video-creation` 以及社媒发布能力让技术讲解和发布流程直接在同一仓库内完成。
- **框架与产品表面继续扩展** —— `nestjs-patterns`、更完整的 Codex/OpenCode 安装表面,以及跨 harness 打包改进,让仓库不再局限于 Claude Code。
- **ECC 2.0 alpha 已进入仓库** —— `ecc2/` 下的 Rust 控制层现已可在本地构建,并提供 `dashboard``start``sessions``status``stop``resume``daemon` 命令。
- **生态加固持续推进** —— AgentShield、ECC Tools 成本控制、计费门户工作与网站刷新仍围绕核心插件持续交付。
## 快速开始
在 2 分钟内快速上手:
@@ -88,15 +99,21 @@
```bash
# 添加市场
/plugin marketplace add affaan-m/everything-claude-code
/plugin marketplace add https://github.com/affaan-m/everything-claude-code
# 安装插件
/plugin install ecc@ecc
/plugin install everything-claude-code@everything-claude-code
```
> 安装名称说明较早的帖子里可能还会出现旧的短别名。那个旧缩写现在已经废弃。Anthropic 的 marketplace/plugin 安装是按规范化插件标识符寻址的,因此 ECC 统一为 `everything-claude-code@everything-claude-code`,这样市场条目、安装命令、`/plugin list` 输出和仓库文档都使用同一个公开名称,不再出现两个名字指向同一插件的混乱。
### 第二步:安装规则(必需)
> WARNING: **重要提示:** Claude Code 插件无法自动分发 `rules`,需要手动安装:
> WARNING: **重要提示:** Claude Code 插件无法自动分发 `rules`
>
> 如果你已经通过 `/plugin install` 安装了 ECC**不要再运行 `./install.sh --profile full`、`.\install.ps1 --profile full` 或 `npx ecc-install --profile full`**。插件已经会自动加载 ECC 的技能、命令和 hooks此时再执行完整安装会把同一批内容再次复制到用户目录导致技能重复以及运行时行为重复。
>
> 对于插件安装路径,请只手动复制你需要的 `rules/` 目录。只有在你完全不走插件安装、而是选择“纯手动安装 ECC”时才应该使用完整安装器。
```bash
# 首先克隆仓库
@@ -106,34 +123,26 @@ cd everything-claude-code
# 安装依赖(选择你常用的包管理器)
npm install # 或pnpm install | yarn install | bun install
# macOS/Linux 系统
# 插件安装路径:只复制规则
mkdir -p ~/.claude/rules
cp -R rules/common ~/.claude/rules/
cp -R rules/typescript ~/.claude/rules/
# 推荐方式:完整安装(完整配置文件
./install.sh --profile full
# 或仅为指定编程语言安装
./install.sh typescript # 也可安装 python、golang、swift、php
# ./install.sh typescript python golang swift php
# ./install.sh --target cursor typescript
# ./install.sh --target antigravity typescript
# ./install.sh --target gemini --profile full
# 纯手动安装 ECC不要和 /plugin install 叠加
# ./install.sh --profile full
```
```powershell
# Windows 系统PowerShell
# 推荐方式:完整安装(完整配置文件)
.\install.ps1 --profile full
# 插件安装路径:只复制规则
New-Item -ItemType Directory -Force -Path "$HOME/.claude/rules" | Out-Null
Copy-Item -Recurse rules/common "$HOME/.claude/rules/"
Copy-Item -Recurse rules/typescript "$HOME/.claude/rules/"
# 或仅为指定编程语言安装
.\install.ps1 typescript # 也可安装 python、golang、swift、php
# .\install.ps1 typescript python golang swift php
# .\install.ps1 --target cursor typescript
# .\install.ps1 --target antigravity typescript
# .\install.ps1 --target gemini --profile full
# 通过 npm 安装的兼容入口,支持全平台使用
npx ecc-install typescript
# 纯手动安装 ECC不要和 /plugin install 叠加)
# .\install.ps1 --profile full
# npx ecc-install --profile full
```
如需手动安装说明,请查看 `rules/` 文件夹中的 README 文档。手动复制规则文件时,请直接复制**整个语言目录**(例如 `rules/common``rules/golang`),而非目录内的单个文件,以保证相对路径引用正常、文件名不会冲突。
@@ -148,10 +157,10 @@ npx ecc-install typescript
# /plan "添加用户认证"
# 查看可用命令
/plugin list ecc@ecc
/plugin list everything-claude-code@everything-claude-code
```
**完成!** 你现在可以使用 47 个代理、181 个技能和 79 个命令。
**完成!** 你现在可以使用 48 个代理、184 个技能和 79 个命令。
### multi-* 命令需要额外配置
@@ -532,10 +541,10 @@ Claude Code v2.1+ 会**按照约定自动加载**已安装插件中的 `hooks/ho
```bash
# 将此仓库添加为市场
/plugin marketplace add affaan-m/everything-claude-code
/plugin marketplace add https://github.com/affaan-m/everything-claude-code
# 安装插件
/plugin install ecc@ecc
/plugin install everything-claude-code@everything-claude-code
```
或直接添加到你的 `~/.claude/settings.json`
@@ -551,7 +560,7 @@ Claude Code v2.1+ 会**按照约定自动加载**已安装插件中的 `hooks/ho
}
},
"enabledPlugins": {
"ecc@ecc": true
"everything-claude-code@everything-claude-code": true
}
}
```
@@ -615,7 +624,9 @@ cp everything-claude-code/commands/*.md ~/.claude/commands/
```
#### 将钩子配置添加到 settings.json
`hooks/hooks.json` 中的钩子配置复制到你的 `~/.claude/settings.json` 文件中。
仅适用于手动安装:如果你没有通过 Claude 插件方式安装 ECC可以`hooks/hooks.json` 中的钩子配置复制到你的 `~/.claude/settings.json` 文件中。
如果你是通过 `/plugin install` 安装 ECC请不要再把这些钩子复制到 `settings.json`。Claude Code v2.1+ 会自动加载插件中的 `hooks/hooks.json`,重复注册会导致重复执行以及 `${CLAUDE_PLUGIN_ROOT}` 无法解析。
#### 配置 MCP 服务
`mcp-configs/mcp-servers.json` 中复制需要的 MCP 服务定义,粘贴到官方 Claude Code 配置文件 `~/.claude/settings.json` 中;

View File

@@ -245,9 +245,17 @@ tmux attach -t dev
- Marketplace cache not updated
- Claude Code version incompatibility
- Corrupted plugin files
- Local Claude setup was wiped or reset
**Solutions:**
```bash
# First inspect what ECC still knows about this machine
ecc list-installed
ecc doctor
ecc repair
# Only reinstall if doctor/repair cannot restore the missing files
# Inspect the plugin cache before changing it
ls -la ~/.claude/plugins/cache/
@@ -259,6 +267,8 @@ mkdir -p ~/.claude/plugins/cache
# Claude Code → Extensions → Everything Claude Code → Uninstall
# Then reinstall from marketplace
# If the issue is marketplace/account access, use ECC Tools billing/account recovery separately; do not use reinstall as a proxy for account recovery
# Check Claude Code version
claude --version
# Requires Claude Code 2.0+

View File

@@ -1 +1 @@
1.10.0
2.0.0-rc.1

View File

@@ -1,6 +1,6 @@
# Working Context
Last updated: 2026-04-05
Last updated: 2026-04-08
## Purpose
@@ -10,7 +10,7 @@ Public ECC plugin repo for agents, skills, commands, hooks, rules, install surfa
- Default branch: `main`
- Public release surface is aligned at `v1.10.0`
- Public catalog truth is `39` agents, `73` commands, and `179` skills
- Public catalog truth is `47` agents, `79` commands, and `181` skills
- Public plugin slug is now `ecc`; legacy `everything-claude-code` install paths remain supported for compatibility
- Release discussion: `#1272`
- ECC 2.0 exists in-tree and builds, but it is still alpha rather than GA
@@ -36,6 +36,7 @@ Public ECC plugin repo for agents, skills, commands, hooks, rules, install surfa
- control plane primitives
- operator surface
- self-improving skills
- keep `agent.yaml` export parity with the shipped `commands/` and `skills/` directories so modern install surfaces do not silently lose command registration
- Skill quality:
- rewrite content-facing skills to use source-backed voice modeling
- remove generic LLM rhetoric, canned CTA patterns, and forced platform stereotypes
@@ -175,3 +176,4 @@ Keep this file detailed for only the current sprint, blockers, and next actions.
- `skills/oura-health` and `skills/pmx-guidelines` are user- or project-specific, not canonical ECC surfaces
- `docs/releases/2.0.0-preview/*` is premature collateral and should be rebuilt from current product truth later
- nested `skills/hermes-generated/*` is superseded by the top-level ECC-native operator skills already ported to `main`
- 2026-04-08: Fixed the command-export regression reported in `#1327` by restoring a canonical `commands:` section in `agent.yaml` and adding `tests/ci/agent-yaml-surface.test.js` to enforce exact parity between the YAML export surface and the real `commands/` directory. Verified with the full repo test sweep: `1764/1764` passing.

View File

@@ -1,6 +1,6 @@
spec_version: "0.1.0"
name: everything-claude-code
version: 1.10.0
version: 2.0.0-rc.1
description: "Initial gitagent export surface for ECC's shared skill catalog, governance, and identity. Native agents, commands, and hooks remain authoritative in the repository while manifest coverage expands."
author: affaan-m
license: MIT
@@ -143,6 +143,86 @@ skills:
- videodb
- visa-doc-translate
- x-api
commands:
- agent-sort
- aside
- build-fix
- checkpoint
- claw
- code-review
- context-budget
- cpp-build
- cpp-review
- cpp-test
- devfleet
- docs
- e2e
- eval
- evolve
- feature-dev
- flutter-build
- flutter-review
- flutter-test
- gan-build
- gan-design
- go-build
- go-review
- go-test
- gradle-build
- harness-audit
- hookify
- hookify-configure
- hookify-help
- hookify-list
- instinct-export
- instinct-import
- instinct-status
- jira
- kotlin-build
- kotlin-review
- kotlin-test
- learn
- learn-eval
- loop-start
- loop-status
- model-route
- multi-backend
- multi-execute
- multi-frontend
- multi-plan
- multi-workflow
- orchestrate
- plan
- pm2
- projects
- promote
- prompt-optimize
- prp-commit
- prp-implement
- prp-plan
- prp-pr
- prp-prd
- prune
- python-review
- quality-gate
- refactor-clean
- resume-session
- review-pr
- rules-distill
- rust-build
- rust-review
- rust-test
- santa-loop
- save-session
- sessions
- setup-pm
- skill-create
- skill-health
- tdd
- test-coverage
- update-codemaps
- update-docs
- verify
tags:
- agent-harness
- developer-tools

141
agents/a11y-architect.md Normal file
View File

@@ -0,0 +1,141 @@
---
name: a11y-architect
description: Accessibility Architect specializing in WCAG 2.2 compliance for Web and Native platforms. Use PROACTIVELY when designing UI components, establishing design systems, or auditing code for inclusive user experiences.
model: sonnet
tools: ["Read", "Write", "Edit", "Bash", "Grep", "Glob"]
model: opus
---
You are a Senior Accessibility Architect. Your goal is to ensure that every digital product is Perceivable, Operable, Understandable, and Robust (POUR) for all users, including those with visual, auditory, motor, or cognitive disabilities.
## Your Role
- **Architecting Inclusivity**: Design UI systems that natively support assistive technologies (Screen Readers, Voice Control, Switch Access).
- **WCAG 2.2 Enforcement**: Apply the latest success criteria, focusing on new standards like Focus Appearance, Target Size, and Redundant Entry.
- **Platform Strategy**: Bridge the gap between Web standards (WAI-ARIA) and Native frameworks (SwiftUI/Jetpack Compose).
- **Technical Specifications**: Provide developers with precise attributes (roles, labels, hints, and traits) required for compliance.
## Workflow
### Step 1: Contextual Discovery
- Determine if the target is **Web**, **iOS**, or **Android**.
- Analyze the user interaction (e.g., Is this a simple button or a complex data grid?).
- Identify potential accessibility "blockers" (e.g., color-only indicators, missing focus containment in modals).
### Step 2: Strategic Implementation
- **Apply the Accessibility Skill**: Invoke specific logic to generate semantic code.
- **Define Focus Flow**: Map out how a keyboard or screen reader user will move through the interface.
- **Optimize Touch/Pointer**: Ensure all interactive elements meet the minimum **24x24 pixel** spacing or **44x44 pixel** target size requirements.
### Step 3: Validation & Documentation
- Review the output against the WCAG 2.2 Level AA checklist.
- Provide a brief "Implementation Note" explaining _why_ certain attributes (like `aria-live` or `accessibilityHint`) were used.
## Output Format
For every component or page request, provide:
1. **The Code**: Semantic HTML/ARIA or Native code.
2. **The Accessibility Tree**: A description of what a screen reader will announce.
3. **Compliance Mapping**: A list of specific WCAG 2.2 criteria addressed.
## Examples
### Example: Accessible Search Component
**Input**: "Create a search bar with a submit icon."
**Action**: Ensuring the icon-only button has a visible label and the input is correctly labeled.
**Output**:
```html
<form role="search">
<label for="site-search" class="sr-only">Search the site</label>
<input type="search" id="site-search" name="q" />
<button type="submit" aria-label="Search">
<svg aria-hidden="true">...</svg>
</button>
</form>
```
## WCAG 2.2 Core Compliance Checklist
### 1. Perceivable (Information must be presentable)
- [ ] **Text Alternatives**: All non-text content has a text alternative (Alt text or labels).
- [ ] **Contrast**: Text meets 4.5:1; UI components/graphics meet 3:1 contrast ratios.
- [ ] **Adaptable**: Content reflows and remains functional when resized up to 400%.
### 2. Operable (Interface components must be usable)
- [ ] **Keyboard Accessible**: Every interactive element is reachable via keyboard/switch control.
- [ ] **Navigable**: Focus order is logical, and focus indicators are high-contrast (SC 2.4.11).
- [ ] **Pointer Gestures**: Single-pointer alternatives exist for all dragging or multipoint gestures.
- [ ] **Target Size**: Interactive elements are at least 24x24 CSS pixels (SC 2.5.8).
### 3. Understandable (Information must be clear)
- [ ] **Predictable**: Navigation and identification of elements are consistent across the app.
- [ ] **Input Assistance**: Forms provide clear error identification and suggestions for fix.
- [ ] **Redundant Entry**: Avoid asking for the same info twice in a single process (SC 3.3.7).
### 4. Robust (Content must be compatible)
- [ ] **Compatibility**: Maximize compatibility with assistive tech using valid Name, Role, and Value.
- [ ] **Status Messages**: Screen readers are notified of dynamic changes via ARIA live regions.
---
## Anti-Patterns
| Issue | Why it fails |
| :------------------------- | :------------------------------------------------------------------------------------------------- |
| **"Click Here" Links** | Non-descriptive; screen reader users navigating by links won't know the destination. |
| **Fixed-Sized Containers** | Prevents content reflow and breaks the layout at higher zoom levels. |
| **Keyboard Traps** | Prevents users from navigating the rest of the page once they enter a component. |
| **Auto-Playing Media** | Distracting for users with cognitive disabilities; interferes with screen reader audio. |
| **Empty Buttons** | Icon-only buttons without an `aria-label` or `accessibilityLabel` are invisible to screen readers. |
## Accessibility Decision Record Template
For major UI decisions, use this format:
````markdown
# ADR-ACC-[000]: [Title of the Accessibility Decision]
## Status
Proposed | **Accepted** | Deprecated | Superseded by [ADR-XXX]
## Context
_Describe the UI component or workflow being addressed._
- **Platform**: [Web | iOS | Android | Cross-platform]
- **WCAG 2.2 Success Criterion**: [e.g., 2.5.8 Target Size (Minimum)]
- **Problem**: What is the current accessibility barrier? (e.g., "The 'Close' button in the modal is too small for users with motor impairments.")
## Decision
_Detail the specific implementation choice._
"We will implement a touch target of at least 44x44 points for all mobile navigation elements and 24x24 CSS pixels for web, ensuring a minimum 4px spacing between adjacent targets."
## Implementation Details
### Code/Spec
```[language]
// Example: SwiftUI
Button(action: close) {
Image(systemName: "xmark")
.frame(width: 44, height: 44) // Standardizing hit area
}
.accessibilityLabel("Close modal")
```
````
## Reference
- See skill `accessibility` to transform raw UI requirements into platform-specific accessible code (WAI-ARIA, SwiftUI, or Jetpack Compose) based on WCAG 2.2 criteria.

BIN
assets/hero.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

BIN
assets/images/ecc-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

View File

@@ -1,6 +1,6 @@
---
description: Quick commit with natural language file targeting — describe what to commit in plain English
argument-hint: [target description] (blank = all changes)
description: "Quick commit with natural language file targeting — describe what to commit in plain English"
argument-hint: "[target description] (blank = all changes)"
---
# Smart Commit

View File

@@ -1,6 +1,6 @@
---
description: Create a GitHub PR from current branch with unpushed commits — discovers templates, analyzes changes, pushes
argument-hint: [base-branch] (default: main)
description: "Create a GitHub PR from current branch with unpushed commits — discovers templates, analyzes changes, pushes"
argument-hint: "[base-branch] (default: main)"
---
# Create Pull Request

View File

@@ -1,6 +1,6 @@
---
description: Interactive PRD generator - problem-first, hypothesis-driven product spec with back-and-forth questioning
argument-hint: [feature/product idea] (blank = start with questions)
description: "Interactive PRD generator - problem-first, hypothesis-driven product spec with back-and-forth questioning"
argument-hint: "[feature/product idea] (blank = start with questions)"
---
# Product Requirements Document Generator

View File

@@ -29,8 +29,9 @@ Use `/sessions info` when you need operator-surface context for a swarm: branch,
**Script:**
```bash
node -e "
const sm = require((()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;try{var b=p.join(d,'plugins','cache','everything-claude-code');for(var o of f.readdirSync(b))for(var v of f.readdirSync(p.join(b,o))){var c=p.join(b,o,v);if(f.existsSync(p.join(c,q)))return c}}catch(x){}return d})()+'/scripts/lib/session-manager');
const aa = require((()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;try{var b=p.join(d,'plugins','cache','everything-claude-code');for(var o of f.readdirSync(b))for(var v of f.readdirSync(p.join(b,o))){var c=p.join(b,o,v);if(f.existsSync(p.join(c,q)))return c}}catch(x){}return d})()+'/scripts/lib/session-aliases');
const _r = (()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;for(var s of [['ecc'],['ecc@ecc'],['marketplace','ecc'],['everything-claude-code'],['everything-claude-code@everything-claude-code'],['marketplace','everything-claude-code']]){var l=p.join(d,'plugins',...s);if(f.existsSync(p.join(l,q)))return l}try{for(var g of ['ecc','everything-claude-code']){var b=p.join(d,'plugins','cache',g);for(var o of f.readdirSync(b,{withFileTypes:true})){if(!o.isDirectory())continue;for(var v of f.readdirSync(p.join(b,o.name),{withFileTypes:true})){if(!v.isDirectory())continue;var c=p.join(b,o.name,v.name);if(f.existsSync(p.join(c,q)))return c}}}}catch(x){}return d})();
const sm = require(_r + '/scripts/lib/session-manager');
const aa = require(_r + '/scripts/lib/session-aliases');
const path = require('path');
const result = sm.getAllSessions({ limit: 20 });
@@ -70,8 +71,9 @@ Load and display a session's content (by ID or alias).
**Script:**
```bash
node -e "
const sm = require((()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;try{var b=p.join(d,'plugins','cache','everything-claude-code');for(var o of f.readdirSync(b))for(var v of f.readdirSync(p.join(b,o))){var c=p.join(b,o,v);if(f.existsSync(p.join(c,q)))return c}}catch(x){}return d})()+'/scripts/lib/session-manager');
const aa = require((()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;try{var b=p.join(d,'plugins','cache','everything-claude-code');for(var o of f.readdirSync(b))for(var v of f.readdirSync(p.join(b,o))){var c=p.join(b,o,v);if(f.existsSync(p.join(c,q)))return c}}catch(x){}return d})()+'/scripts/lib/session-aliases');
const _r = (()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;for(var s of [['ecc'],['ecc@ecc'],['marketplace','ecc'],['everything-claude-code'],['everything-claude-code@everything-claude-code'],['marketplace','everything-claude-code']]){var l=p.join(d,'plugins',...s);if(f.existsSync(p.join(l,q)))return l}try{for(var g of ['ecc','everything-claude-code']){var b=p.join(d,'plugins','cache',g);for(var o of f.readdirSync(b,{withFileTypes:true})){if(!o.isDirectory())continue;for(var v of f.readdirSync(p.join(b,o.name),{withFileTypes:true})){if(!v.isDirectory())continue;var c=p.join(b,o.name,v.name);if(f.existsSync(p.join(c,q)))return c}}}}catch(x){}return d})();
const sm = require(_r + '/scripts/lib/session-manager');
const aa = require(_r + '/scripts/lib/session-aliases');
const id = process.argv[1];
// First try to resolve as alias
@@ -143,8 +145,9 @@ Create a memorable alias for a session.
**Script:**
```bash
node -e "
const sm = require((()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;try{var b=p.join(d,'plugins','cache','everything-claude-code');for(var o of f.readdirSync(b))for(var v of f.readdirSync(p.join(b,o))){var c=p.join(b,o,v);if(f.existsSync(p.join(c,q)))return c}}catch(x){}return d})()+'/scripts/lib/session-manager');
const aa = require((()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;try{var b=p.join(d,'plugins','cache','everything-claude-code');for(var o of f.readdirSync(b))for(var v of f.readdirSync(p.join(b,o))){var c=p.join(b,o,v);if(f.existsSync(p.join(c,q)))return c}}catch(x){}return d})()+'/scripts/lib/session-aliases');
const _r = (()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;for(var s of [['ecc'],['ecc@ecc'],['marketplace','ecc'],['everything-claude-code'],['everything-claude-code@everything-claude-code'],['marketplace','everything-claude-code']]){var l=p.join(d,'plugins',...s);if(f.existsSync(p.join(l,q)))return l}try{for(var g of ['ecc','everything-claude-code']){var b=p.join(d,'plugins','cache',g);for(var o of f.readdirSync(b,{withFileTypes:true})){if(!o.isDirectory())continue;for(var v of f.readdirSync(p.join(b,o.name),{withFileTypes:true})){if(!v.isDirectory())continue;var c=p.join(b,o.name,v.name);if(f.existsSync(p.join(c,q)))return c}}}}catch(x){}return d})();
const sm = require(_r + '/scripts/lib/session-manager');
const aa = require(_r + '/scripts/lib/session-aliases');
const sessionId = process.argv[1];
const aliasName = process.argv[2];
@@ -183,7 +186,8 @@ Delete an existing alias.
**Script:**
```bash
node -e "
const aa = require((()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;try{var b=p.join(d,'plugins','cache','everything-claude-code');for(var o of f.readdirSync(b))for(var v of f.readdirSync(p.join(b,o))){var c=p.join(b,o,v);if(f.existsSync(p.join(c,q)))return c}}catch(x){}return d})()+'/scripts/lib/session-aliases');
const _r = (()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;for(var s of [['ecc'],['ecc@ecc'],['marketplace','ecc'],['everything-claude-code'],['everything-claude-code@everything-claude-code'],['marketplace','everything-claude-code']]){var l=p.join(d,'plugins',...s);if(f.existsSync(p.join(l,q)))return l}try{for(var g of ['ecc','everything-claude-code']){var b=p.join(d,'plugins','cache',g);for(var o of f.readdirSync(b,{withFileTypes:true})){if(!o.isDirectory())continue;for(var v of f.readdirSync(p.join(b,o.name),{withFileTypes:true})){if(!v.isDirectory())continue;var c=p.join(b,o.name,v.name);if(f.existsSync(p.join(c,q)))return c}}}}catch(x){}return d})();
const aa = require(_r + '/scripts/lib/session-aliases');
const aliasName = process.argv[1];
if (!aliasName) {
@@ -212,8 +216,9 @@ Show detailed information about a session.
**Script:**
```bash
node -e "
const sm = require((()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;try{var b=p.join(d,'plugins','cache','everything-claude-code');for(var o of f.readdirSync(b))for(var v of f.readdirSync(p.join(b,o))){var c=p.join(b,o,v);if(f.existsSync(p.join(c,q)))return c}}catch(x){}return d})()+'/scripts/lib/session-manager');
const aa = require((()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;try{var b=p.join(d,'plugins','cache','everything-claude-code');for(var o of f.readdirSync(b))for(var v of f.readdirSync(p.join(b,o))){var c=p.join(b,o,v);if(f.existsSync(p.join(c,q)))return c}}catch(x){}return d})()+'/scripts/lib/session-aliases');
const _r = (()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;for(var s of [['ecc'],['ecc@ecc'],['marketplace','ecc'],['everything-claude-code'],['everything-claude-code@everything-claude-code'],['marketplace','everything-claude-code']]){var l=p.join(d,'plugins',...s);if(f.existsSync(p.join(l,q)))return l}try{for(var g of ['ecc','everything-claude-code']){var b=p.join(d,'plugins','cache',g);for(var o of f.readdirSync(b,{withFileTypes:true})){if(!o.isDirectory())continue;for(var v of f.readdirSync(p.join(b,o.name),{withFileTypes:true})){if(!v.isDirectory())continue;var c=p.join(b,o.name,v.name);if(f.existsSync(p.join(c,q)))return c}}}}catch(x){}return d})();
const sm = require(_r + '/scripts/lib/session-manager');
const aa = require(_r + '/scripts/lib/session-aliases');
const id = process.argv[1];
const resolved = aa.resolveAlias(id);
@@ -262,7 +267,8 @@ Show all session aliases.
**Script:**
```bash
node -e "
const aa = require((()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;try{var b=p.join(d,'plugins','cache','everything-claude-code');for(var o of f.readdirSync(b))for(var v of f.readdirSync(p.join(b,o))){var c=p.join(b,o,v);if(f.existsSync(p.join(c,q)))return c}}catch(x){}return d})()+'/scripts/lib/session-aliases');
const _r = (()=>{var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var p=require('path'),f=require('fs'),h=require('os').homedir(),d=p.join(h,'.claude'),q=p.join('scripts','lib','utils.js');if(f.existsSync(p.join(d,q)))return d;for(var s of [['ecc'],['ecc@ecc'],['marketplace','ecc'],['everything-claude-code'],['everything-claude-code@everything-claude-code'],['marketplace','everything-claude-code']]){var l=p.join(d,'plugins',...s);if(f.existsSync(p.join(l,q)))return l}try{for(var g of ['ecc','everything-claude-code']){var b=p.join(d,'plugins','cache',g);for(var o of f.readdirSync(b,{withFileTypes:true})){if(!o.isDirectory())continue;for(var v of f.readdirSync(p.join(b,o.name),{withFileTypes:true})){if(!v.isDirectory())continue;var c=p.join(b,o.name,v.name);if(f.existsSync(p.join(c,q)))return c}}}}catch(x){}return d})();
const aa = require(_r + '/scripts/lib/session-aliases');
const aliases = aa.listAliases();
console.log('Session Aliases (' + aliases.length + '):');

Some files were not shown because too many files have changed in this diff Show More