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.md +85 -488
- package/README.zh-CN.md +88 -491
- package/agents/teamai-recall.md +1 -0
- package/dist/index.js +872 -135
- package/package.json +1 -1
package/README.zh-CN.md
CHANGED
|
@@ -11,572 +11,169 @@
|
|
|
11
11
|
[](https://www.npmjs.com/package/teamai-cli)
|
|
12
12
|
[](LICENSE)
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
[](https://discord.gg/gervEZm58g)
|
|
15
|
+
[](https://discord.gg/DeHHxPnfZF)
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
面向 AI 智能体的团队 Harness 分发工具。
|
|
17
18
|
|
|
18
|
-
|
|
19
|
+
通过 Git 统一管理 skills、rules、docs,驾驭 Claude Code / Codex / CodeBuddy / WorkBuddy 等多种 AI 工具。
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
一个人也能用,团队用更强。
|
|
21
22
|
|
|
22
|
-
|
|
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
|
-
|
|
33
|
-
<summary>腾讯内部用户:通过 tnpm 安装 <code>@tencent/teamai-cli</code></summary>
|
|
31
|
+
### 团队管理员 / 个人使用者
|
|
34
32
|
|
|
35
|
-
|
|
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
|
-
|
|
40
|
-
</details>
|
|
41
|
-
|
|
42
|
-
## 快速开始
|
|
35
|
+
> 个人使用无需单独建仓:`teamai init` 会检查目标仓库,不存在时自动创建。
|
|
43
36
|
|
|
44
37
|
### 团队成员
|
|
45
38
|
|
|
46
39
|
```bash
|
|
47
|
-
# 用户级初始化(默认,资源安装到
|
|
48
|
-
teamai init --repo
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
54
|
+
TeamAI 把 skills、rules、docs、hooks 统一存放在共享 Git 仓库,通过「push → 评审合并 → pull」的流程分发到每位成员的本地 AI 工具,并支持订阅其他团队的 Harness。
|
|
167
55
|
|
|
168
|
-
|
|
56
|
+
### 工作原理
|
|
169
57
|
|
|
170
58
|
```
|
|
171
|
-
|
|
172
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
97
|
+
订阅的 skills 在 `teamai pull` 时自动同步。
|
|
300
98
|
|
|
301
|
-
|
|
99
|
+
## 知识库
|
|
302
100
|
|
|
303
|
-
|
|
101
|
+
除了分发 Harness,TeamAI 还把团队沉淀的经验和代码结构组织成可检索的知识库,让 AI 在需要时自动召回。
|
|
304
102
|
|
|
305
|
-
|
|
306
|
-
# 挂一个 HTTP 源(git 主仓保持不变)
|
|
307
|
-
teamai source add-http https://your-team-host/api --token <api-key>
|
|
103
|
+
### 自动经验沉淀
|
|
308
104
|
|
|
309
|
-
|
|
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
|
-
|
|
366
|
-
- 每个 session 最多提示一次(去重),用户可以忽略
|
|
367
|
-
- 文档直接 push 到 `learnings/` 目录,团队成员下次 pull 时可见
|
|
111
|
+
`/teamai-share-learnings` skill 自动总结 session 经验并推送到团队仓库。每个 session 最多提示一次。
|
|
368
112
|
|
|
369
|
-
|
|
113
|
+
### 团队知识检索
|
|
370
114
|
|
|
371
|
-
`teamai recall`
|
|
372
|
-
|
|
373
|
-
```
|
|
374
|
-
contribute(写入) → pull(同步+索引) → recall(搜索) → upvote(投票) → 排序优化
|
|
375
|
-
```
|
|
115
|
+
让 AI 在执行任务前自动检索团队积累的知识。该功能**默认关闭**,需显式开启——团队可在 `teamai.yaml` 设 `sharing.recall.enabled: true` 作为默认值,成员也可本地覆盖:
|
|
376
116
|
|
|
377
117
|
```bash
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
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
|
-
-
|
|
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
|
|
414
|
-
|
|
415
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
139
|
+
排序采用 BM25 + 图谱增强,合并用户 / 项目双 scope 结果并标注来源;搜索会隐式为命中文档投票,优质内容自然上浮。
|
|
457
140
|
|
|
458
|
-
|
|
141
|
+
### 代码知识图谱
|
|
459
142
|
|
|
460
|
-
|
|
143
|
+
`teamai import` 将源码仓库解析为 `teamwiki/` 下的结构化图谱,实现结构感知的检索:
|
|
461
144
|
|
|
462
145
|
```bash
|
|
463
|
-
|
|
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
|
-
|
|
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
|
-
|
|
153
|
+
## 命令一览
|
|
484
154
|
|
|
485
|
-
|
|
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
|
-
| `
|
|
572
|
-
| `
|
|
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
|
-
|
|
184
|
+
欢迎提交 PR!请先阅读 [CONTRIBUTING.md](.github/CONTRIBUTING.md)。
|