内部分享 · AI 编码工作流

Spec Coding

从 Context Engineering 到可执行的研发工作流:让 Agent 在持续累积的项目上下文里工作,把需求写成文档,把验收交回给人。

Agenda

今天讲三件事

01

Context Engineering

llmdoc:一套文档驱动的项目上下文系统,让 Agent 从"每次重新理解项目"变成"基于持续累积的上下文工作"。

02

Spec Coding 工作流

先 DeepResearch 调研,再让 Coding Agent 把需求写成 vision / plan / loop / Dod 文档;实现全程 Agent 自检、文档随变更更新, 最后人工验收。

03

其他 · 自动化捕捉资讯

Folo cli + Marvis 自动任务:把资讯获取从"主动刷"变成"自动送到"。

Part 01

Context Engineering

llmdoc —— 面向 Claude Code 与 Codex CLI 的文档指引 AI 编码工作流,把上下文当作可维护的工程资产来治理。

Part 01 / 概念基础

Coding Agent 的上下文,由什么构成?

Tool Schemas

工具定义

每个工具的名称、描述与参数 schema——存在即占上下文。

System & Rules

系统提示与规则

system prompt、CLAUDE.md / AGENTS.md、skill 与 hook 注入的指令——定义 Agent 怎么做事。

Memory & Docs

持久化记忆与文档

memory 文件、llmdoc 等跨会话内容——唯一能被工程化治理的一层。

Environment

项目与环境信息

工作目录、git 状态、平台、日期等自动注入的运行时事实。

Conversation

对话历史

用户指令与助手回复的全部记录,随多轮任务持续累积。

Tool Results

工具结果

Read / Grep / Bash 的输出,通常是上下文消耗的最大来源。

同一块上下文窗口,六类内容在竞争——Context Engineering 就是管理这场竞争

llmdoc 让 AI Agent 从“每次重新理解项目”,变成“基于持续累积的项目上下文工作”

项目定位 · 一句话概括
Part 01 / 要解决的问题

在真实工程项目中,LLM Agent 的瓶颈不是能力不足,
而是上下文组织方式不稳定。

Part 01 / 要解决的问题

没有结构化上下文时,五个反复出现的失效模式

01

每次任务从零开始

重新搜索入口、重新理解模块关系、重新判断约束,大量重复的 Glob / Grep / Read 消耗首轮上下文窗口。

02

容易读错重点

架构边界、设计意图、历史决策散落在代码、注释、PR 与对话中;只靠临时搜索,容易只看到局部实现。

03

经验无法跨任务复用

一次任务中发现的经验如果不沉淀,下一次对话就会丢失——相同的调研与错误反复出现。

04

文档过重或过期

全量塞给模型会污染上下文窗口;完全依赖人工维护,文档又容易过期。两者之间缺一个可执行的更新流程。

05

多平台工作流难统一

Claude Code 与 Codex CLI 的插件、skill、subagent、hook 机制不同,方法论需要收敛到共享文档再分别适配。

Part 01 / 设计理念

五个设计决策

3.1

渐进式 Context 披露

启动只读最小必要上下文,任务深入时按路由规则分层读取——从全量注入变为按需加载。

3.2

文档是 Agent 的导航层

文档不是源码摘要,而是导航层;源码仍是最终事实来源。

3.3

临时证据与稳定知识分层

.llmdoc-tmp/ 存临时调查结果, llmdoc/ 存稳定知识,互不污染。

3.4

多角色分工协作

不同生命周期的信息有不同 owner,避免临时判断污染长期文档。

3.5

基于 commit 的知识同步

watermark-commit 为基准检测变更,按范围与风险选择最轻的更新模式。

Part 01 / 设计理念 · 3.1

渐进式 Context 披露

启动阶段

最小必要上下文
  • llmdoc/index.md
  • llmdoc/startup.md
  • llmdoc/must/ 短规则

按需路由

