Source CodeGit HistoryDocs EngineeringAI Assisted Development

iii:AI 辅助开发、源码演进与文档工程技术学习文档

本文从 iii-hq/iii 的源码、Git 提交、关键 PR、Tech Spec、docs/README.md、docs/next 与 Agent 派生文档出发,分析 iii 如何组织 AI 辅助开发、功能开发、功能迭代和技术知识管理,并抽象出一套可以应用到其他项目的工程实现方案。

main: 42b8627dd697 iii/v0.23.0-rc.5 2026-08-28

1. 整体架构:把 AI 变成仓库中的工程角色

iii 的特点不是简单使用 AI 写代码,而是把 AI 能够依赖的上下文、规则、设计信息、验证方式和知识文档放进仓库,使 Agent 能够在代码库内部按照统一规则执行任务。

Repository ├── AGENTS.md # 仓库级 Agent 开发约束 ├── .cursor/ │ ├── rules/ # 按目录/任务触发的规则 │ └── skills/ # 文档、教程、Reference 等工作流 ├── skills/ # 产品级 Agent Skills ├── tech-specs/ # 功能设计与决策记录 ├── engine/ # Rust runtime ├── crates/ # Compose、worker 等组件 ├── sdk/ # Node / Python / Rust / Go ├── console/ # Console ├── docs/ │ ├── next/ # 下一版本文档 │ ├── 0-x-0/ # 历史版本 │ └── *.skill.md # 面向 Agent 的派生文档 └── .github/ # CI / release / validation

Repository as Context

规则、设计、代码、测试和文档都在同一个 Git 仓库中。

Policy as Code

Agent 能做什么、哪些改动需要谨慎,写在 AGENTS.md 和 rules 中。

Knowledge as Code

Tech Spec、Docs 和 Skill 文档与源码一起版本化。

核心理解:iii 构建的是一个 AI-ready repository。AI 不需要只依赖聊天窗口里的 Prompt,而是通过仓库本身获得长期、可版本控制的工程上下文。

2. Agent 上下文系统

2.1 AGENTS.md:仓库级开发协议

AGENTS.md 提供项目地图、常用命令和修改边界。它的作用类似“给 AI 工程师的 CONTRIBUTING + Architecture Notes + Guardrails”。

层次作用示例
Project Map快速定位代码engine、sdk、console、skills、docs、tech-specs
Commands告诉 Agent 如何验证pnpm test、cargo test、cargo fmt
Always强制工程约定Function id 使用 ::、API path 必须有 leading slash
Ask First高风险边界公共 SDK API、engine config schema、WebSocket protocol
Never禁止操作提交 secrets、绕过核心约定等

2.2 .cursor/rules:按任务加载规则

.cursor/rules/docs.mdc 对 docs/**/*.mdx 与 docs/**/*.md 生效。它首先要求判断文档类型,然后加载相应 Skill。

Tutorial学习导向
How-to问题解决导向
Reference信息查询导向
Explanation理解原理导向

这相当于给 AI 增加一个“文档路由器”:先判断任务类型,再执行对应的写作约束。

2.3 Skills:把长 Prompt 变成仓库能力

.cursor/skills/doc_workflow.md 统一规定文档语气、组件、执行流程和四象限之间的边界。产品级 skills/ 则进一步提供可被 Agent 使用的领域知识和实现方式。

工程价值:Prompt 不再只存在于某次会话里,而是变成仓库中的可复用配置。团队可以像维护源码一样维护 AI 的工作方法。

3. 功能开发机制

从 Namespace 和 Worker Compose 的真实提交可以看到,iii 的大型功能开发通常由多个工程层共同组成。

问题定义明确当前架构限制
→
源码研究确认当前实现事实
→
Tech Spec记录设计、边界和取舍
→
代码实现Human + AI 协同
→
验证unit / e2e / scenario
→
Docs按影响范围更新

3.1 Tech Spec 是设计记忆

