Skip to content

feat(cli): 新增 --headless 非交互模式,支持执行完自动退出#207

Open
JiGuangWorker wants to merge 1 commit into
lessweb:mainfrom
JiGuangWorker:feature/headless-mode
Open

feat(cli): 新增 --headless 非交互模式,支持执行完自动退出#207
JiGuangWorker wants to merge 1 commit into
lessweb:mainfrom
JiGuangWorker:feature/headless-mode

Conversation

@JiGuangWorker

@JiGuangWorker JiGuangWorker commented Jun 28, 2026

Copy link
Copy Markdown

概述

新增 --headless 参数,允许 deepcode 在非交互模式下执行 prompt 后自动退出,不再停留 TUI 界面。

Close #139

使用场景

--headless 主要面向以下场景:

  1. CI/CD 流水线集成:在 GitHub Actions / Jenkins 等环境中自动执行代码审查、变更摘要等任务
  2. Shell 脚本与管道组合:输出到 stdout,可与其他 Unix 工具链组合(如 deepcode --headless -p "..." | tee result.txt
  3. Docker 容器化部署:无 TTY 环境下的容器内 Agent 集群化使用
  4. 批量任务处理:对多个项目目录执行相同的分析指令

设计决策

权限策略

headless 模式没有用户可交互,因此:

  • 权限自动批准:在 runHeadless() 中,getResolvedSettingspermissions 强制设为 { defaultMode: "allowAll" },忽略用户在 settings.json 中的 askAll 配置
  • 安全考量--headless 是一个显式参数,使用者需明确指定;默认执行路径(无 --headless)不受任何影响

架构实现

核心改动是绕过 Ink/React TUI 渲染流程,直接调用 SessionManager

改动文件

  • packages/cli/src/cli-args.ts:新增 --headless 布尔参数 + 校验
  • packages/cli/src/cli.tsx:新增 runHeadless() 函数

使用方式

deepcode --headless -p "总结这个项目"
deepcode --headless -p "列出所有 API 接口" | grep "auth"

Add --headless option that allows deepcode to run a prompt and exit
automatically without entering the interactive TUI. This enables:
- CI/CD pipeline integration
- Shell scripting / automation
- Batch processing

Changes:
- cli-args.ts: add --headless boolean flag and validation (requires --prompt)
- cli.tsx: add runHeadless() function that creates SessionManager,
  submits prompt, streams output to stdout, and exits cleanly.
  In headless mode, permissions are forced to allowAll since there
  is no user to ask for approval.

Closes lessweb#139
@JiGuangWorker JiGuangWorker force-pushed the feature/headless-mode branch from 686ec08 to 722dd04 Compare June 28, 2026 16:32
@JiGuangWorker

Copy link
Copy Markdown
Author

补充一下我们做 --headless 背后的真实想法,也许对项目的演进方向有参考价值 😄

我们的最终目标不是 CI 脚本,而是把 deepcode 当成"虚拟研发人员"来管。

想象一下这个场景:

你打开一个项目管理工具,底下挂着一群 deepcode 实例,跟带团队一样——Agent A 做前端,Agent B 做后端,Agent C 负责 review。它们不需要你一问一答,接到任务自己跑,跑完汇报结果。你像看项目看板一样,谁在干什么、进度怎么样,一目了然。

这件事能成立的根本,在于任务拆得够细、够准。只要把需求拆成一个个边界清晰的小任务,每个 Agent 知道该干什么、产出什么,一个人管一个集群、项目快速往前推,完全是可行的。

而这一切的起点,就是让它能独立运行。 不能独立运行的 Agent,永远只是聊天工具。--headless 解决的就是这个"最后一公里"——让 deepcode 从"陪着人聊"变成"接任务自己干"。

这个方向上,deepcode 有很大的想象空间。它背靠 deepseek,推理能力强,本身就是一个很好的 Agent 底座。我们现在把它变成可编排的单元,未来不管是项目管理工具调度、多人协作场景、还是其他开发者做的 Server 方案(比如 #195 的 Ri0n72Y),都需要这个基础能力。

这个 PR 改动很小、影响面可控,但打开的是一个挺有意思的演进方向。希望能被采纳 🙏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[功能请求] 支持 headless(无头/非交互)模式,用于自动化与 CI/CD

2 participants