第 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 --helpmca help

mca v1.0.0

用法:
  mca                                  交互模式
  mca ask "问题"                       单次问答
  mca plan "任务"                      只生成计划

选项:
  --json         JSON 格式输出
  --no-confirm   跳过所有确认(危险)
  --help         显示帮助
  --version      显示版本

技能:
  /debug 任务    调试模式
  /review 任务   审查模式
  /refactor 任务 重构模式
  /skills        查看所有技能

帮助信息要包含所有命令和选项,让用户不需要看文档就能知道怎么用。

登录以继续阅读

解锁完整文档、代码示例及更多高级功能。

立即登录

On this page