tech-specs/ 不只是最终方案说明,还会记录:

  • 当前源码中的 load-bearing facts;
  • 架构图和生命周期;
  • 候选方案与拒绝理由;
  • Non-goals;
  • Open questions;
  • 不同子领域拆分文档。

这使 Agent 在后续迭代时不仅知道“最终怎么做”,还知道“为什么没有选择其他方案”。

3.2 实现由代码、测试、Docs 同时构成

Worker Compose #2034 同时新增 crates/iii-compose、跨平台测试矩阵、engine e2e、Compose 文档和对应的 Agent 文档。这说明对于公共功能,完成定义不是只有源码合并,而是同时完成:

Executable System

代码、schema、CLI、runtime behavior、tests。

Knowledge System

Tech Spec、Explanation、Reference、Agent-readable docs。

4. 功能迭代机制:实现之后继续进行架构收敛

iii 的功能迭代不是“新增功能后停止”,而是先建立新模型,再逐步让旧机制迁移到新模型。

阶段 1:增加底层能力 ↓ 阶段 2:新功能首先使用新能力 ↓ 阶段 3:RC / 测试 / 实际场景验证 ↓ 阶段 4:把旧功能迁移到新模型 ↓ 阶段 5:删除旧路径 ↓ 阶段 6:更新迁移文档和下一版本文档

Namespace → Worker Compose → Legacy Worker Lifecycle Migration 是当前最典型的一条演进链。

5. Namespace:为后续多项目运行建立统一身份模型

2026-08-17 合并的 #1984 将 namespace 引入 engine 和四套 SDK。它不是简单给 function id 加前缀,而是把 namespace 作为独立 routing dimension。

5.1 关键设计

  • Function id 保持不变,例如 state::get;
  • namespace 独立于 function id;
  • Worker 身份使用 (namespace, worker_name);
  • Function ownership、service registry 和 trigger routing 都带 namespace;
  • 旧 SDK 不传 namespace 时进入 default;
  • Node、Rust、Python、Go SDK 同步支持。

5.2 为什么这个变化重要

在没有 namespace 时,同一个 engine 上很难安全运行多个具有相同 worker 名称的项目。引入 namespace 后:

project-a / namespace=orders
  state::get

project-b / namespace=analytics
  state::get

同一个 function id,可以存在于不同 namespace。

5.3 多轮反馈与验证

#1984 的 PR 记录了多轮外部检查与修复,包括 browser/Python/Go SDK parity、ownership race、late registration 和 namespace inheritance 等问题,并为发现的问题增加针对性测试。

实现Engine + SDK
→
外部检查发现 edge cases
→
定向修复逐问题处理
→
测试验证E2E / mutation

这说明 AI 辅助开发的关键不是要求一次生成正确,而是构建高质量的反馈循环。

6. Worker Compose:从 Tech Spec 到架构迁移的完整案例

2026-08-07 · #1963

Worker Compose Tech Pack + interactive deck 先进入仓库。

2026-08-20 · #2034

实现 crates/iii-compose,加入 DAG、lifecycle、registry、configuration、process supervision、跨平台测试和 Docs。

2026-08-27 · #2074

把旧的 engine-managed project worker lifecycle 迁移到 Worker Compose。

6.1 第一阶段:Tech Spec

tech-specs/2026-07-14-worker-compose/ 被拆成多个技术域:

  • README.md:总体架构;
  • cli-contract.md:CLI 契约;
  • compose-file.md:文件 schema;
  • configuration.md:配置;
  • lifecycle.md:生命周期;
  • namespace.md:namespace 模型;
  • scripts.md:生命周期脚本。

6.2 第二阶段:新增独立 Compose runtime

#2034 新增独立的 iii-compose crate,而不是直接扩展旧 worker lifecycle。这种方式建立了清晰边界,便于单独测试和快速迭代。

6.3 Compose 本身也是一个 Worker

Compose daemon 注册为普通 worker,并暴露:

compose::up
compose::down
compose::status
compose::logs
compose::list
compose::validate
compose::add
compose::remove
compose::restart
compose::update
compose::schema
compose::stop

