mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-06-13 19:51:24 +08:00
feat: Cursor-independent ECC memory via ECC_AGENT_DATA_HOME (#2066)
* feat: auto-isolate ECC memory data for Cursor via ECC_AGENT_DATA_HOME Add ECC_AGENT_DATA_HOME (defaults to ~/.claude) with Cursor-aware resolution, sessionStart env injection, install scaffolds, and hook bootstrap so memory hooks do not collide with Claude Code when both harnesses are used. Closes #2065 Co-authored-by: Cursor <cursoragent@cursor.com> * fix: log agent-data config errors and ship cursor sessionStart deps Address CodeRabbit review: log invalid .cursor/ecc-agent-data.json parse failures, and copy cursor-session-env.js plus lib deps on legacy Cursor install so sessionStart hook path exists without hooks-runtime alone. Co-authored-by: Cursor <cursoragent@cursor.com> * fix: resolve relative agentDataHome paths from project root Project config values like ".ecc-data" now resolve against the repository root (parent of .cursor/), not process.cwd(), so Cursor hooks persist memory in the intended directory regardless of hook cwd. Addresses cubic review on PR #2066. Co-authored-by: Cursor <cursoragent@cursor.com> * docs: explain getHomeDir duplicate and docstring policy Document why agent-data-home keeps a local home-dir helper (circular require with utils.js) and list consolidation options for maintainers. Note that CodeRabbit JSDoc coverage warnings are informational relative to ECC's usual script documentation style. Addresses cubic P2 context on PR #2066. Co-authored-by: Cursor <cursoragent@cursor.com> * test: isolate agent-data-home tests from dogfooded .cursor config Use isolated temp cwd for default-resolution cases and assert resolveAgentDataHome({ projectDir }) reads ecc-agent-data.json. Document cwd/project caveats in the test file header. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
committed by
GitHub
parent
81c9150512
commit
6a40469408
@@ -487,6 +487,7 @@ export ECC_SESSION_RETENTION_DAYS=14
|
||||
export ECC_CONTEXT_MONITOR_COST_WARNINGS=off
|
||||
```
|
||||
|
||||
|
||||
Windows PowerShell:
|
||||
|
||||
```powershell
|
||||
@@ -494,6 +495,24 @@ Windows PowerShell:
|
||||
[Environment]::SetEnvironmentVariable('ECC_SESSION_RETENTION_DAYS', '14', 'User')
|
||||
```
|
||||
|
||||
### Agent data home (multi-harness isolation)
|
||||
|
||||
Memory persistence hooks (session summaries, learned skills, session aliases, metrics) store data under a single agent data root. By default that root is `~/.claude`. When you use ECC in both Claude Code and Cursor on the same machine, set a separate root for Cursor so the two environments do not overwrite each other's session files:
|
||||
|
||||
```bash
|
||||
# Cursor-only boundary (Claude Code keeps the default ~/.claude)
|
||||
export ECC_AGENT_DATA_HOME="$HOME/.cursor/ecc"
|
||||
```
|
||||
|
||||
Paths resolved under that root include:
|
||||
|
||||
- `$ECC_AGENT_DATA_HOME/session-data/` — session summaries
|
||||
- `$ECC_AGENT_DATA_HOME/skills/learned/` — learned skills from evaluate-session
|
||||
- `$ECC_AGENT_DATA_HOME/session-aliases.json` — session aliases
|
||||
- `$ECC_AGENT_DATA_HOME/metrics/` — cost and activity metrics
|
||||
|
||||
See [affaan-m/ECC#2065](https://github.com/affaan-m/ECC/issues/2065).
|
||||
|
||||
---
|
||||
|
||||
## What's Inside
|
||||
@@ -1261,6 +1280,25 @@ ECC does not install root `AGENTS.md` into `.cursor/`. Cursor treats nested `AGE
|
||||
|
||||
Cursor-native loading behavior can vary by Cursor build. ECC installs agents as `.cursor/agents/ecc-*.md`; if your Cursor build does not expose project agents, those files still work as explicit reference definitions instead of hidden global prompt context.
|
||||
|
||||
### Memory and data isolation (Cursor + Claude Code)
|
||||
|
||||
ECC memory hooks reuse the same `scripts/hooks/*.js` as Claude Code. For Cursor, ECC tries to keep memory **out of `~/.claude` automatically**:
|
||||
|
||||
1. **Cursor `sessionStart` hook** (installed to `.cursor/hooks.json` on `--target cursor`) injects `ECC_AGENT_DATA_HOME` for the whole composer session.
|
||||
2. **Hook runtime default** — when `CURSOR_VERSION` or `CURSOR_PROJECT_DIR` is present, hooks default to `~/.cursor/ecc` if the env var is unset.
|
||||
3. **Project config** — `.cursor/ecc-agent-data.json` documents and overrides the path (`agentDataHome`).
|
||||
4. **Always-on rule** — `.cursor/rules/ecc-agent-data-home.mdc` reminds the agent where memory lives.
|
||||
|
||||
You can still override explicitly:
|
||||
|
||||
```bash
|
||||
export ECC_AGENT_DATA_HOME="$HOME/.cursor/ecc"
|
||||
```
|
||||
|
||||
To **share** memory with Claude Code on purpose, set `ECC_AGENT_DATA_HOME=~/.claude` in the shell or in `.cursor/ecc-agent-data.json`.
|
||||
|
||||
Continuous learning v2 instincts remain separate under `CLV2_HOMUNCULUS_DIR` (default `~/.local/share/ecc-homunculus`).
|
||||
|
||||
### Hook Architecture (DRY Adapter Pattern)
|
||||
|
||||
Cursor has **more hook events than Claude Code** (20 vs 8). The `.cursor/hooks/adapter.js` module transforms Cursor's stdin JSON to Claude Code's format, allowing existing `scripts/hooks/*.js` to be reused without duplication.
|
||||
|
||||
Reference in New Issue
Block a user