From f0af98971e89e05c6a72b9b63a106d74df8c4e8f Mon Sep 17 00:00:00 2001 From: Godopu Date: Thu, 15 Oct 2026 16:29:16 +0000 Subject: [PATCH] fix(agents): the claude projects root follows CLAUDE_CONFIG_DIR too (Issue #31, review) stop resolves the uuid before it purges, through lib.sh's exported CLAUDE_PROJECT_DIR and DiscoveryContext.claude_dir, both of which defaulted to $HOME/.claude/projects. With CLAUDE_CONFIG_DIR alone the transcript under /projects was not found, so stop removed the row and purged nothing. Both defaults are now ${CLAUDE_CONFIG_DIR:-/.claude}/projects; an explicit CLAUDE_PROJECT_DIR still wins. Co-Authored-By: Claude Opus 5.5 --- .agents/skills/lib.sh | 3 ++- .agents/skills/lib_py/agents/adapters/claude.py | 4 ++-- .agents/skills/lib_py/agents/base.py | 4 +++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.agents/skills/lib.sh b/.agents/skills/lib.sh index 5b49486..8fee0f2 100644 --- a/.agents/skills/lib.sh +++ b/.agents/skills/lib.sh @@ -74,7 +74,8 @@ _MAM_DIALOG_TOKENS="${_MAM_MODAL_TOKENS}|${_MAM_HINT_TOKENS}" # Workspace-relative defaults with environment overrides (Phase Z) HOME_DIR="${HOME_DIR:-$HOME}" -CLAUDE_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$HOME/.claude/projects}" +# claude keeps projects/ under its config root, which CLAUDE_CONFIG_DIR moves (Issue #31). +CLAUDE_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-${CLAUDE_CONFIG_DIR:-$HOME/.claude}/projects}" if [ -z "${LOCAL_BIN:-}" ]; then if [ -x "$HOME_DIR/bin/herdr" ]; then LOCAL_BIN="$HOME_DIR/bin" diff --git a/.agents/skills/lib_py/agents/adapters/claude.py b/.agents/skills/lib_py/agents/adapters/claude.py index a81d305..062411d 100644 --- a/.agents/skills/lib_py/agents/adapters/claude.py +++ b/.agents/skills/lib_py/agents/adapters/claude.py @@ -11,8 +11,8 @@ def _config_dir(ctx: DiscoveryContext) -> str: def _projects_dirs(ctx: DiscoveryContext) -> list: - """ctx.claude_dir (CLAUDE_PROJECT_DIR, else /.claude/projects) and - the config root's own projects/, each once.""" + """ctx.claude_dir (CLAUDE_PROJECT_DIR, else the config root's projects/) + and the config root's own projects/, each once.""" dirs, seen = [], set() for d in (ctx.claude_dir, os.path.join(_config_dir(ctx), "projects")): real = os.path.realpath(d) diff --git a/.agents/skills/lib_py/agents/base.py b/.agents/skills/lib_py/agents/base.py index dff7daf..57d4f14 100644 --- a/.agents/skills/lib_py/agents/base.py +++ b/.agents/skills/lib_py/agents/base.py @@ -156,7 +156,9 @@ class DiscoveryContext: self.workspace = workspace self.agent_name = agent_name self.home_dir = resolve_home(home_dir) - self.claude_dir = claude_dir or os.environ.get("CLAUDE_PROJECT_DIR", f"{self.home_dir}/.claude/projects") + # projects/ lives under claude's config root, which CLAUDE_CONFIG_DIR moves. + config_root = os.environ.get("CLAUDE_CONFIG_DIR") or f"{self.home_dir}/.claude" + self.claude_dir = claude_dir or os.environ.get("CLAUDE_PROJECT_DIR", f"{config_root}/projects") self.epoch = epoch self.row = row or {} self.mode = mode