这体现 iii 的架构方向:尽量让管理能力本身也使用 iii 自己的 Function / Trigger / Worker 模型,而不是不断增加特殊控制通道。

6.4 第三阶段:迁移旧生命周期

#2074 删除旧的:

  • iii worker;
  • worker::*;
  • 通过 iii.toml 的 engine fallback;
  • engine-managed project workers。

项目 worker 改为声明在 worker-compose.yaml 中。这样 Compose 从“新增功能”进一步成为统一的项目生命周期模型。

值得学习的模式:大型架构迁移可以先新增新系统并验证,再进行第二轮迁移和删除旧实现。对于 AI 辅助重构,这比一个超大 PR 同时“新建 + 迁移 + 删除”更容易控制风险。

7. Observability:从轮询和专用 Stream 收敛到 Trigger

Observability 的近期演进展示了 iii 如何持续把内部特例迁移到统一 primitives。

7.1 Trace persistence

#2067 将 trace 持久化到磁盘,并重新设计 observability configuration UI。这让 trace 从短期内存可视化能力变成更适合长期运行的系统能力。

7.2 Trigger-driven invalidation

#2088 移除 trace live streams 和 Console 每秒轮询,改成:

Engine trace activity ↓ coalesced trace trigger ↓ Console worker ↓ /ws/console-events ↓ Browser receives {trace_ids} ↓ Browser re-runs filtered query

这个模式可以称为 notify-then-query:

  • Trigger 只负责“有变化”的通知;
  • Query 仍负责真正的数据语义;
  • 过滤逻辑继续由 engine 统一维护;
  • 空闲时不产生无意义轮询流量。

这类变化对于 AI 友好,因为 Agent 要理解的底层模型越来越统一。

8. RC 发布节奏:代码变化快速进入候选版本

08-17 · Namespace → rc.1

a08b884 合并后很快进入 0.23.0-rc.1。

08-18 · SDK fix → rc.2

namespace 相关 SDK 行为修复后进入 rc.2。

08-20 · Observability → rc.3

trace persistence 合并后进入 rc.3。

08-20 · Compose daemon → rc.4

Worker Compose 主实现合并后进入 rc.4。

08-27 · Compose migration → rc.5

trigger observability 与 worker lifecycle migration 合并后进入 rc.5。

版本 bump commit 由 iii-ci[bot] 完成。可以看到 0.23 采用了较短的候选版本反馈周期,使架构级修改快速进入真实验证阶段。

9. docs/README.md:文档工程总入口

docs/README.md 不是普通目录说明,而是 iii 文档系统的入口文件。它通过 frontmatter 明确标记为 owner: devrel、type: explanation,并直接定义文档源码、预览、API Reference 生成和版本发布之间的关系。

README 定义的四个文档事实

  1. 文档网站是 canonical reference:docs/ 保存 Mintlify source,最终渲染站点是面向使用者的权威呈现。
  2. 文档可在仓库内本地运行:根目录使用 pnpm dev:docs,也可以在 docs/ 中执行 npx mint dev。
  3. API Reference 有生成步骤:使用 pnpm generate:api-docs 刷新 SDK/API Reference,再进入文档预览和发布。
  4. 文档有正式版本生命周期:README 将版本发布规则交给 RELEASING.md,采用 Next / Latest / Archive 模式。

9.1 Docs as Code 的实际流水线

