CRAFT_CONFIG_DIR 只被部分代码尊重:workspaces / sessions / credentials / logs 仍指向 ~/.craft-agent(CRAFT_CONFIG_DIR only partially honored)

Author: ZerVisionGoCreated Sep 19, 2026Updated Sep 19, 2026

TL;DR (EN): CRAFT_CONFIG_DIR is documented as relocating the whole config directory, but 15 call sites still hardcode ~/.craft-agent — workspaces, sessions, credentials.enc and logs ignore the variable, so a second instance with a custom dir silently opens the default workspaces. Fix in #1061.

Craft Agents Version

0.13.3(main @ e8963854 同样复现)

Operating System

macOS (Apple Silicon)

OS Version

macOS 26.4

AI Provider

不相关——问题出在配置目录解析,与 provider 无关

Description

CRAFT_CONFIG_DIR 的设计意图是整体切换配置目录,三处都这么写:

实际只有 config/paths.tsagent/permissions-config.ts 读了这个变量,另有 15 处仍然写死 join(homedir(), '.craft-agent')

受影响路径 位置
workspaces/(连带 sessions/ packages/shared/src/workspaces/storage.tspackages/server-core/src/handlers/rpc/workspace.ts
credentials.enc packages/shared/src/credentials/backends/secure-storage.ts
docs/release-notes/provider-domains.json shared/src/docs/index.tsshared/src/release-notes/index.tsshared/src/utils/logo.ts
docs/browser-tools.md(skill 前置读取) shared/src/agent/core/prerequisite-manager.ts
window-state.jsonlogs/* apps/electron/src/main/window-state.tslogger.ts
config.json 读取 server-core/src/handlers/rpc/auth.tsshared/src/interceptor-common.ts
messaging 状态目录 apps/electron/src/main/index.tspackages/server/src/index.ts
privileged-actions 审计日志 server-core/src/services/privileged-execution-broker.ts
config_validate 会话工具的根目录 session-tools-core/src/handlers/config-validate.ts

结果是:设置了自定义 CRAFT_CONFIG_DIR 的实例会在新目录里生成 config.jsonpermissions/themes/ 等,但打开的是默认目录 ~/.craft-agent/ 下的 workspaces、sessions、凭据和日志。两个实例同时运行时,就是两个 SessionManager 在写同一棵 sessions/ 树。

Steps to Reproduce

  1. 保持已安装的正式版 app 运行(使用默认 ~/.craft-agent/
  2. 在源码目录执行 CRAFT_CONFIG_DIR=$HOME/.craft-agent-dev CRAFT_APP_NAME="Dev" bun run electron:dev
  3. 观察 dev 实例的启动日志和侧边栏

Expected Behavior

dev 实例从空的 ~/.craft-agent-dev/ 启动(onboarding 或新建默认 workspace),完全不碰 ~/.craft-agent/

Actual Behavior

  • ~/.craft-agent-dev/ 被创建,里面有 config.jsondocs/permissions/themes/……
  • 但日志输出 Created window for first workspace: <正式版的 workspace 名>Messaging gateway log path: ~/.craft-agent/logs/messaging-gateway.log
  • dev 实例直接显示并操作正式版的 workspace 和 sessions

Additional Context

scripts/electron-dev.ts 只在检出目录名以 -<n> 结尾时才设置 CRAFT_CONFIG_DIR,所以大多数人碰不到;一旦手动设置这个变量(例如把 fork 版和已安装的 app 并排跑、或 headless server 想换配置目录)就会触发。

修复见 #1061:所有路径统一走 config/paths.tsCONFIG_DIR(不依赖 shared 的包用同样的 env 回退)。变量未设置时行为不变。

Source: craft-ai-agents/craft-agents-oss