任务需要更多信息时
  • overview/ 项目身份、边界、主要区域
  • architecture/ 架构流程、不变量、所有权
  • guides/ 可重复执行的工作流
  • reference/ 稳定事实、路径映射、接口约定
  • memory/ 反思、决策、已知文档缺口

核心转变:上下文读取从全量注入变成按需加载。

Part 01 / 设计理念 · 3.2

文档不是源码摘要,而是导航层

?

这个项目是什么?

?

哪些文件定义了公开接口?

?

某个工作流应该读哪些文档?

?

哪些设计约束不能破坏?

?

哪些结论已被验证、值得长期保留?

源码仍是最终事实来源;llmdoc 负责帮 Agent 更快找到正确源码,并理解其背后的稳定意图。

Part 01 / 设计理念 · 3.3

临时证据与稳定知识分层

临时证据

.llmdoc-tmp/ · 本地缓存
  • 某次任务中的调查结果
  • 当前分支观察、一次性分析
  • 可帮助相邻会话复用,但不是 source of truth

稳定知识

tracked llmdoc/ · 进入版本管理
  • 架构边界、公共接口
  • 长期约定、重复出现的经验
  • 被索引、被路由、被持续更新

分层的意义:临时判断永远不直接写入长期文档。

Part 01 / 设计理念 · 3.4

四类角色,四种信息生命周期

investigator

调研者

证据驱动的调研,回答"现状是什么",不下长期结论。

→ .llmdoc-tmp/investigations
worker

执行者

执行明确的代码或文档任务,遵循 must 规则与路由文档。

→ 代码变更 / 文档变更
recorder

记录者

维护稳定 llmdoc/ 文档、索引与同步状态,直接读原始调研结果。

→ llmdoc/ 稳定文档 + index.md
reflector

反思者

记录任务后的过程反思,捕捉容易复发的过程信号。

→ memory/reflections

重点不是"更多 Agent",而是让不同生命周期的信息有不同的 owner

Part 01 / 设计理念 · 3.5

基于 commit 的知识同步

llmdoc/state/sync.md → watermark-commit · 比较 watermark..HEAD 已提交变更 + 当前工作区未提交变更
fast

小范围 · 低风险 (<5 commits)

自有提交、影响文档明确——直接更新受影响文档。

analysis

中等范围 (5-15 commits)

含他人提交,或需要一次聚焦的 investigator 调研后再更新。

full

大范围 · 高风险 (15+ commits)

多批回填、独立反思——investigator + reflector + recorder 完整编排。

原则:永远选择最轻的、足够的更新模式。

Part 01 / 项目结构

目录即契约

llmdoc/ ├── index.md ├── startup.md ├── must/ # 每次运行都应读取的小型启动上下文 ├── overview/ # 项目身份、边界和主要区域 ├── architecture/ # 架构流程、不变量、所有权边界 ├── guides/ # 一篇文档只描述一个可重复工作流 ├── reference/ # 稳定事实、路径映射和约定 ├── state/ │ └── sync.md # commit watermark,同步状态,不是知识文档 └── memory/ ├── reflections/ # 任务后的过程反思 ├── decisions/ # 长期设计或流程决策 └── doc-gaps.md # 已知文档缺口 .llmdoc-tmp/ └── investigations/ # 临时调研草稿,本地缓存,不进稳定索引
  • 每个目录回答一类问题——Agent 按问题类型路由,而不是全文扫描。
  • sync.md 是机器状态,不是知识文档;它与稳定知识分开治理。
  • .llmdoc-tmp/ 不进入版本管理,是证据缓存而非稳定记忆。
Part 01 / 项目结构

运行时架构:从入口分叉的树形结构

用户 / 开发者

自然语言任务

Claude Code / Codex CLI

共享方法论,分别适配入口

├──

llmdoc Core Skill

日常任务入口

读取 index / startup / must 按需路由 overview · architecture · guides · reference · memory 必要时读源码验证
├──

/llmdoc:init

初始化编排

investigator 按主题并行调研 显式覆盖检查 recorder 生成稳定文档 + index.md
└──