Source Repository ├── SDK / API Source │ │ │ └── pnpm generate:api-docs │ ↓ │ Generated Reference │ ├── docs/*.md / *.mdx │ │ │ ├── Mintlify → Human Documentation Site │ │ │ └── iii-skill-render → *.skill.md │ Agent Documentation │ ├── docs/docs.json │ └── navigation / versions / redirects / theme │ └── docs/RELEASING.md └── Next → Latest → Archive

这里形成了一个非常清晰的知识工程结构:源码负责技术事实,MDX 负责人工维护的知识表达,generator 负责自动 Reference,Mintlify 负责面向人的展示,iii-skill-render 负责面向 Agent 的文本投影,RELEASING 负责知识版本生命周期。

9.2 API Reference 为什么要从源码生成

README 明确要求在预览文档前使用 pnpm generate:api-docs 刷新 SDK API Reference。它解决的是 API 文档与代码漂移问题。

修改 SDKtype / method / parameter
→
生成 Referencegenerate:api-docs
→
进入 docsversioned MDX
→
Human / Agent网站 + skill projection

对 AI 辅助开发而言,这一点很重要:Agent 修改公共 SDK 后,不应该再手工复制 API 定义到 Reference,而应该让源代码和生成器维护接口事实,从而降低参数、类型和示例过期的概率。

9.3 README.md 与 README.md.skill.md 的单向派生关系

docs/README.md
      │
      │ iii-skill-render
      ▼
docs/README.md.skill.md

# generated file header:
# DO NOT EDIT
# Edit docs/README.md

这明确体现了 One Knowledge Source → Multiple Knowledge Projections:同一份文档知识可以同时生成适合 Web 阅读的人类视图和适合 LLM 读取的 Agent 视图,但只维护一个源文件。

9.4 README 在 AI 辅助开发中的位置

Tech Spec / Design Memory ↓ Source Code / SDK / CLI ↓ Tests & CI ↓ Documentation Source docs/*.mdx ├───────────────┐ ↓ ↓ Mintlify iii-skill-render ↓ ↓ Human Knowledge Agent Knowledge └───────┬───────┘ ↓ Next Development Cycle
关键原理:README 让整个 docs/ 不再只是网站内容目录,而成为一个可以被开发者、CI 和 AI Agent 共同消费的版本化知识系统。

10. Docs 工程体系

10.1 当前版本结构

docs/docs.json 当前明确维护:

0.23.x

Next

包含 Namespace、Compose 和 Worker 生命周期迁移等下一版本内容。

0.22.x

Latestdefault

当前稳定文档。

这意味着文档不是等 stable release 后才编写,而是在 Next 阶段跟随代码演进。

10.2 文档按用途分类

类型实际文件主要用途
Explanationunderstanding-iii/compose.mdx解释为什么这样设计、取舍和运行原理。
Referenceusing-iii/compose.mdxCLI、functions、字段、schema 和精确行为。
How-toupgrading/workers-to-compose.mdx完成某个具体迁移目标。
Tutorialtutorials/linkly/*通过完整学习路径掌握能力。

10.3 Breaking Change 有专门 Migration Guide

Worker 生命周期迁移没有只写一条 Changelog,而是新增完整 how-to,包括:

  • 需要备份的文件;
  • 旧配置到新配置的映射;
  • engine-owned worker 与 project worker 的区别;
  • worker-compose.yaml 示例;
  • 验证命令;
  • 错误码;
  • 回滚条件。

这是功能迭代文档管理中很重要的实践:发布说明负责告诉用户“变了什么”,Migration Guide 负责告诉用户“怎么完成迁移”。

11. 面向 Agent 的文档:Human Source → Agent Projection

11.1 `.skill.md` 是文档的机器友好版本

仓库中大量存在:

docs/next/install.mdx
docs/next/install.mdx.skill.md

docs/next/using-iii/compose.mdx
docs/next/using-iii/compose.mdx.skill.md

docs/next/reference/sdk-node.mdx
docs/next/reference/sdk-node.mdx.skill.md

生成文件头部会标记由 iii-skill-render 生成,并提示不要直接编辑,而是修改源 MDX。

Human Documentation docs/*.mdx │ │ render ▼ Agent Documentation docs/*.mdx.skill.md

11.2 为什么需要两种表示

Human DocsAgent Docs
可以包含 UI 组件尽量转换成纯 Markdown
面向网站导航和阅读体验面向 LLM 检索和上下文加载
Mintlify / MDX更稳定的文本结构
重视视觉组织重视信息密度和语义

11.3 Generated Docs 需要降低检查噪音

.coderabbit.yaml 排除了 docs/next/**/*.skill.md,因为它们由相邻 MDX 生成。这样生成物仍可提交到 Git 供 Agent 使用,但自动代码检查不需要重复分析确定性派生内容。

