第 11 章 · CLI 产品化与毕业
01 · CLI 命令设计
把 agent 从启动脚本升级成正式的命令行工具——支持 ask、plan、interactive 三种模式。
从脚本到产品
前 10 章的 agent 通过 tsx src/main.ts 启动。这够用于开发,但不够用于"产品"。一个真正的 CLI 工具应该:
- 支持不同的命令(交互模式、单次问答、只生成计划)
- 支持命令行选项(JSON 输出、跳过确认)
- 有清晰的退出码(成功 0、失败 1、达到上限 2)
- 显示帮助和版本信息
第 11 章把 agent 从开发脚本升级为可分发的命令行工具。
三种模式
mca 交互模式(默认)
mca ask "问题" 单次问答
mca plan "任务" 只生成计划交互模式: 默认模式。进入 REPL 循环,用户反复输入问题,agent 持续对话。适合探索性的开发任务。
ask 模式: 单次问答。传入一个问题,agent 回答后退出。适合脚本化调用、快速查询。
plan 模式: 只生成计划。agent 分析任务后输出执行步骤,不实际修改代码。适合想先看方案再决定是否执行。
参数解析
interface CliOptions {
command: "interactive" | "ask" | "plan";
task?: string;
jsonOutput: boolean;
noConfirm: boolean;
}
function parseArgs(args: string[]): CliOptions {
const filtered = args.filter((a) => !a.startsWith("--"));
const flags = args.filter((a) => a.startsWith("--"));
const jsonOutput = flags.includes("--json");
const noConfirm = flags.includes("--no-confirm");
const command = filtered[0];
const task = filtered.slice(1).join(" ");
if (command === "ask" && task) return { command: "ask", task, jsonOutput, noConfirm };
if (command === "plan" && task) return { command: "plan", task, jsonOutput, noConfirm };
return { command: "interactive", jsonOutput, noConfirm };
}解析逻辑很简单:-- 开头的是选项,第一个非选项参数是命令,剩下的拼成任务描述。
帮助信息
mca --help 或 mca help:
mca v1.0.0
用法:
mca 交互模式
mca ask "问题" 单次问答
mca plan "任务" 只生成计划
选项:
--json JSON 格式输出
--no-confirm 跳过所有确认(危险)
--help 显示帮助
--version 显示版本
技能:
/debug 任务 调试模式
/review 任务 审查模式
/refactor 任务 重构模式
/skills 查看所有技能帮助信息要包含所有命令和选项,让用户不需要看文档就能知道怎么用。
登录以继续阅读
解锁完整文档、代码示例及更多高级功能。