| name | zcode-config |
| description | 管理 zcode 平台自身的 MCP 服务器、Skills 发现目录、Memory 存储、Plugins 启用开关——即 zcode 基础设施配置,区别于 GSD 工作流参数(→gsd-config)和 CLAUDE.md/AGENTS.md 内容撰写(→claude-project-config)。当用户说"配置 zcode""加个 MCP server""管理技能""查看/启用插件""看看本项目 memory"".mcp.json 怎么写""zcode.json 在哪""enabledPlugins"等任何针对 zcode 平台配置体系的诉求时触发。注意本技能用 scripts/lib.py 做安全写盘(探测/脱敏/备份/原子替换),第一版对 memory 和 AGENTS.md 只读诊断。 |
| allowed-tools | ["Read","Write","Edit","Bash","Glob","Grep","AskUserQuestion"] |
zcode-config
管理 zcode 平台基础设施配置:MCP / Skills / Memory / Plugins。本技能用 scripts/lib.py 做所有配置写盘(安全、可逆、脱敏)。
职责边界(先读这张表,避免和其它技能打架)
| 本技能管 | 不归本技能(明确引导到对应技能) |
|---|
MCP server 增删改(.mcp.json / 用户级 mcp 字段) | CLAUDE.md/AGENTS.md 内容撰写 → claude-project-config |
| Skills 发现目录的安装/卸载/shadow 检测 | GSD 工作流参数 → gsd-config / gsd-settings |
| Memory 存储只读诊断(路径/索引/状态) | 代码知识图谱 → graphify / gitnexus |
Plugins enabledPlugins 启用/禁用/移除 | hooks(zcode 无原生 hooks;属 Claude Code 侧 .claude/hooks.json) |
项目级 zcode.json / .zcode/config.json | |
何时 NOT 触发(反例)
- "帮我写 AGENTS.md 规则" → 这是内容撰写,引导到
claude-project-config
- "配置 GSD 的 model profile" → 引导到
gsd-config
- "改我的 Claude Code hooks" → zcode 无原生 hooks,不在此技能
第一版硬边界(安全优先)
- Memory:只读诊断,不删不改 topics。
- AGENTS.md:只检测/解释,不创建不编辑。
- GUI 状态(
~/.zcode/v2/setting.json)、Provider(~/.zcode/v2/config.json):只读展示,不写。
- 所有写操作走
lib.py,默认 dry-run,需用户确认 --apply 才写盘。
总流程
第 1 步:解析意图(优先自然语言,非笨重三连问)
从用户话语直接识别「配置项 + 操作 + 范围」三个维度:
- 配置项:MCP / Skills / Memory / Plugins
- 操作:查看 / 新增 / 修改 / 删除
- 范围:用户级 / 项目级
只有当某个维度不明确时才用 AskUserQuestion 追问(gpt-5.5 Issue 18:查看状态不该三连问)。例:
- "看看我装了哪些 MCP" → MCP + 查看 + 用户级(直接执行)
- "加个 web-search MCP" → MCP + 新增 + 范围不明 → 问一句"用户级还是本项目?"
第 2 步:读对应 reference(按配置项路由)
| 用户要配 | Read |
|---|
| MCP server | references/mcp.md |
| Skills(装/卸/查) | references/skills.md |
| Memory | references/memory.md |
| Plugins | references/plugins.md |
| AGENTS.md 状态 | references/agents-md.md |
| 路径/schema 总表 | references/paths.md |
第 3 步:探测 + 展示现状(写操作前必做)
LIB="$SKILL_DIR/scripts/lib.py"
python3 "$LIB" probe <目标文件>
python3 "$LIB" get <文件> <dotted.key>
写操作前:若目标字段在 probe 中显示不存在,绝不静默降级(gpt-5.5 Blocker 5)。明确告诉用户"字段未确认存在",问是否换范围。
第 4 步:展示拟变更(已脱敏)→ 确认
lib.py set/unset 不带 --apply 时打印 dry-run 预览(密钥自动 ${REDACTED})。展示给用户,用 AskUserQuestion 或直接问"确认写盘吗"。
第 5 步:写盘(带 --apply)+ 验证
python3 "$LIB" set <文件> <key> '<json-value>' --apply
lib.py 自动:锁 → 校验旧文件 → 备份(纳秒名,保权限) → mkstemp 临时文件 → 校验新文件 → os.replace 原子替换 → 解锁。
写后用 lib.py get 验证值已生效,并提醒用户重启会话(MCP/插件加载在启动时)。
安全铁律(不可违反)
- 所有 config 写盘走
lib.py,禁止裸 Write/Edit 覆盖 JSON。
- 先 probe 后写:字段不存在不假设、不降级,问用户。
- 密钥用
${ENV_VAR} 占位,不写明文;展示前 lib.py 会 redact。
- dry-run 优先:默认不
--apply,让用户先看脱敏预览。
- project root 向用户确认:算出 root 后展示,允许覆盖(worktree/submodule 会误判)。
- memory/AGENTS.md 只读:第一版不写这俩(见硬边界)。
- 安装技能先查 shadow:检查高优先级目录有无同名,报告再行动。
失败/异常处理
lib.py 报"旧文件损坏":拒绝覆盖,告诉用户先修复或从备份恢复,不强行写。
- probe 显示非预期 schema:可能是 zcode 版本差异,如实告诉用户"当前版本 schema 与预期不符",不强行操作。
- 写盘超时/锁竞争:重试一次;仍失败则放弃并报告。
不覆盖的范围
- hooks(zcode 无原生 hooks 配置;Claude Code 侧
.claude/hooks.json 不在此技能)
- 插件开发/打包/发布新 marketplace(只管启用状态)
- 用户级 AGENTS.md(zcode 不自动加载,写了也不生效——见 agents-md.md)