ECC is a harness-native system — every file it installs is written specifically for the harness you are targeting. Rather than shipping one generic config that every tool tries to interpret, ECC resolves paths, formats, hook schemas, and platform configs per target at install time. PassDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/affaan-m/ECC/llms.txt
Use this file to discover all available pages before exploring further.
--target <id> to any install command and ECC writes the right artifacts to the right directories.
Supported Targets
The table below lists all 14 target IDs, the harness each one maps to, and the primary install location ECC writes to on your machine.| Target ID | Harness | Primary Install Path | Notes |
|---|---|---|---|
claude | Claude Code (Anthropic) | ~/.claude/ | Primary and most feature-complete target |
cursor | Cursor IDE | .cursor/ (project-local) | DRY hook adapter reuses Claude Code scripts |
codex | OpenAI Codex CLI / macOS App | ~/.codex/ | Instruction-based; no hook parity yet |
gemini | Gemini CLI | .gemini/ (project-local) | Experimental; shares platform-configs module |
opencode | OpenCode | .opencode/ (project-local) | Full plugin support; 20+ hook event types |
zed | Zed Editor | .zed/ (project-local) | Conservative adapter; minimal profile recommended |
codebuddy | CodeBuddy | Project-local selective install | Commands, agents, skills, flattened rules |
joycode | JoyCode | Project-local selective install | Shares CodeBuddy adapter surface |
hermes | Hermes | .hermes/ | ECC 2.0 public operator story; see Hermes setup guide |
kimi | Kimi | .kimi/ (project-local) | Selective install adapter |
openclaw | OpenClaw | .openclaw/ (project-local) | Selective install adapter |
qwen | Qwen CLI | ~/.qwen/ | Home-directory selective install; rules, agents, skills, Qwen config |
claude-project | Claude Projects (web) | ~/.claude/ (same as claude) | Shares Claude Code install surface |
antigravity | Antigravity IDE | .agent/ (project-local) | Flattened rules; see Antigravity guide |
claude-project resolves to the same install paths as claude. It exists as a distinct target so install manifests can track project-scoped vs. user-scoped Claude installs separately.Where ECC Installs Files
Claude Code (--target claude)
Claude Code receives ECC’s most complete install surface. The installer writes to your user-level Claude directory:
Cursor IDE (--target cursor)
ECC writes Cursor artifacts project-locally to avoid polluting global settings:
.cursor/hooks/adapter.js transforms Cursor’s stdin JSON into Claude Code’s format, letting the shared scripts/hooks/*.js scripts run unchanged across both harnesses.
For memory isolation when running both Claude Code and Cursor on the same machine, set a separate data root for Cursor:
Codex CLI and macOS App (--target codex)
Codex reads project-local config automatically:
Codex does not yet provide Claude-style hook execution parity. ECC enforcement on Codex is instruction-based via
AGENTS.md and sandbox/approval settings rather than event-driven hooks.OpenCode (--target opencode)
OpenCode is detected from .opencode/opencode.json and supports 20+ plugin event types — more than Claude Code’s 8:
Zed (--target zed)
Zed receives a conservative project-local adapter:
Harness-Specific Quirks
Claude Code: plugin vs. manual install paths
Claude Code: plugin vs. manual install paths
ECC has three public identifiers that are not interchangeable:
- GitHub source:
affaan-m/ECC - Claude marketplace plugin slug:
ecc@ecc - npm package:
ecc-universal
Codex: plugin marketplace install
Codex: plugin marketplace install
The Codex plugin marketplace entry must target a concrete plugin subdirectory. Marketplace discovery works with this layout, but runtime skill loading from local/repo marketplaces is still unreliable upstream. The supported Codex install route is the sync script:Run with
--dry-run to preview changes before applying. Pass --update-mcp to force-refresh ECC MCP server entries to the latest recommended config.OpenCode: profile selection
OpenCode: profile selection
OpenCode uses the
opencode profile by default, which intentionally excludes hooks-runtime. To add hooks, opt in explicitly:Cursor: hooks auto-isolation
Cursor: hooks auto-isolation
When
CURSOR_VERSION or CURSOR_PROJECT_DIR is detected in the environment, ECC hooks default ECC_AGENT_DATA_HOME to ~/.cursor/ecc automatically — so session summaries and learned instincts stay out of ~/.claude without any manual configuration. Override with an explicit env var if you want the two harnesses to share memory.Multi-harness memory isolation
Multi-harness memory isolation
Memory persistence hooks store session summaries, learned skills, session aliases, and metrics under a single agent data root. The default root is
~/.claude. When using multiple harnesses on the same machine, set ECC_AGENT_DATA_HOME per harness to keep them isolated:Feature Parity by Harness
Not every ECC feature is available in every harness. This matrix shows what you get at each target:| Feature | Claude Code | Cursor | Codex | OpenCode | Zed | Gemini |
|---|---|---|---|---|---|---|
| Agents | 67 | Shared | Shared | 12 | Shared | — |
| Skills | 277 | Shared | 32 native | 37 | Shared | — |
| Hook Events | 8 types | 15 types | None | 20+ types | — | — |
| Rules | 34 | 34 (YAML) | Instruction-based | 13 | Flattened | GEMINI.md |
| MCP Servers | 14 active | Shared | 6 auto-merged | Full parity | — | — |
| Session Hooks | Full | Full (adapter) | None | Full (plugin) | — | — |