/llmdoc:update

更新编排

git diff + watermark fast / analysis / full investigator · reflector recorder 同步 · 推进 watermark

一次任务只走树的一条分支——入口决定编排,编排决定读哪些文档、动用哪些角色。

Part 01 / 运行流程

普通任务:最小启动,按需深入,经验回写

STEP 1

加载 llmdoc skill

进入项目即获得加载规则

STEP 2

读启动上下文

index.md → startup.md → must/

STEP 3

按需路由深入

需要更多上下文时按路由读文档,必要时读源码验证事实

STEP 4

执行任务

在稳定意图的约束下工作

STEP 5

产生长期知识?

是 → 考虑运行 /llmdoc:update,同步回稳定文档

每一次任务结束,都可能让下一次任务的起点更高

Part 01 / 运行流程 · /llmdoc:init

初始化:并行调研,显式检查覆盖

STEP 1

检查仓库结构

创建 llmdoc 目录骨架

STEP 2

按主题并行调研

第一轮 investigator 覆盖主要仓库表面

STEP 3

显式检查覆盖范围

有缺口 / 冲突 / 未解关系 → 补充调研 pass

STEP 4

recorder 生成稳定文档

直接读原始调研结果,生成 must / overview / architecture / reference

STEP 5

同步 index.md

完成初始化

关键

非平凡仓库不依赖单个广泛调查——按主题并行调研,避免第一轮盲区进入稳定文档。

关键

recorder 直接读取原始调查结果,而不是只读二手总结。

Part 01 / 运行流程 · /llmdoc:update

更新:以 watermark 为基准,把变化同步回文档

STEP 1

读取 watermark

计算 watermark..HEAD 净变更,合并工作区未提交变更

STEP 2

选择更新模式

按范围 / 作者 / 风险 → fast · analysis · full

STEP 3

调研与反思

analysis / full 启动 investigator;有流程教训时 reflector 写 reflection

STEP 4

recorder 更新稳定文档

同步 index.md,清理或更新 doc-gaps.md

STEP 5

推进 watermark

可安全推进 → 更新 sync.md;否则保留 watermark

原则

变更检测基于 commit watermark,而不是日期或主观记忆;未提交变更参与更新,但不推进 watermark。

原则

文档只记录稳定结论,不归档所有任务细节;.llmdoc-tmp/ 是证据缓存,不是稳定记忆。

Part 01 / 与 Context Engineering 的关系

llmdoc 是 Context Engineering 的部分实践

它关注的不是单条 prompt 怎么写,而是工程项目中的上下文如何被选择、组织、压缩、读取、更新和治理

Selection

记忆选择

startup.mdmust/index.md 控制启动时读什么;高频稳定信息进启动上下文,低频专项按需读取。

Compression

记忆压缩

把架构意图、模块边界、工作流规则压缩成短文档,Agent 不必每次从源码重新推断。

Routing

记忆路由

index.mdreference/repo-surfaces.md 充当路由表,把"我要改什么"映射到"应该读什么"。

Memory

记忆存储

reflections/decisions/doc-gaps.md 让项目经验跨会话累积——保存容易复发的过程信号。

Update

记忆更新

/llmdoc:update 让记忆跟随代码演进;commit watermark 保证更新有明确基准。

Governance

记忆治理

临时证据、过程记忆、稳定知识、机器状态四层分离,降低上下文污染。

Part 01 / 辨析

llmdoc 和 Agent 的 memory 系统,有什么区别?

Agent memory 系统

面向"人"的记忆 · 平台内置
  • 记录用户偏好、工作习惯、反馈与纠正
  • Agent 自动写入,粒度小、随用随记
  • 跟随用户或工具,通常跨项目生效
  • 注入方式由平台决定,个人私有,不可路由

llmdoc

面向"项目"的知识 · 仓库自有
  • 记录架构边界、工作流、稳定约定与决策
  • 由 init / update 流程显式维护,多角色把关
  • 跟随仓库、进入版本管理,团队共享
  • 可路由、按需加载,有 watermark 同步基准

