文章目录
-
- 每日一句正能量
- 一、前言:从"会用"到"用好"的跃迁
- [二、Headless 模式:让 AI 编码助手变成脚本公民](#二、Headless 模式:让 AI 编码助手变成脚本公民)
-
- [2.1 什么是 Headless 模式](#2.1 什么是 Headless 模式)
- [2.2 CI/CD 集成实战](#2.2 CI/CD 集成实战)
- [2.3 结合管道与文件输入](#2.3 结合管道与文件输入)
- [三、Daemon 模式:从命令行到服务化架构](#三、Daemon 模式:从命令行到服务化架构)
-
- [3.1 启动与核心 API](#3.1 启动与核心 API)
- [3.2 Python 客户端实战](#3.2 Python 客户端实战)
- [3.3 安全红线:Daemon 绝不能直接暴露](#3.3 安全红线:Daemon 绝不能直接暴露)
- [四、Skills 自定义:把重复工作流变成斜杠命令](#四、Skills 自定义:把重复工作流变成斜杠命令)
-
- [4.1 Skill 的本质与结构](#4.1 Skill 的本质与结构)
- [4.2 实战:版本发布 Skill](#4.2 实战:版本发布 Skill)
- [4.3 Skill 的加载优先级](#4.3 Skill 的加载优先级)
- [五、项目指令文件:.atomcode.md 深度实战](#五、项目指令文件:.atomcode.md 深度实战)
-
- [5.1 自动注入系统提示的机制](#5.1 自动注入系统提示的机制)
- [5.2 实战模板:不同技术栈的配置](#5.2 实战模板:不同技术栈的配置)
- [5.3 与 Skill 的协同效应](#5.3 与 Skill 的协同效应)
- 六、三者联动:构建完整的自动化工作流
-
- [6.1 项目结构](#6.1 项目结构)
- [6.2 完整 CI 工作流](#6.2 完整 CI 工作流)
- [6.3 流水线执行效果](#6.3 流水线执行效果)
- 七、进阶技巧与避坑指南
-
- [7.1 Headless 模式的输出捕获](#7.1 Headless 模式的输出捕获)
- [7.2 Token 消耗控制](#7.2 Token 消耗控制)
- [7.3 Daemon 的会话持久化](#7.3 Daemon 的会话持久化)
- [7.4 Skill 调试技巧](#7.4 Skill 调试技巧)
- 八、总结

每日一句正能量
对自己最大的善意是允许心里那场暴雨,按照自己的气象学生成或消散。
不强行驱散情绪,不要求自己"立刻好起来"。暴雨是自然现象,你有自己的气候系统。允许它来,也相信它会走。
一、前言:从"会用"到"用好"的跃迁
如果你已经能熟练地用 atomcode 打开 TUI、让 AI 帮你改代码、查 Bug,那么恭喜你------你已经跨过了"入门"阶段。但 AtomCode 真正的威力,远不止一个交互式终端。
想象这样一个场景:凌晨两点,你的团队提交了一个 PR。没有人力做代码审查,但 CI 流水线自动触发了 AtomCode,它读取项目规范、执行代码审查 Skill、生成审查报告并评论到 PR 下方------全程无人值守。第二天早上,开发者打开 GitHub,看到的是一份由 AI 生成的、符合团队编码规范的详细审查意见。
这不是未来,这是 AtomCode 的 Headless 模式 + Skills + 项目指令文件三者联动后,今天就能实现的能力。
本文将深入拆解这三个高阶特性,并给出一套可直接落地的完整自动化工作流方案。
二、Headless 模式:让 AI 编码助手变成脚本公民
2.1 什么是 Headless 模式
AtomCode 提供三种运行模式:交互式 TUI、Headless CLI 和 Daemon 模式。其中 Headless 模式通过 -p(或 --prompt)参数触发,执行单次非交互式任务,结果直接输出到 stdout。
bash
atomcode -p "重构 utils 模块,提取重复逻辑"
这个命令的核心特点是:零交互。它不会弹出 TUI,不会等待用户确认,执行完毕后直接退出并返回结果。
但"零交互"带来了一个关键问题------权限。当 Agent 需要执行 bash 命令或修改文件时, normally 会弹出确认提示。在 Headless 模式下,AtomCode 的默认策略是:需要确认的 bash 调用自动批准,其他需要确认的工具则被拒绝。
这意味着 Headless 模式可以安全地执行读取类操作和受控的 shell 命令,但不会擅自执行高风险的文件写入------除非你显式配置。
2.2 CI/CD 集成实战
Headless 模式天然适合嵌入 CI/CD 流水线。以下是一个完整的 GitHub Actions 工作流示例,用于在每次 Push 时自动执行代码质量检查:
yaml
# .github/workflows/ai-code-review.yml
name: AI Code Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install AtomCode
run: |
curl -fsSL https://atomcode.atomgit.com/install.sh | sh
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Configure AtomCode
run: |
mkdir -p ~/.config/atomcode
cat > ~/.config/atomcode/config.json << 'EOF'
{
"provider": "deepseek",
"model": "deepseek-chat",
"api_key": "${{ secrets.DEEPSEEK_API_KEY }}"
}
EOF
- name: Run AI Review
run: |
atomcode -C . --max-turns 20 \
-p "请审查本次变更的代码质量,重点关注:
1. 是否存在明显的逻辑错误
2. 是否符合项目编码规范(参考 .atomcode.md)
3. 是否有性能隐患
4. 测试覆盖率是否充分
请用中文输出审查报告,格式为 Markdown。" \
> review_report.md
- name: Post Review Comment
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const report = fs.readFileSync('review_report.md', 'utf8');
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '## 🤖 AtomCode AI 审查报告\n\n' + report
});
关键参数解析:
| 参数 | 作用 |
|---|---|
-C . |
指定工作目录为当前目录,确保 Agent 能正确读取项目文件 |
--max-turns 20 |
限制最大对话轮次,防止 Token 消耗失控 |
-p "..." |
Headless 模式的核心,传入自然语言指令 |
2.3 结合管道与文件输入
Headless 模式支持从管道读取输入,这让复杂工作流编排变得异常灵活:
bash
# 将 diff 内容传给 AtomCode 分析
git diff HEAD~1 | atomcode -p "分析这段代码变更的意图和潜在风险"
# 结合其他命令
echo "优化数据库查询性能" | atomcode -p "$(cat)"
# 批量处理多个文件
find src/ -name "*.rs" | xargs -I {} atomcode -C . -p "为 {} 生成单元测试"
三、Daemon 模式:从命令行到服务化架构
3.1 启动与核心 API
当 Headless 模式的"一次一任务"模型无法满足需求时,Daemon 模式登场。它启动一个 HTTP + SSE 服务,将 AtomCode 的全部能力暴露为 REST API。
bash
# 默认启动,监听 127.0.0.1:13456
atomcode daemon
# 自定义端口
atomcode daemon --port 8080
Daemon 的核心端点是 POST /chat,它接收 JSON 请求并返回 SSE 流式响应:
http
POST /chat HTTP/1.1
Host: 127.0.0.1:13456
Content-Type: application/json
{
"message": "请帮我分析这个项目的目录结构,并给出优化建议"
}
响应是一个 SSE 事件流,包含以下事件类型:
| 事件类型 | 含义 | 关键字段 |
|---|---|---|
text |
AI 回复文本 | content |
reasoning |
推理过程 | content |
tool_call_start |
工具开始调用 | tool_name, args, call_id |
tool_call_end |
工具调用完成 | tool_name, result, call_id |
tokens |
Token 用量统计 | prompt, completion, total |
done |
对话完成信号 | session_id |
3.2 Python 客户端实战
以下是一个生产级的 Python 客户端封装,可直接用于自动化脚本:
python
import requests
import json
class AtomCodeClient:
def __init__(self, base_url="http://127.0.0.1:13456"):
self.base_url = base_url.rstrip("/")
def chat(self, message, stream=True):
"""发送消息并获取流式响应"""
resp = requests.post(
f"{self.base_url}/chat",
json={"message": message},
stream=True
)
resp.raise_for_status()
if not stream:
# 聚合所有文本事件
full_text = []
for line in resp.iter_lines():
if line and line.startswith(b"data: "):
event = json.loads(line[6:])
if event.get("type") == "text":
full_text.append(event["content"])
elif event.get("type") == "done":
break
return "".join(full_text)
# 生成器模式,逐事件返回
for line in resp.iter_lines():
if line and line.startswith(b"data: "):
yield json.loads(line[6:])
def health(self):
return requests.get(f"{self.base_url}/health").json()
def shutdown(self):
return requests.post(f"{self.base_url}/shutdown").json()
# 使用示例
client = AtomCodeClient()
# 批量任务编排
tasks = [
"分析 src/ 目录的代码质量",
"为 database.rs 生成单元测试",
"检查是否有未处理的 TODO",
]
for task in tasks:
print(f"\n{'='*50}")
print(f"任务: {task}")
result = client.chat(task, stream=False)
print(f"结果: {result[:200]}...")
3.3 安全红线:Daemon 绝不能直接暴露
Daemon 模式没有任何内置身份认证,默认仅监听 127.0.0.1。
因为成功调用 /chat 的客户端可以获得完整的工具执行权限(包括 bash、write、edit 等),将 Daemon 暴露到公网等同于交出服务器的完全控制权。
如果确实需要远程访问,必须通过反向代理层添加认证:
客户端 ──HTTPS──► Nginx/Caddy ──HTTP──► atomcode-daemon
├── TLS 加密
├── Basic Auth / OAuth
└── IP 白名单
四、Skills 自定义:把重复工作流变成斜杠命令
4.1 Skill 的本质与结构
Skill 是 AtomCode 最具扩展性的特性之一。它本质上是一个可复用的工作流模板,通过 Markdown 文件定义,存放在特定目录下,然后像内置斜杠命令一样调用。
全局 Skill 路径:
~/.atomcode/skills/<skill-name>/SKILL.md
项目级 Skill 路径:
<project-root>/.atomcode/skills/<skill-name>/SKILL.md
Skill 文件采用 YAML frontmatter + Markdown 正文的结构:

markdown
---
name: code-review
description: |
执行标准化代码审查,输出符合团队规范的审查报告。
适用于 PR 审查、提交前自检等场景。
---
## 审查维度
1. **逻辑正确性**:检查边界条件、异常处理、并发安全
2. **代码规范**:命名、注释、代码组织是否符合 .atomcode.md 定义
3. **性能隐患**:时间复杂度、内存泄漏、不必要的 IO
4. **测试覆盖**:关键路径是否有单元测试覆盖
## 输出格式
请按以下 Markdown 格式输出:
### 总体评价
[一句话总结代码质量]
### 问题列表
| 严重程度 | 位置 | 问题描述 | 建议修改 |
|---------|------|---------|---------|
| 🔴 严重 | 文件:行号 | ... | ... |
| 🟡 警告 | 文件:行号 | ... | ... |
| 🟢 建议 | 文件:行号 | ... | ... |
### 正面评价
[列出代码中的亮点]
定义完成后,在 TUI 中输入 /code-review 即可触发。Headless 模式下同样可以调用:
bash
atomcode -p "执行 /code-review,审查 src/ 目录"
4.2 实战:版本发布 Skill
以下是一个经过生产验证的版本发布 Skill:

markdown
---
name: release
description: |
标准化版本发布流程。自动完成 changelog 更新、版本号修改、
测试验证、tag 创建和推送。适用于所有遵循语义化版本的项目。
---
## 发布前检查
1. 执行 `git status` 确认工作区干净
2. 执行 `git log --oneline -20` 查看近期提交
3. 确认当前分支是 main 或 master
## 版本确认
询问用户目标版本号(如 v1.2.3),并确认变更类型:
- MAJOR:不兼容的 API 变更
- MINOR:向下兼容的功能新增
- PATCH:向下兼容的问题修复
## 执行步骤
1. 更新 CHANGELOG.md,在顶部添加新版本章节
2. 修改 package.json(或 Cargo.toml、pyproject.toml)中的 version 字段
3. 运行完整测试套件:`npm test`(或 `cargo test`、`pytest`)
4. 执行 `git add -A && git commit -m "chore(release): v{版本号}"`
5. 执行 `git tag v{版本号}`
6. 执行 `git push origin main && git push origin v{版本号}`
## 发布后
1. 如果在 AtomGit 平台,提示用户创建 Release
2. 生成发布摘要,包含主要变更点
4.3 Skill 的加载优先级
AtomCode 加载 Skill 时遵循以下优先级:
- 项目级 Skill (
.atomcode/skills/)优先于全局 Skill - 同名 Skill 以项目级为准,方便团队统一规范
- Skill 修改后无需重启 AtomCode,下次调用时自动加载最新版本
这意味着你可以在团队仓库中维护一套标准化的 Skill 集合,新成员 Clone 项目后即可直接使用团队的 AI 工作流,无需任何额外配置。
五、项目指令文件:.atomcode.md 深度实战
5.1 自动注入系统提示的机制
.atomcode.md 是 AtomCode 最被低估的特性。将它放在项目根目录,AtomCode 会在每次对话开始时自动将其内容注入系统提示(System Prompt),相当于给 AI 预设了项目的"背景知识"。
这与 Skill 的区别在于:
- Skill 是"做什么"------定义工作流和步骤
- .atomcode.md 是"怎么做"------定义编码规范、架构约束和项目背景
5.2 实战模板:不同技术栈的配置
Vue3 + TypeScript 项目 :

markdown
# Project Instructions
## 技术栈
Vue 3.4 + TypeScript 5.x + Pinia + Vue Router + Tailwind CSS + Vitest
## 编码规范
- 组件统一使用 `<script setup lang="ts">` 语法
- 样式仅使用 Tailwind CSS,禁止手写 CSS
- Props 使用 `defineProps<T>()` 并提取到独立类型定义
- composables 命名使用 `useXxx` 前缀
- 所有工具函数必须有 JSDoc 注释
## 目录规范
- 组件:`src/components/`(原子组件放 `src/components/ui/`)
- 页面:`src/views/`
- 状态:`src/stores/`
- API 接口:`src/api/`
- 工具函数:`src/utils/`
## 测试规范
- 组件测试使用 `@vue/test-utils`
- 工具函数测试覆盖率不低于 80%
- 测试命令:`pnpm test:unit`
## 常用命令
- 开发:`pnpm dev`
- 构建:`pnpm build`
- 测试:`pnpm test`
- Lint:`pnpm lint`
Rust 项目 :

markdown
# Project Instructions
## 技术栈
Rust 1.80 + Tokio + Axum + SQLx + PostgreSQL
## 编码规范
- 使用 `thiserror` 定义错误类型,禁止裸 `unwrap()`
- 异步函数统一返回 `Result<T, AppError>`
- 数据库查询使用 SQLx 的 compile-time checked queries
- API 路由使用 Axum 的 `Router` 链式组合
## 项目结构
- `crates/`:Workspace 成员
- `crates/api/`:HTTP 接口层
- `crates/db/`:数据库访问层
- `crates/core/`:业务逻辑层
## 常用命令
- 运行:`cargo run -p api`
- 测试:`cargo test --workspace`
- 迁移:`sqlx migrate run`
- 检查:`cargo clippy --workspace --all-targets`
5.3 与 Skill 的协同效应
当 .atomcode.md 与 Skill 结合使用时,效果呈指数级放大:
用户输入: /code-review
系统提示注入:
[项目指令] .atomcode.md 中的技术栈和编码规范
[Skill 指令] code-review SKILL.md 中的审查维度和输出格式
AI 输出: 一份严格符合团队规范、针对当前技术栈的深度审查报告
这意味着你不需要在每次对话中重复交代"我们用的是 Vue3"、"请遵循我们的目录规范"------这些上下文已经被 .atomcode.md 自动注入。
六、三者联动:构建完整的自动化工作流
现在,让我们把 Headless 模式、Skills 和项目指令文件串联起来,构建一个完整的 CI/CD 自动化代码审查流水线。
6.1 项目结构
my-project/
├── .github/
│ └── workflows/
│ └── ai-review.yml # GitHub Actions 工作流
├── .atomcode/
│ └── skills/
│ └── code-review/
│ └── SKILL.md # 团队代码审查 Skill
├── .atomcode.md # 项目指令文件
├── src/
└── ...
6.2 完整 CI 工作流
yaml
# .github/workflows/ai-review.yml
name: AI Code Review Pipeline
on:
pull_request:
types: [opened, synchronize]
jobs:
ai-review:
runs-on: ubuntu-latest
permissions:
pull-requests: write
contents: read
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # 需要完整历史用于 diff 分析
- name: Setup AtomCode
run: |
curl -fsSL https://atomcode.atomgit.com/install.sh | sh
echo "$HOME/.local/bin" >> $GITHUB_PATH
mkdir -p ~/.config/atomcode
cat > ~/.config/atomcode/config.json <<EOF
{
"provider": "${{ secrets.LLM_PROVIDER }}",
"model": "${{ secrets.LLM_MODEL }}",
"api_key": "${{ secrets.LLM_API_KEY }}"
}
EOF
- name: Get PR Diff
run: |
git fetch origin ${{ github.base_ref }}
git diff origin/${{ github.base_ref }}...HEAD > pr_diff.patch
- name: Run AI Review
run: |
# 使用 Headless 模式,结合项目级 Skill 和 .atomcode.md
atomcode -C . --max-turns 25 \
-p "请基于 /code-review Skill 审查以下代码变更。
变更内容如下:
$(cat pr_diff.patch)
要求:
1. 严格遵循 .atomcode.md 中的编码规范
2. 只审查变更的部分,不要审查未改动的文件
3. 输出 Markdown 格式的审查报告" \
> ai_review.md 2> review_stderr.log
# 检查是否成功
if [ $? -ne 0 ]; then
echo "::error::AI 审查执行失败"
cat review_stderr.log
exit 1
fi
- name: Post Review
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const report = fs.readFileSync('ai_review.md', 'utf8');
// 截断过长报告
const maxLen = 65000;
const body = report.length > maxLen
? report.slice(0, maxLen) + '\n\n...(报告已截断)'
: report;
await github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `## 🤖 AtomCode AI 代码审查\n\n${body}\n\n---\n*由 AtomCode Headless 模式自动生成*`
});
6.3 流水线执行效果
当开发者提交 PR 后,流水线自动触发:
- 环境准备:安装 AtomCode,加载配置
- 上下文注入 :
.atomcode.md自动注入项目技术栈和规范 - Skill 触发 :
/code-reviewSkill 定义了审查维度和输出格式 - Diff 分析:Headless 模式读取 PR diff,AI 只关注变更部分
- 报告生成:结果写入 PR 评论,开发者可直接在 GitHub 查看
整个流程无需人工干预,且因为 .atomcode.md 和 Skill 的存在,不同项目可以有不同的审查标准------Vue 项目检查组件规范,Rust 项目检查错误处理,Go 项目检查并发安全。
七、进阶技巧与避坑指南
7.1 Headless 模式的输出捕获
Headless 模式会将工具执行日志输出到 stderr,AI 回复输出到 stdout。在脚本中建议分开捕获:
bash
atomcode -p "分析代码" > result.md 2> debug.log
7.2 Token 消耗控制
CI 场景下必须严格控制 Token 消耗:
bash
# 限制对话轮次
atomcode --max-turns 15 -p "任务"
# 限制上下文窗口(通过配置)
# 在 config.json 中设置 max_context_tokens
7.3 Daemon 的会话持久化
Daemon 模式的会话与 CLI 共享持久化存储。这意味着你可以在 TUI 中开始一个会话,然后在 Daemon 中继续:
python
client = AtomCodeClient()
sessions = client.list_sessions() # 查看 TUI 中创建的历史会话
7.4 Skill 调试技巧
Skill 编写后,先用 Headless 模式快速验证:
bash
atomcode -p "测试 /my-skill,输入参数:xxx"
观察输出是否符合预期,再投入生产使用。
八、总结
AtomCode 的高阶玩法可以概括为三个层次的解放:
| 层次 | 特性 | 解决的问题 |
|---|---|---|
| 执行层 | Headless 模式 | 将 AI 编码从"交互式"变为"可脚本化",嵌入 CI/CD |
| 编排层 | Skills 自定义 | 将重复工作流固化为可复用命令,团队共享 |
| 上下文层 | .atomcode.md | 将项目背景知识自动注入,消除每次对话的上下文重建成本 |
三者联动时,AtomCode 不再是个人开发者的终端工具,而是团队工程基础设施的一部分------它可以 7×24 小时守在流水线里,用团队的标准审查代码、生成文档、执行发布,且永远不会忘记项目的编码规范。
如果你已经用熟了 TUI,下一步就是打开终端,尝试第一条 atomcode -p 命令,写下第一个 Skill 文件,创建第一个 .atomcode.md。高阶玩法的大门,就此打开。
转载自:https://blog.csdn.net/sghtgjfhv/article/details/163862742
欢迎 👍点赞✍评论⭐收藏,欢迎指正