工程原则:Generated artifact 可以进入版本库,但必须有唯一源文件,并且自动代码检查应尽量只关注源文件。

12. 底层工程原理

Single Source of Truth

代码事实来自源码;用户文档来自 MDX;Agent 文档从 MDX 派生。

Context Compilation

把庞大仓库压缩成 AGENTS、Skills、Spec 和结构化 Docs,使 Agent 快速获得上下文。

Decision Memory

Tech Spec 保存“为什么这样设计”,避免后续 AI 重复推翻已经讨论过的决策。

Policy Before Autonomy

先定义 Agent 能改什么,再让 AI 自动执行。

Impact-aware Documentation

公共 API、CLI 和 Breaking Change 强调用户文档;内部重构主要依赖代码、测试和内部说明。

Architecture Convergence

新 primitives 先解决新问题,再逐步替代旧的特殊机制。

12.1 iii 的 AI 辅助开发循环

Repository Context ↓ Tech Spec / Current Code Facts ↓ Human + AI Implementation ↓ External / Automated Feedback ↓ Targeted Fixes ↓ Executable Verification ↓ Docs / Agent Docs ↓ RC Release ↓ Real-world Feedback ↓ Next Iteration / Architecture Convergence

这个循环比单纯的“Prompt → 生成代码”更接近真正的软件工程。

13. 其他项目参考实现方案

13.1 推荐目录

.
├── AGENTS.md
├── .ai/
│   ├── rules/
│   └── skills/
├── specs/
│   └── 2026-08-28-feature/
│       ├── README.md
│       ├── architecture.md
│       └── migration.md
├── docs/
│   ├── next/
│   ├── tutorials/
│   ├── how-to/
│   ├── reference/
│   └── explanation/
├── scripts/
│   ├── render-agent-docs
│   └── validate-specs
└── .github/workflows/
    └── ai-governance.yml

13.2 AGENTS.md 推荐结构

# Project Map
- backend/
- sdk/
- docs/
- specs/

# Commands
- test
- lint
- format
- build

# Always
- follow naming rules
- add tests for behavior changes
- update public docs for public contracts

# Ask First
- public API
- database schema
- wire protocol
- auth model

# Never
- commit secrets
- bypass compatibility rules

13.3 Tech Spec 推荐结构

---
title: Feature Name
date: 2026-08-28
status: design
release_target: next
---

# Problem

# Current Codebase Facts

# Goals

# Non-goals

# Architecture

# Decisions
| Decision | Chosen | Alternatives | Why |

# Code Impact

# API / Contract Impact

# Tests

# Migration / Rollout

# Open Questions

# Source References

13.4 Docs Impact 分类

变化类型文档要求验证
内部重构通常无需 public docsunit / regression
公共行为变化Reference / How-tocontract tests
SDK / APIReference + Agent docsmulti-SDK tests
Breaking ChangeMigration Guide + Changelogmigration e2e
架构迁移Tech Pack + Explanation + Reference + How-toscenario + staged release

13.5 推荐 PR 模板

Spec:
Change Type:
Docs Impact: public | internal | none
Behavior Changed:
Tests:
Migration Required:
Agent Docs Regenerated:
Release Target:
Open Risks:

13.6 推荐 CI

1. validate spec frontmatter
2. run unit / integration tests
3. detect public contract changes
4. require docs-impact declaration
5. build docs
6. render agent docs
7. fail on generated-doc drift
8. verify migration guide for breaking changes
9. build release candidate
推荐复制的不是某个具体工具,而是这套工程思想:仓库级 Agent 规则 + Tech Spec + 可执行测试 + 分类型 Docs + Agent 文档投影 + RC 快速反馈。

14. 源码与提交索引

← 返回内容索引