# OuSheng
**Repository Path**: georgewangchn/OuSheng
## Basic Information
- **Project Name**: OuSheng
- **Description**: 多人多系统的 AI Coding 敏捷看板
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-18
- **Last Updated**: 2026-09-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: agile, agile-board, AI-Agents, AI-Coding, Cli
## README

# OuSheng · 㸸绳
### 把 AI 协作的状态与共识,装进一个 git 仓
需求、契约、证据、方案、共识都在里面。AI 领活、留证、汇报,人只拍板。


[](LICENSE)
[](docs/state-store.md)
无服务器,无注册服务,`git push/pull` 就是协作。
[快速上手](docs/quick-start.md) · [多机多窗口使用指南](docs/多机多窗口使用指南.md) · [共识层设计 v0.4](docs/OuSheng_共识层设计方案_v0.4.md) · [设计基石](docs/多人AI协作机制_方案基石.md)
---
## 三句话
AI 生成代码的速度,快过人能对齐的速度。前端 AI 按周二的老文档调 `/login`,后端周三就改了返回结构,联调日爆炸;两边都宣称"完成了",但没有证据,验收变成了信不信;"当时为什么这么做",答案在聊天记录里、在某个人脑子里,就是不在仓里。
OuSheng 的做法是把协作变成一个 git 仓。需求、契约、证据、方案、共识都写在上面,AI 每次开工前必读;破坏性变更和方案拍板,必须有人确认。
管住 AI 的机制是三道门和四个时机。三道门拦住越权(证据、背书、拍板),四个时机定义动线(上绳、开工、干活、收尾)。人只做两件事:拍板、看板。
## 跑起来:两步,把话丢给 opencode
前置:Go 1.25+、系统 `git`、[opencode](https://opencode.ai)。一个维护者加 n 个加入者,各丢各的,命令由 AI 跑。
**第一步 · 发起者(1 人,项目维护者)** 建中央仓、注册自己。在项目目录打开 opencode,丢这段话:
```text
我是项目负责人,帮我把这个项目用 OuSheng(㸸绳)上绳:
0. ousheng 还没装:克隆 github.com/georgewangchn/OuSheng,go install ./cmd/ousheng。
1. 本目录立项:问我项目名,注册我(问我的名字)。
2. 问我要不要现在声明系统:我说的才注册,没说的留给各机上绳时自报——
拓扑是长出来的,不替未来的人规划。
3. 问我要不要把仓推上 GitHub:要的话向我要 remote 地址(或用 gh 建仓)并 push。
4. 汇总:项目、我的身份、已注册系统;再告诉我怎么拉人——
把中央仓地址发给成员,成员按 README「加入者」话术自助上绳。
```
**第二步 · 加入者(n 人:同事、PM、各机 AI 窗口)** 拿到维护者发的中央仓地址后,在自己机器丢这段话:
```text
我要加入一个已用 OuSheng(㸸绳)上绳的项目:
0. ousheng 还没装:克隆 github.com/georgewangchn/OuSheng,go install ./cmd/ousheng。
1. 向我要中央仓地址,clone 到本机。
2. 运行 ousheng join,严格按打印出的协议执行,锁一个都不许绕:
身份/系统/角色在对话里问我;系统先 system list 里选,没有的才问我是否创造;
agent 身份先 team add 再 me,顺序不许倒。
3. 我在本机的代码仓路径问我后配好映射;plugin 按协议挂。
4. push,然后汇总:我的身份/系统/角色,下一步干什么。
```
两步完成。下面剧本里的每一条命令,都是 AI 窗口在跑,不是你。
机器损毁就 re-clone,重丢一次加入者话术。各系统的代码仓保持独立,零侵入。日常不用记任何命令:挂上 [adapter](adapters/README.md) 的窗口,开工自动注入,收尾自动收敛。
## 一张图看懂
```mermaid
flowchart LR
subgraph REPO["中央仓 · 就一个普通 git 仓"]
direction TB
W["work/ 需求 · 状态 · 契约 · 证据"]
D["designs/ 方案 · 轮次"]
A["architecture/ 系统全局面貌"]
end
BE["后端机
AI 窗口 + adapter"]
FE["前端机
AI 窗口 + adapter"]
PM["PM 机(人)"]
BE -- "sync 读 · push 写" --> REPO
FE -- "sync 读 · push 写" --> REPO
PM -- "sync 读 · push 拍板" --> REPO
```
机器之间不直连。git 就是通讯总线,也是审计日志和冲突解决机制。
协作信息有两类,物理性质不一样,绳上分开放:
| | 状态(现在是什么) | 共识(我们认定什么、为什么) |
|---|---|---|
| 载体 | `work/`(含契约与证据) | `designs/` `architecture/` |
| 形态 | 结构化 YAML,强 schema | 叙述文档加最小 frontmatter |
| 变更 | 高频,单点写入 | 低频演进,多方参与成形 |
| 例子 | T-042 做到哪了、契约是不是 breaking | 实时推送为什么选 SSE 不选 WebSocket |
## 核心机制
三道门,AI 绕不过去。写入路径和 converge 双重强制:
| 门 | 规则 |
|---|---|
| C1 证据门 | 契约标 `verified` 必须挂证据,`git_commit` 在代码仓硬验证 |
| C2 背书门 | breaking 变更必须 human ack,agent 自 ack 必拒 |
| 拍板门 | 方案 `agreed` 必须 human decide,agent 自拍共识必拒 |
第四道防线在提示层。`context me` 这类自动注入面只给指针(topic 名、文件名清单),方案正文不会自动进任何 AI 上下文。注入面最小化,提示注入的免疫面就最小化;`designs/`、`architecture/` 的正文对 AI 是数据,不是指令。
四个时机,定义 AI 的动线:
| 时机 | 谁动 | 回答的问题 |
|---|---|---|
| 零 · 上绳 | 新机(human 问答,agent 代跑) | 我是谁?做什么系统、什么角色? |
| 一 · 开工 | AI 窗口(adapter 自动注入) | 干什么?被谁阻塞?哪个方案等我表态? |
| 二 · 干活 | AI 窗口 | 干到哪?凭什么说做完? |
| 三 · 收尾 | AI 窗口加人(converge 提醒) | 全局差什么?谁卡住?谁在未拍板的方案上跑? |
## 一个项目的一天(真实输出)
场景:`datax-server`(后端,同事的 AI 窗口)和 `datax-ui`(前端,你的 AI 窗口)。今天的大需求是换 agent 运行引擎,编排接口要大改,前端全受影响。
### 第一幕 · 状态:接口不再靠缘分
① 后端 AI 接单开工,把新接口写成契约,当即被拦下。这是破坏性变更(breaking),没有人工确认,看板拒绝写入:
```console
$ ousheng todo "运行引擎切换:pi-agent-core 替换 deepagents" --system datax-server
created T-042 (revision 1)
$ ousheng work update T-042 --file swap.yaml --expect 1
contract.breaking=true requires human_ack with non-empty approver
```
② 你看一眼变更,拍板放行。谁在何时同意的什么,永久留痕:
```console
$ ousheng work update T-042 --file swap.yaml --expect 1 --ack
updated T-042 (revision 2, status doing) # human_ack: george @ 2026-09-10
```
③ 前端 AI 下次开工就看到了:阻塞、变更中的契约直接进它的上下文。它等事实,不猜,也不用翻旧文档。
④ 后端交付要带证据。验证过的契约才能标 `verified`,没有 git commit 或测试结果,"完成"只是口头禅:
```console
$ ousheng evidence add T-042 --type test_result --locator "test/engine_test.go::TestSwap"
```
### 第二幕 · 共识:方案不再靠记性
第二天来了更大的需求:结果页实时推送,SSE 还是 WebSocket?PM 建单 `REQ-DATAX-043`,起草方案。
⑤ 相关 AI 窗口自动被点名:
```console
$ ousheng context me --actor ui-dev
{
"pending_reviews": ["live-results"], ← 有个方案在等我表态
"knowledge": ["datax-server", "datax-ui"] ← 全局系统文档,存在即索引
}
```
⑥ 各窗口轮次表态,PM 拍板:
```console
$ ousheng design list --waiting-for ui-dev
live-results draft pm datax-server,datax-ui REQ-DATAX-043
$ ousheng design decide live-results --actor pm
design live-results decided by pm
```
agent 自己 decide,写入路径直接拒,拍板门和 C2 一个血统。方案还在 draft 后端就抢跑,converge 会曝光。方案被推翻,`design supersede` 必须指认继任者,知识不断链;需求取消,`design withdraw` 撤回留档。发散的长讨论不上绳,那是对话层的事,绳只存收敛后的骨架;待发言清单从发言事实派生,说完即消,没有需要维护的元数据。
你全程只做了两件事:拍板两次,看板一眼。
```console
$ ousheng view kanban
== DOING (2) ==
[T-001] 首页改版
System datax-ui (湖仓前端)
Actor george
Priority P1
Due 2026-09-30
Progress 30% reported
[T-002] 发布接口
System datax-server
Actor server-dev
Blocker T-001 ← 卡在谁那里,一眼看到
$ ousheng converge
IN_PROGRESS
```
## 和常见方案的区别
| 常见方案 | 它解决什么 | 与 OuSheng 的差别 |
|---|---|---|
| Jira / Linear / 飞书项目 | 人的流程与看板 | 要服务器、要人维护;OuSheng 是给 AI 窗口读的 git 仓,零服务 |
| Wiki / Notion / 接口文档平台 | 知识沉淀 | 人工快照追不上 AI 日更;OuSheng 是开工必读的活状态,写路径有门 |
| 单机 AI agent(Claude Code / Codex) | 一个窗口的能力 | 窗口之间的事没人管:跨机对齐、契约治理、共识拍板,是 OuSheng 的范围 |
| 多 agent 编排框架(AutoGen / CrewAI) | 编排 agent 干活 | OuSheng 不编排,只给方向与信任边界。绳不是牛 |
## 工程实证
| 实证 | 内容 |
|---|---|
| 多机 dogfood | 4 套剧本:四机全流程、混沌两辑(24 个突发:冒用身份、机器损毁、依赖环、假证据、批量雪崩)、共识层轮次 |
| 索引一致性 | memory 与 sqlite 的查询结果深度相等(S5 等价测试硬约束);SQLite 只是可重建的派生索引 |
| 依赖白名单 | `yaml.v3`、纯 Go `sqlite`、MCP SDK;不用 JSON Schema 库,不用 go-git |
| 写入安全 | Git + YAML 是唯一事实源;CAS revision 防并发写丢更新;手改文件会被 strict decode 拒收,git 审计兜底 |
没有 opencode?终端五条(等价路径)
```bash
git clone https://github.com/georgewangchn/OuSheng.git && cd OuSheng
go install ./cmd/ousheng # 装到 $(go env GOPATH)/bin,确认它在 PATH 里
mkdir myproj && cd myproj
ousheng setup # 交互式:项目名 / 你的名字 / 系统列表
ousheng todo "第一个任务" # 自动 ID + 全默认值
ousheng view kanban
```
## 文档
| | |
|---|---|
| [快速上手](docs/quick-start.md) | 日常循环 / 多人 / 多仓拓扑 / 通讯模型 |
| [多机多窗口使用指南](docs/多机多窗口使用指南.md) | 两段式上绳(join 时机零)、完整拓扑与日常协议 |
| [共识层设计方案 v0.4](docs/OuSheng_共识层设计方案_v0.4.md) | 方案讨论 / 轮次 / 拍板 / architecture 全局面貌 |
| [工程模型](docs/engineering-model.md) · [上下文协议](docs/context-protocol.md) · [存储约定](docs/state-store.md) | v0.3 规格 |
| [设计基石](docs/多人AI协作机制_方案基石.md) · [完整设计方案](docs/OuSheng_工程本体化改造方案_v0.3.md) | 为什么这样设计 |
---
**一根绳,一块板。接口不再靠缘分,共识不再靠记性。**
[GitHub](https://github.com/georgewangchn/OuSheng) · MIT License