CLI 位于 apps/zcode-cli/packages/cli,TUI 位于 apps/zcode-cli/packages/tui。zcode 二进制入口按参数分为 TUI、headless 与协议服务三种形态。
进程入口
cli/src/main.ts:16是进程级入口:在加载 bootstrap/provider 之前完成 env 清洗、SEA runtime tools、plugin-host 短路、TUI/protocol stderr 隔离、console 重定向、错误和退出生命周期。cli/src/index.ts只导出run。
命令分发
cli/src/run.ts 是分发核心:
zcode无位置参数时commandName()默认为tui(run.ts:70);zcode tui是显式别名。- 分派顺序(
run.ts:519附近):--prompt/-p→ headlessrunPrompt--target→/goalheadlesstui→runTuiCommandapp-server/agent-server→runZCodeProtocolCommand- 其余为
doctor/login/logout/commands/plugins/skills等
注意:在当前 v3.15.1 检出中,CLI 本身没有
--web选项,--surface只支持terminal和desktop(映射zcode_desktop)。--web是顶层 distribution 统一发行包bin/zcode.mjs的 launcher 分流概念,不是 Agent CLI 自身参数。
Headless 输出
cli/src/prompt-command.ts:51 支持三种输出:
textjsonstream-json:每行一个映射后的 SessionEvent,最后一行是type:"result"终态
TUI
TUI 是 OpenTUI renderer + React app:
- 入口
tui/src/tui.tsx:13;App 状态边界tui/src/app.tsx:48。 - TUI 只维护展示态:草稿、焦点、滚动、选择、弹窗。
- 真实 runtime/session/model/tool/permission 状态通过
subscribeSessionEvents和显式 prompt callbacks 进入 TUI(见 session-runtime)。 cli/src/tui-stderr.ts:11负责 TUI 判断与 stderr 隔离。
内置 slash command
cli/src/command-center/slash-commands.ts:40:
/compact /expert /effort /dwf /fork /help /init
/workflow /login /logout /locale /resume /new /rewind
/mode /mcp /plugins /model /goal /skillCLI 配置(MCP / Hooks)
CLI 从主 JSON 配置读取 MCP 与 Hooks,默认用户配置路径 ~/.zcode/cli/config.json:
- MCP:
mcp.servers,类型stdio/http/sse,工具暴露为mcp__<server>__<tool>;会话内用/mcp list|status|connect|disconnect管理。详见 mcp-integration。 - Hooks:
hooks.enabled(默认false)+hooks.events,支持SessionStart、UserPromptSubmit、PreToolUse、PermissionRequest、PostToolUse、PostToolUseFailure、Stop。Hook 为进程型(argv 执行,非 shell 字符串),可与 Claude Code hooks 兼容。
插件与技能命令
zcode plugins list
zcode plugins enable ios-simulator
zcode plugins disable browser-use插件状态在 ~/.zcode/cli/plugins:cache/(安装代码)、data/<plugin-id>/(持久数据)、marketplaces/zcode-plugins-official/。详见 plugin-system。
打包
- 默认产物是普通 Node CLI bundle
dist/zcode.cjs(运行时零生产依赖,用 Node 内建做参数解析与终端控制)。 - SEA 是可选打包路径:
pnpm --dir apps/zcode-cli build:sea(6 target,postject注入 SEA blob)。SEA 失败时普通 CLI 仍是 fallback。详见 distribution。
源码开发
pnpm --filter @zcode/cli dev --help
pnpm --filter @zcode/cli dev
pnpm --filter @zcode/cli... build
node apps/zcode-cli/packages/cli/dist/zcode.cjs --helpCLI 子库有独立的 typecheck / lint / test;上游 AGENTS.md 明确 CLI 变更不能用根 test:unit:affected 代替。
相关页面
- agent-core — CLI 承载的 Agent 运行时
- session-runtime — TUI 订阅的 session 事件
- plugin-system — 插件命令与市场
- distribution — SEA 与统一分发包