memory 记住"你是谁、怎么工作";llmdoc 记住"这个项目是什么、该怎么动它"——互补,不互相替代

Part 01 / 小结

把项目上下文从"临时对话材料"变成"可维护的工程资产"

01

开始任务时,读取最小但高价值的上下文

02

需要深入时,按概念路由到相关文档和源码

03

完成任务后,把值得复用的经验同步回稳定文档

04

下一次任务,再从这些稳定文档中受益

有了稳定的项目上下文,下一步是把它用进日常开发工作流

Part 02

Spec Coding 工作流

先调研、再写清需求、然后让 Agent 实现——vision.md · plan.md · loop.md · Dod.md,最后人工冒烟验收。

Part 02 / Spec Coding 工作流

六步:从调研到验收

STEP 1

DeepResearch 调研

先做深度调研,产出调研报告——不带着空白脑子开工

STEP 2

与 Coding Agent 对齐

带着调研报告和 Agent 聊,把需求、边界、约束聊清楚

STEP 3

Agent 写需求文档

vision.md · plan.md · loop.md(可选)· Dod.md

STEP 4

装配工具链并实现

playwright · chrome-devtools-mcp 等,Agent 边实现边自验证

STEP 5

Agent 自检

实现全程持续自检;出现影响 Plan 走向的变更 → 先回写 plan.md / Dod.md 再继续

STEP 6

人工冒烟测试

Agent 自验证之后,人对核心路径做最终验收

核心思想:需求先被写清楚,代码才被写对;文档随实现持续更新,不是一次性产物。

Part 02 / 需求文档

Agent 写出的四份文档

vision.md

需求愿景

做什么、为什么、不做什么——对齐目标的单一事实来源。

→ 回答 Why / What
plan.md

实施计划

任务拆解、执行顺序、依赖关系,让实现过程可分步检验。

→ 回答 How / Order
loop.md · 可选

迭代回路

需要多轮循环时的节奏、检查点与退出条件。

→ 回答 Iterate
Dod.md

完成定义

Definition of Done:可逐条检验的验收标准清单。

→ 回答 Done?

文档是人和 Agent 的共同契约——先评审文档,再放行代码;实现中变更影响走向时,plan / Dod 同步更新,而不是事后补写。

Part 02 / 工具链与验收

让 Agent 能自行证证,让人做最终验收

本地工具链

装配在开发机上
  • playwright 浏览器自动化:Agent 能真实打开页面、点击、截图
  • chrome-devtools-mcp 查看 console、网络请求、性能,自己排查问题
  • 实现全程持续自检:验证不通过就地修复;方向性变更先回写文档

人工回归验收

最后一道验收
  • 对照 Dod.md 逐条过核心路径
  • 不逐行 Review,只验证"能不能用"
  • 发现问题 → 回到 plan.md 迭代,而不是直接上手改

工具让 Agent 能自我证证, 回归测试让人保证最终验收标准

Part 03 · 其他

自动化汇总资讯

Folo cli + Marvis 自动任务:资讯获取从"主动刷"变成"自动送到"。

Part 03 / 自动化汇总资讯

两个工具,一条自动链路

Folo cli

捕捉 · 信息入口
  • 用命令行管理订阅源、拉取更新
  • 资讯入口脚本化,可以被任何自动化调用
  • 不再依赖手动打开 App 刷时间线

Marvis

自动任务 · 定时消化
  • 定时触发捕捉任务,批量消化新增资讯
  • 按规则整理、过滤、输出摘要
  • 人只看消化后的结果,不看原始洪流
订阅源 → folo cli 捕捉 marvis 自动任务 定时摘要
Spec Coding 分享

谢谢 · Q&A

01 Context Engineering · llmdoc
02 Spec Coding 工作流 · vision / plan / loop / Dod
03 资讯自动化 · Folo cli + Marvis
← / → · space · R reset