teamai-cli 0.17.3 → 0.17.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.zh-CN.md CHANGED
@@ -11,572 +11,169 @@
11
11
  [![npm downloads](https://img.shields.io/npm/dm/teamai-cli.svg)](https://www.npmjs.com/package/teamai-cli)
12
12
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
13
13
 
14
- 让每个 AI 编程助手都按同一套标准工作。
14
+ [![用户交流](https://img.shields.io/badge/用户交流-Discord-5865F2?logo=discord&logoColor=white)](https://discord.gg/gervEZm58g)
15
+ [![开发者交流](https://img.shields.io/badge/开发者交流-Discord-5865F2?logo=discord&logoColor=white)](https://discord.gg/DeHHxPnfZF)
15
16
 
16
- 通过 Git 统一管理 skills、rules、docs,驾驭 20+ 种 AI 工具——一个人也能用,团队用更强。
17
+ 面向 AI 智能体的团队 Harness 分发工具。
17
18
 
18
- **支持:** Claude CodeCodex、Cursor、CodeBuddy IDE,以及 Gemini CLI、Windsurf、Trae、Aider、Amp、OpenClaw 20+ AI 编程工具(skills 同步)。
19
+ 通过 Git 统一管理 skills、rules、docs,驾驭 Claude Code / Codex / CodeBuddy / WorkBuddy 等多种 AI 工具。
19
20
 
20
- > 📖 **完整使用指南**:[docs/usage-guide.md](docs/usage-guide.md) — 涵盖从团队创建到日常使用的全流程。
21
+ 一个人也能用,团队用更强。
21
22
 
22
- > 📚 **Provider 说明**:[docs/providers.md](docs/providers.md) — GitHub / TGit 差异与认证配置。
23
-
24
- 如有问题或建议,欢迎提交 PR 或 Issue,一起共建这个项目。
23
+ ## 快速开始
25
24
 
26
- ## 安装
25
+ ### 安装
27
26
 
28
27
  ```bash
29
28
  npm install -g teamai-cli
30
29
  ```
31
30
 
32
- <details>
33
- <summary>腾讯内部用户:通过 tnpm 安装 <code>@tencent/teamai-cli</code></summary>
31
+ ### 团队管理员 / 个人使用者
34
32
 
35
- ```bash
36
- npm install -g @tencent/teamai-cli --registry=http://r.tnpm.oa.com
37
- ```
33
+ 在 Git 托管平台(GitHub 或 TGit)创建共享经验仓库,**授予团队成员写权限**,然后让他们运行 `teamai init --repo https://github.com/yourorg/yourrepo`。
38
34
 
39
- 两个包的代码内容一致,`@tencent/teamai-cli` 只是公网 `teamai-cli` 的内网镜像。
40
- </details>
41
-
42
- ## 快速开始
35
+ > 个人使用无需单独建仓:`teamai init` 会检查目标仓库,不存在时自动创建。
43
36
 
44
37
  ### 团队成员
45
38
 
46
39
  ```bash
47
- # 用户级初始化(默认,资源安装到 ~/)
48
- teamai init --repo yourteam/yourproject
40
+ # 用户级初始化(默认,资源安装到 ~/ 下)
41
+ teamai init --repo https://github.com/yourorg/yourrepo
49
42
 
50
43
  # 项目级初始化(资源安装到项目目录下)
51
44
  cd /path/to/my-project
52
- teamai init --repo yourteam/yourproject --scope project
53
-
54
- # 非交互模式(适合 CI/CD 或 AI agent 自动化)
55
- teamai init --repo yourteam/yourproject --scope user --role hai_dev --force
56
- ```
57
-
58
- ### 管理员
59
-
60
- 先在 git 托管平台上创建好团队共享经验的仓库(默认 GitHub;TGit 也支持),并把所有团队成员加入到该仓库的 write 权限。
61
-
62
- - **GitHub**:用 `gh repo create yourorg/yourproject --private` 创建,或在 UI 上建。然后用 Settings → Collaborators 把成员加进来,并把 master/main 设置为默认分支。
63
- - **TGit(腾讯工蜂)**:在 [git.woa.com](https://git.woa.com/) 上创建,通过 user group 批量添加 master 权限。
64
-
65
- CLI 会根据用户传入的 repo URL 自动选择 provider:
66
-
67
- - `yourorg/yourrepo` 或 `https://github.com/yourorg/yourrepo` → GitHub
68
- - `https://git.woa.com/yourteam/yourrepo` → TGit
69
-
70
- ### 只读消费者(HTTP 团队仓库,免 git)
71
-
72
- 有些用户或 agent 只需要*消费*团队的 skills/rules——不需要 git clone,也不需要 push。用一个 API key 即可通过纯 HTTP 接入:
73
-
74
- ```bash
75
- teamai init --http https://your-team-host/api --token <api-key>
45
+ teamai init --repo https://github.com/yourorg/yourrepo --scope project
76
46
  ```
77
47
 
78
- - **只读**:HTTP 仓库下 `push` / `contribute` / `remove` 均被禁用。
79
- - API key 以 `0600` 权限保存(不写入 config,也不会被提交);同时支持 `TEAMAI_API_TOKEN` 环境变量。
80
- - 无需 git clone:skills/rules/CLAUDE.md 在每次会话时通过 report/sync/ack 生命周期交付。hooks 与状态上报在 init 时即接线完成。
81
-
82
- #### Agent 状态上报
83
-
84
- 初始化后,受支持的 agent(CodeBuddy / WorkBuddy)会在 session 启动时上报本地已安装 skill 的状态,并拉取服务端下发的 skill 安装 / 更新 / 卸载命令,全部挂在既有 hook dispatch 上(`session-start` → report + sync,`prompt-submit` → sync)。下发失败会进离线队列,下次重试。
85
-
86
- > **隐私**:install path 和 machine id 仅在*本地*哈希以派生稳定的 `local_agent_id`,二者都不会上报。
87
-
88
- <details>
89
- <summary><b>HTTP 契约</b>(面向后端实现者)—— <code>--http</code> 端点需要提供哪些接口</summary>
90
-
91
- `--http <baseUrl>` 传入的是基础地址,所有端点都相对于它,并统一用 `Authorization: Bearer <api-key>` 鉴权。
92
-
93
- | 端点 | 方法 | 用途 | 路径 |
94
- |------|------|------|------|
95
- | `{baseUrl}/api/local-agent/report` | POST | session 启动:upsert agent + 已装 skill | 默认,可配置 |
96
- | `{baseUrl}/api/local-agent/sync` | POST | 上报状态 + 返回待执行的 skill 命令 | 默认,可配置 |
97
- | `{baseUrl}/api/local-agent/commands/ack` | POST | 回执单条命令(`{ id, status, error }`) | 默认,可配置 |
98
-
99
- `POST /api/local-agent/sync` 返回负责 skill 安装/更新/卸载的待执行命令:
100
-
101
- ```json
102
- {
103
- "ok": true,
104
- "commands": [{ "id": 1, "type": "install_skill", "skill_slug": "x", "skill_version": "1.0.0", "download_url": "https://signed-url/..." }]
105
- }
106
- ```
107
-
108
- - skill 的 `download_url` 是**直连**拉取——它在 query string 里自带签名鉴权,因此不附带 `Bearer` 头。它必须指向一个 `.zip`,其根目录为 `<slug>/SKILL.md …` 或扁平的 `SKILL.md …`。
109
-
110
- **可配置路径**:reporter 三个路径是可覆盖的默认值;上面的 JSON 结构是契约。可调项(环境变量):
111
-
112
- | 变量 | 作用 |
113
- |------|------|
114
- | `TEAMAI_API_TOKEN` | API key(`--token` 的替代) |
115
- | `TEAMAI_REPORT_ENDPOINT` | reporter 基础 URL(默认 = `--http` 地址) |
116
- | `TEAMAI_REPORT_PATHS` | JSON `{ "report", "sync", "ack" }`,覆盖 reporter 三个路径 |
117
- | `TEAMAI_REPORT_AGENTS` | 参与上报的 agent,逗号分隔(默认 `workbuddy,codebuddy`) |
118
- | `TEAMAI_SKILL_DOWNLOAD_HOSTS` | skill `download_url` 的 host 白名单,逗号分隔(空 = 全部放行) |
119
- | `TEAMAI_BIND_PROMPT_ENABLED` | 设为 `1` 开启组织绑定提示(TTY 交互提示 + 注入的 hook 提示)。默认关闭;`teamai bind-project` 手动命令不受影响 |
120
-
121
- </details>
122
-
123
- ## 命令
124
-
125
- | 命令 | 说明 |
126
- |------|------|
127
- | `teamai init` | 初始化(OAuth 登录、关联仓库、注册成员、注入 hooks) |
128
- | `teamai push` | 推送本地资源到独立分支并创建 MR |
129
- | `teamai pull` | 拉取团队资源并注入到本地 AI 工具 |
130
- | `teamai status` | 查看本地 vs 团队仓库差异 |
131
- | `teamai recall <query>` | 搜索团队知识库(BM25 + 图谱加权) |
132
- | `teamai recall enable/disable/status` | 开启/关闭/查看 recall 状态(控制 auto-recall hooks 和 subagent 部署) |
133
- | `teamai import --dir <path>` | 从本地目录提取代码知识图谱 |
134
- | `teamai import --from-repo <url>` | 导入仓库代码知识图谱(`teamwiki/`) |
135
- | `teamai import --from-org <org>` | 批量导入组织下所有仓库 |
136
- | `teamai import --from-repo-list <yaml>` | 按白名单批量导入 |
137
- | `teamai import --from-mr <url>` | 从已合并 MR 提取 learning |
138
- | `teamai import --from-iwiki <id>` | 从 iWiki 导入文档为 learnings |
139
- | `teamai codebase --lint` | 知识图谱健康度检查 |
140
- | `teamai contribute` | 分享本次 session 经验到团队仓库 |
141
- | `teamai members` | 列出团队成员 |
142
- | `teamai roles` | 管理团队角色和命名空间 |
143
- | `teamai remove <type> <name>` | 删除资源并创建 MR |
144
- | `teamai digest` | 生成团队使用周报 |
145
- | `teamai doctor` | 诊断配置问题 |
146
- | `teamai uninstall` | 卸载所有 teamai 资源和 hooks |
147
-
148
- 全局选项:`--dry-run`、`--verbose`
149
-
150
- Import 选项:`--incremental`、`--skip-enrich`(跳过 AI 调用,仅做代码提取 + 图谱构建)
48
+ 初始化完成后,每次开启 AI 会话时都会自动拉取管理员发布的 skills / rules Harness 更新,无需手动同步。
151
49
 
152
- <details>
153
- <summary>更多命令(管理、CI、分析)</summary>
50
+ > **完整使用指南**:[docs/usage-guide.zh-CN.md](docs/usage-guide.zh-CN.md)([English](docs/usage-guide.md))— 涵盖从团队创建到日常使用的全流程。
154
51
 
155
- | 命令 | 说明 |
156
- |------|------|
157
- | `teamai list [type]` | 列出资源(skills\|rules\|docs\|env\|wiki) |
158
- | `teamai skill [show <name>]` | 查看 skill 元数据和贡献者 |
159
- | `teamai source` | 管理跨团队 skill 订阅 |
160
- | `teamai tags` | 管理基于标签的资源过滤 |
161
- | `teamai env` | 管理团队环境变量 |
162
- | `teamai hooks` | 管理 AI 工具 hooks |
163
- | `teamai cache --gc` | 回收 clone 缓存 |
164
- | `teamai ci extract-mr --url <url>` | CI:从 MR 提取知识,发布评论,合并后写入团队仓库 |
52
+ ## Harness 管理和分发
165
53
 
166
- </details>
54
+ TeamAI 把 skills、rules、docs、hooks 统一存放在共享 Git 仓库,通过「push → 评审合并 → pull」的流程分发到每位成员的本地 AI 工具,并支持订阅其他团队的 Harness。
167
55
 
168
- ## 工作原理
56
+ ### 工作原理
169
57
 
170
58
  ```
171
- 成员 A 成员 B
172
- 创建 skill / 写规则 同上
173
- │ │
174
- ▼ ▼
175
- teamai push teamai push
176
- │ │
177
- ▼ ▼
178
- 创建分支 + MR 创建分支 + MR
179
- │ │
180
- └──────► 团队git仓库 ◄──────────────┘
181
- │ ▲
182
- │ │ reviewer 审批合并 MR
183
-
184
- SessionStart hook → teamai pull
185
- 自动拉取到所有成员本地
59
+ teamai push → 创建分支 + MR → reviewer 审批合并
60
+
61
+ SessionStart hook → teamai pull → 同步到本地 AI 工具
186
62
  ```
187
63
 
188
- - `teamai push` 会创建独立分支(`teamai/push/<user>/<timestamp>`),推送后自动创建 Merge Request 并指派 reviewers
189
- - `teamai init` 初始化时可配置默认 reviewers(记录在 `teamai.yaml` 的 `reviewers` 字段)
190
- - `teamai init` 会自动注入与各工具格式对齐的 hooks(含 `SessionStart`、`Stop`、`PostToolUse`、`UserPromptSubmit` 等),会话中会执行 `teamai pull`、`teamai update`、追踪与仪表盘等(支持 Claude Code、Codex、Claude Code Internal、Codex Internal、Cursor、CodeBuddy IDE、OpenClaw、WorkBuddy)
191
- - Skills 同步到 `~/.claude/skills/`、`~/.codex/skills/`、`~/.codex-internal/skills/`、`~/.claude-internal/skills/`、`~/.cursor/skills/`、`~/.codebuddy/skills/`
192
- - Rules 同步到各工具的 rules 目录,并通过标记注释合并到 `CLAUDE.md`(支持 claude、claude-internal、codebuddy)
193
- - Knowledge 同步到 `~/.teamai/docs/`
194
- - Learnings 同步到 `~/.teamai/learnings/`,并基于该目录构建 recall 索引(全团队共享,不按角色拆分)
195
- - Culture 同步团队文化文件(`culture.md`),编译 frontmatter 和 body 后注入到各 AI 工具的 `CLAUDE.md`
196
-
197
- ## 角色化 Skills
198
-
199
- 当团队资源仓库启用角色化目录后,Skills 按角色 namespace 组织,CLI 在 `teamai init` 时要求选择 `primaryRole` 和可选的 `additionalRoles`,并写入本地 `config.yaml`。
64
+ 成员通过 `teamai push` 提交变更并创建合并请求供审核。合并后,`teamai pull`(由 SessionStart hook 在会话启动时自动触发)将最新资源同步到本地。Skills 会同步到 `~/.claude/skills/`、`~/.codex/skills/`、`~/.cursor/skills/`、`~/.codebuddy/skills/` 等目录。
200
65
 
201
- 远端仓库目录约定:
202
-
203
- ```text
204
- manifest/roles.yaml # 角色定义
205
- skills/<namespace>/<skill>/ # 按 namespace 组织的 skills
206
- rules/ # 全局,不做角色拆分
207
- ```
66
+ ### 团队 Hooks
208
67
 
209
- - `teamai pull` 读取 `manifest/roles.yaml`,只同步 `primaryRole + additionalRoles` 对应 namespace 中的 skills(同时保留 tag 过滤的并集)。
210
- - Skills 从 `skills/<namespace>/<skill-name>/` 拍平安装到本地 `<tool>/skills/<skill-name>/`,用户无感知 namespace 结构。
211
- - 如果激活 namespace 中出现同名 skill,`pull` 会直接失败,避免隐式覆盖。
212
- - 不在激活 namespace 中、也不在 tag 过滤结果中的 skills 会被自动清理。
213
- - `rules/`、`docs/`、`learnings/` 仍然保持原有逻辑,不做角色拆分(learnings 全团队共享)。
214
-
215
- 配置示例:
68
+ `hooks/hooks.yaml` 中声明自定义 hooks,`teamai pull` 自动分发到所有 AI 工具:
216
69
 
217
70
  ```yaml
218
- primaryRole: hai
219
- additionalRoles:
220
- - pm
221
- resourceProfileVersion: 1
71
+ hooks:
72
+ - id: block-secret
73
+ description: 提交前扫描密钥
74
+ event: PreToolUse
75
+ matcher: Bash
76
+ command: 'bash -lc "~/.teamai/team-scripts/scan-secret.sh" || true'
77
+ tools: [claude, cursor]
222
78
  ```
223
79
 
224
- 这会同步 `skills/common/`、`skills/hai/`、`skills/pm/` 三个 namespace 中的所有 skills。
225
-
226
- ## 角色化推送
227
-
228
- 角色化仓库下,推送新 skill 时 CLI 会自动检测可用的命名空间并提供交互式选择:
229
-
230
80
  ```bash
231
- # 交互式选择命名空间(推荐)
232
- teamai push
233
- # 输出:
234
- # Which namespace should new skills be pushed to?
235
- # 1. common
236
- # 2. hai
237
- # 3. pm
238
- # Choose namespace [1-3] (default: 1 = common):
239
-
240
- # 显式指定目标 namespace
241
- teamai push --role pm
81
+ teamai hooks list # 查看生效的 hooks
82
+ teamai hooks inject # 强制重新注入到所有工具
83
+ teamai hooks remove # 移除所有 teamai 管理的 hooks
242
84
  ```
243
85
 
244
- - `primaryRole` 时,从 `manifest/roles.yaml` 展开可用 namespace 列表
245
- - 无 `primaryRole` 时,自动扫描团队仓库目录结构中的 namespace
246
- - 单一命名空间时自动选中,无需交互
247
- - `--role <id>` 可临时覆盖目标 namespace
248
- - 修改已有 skill 时自动保持原 namespace,无需重新选择
249
-
250
- 推送时 CLI 会自动检查 `SKILL.md` 的 YAML frontmatter(`name`/`description`),缺失则自动补全,无需手动维护。
251
-
252
- ## 团队文化(Culture)
253
-
254
- 在团队仓库根目录创建 `culture.md`,用 YAML frontmatter 定义公司和团队信息,body 部分写团队文化指引:
255
-
256
- ```markdown
257
- ---
258
- company:
259
- name: Acme Corp
260
- mission: Build great things
261
- values:
262
- - Innovation
263
- - Integrity
264
- team:
265
- name: Platform
266
- mission: Enable developers
267
- goals:
268
- - Ship v2.0
269
- - Improve test coverage
270
- ---
271
-
272
- ## 编码准则
273
-
274
- - 所有 PR 必须有至少一个 reviewer 审批
275
- - 禁止直接 push master
276
- - 测试覆盖率不低于 80%
277
- ```
278
-
279
- `teamai pull` 时会自动将 culture.md 编译为结构化内容,注入到各 AI 工具的 `CLAUDE.md` 中(`<!-- [teamai:culture:start] -->` / `<!-- [teamai:culture:end] -->` 标记之间)。AI 编码助手在每次会话中都能感知团队文化。
280
-
281
- ## 跨团队 Skill 订阅
86
+ ### 跨团队 Skill 订阅
282
87
 
283
- 通过 `teamai source` 订阅其他团队的公共 skill 仓库,pull 时自动同步订阅源的 skills:
88
+ 订阅其他团队的公开 skill 仓库:
284
89
 
285
90
  ```bash
286
- # 添加订阅源
287
- teamai source add https://git.woa.com/other-team/teamai-public.git --name other-team
288
-
289
- # 查看已订阅的源
91
+ teamai source add https://github.com/other-team/teamai-public.git --name other-team
290
92
  teamai source list
291
-
292
- # 浏览订阅源的 skills
293
- teamai source browse other-team
294
-
295
- # 移除订阅(同时清理其 skills)
93
+ teamai source browse other-team # 浏览可用 skills
296
94
  teamai source remove other-team
297
95
  ```
298
96
 
299
- 订阅源的 skills 在 `teamai pull` 时自动同步到本地,与团队自有 skills 共存。
97
+ 订阅的 skills 在 `teamai pull` 时自动同步。
300
98
 
301
- ### HTTP source(report/sync/ack)
99
+ ## 知识库
302
100
 
303
- 上面的订阅源是 **git** 源。你还可以在**不改动现有 git 主仓**的前提下,额外挂一个 **HTTP** 源,它走 report/sync/ack 生命周期——与 `init --http` 消费者所用的完全相同:
101
+ 除了分发 Harness,TeamAI 还把团队沉淀的经验和代码结构组织成可检索的知识库,让 AI 在需要时自动召回。
304
102
 
305
- ```bash
306
- # 挂一个 HTTP 源(git 主仓保持不变)
307
- teamai source add-http https://your-team-host/api --token <api-key>
103
+ ### 自动经验沉淀
308
104
 
309
- # "HTTP source" 分区查看
310
- teamai source list
105
+ Session 结束时,Stop hook 按**摩擦信号**对 session 评分——这些信号表明本次 session 踩到了值得记录的东西:你打断或纠正了 AI、拒绝了某次工具调用,或 AI 反复重试出错的工具。又长又顺(工具调用很多但没有摩擦)的 session 不会触发;真正较劲过的 session 才会。达标后 AI 会建议:
311
106
 
312
- # 移除(卸载其资源并清空配置)
313
- teamai source remove-http
314
107
  ```
315
-
316
- HTTP 源在每次 AI 会话时上报状态并拉取 skills/rules/CLAUDE.md 指令命令,由 `teamai init` 已安装的 `hook-dispatch` hook 驱动。从不执行 `add-http` 的用户不受任何影响。
317
-
318
- 仅支持一个 HTTP 源,且面向 **git 主仓**用户:若你的主仓本身就是 HTTP 后端(`init --http`),它已占用 HTTP 配置,此时 `add-http` 会被拒绝。
319
-
320
- ## Scope(作用域)
321
-
322
- TeamAI 支持两种 scope,可以共存:
323
-
324
- | 维度 | User Scope(默认) | Project Scope |
325
- |------|-------------------|---------------|
326
- | **资源安装位置** | `~/` 下(如 `~/.claude/skills/`) | 项目目录下(如 `<project>/.claude/skills/`) |
327
- | **配置文件** | `~/.teamai/config.yaml` | `<project>/.teamai/config.yaml` |
328
- | **适用场景** | 通用团队规范、跨项目技能 | 项目特定的技能和规则 |
329
- | **初始化** | `teamai init --repo <group>/<repo>` | `cd <project> && teamai init --repo <group>/<repo> --scope project` |
330
-
331
- **双 scope 协同:**
332
- - `teamai pull` 会依次拉取 user + project 两个 scope 的资源,互不冲突
333
- - `teamai contribute --scope user/project` 可显式选择推送到哪个仓库
334
- - `teamai recall` 自动合并两个 scope 的知识库,统一搜索排序,结果标注来源 `[user]`/`[project]`
335
- - 远端 `teamai.yaml` 的 `scope` 字段锁定仓库类型,成员 init 时必须匹配
336
-
337
- ## 经验自动分享
338
-
339
- 当一次 AI coding session 结束时,系统会通过 Stop hook 智能评估 session 价值并提示分享:
340
-
341
- ```
342
- AI coding session (持续工作中...)
343
-
344
- ▼ PostToolUse hook 持续追踪工具调用和 skill 使用
345
-
346
- ▼ 会话结束(Stop hook 触发)
347
-
348
- ├─ 智能评分:工具调用数量 + 工具多样性 + skill 使用 + 错误重试 + session 时长
349
- │ (从 dashboard events.jsonl 提取,一次性评估,满分 100)
350
-
351
- ├─ 分数 < 35 → 不打扰(工具调用少或缺乏多样性,没有总结价值)
352
-
353
- ▼ 分数 ≥ 35
354
-
355
- AI 提示:"本次 session 内容丰富,建议运行 /teamai-share-learnings 分享经验"
356
-
357
- ▼ 用户同意
358
-
359
- /teamai-share-learnings (AI sub-agent)
360
- ├─ AI 总结本次 session 的经验
361
- ├─ 生成 Markdown 文档
362
- └─ teamai contribute --file <path> → 直接 push 到团队仓库 learnings/
108
+ 建议运行 /teamai-share-learnings 总结本次 session 的经验并分享给团队。
363
109
  ```
364
110
 
365
- - `/teamai-share-learnings` CLI 内置 skill,随 `teamai pull/init` 自动部署到本地
366
- - 每个 session 最多提示一次(去重),用户可以忽略
367
- - 文档直接 push 到 `learnings/` 目录,团队成员下次 pull 时可见
111
+ `/teamai-share-learnings` skill 自动总结 session 经验并推送到团队仓库。每个 session 最多提示一次。
368
112
 
369
- ## 团队知识回忆
113
+ ### 团队知识检索
370
114
 
371
- `teamai recall` 实现知识飞轮的"读出路径"——AI 可以自动搜索团队积累的经验文档:
372
-
373
- ```
374
- contribute(写入) → pull(同步+索引) → recall(搜索) → upvote(投票) → 排序优化
375
- ```
115
+ 让 AI 在执行任务前自动检索团队积累的知识。该功能**默认关闭**,需显式开启——团队可在 `teamai.yaml` 设 `sharing.recall.enabled: true` 作为默认值,成员也可本地覆盖:
376
116
 
377
117
  ```bash
378
- $ teamai recall "fuse 端口"
379
- [1/2] MR 审查发现 FUSE 端口冲突 Bug ★1 [user]
380
- Author: jeffyxu | Score: 18.5 | Tags: troubleshooting, fuse, k8s
381
-
382
- [2/2] FUSE 部署配置最佳实践 [project]
383
- Author: alice | Score: 12.0 | Tags: fuse, deploy
118
+ teamai recall enable # 开启:部署 teamai-recall 子 agent + 注入引导规则
119
+ teamai recall disable # 关闭:移除子 agent 和规则
120
+ teamai recall status # 查看生效状态(团队默认 + 用户覆盖)
384
121
  ```
385
122
 
386
- - **双 scope 合并搜索**:自动合并 user project scope 的知识库,结果标注来源
387
- - Hybrid 中英文搜索(Intl.Segmenter + CJK bigrams)
388
- - 搜索自动投票,好文档自然浮到顶部
389
- - 投票按 scope 分别写入各自的 repo,归属正确
390
-
391
- `teamai recall` 的输出会给每条命中前置 `[<type>]` 标签,方便调用方快速判断知识来源。共享检索索引覆盖四类内容:
392
-
393
- | 类型 | 源路径 | 说明 |
394
- |------|--------|------|
395
- | `[learnings]` | `~/.teamai/learnings/*.md` | session 经验文档 |
396
- | `[docs]` | 团队仓库 `docs/**/*.md` | 共享项目知识 |
397
- | `[rules]` | 团队仓库 `rules/**/*.md` | 编码规则和约定 |
398
- | `[skills]` | 团队仓库 `skills/<name>/SKILL.md` | 可复用 AI skill |
399
-
400
- 索引在每次 `teamai pull` 时自动重建。旧版索引(无 `version` 字段或缺少 `type`)会在首次使用时被自动检测并重建,对调用方透明
401
-
402
- ### 开启 / 关闭 Recall
403
-
404
- Recall 功能通过两级配置控制——管理员设置团队默认值,成员可在本地覆盖:
405
-
406
- | 层级 | 配置文件 | 字段 | 说明 |
407
- |------|----------|------|------|
408
- | 团队默认 | `teamai.yaml` | `sharing.recall.enabled` | `true` / `false`(默认 `false`) |
409
- | 用户覆盖 | `~/.teamai/config.yaml` | `recallEnabled` | `true` / `false`,优先级高于团队默认 |
410
- | 环境变量 | shell | `TEAMAI_RECALL_DISABLED=1` | 强制禁用所有 recall hooks(应急开关) |
123
+ **通过子 agent 检索**:开启后 `teamai pull` 会把内置的 `teamai-recall` agent 部署到各 AI 工具的 `agents/` 目录。AI 在任务开始前调用它——由子 agent 提取关键词、执行检索、读取命中的源文件,最后返回结构化的团队知识摘要。子 agent 底层调用的仍是 `teamai recall` 命令,也可手动直接运行:
411
124
 
412
125
  ```bash
413
- teamai recall enable # 开启 recall,部署 subagent 和 rules
414
- teamai recall disable # 关闭 recall,移除 subagent rules
415
- teamai recall status # 查看当前生效状态(团队默认 + 用户覆盖)
416
- ```
126
+ $ teamai recall "port conflict"
127
+ [1/2] MR review caught a port-conflict bug ★1 [user]
128
+ Author: member-a | Score: 18.5 | Tags: troubleshooting, networking
417
129
 
418
- 关闭后,`teamai pull` 将跳过部署 recall subagent、recall rules 注入块和 TodoWrite 提醒 hook。手动执行 `teamai recall <query>` 搜索不受此开关影响。
419
-
420
- ### 代码库知识图谱(teamwiki/)
421
-
422
- `teamai codebase --extract`(或 `teamai import --from-repo`)解析源码仓库,将结构化知识图谱写入 `teamwiki/` 目录:
423
-
424
- ```
425
- teamwiki/
426
- ├── router.md # 导航枢纽,列出所有已导入仓库
427
- ├── index.md # 全局索引(自动生成,含时间戳)
428
- ├── hot.md # 活跃工作记忆(Phase 4 hot/cold 预留)
429
- ├── source-manifest.json # 源文件哈希清单(增量提取用)
430
- ├── .indices/
431
- │ └── graph-index.json # 知识图谱:nodes + edges(JSON 格式)
432
- ├── evidence/
433
- │ └── code/
434
- │ └── <project>/ # 每个导入的仓库一个目录
435
- │ ├── index.md # 项目摘要(facts 总数 + 页面列表)
436
- │ ├── component.md # 函数 / 类 / 组件
437
- │ ├── interface.md # 接口和类型定义
438
- │ ├── config.md # 配置项(环境变量、TOML key 等)
439
- │ ├── error.md # 错误处理模式
440
- │ └── relation-<dir>.md # 按顶级目录分组的 import 依赖关系
441
- └── gaps/
442
- └── detected.md # 知识缺口检测结果(IMPL_MISSING / LOW_CONNECTIVITY / …)
130
+ [2/2] Deployment configuration best practices [project]
131
+ Author: member-b | Score: 12.0 | Tags: deploy, config
443
132
  ```
444
133
 
445
- **graph-index.json** 存储提取出的知识图谱。真实数据参考:HAI 团队 11 个仓库 → **2 218 个节点,852 条边**。
134
+ **检索内容覆盖两部分**:
446
135
 
447
- | 字段 | 说明 |
448
- |------|------|
449
- | `nodes[].kind` | `component`(函数/类)或 `config`(配置项) |
450
- | `edges[].relation` | `imports` —— 跨文件或跨仓库依赖关系 |
451
-
452
- 跨仓 edge 通过 PascalCase 标签匹配自动检测,无需手动配置。
453
-
454
- `teamai recall` 利用此图谱进行 **BM25 + graph-boost** 检索:关键词命中后按图结构邻近度重排序,结果兼具文本相关性和结构相关性。
136
+ - **共享检索索引**(`search-index.json`):learnings(session 经验)、docs(团队文档)、rules(编码规则)、skills(各 `SKILL.md`)四类,源自团队仓库对应目录,在 `teamai pull` / `teamai contribute` 时构建重建。
137
+ - **代码知识图谱**(`teamwiki/`):由 `teamai import` 生成,检索时实时查询。
455
138
 
456
- ### TodoWrite 提醒 hook
139
+ 排序采用 BM25 + 图谱增强,合并用户 / 项目双 scope 结果并标注来源;搜索会隐式为命中文档投票,优质内容自然上浮。
457
140
 
458
- `teamai pull` 会在 `TodoWrite` 工具上注册一个 PostToolUse hook。当 session 第一次写 TODO 列表时,hook 会注入一次性提醒,要求 agent 在尚未调用 `teamai-recall` 时先调用一次。session 级去重通过 `~/.teamai/sessions/<sid>-todowrite-hint.json` 实现(TTL 24 小时)
141
+ ### 代码知识图谱
459
142
 
460
- 如果要全局关闭该提醒,请设置:
143
+ `teamai import` 将源码仓库解析为 `teamwiki/` 下的结构化图谱,实现结构感知的检索:
461
144
 
462
145
  ```bash
463
- export TEAMAI_RECALL_DISABLED=1
146
+ teamai import --from-repo https://github.com/org/repo
147
+ teamai import --from-org myorg # 批量导入所有仓库
148
+ teamai codebase --lint # 健康检查
464
149
  ```
465
150
 
466
- 该环境变量同时也会关闭 `teamai recall` 的召回质量记录(用于 contribute-check 知识空白检测)
467
-
468
- ### `agents` 资源类型
469
-
470
- 团队仓库可以在扁平的 `agents/` 目录下放置自定义 subagent 定义(每个 agent 一个 `*.md`),push / pull / remove 语义与 `rules` 保持一致:
471
-
472
- ```text
473
- team-repo/
474
- agents/
475
- code-reviewer.md # 团队作者编写的 subagent
476
- .removed # tombstone(由 `teamai remove agents <name>` 自动管理)
477
- ```
478
-
479
- `teamai pull` 会把它们复制到每个 Tier-1 工具的 `agents/` 目录(例如 `~/.claude/agents/`)。CLI 内置的 `teamai-recall.md` 会与团队 agents 一起部署,并在 `teamai push` 时被自动排除(由 CLI 管理,不归团队仓库)
480
-
481
- ### `hooks` 资源类型(团队自定义 hooks)
151
+ 图谱存储组件、接口、配置和跨仓库依赖边。`teamai recall` 利用图谱进行增强排名。
482
152
 
483
- 除了 CLI 内置的运维 hooks,团队还可以在仓库里**声明一次自己的 hooks**,由 `teamai pull` 自动适配下发到各 AI 工具(Claude Code、CodeBuddy、Cursor……)。在 `hooks/hooks.yaml` 中声明:
153
+ ## 命令一览
484
154
 
485
- ```yaml
486
- hooks:
487
- - id: block-secret # 唯一,^[a-z0-9-]+$,用于 marker 与清单索引
488
- description: 提交前扫描密钥 # 写进 hook 的 description
489
- event: PreToolUse # Claude 规范事件名(跨工具中立语言)
490
- matcher: Bash # 可选,工具 matcher
491
- command: 'bash -lc "~/.teamai/team-scripts/scan-secret.sh" || true'
492
- timeout: 15 # 可选,秒
493
- tools: [claude, cursor] # 可选,缺省 = 所有支持 hooks 的工具
494
-
495
- # 可选:有限度地调整 CLI 自身的内置 hooks(仅白名单字段)
496
- builtin:
497
- disabled: [Hook dispatch post-tool-use TodoWrite] # 关闭某条内置 hook
498
- overrides:
499
- Hook dispatch stop: { timeout: 20 } # 仅允许覆盖 timeout
500
- ```
501
-
502
- - `teamai pull` 每次会话开始都会把内置(A)+ 团队(B)hooks 对齐注入到各工具(绕过「已同步」快路径,新增/变更的 hook 自动自愈生效)。
503
- - 团队 hooks 通过 `[teamai:hook:<id>]` marker 与内置 hooks 隔离,并记录在 `~/.teamai/managed-hooks.json` 中;从 `hooks.yaml` 删除某条后,下次 pull 会从所有工具干净移除,且**绝不误伤内置 hooks**。
504
- - 写到磁盘的内容对内置 hooks **逐字节不变**,老机器升级 CLI 是零 diff、零回归。
505
-
506
- 审计、强制注入或清除当前生效的 hooks:
507
-
508
- ```bash
509
- teamai hooks list # 列出生效的内置(A)+ 团队(B)hooks
510
- teamai hooks inject # 强制对齐注入 A + B
511
- teamai hooks remove # 移除所有 teamai 托管的 hooks(A + B)
512
- ```
513
-
514
- > **安全提示**:团队 hooks 是会随会话事件自动执行的任意 shell 命令——请把仓库写权限视为一个执行面(同 `env.yaml`,受 MR review 治理)。护栏:
515
- > - 注入时逐条打印将执行的命令(`--silent` 时静默)。
516
- > - `teamai.yaml` 中 `sharing.hooks.autoApply: false`:`pull` 时只提示、不自动应用,需用户手动 `teamai hooks inject` 同意。
517
- > - `sharing.hooks.requireTeamScripts: true`:拒绝命令不在 `~/.teamai/team-scripts/` 下的团队 hook。
518
- > - 设置 `TEAMAI_HOOKS_DISABLED=1` 可在本机否决所有团队 hooks(内置 hooks 仍生效)。
519
-
520
- ## 更新
521
-
522
- ```bash
523
- teamai update # 自动检测并升级到最新版
524
- npm update -g teamai-cli # 或手动触发 npm 升级
525
- ```
526
-
527
- `teamai update` 会根据当前安装的包名自动选择 registry:
528
-
529
- - `teamai-cli` → 公网 npm (`https://registry.npmjs.org`)
530
- - `@tencent/teamai-cli` → 内网 tnpm (`http://r.tnpm.oa.com`)
531
-
532
- 如需手动覆盖 registry,可以设置环境变量 `TEAMAI_NPM_REGISTRY=<url>`。
533
-
534
- ### 自动更新控制
535
-
536
- 自动更新通过 Stop hook 在会话结束时执行,可在两个层级控制:
537
-
538
- | 配置层级 | 文件 | 字段 | 可选值 |
539
- |---------|------|------|-------|
540
- | 团队默认 | `teamai.yaml` | `autoUpdate` | `true`(默认)/ `false` |
541
- | 用户覆盖 | `~/.teamai/config.yaml` | `updatePolicy` | `auto` / `prompt` / `skip` |
542
-
543
- 用户级 `updatePolicy` 始终优先于团队级 `autoUpdate`。
544
-
545
- ## CI 集成
546
-
547
- TeamAI 可以集成到 CI 流水线中,从每次 MR/PR 自动提取知识:
548
-
549
- ```
550
- MR 创建/更新 → CI 提取 learning + codebase 建议 → 以评论形式发布
551
- → Reviewer 拒绝不需要的建议(GitHub 👎 / TGit ☝️)
552
- → MR 合并 → CI 将已通过的条目写入团队知识仓库
553
- ```
554
-
555
- ### 快速开始
556
-
557
- ```bash
558
- # Comment 模式:将建议发布到 MR(在 PR 打开/更新时运行)
559
- teamai ci extract-mr --url "$MR_URL" --mode comment --individual-comments
560
-
561
- # Write 模式:将已通过的条目写入知识仓库(在合并后运行)
562
- teamai ci extract-mr --url "$MR_URL" --mode write --team-repo ./team-repo --individual-comments
563
- ```
564
-
565
- ### CI 模板
566
-
567
- `examples/ci/` 目录下提供了开箱即用的模板:
568
-
569
- | 文件 | 平台 |
155
+ | 命令 | 说明 |
570
156
  |------|------|
571
- | `github-actions-mr-extract.yml` | GitHub Actions |
572
- | `coding-ci-mr-extract.yaml` | Coding CI(TGit + 智研 QCI) |
573
-
574
- ### 拒绝交互
157
+ | `teamai init` | 初始化:OAuth 登录、关联仓库、注册成员、注入 hooks |
158
+ | `teamai pull` | 拉取团队资源并注入到本地 AI 工具 |
159
+ | `teamai push` | 推送本地资源到分支并创建合并请求 |
160
+ | `teamai status` | 显示本地与团队仓库的差异 |
161
+ | `teamai contribute` | 将 session 经验分享到团队仓库 |
162
+ | `teamai recall <query>` | 搜索团队知识库(BM25 + 图谱增强) |
163
+ | `teamai recall enable/disable/status` | 开关或查看 recall 状态 |
164
+ | `teamai import` | 导入知识(`--dir`、`--from-repo`、`--from-org`、`--from-repo-list`、`--from-mr`、`--from-iwiki`) |
165
+ | `teamai codebase --lint` | 知识图谱健康检查 |
166
+ | `teamai ci extract-mr --url <url>` | CI:从 MR 提取知识、发评论、合并后写入 |
167
+ | `teamai members` | 查看团队成员 |
168
+ | `teamai roles` | 管理团队角色和命名空间 |
169
+ | `teamai skill exclude add/remove/list` | 管理不参与本地同步的 skills([使用指南](docs/usage-guide.zh-CN.md#排除个人不需要的-skill)) |
170
+ | `teamai source` | 管理跨团队 skill 订阅 |
171
+ | `teamai remove <type> <name>` | 删除资源并创建 MR |
172
+ | `teamai digest` | 生成团队周报 |
173
+ | `teamai doctor` | 诊断配置问题 |
174
+ | `teamai uninstall` | 移除所有 teamai 资源和 hooks |
575
175
 
576
- | 平台 | 拒绝方式 | 默认行为 |
577
- |------|---------|---------|
578
- | GitHub | 对建议评论添加 👎 reaction | 全部写入 |
579
- | TGit | 对建议 note 添加 ☝️ emoji | 全部写入 |
176
+ 全局选项:`--dry-run`、`--verbose`
580
177
 
581
178
  ## 许可证
582
179
 
@@ -584,4 +181,4 @@ teamai ci extract-mr --url "$MR_URL" --mode write --team-repo ./team-repo --indi
584
181
 
585
182
  ## 贡献
586
183
 
587
- 欢迎 PR!请先阅读 [CONTRIBUTING.md](.github/CONTRIBUTING.md)。
184
+ 欢迎提交 PR!请先阅读 [CONTRIBUTING.md](.github/CONTRIBUTING.md)。