上个月我们团队在 Claude Code 和 CodeBuddy 之间来回切的时候,发现一个很具体的问题:每个人本地的 skills 和 rules 对不上。有人用的旧版提示词,有人没装某个 hook,同一个需求在不同人那里跑出来的结果不一样。
后来我们把 TeamAI 接进去了。它不是另一个 AI 工具,是一套在 Git 上管理 skills、rules、docs,然后分发给各种 AI 工具的 harness。一句话概括:你写好一份提示词或规则,push 上去,团队所有人用的 Claude Code、Codex、CodeBuddy 都能同步。
这篇文章把这几周用下来的关键操作和遇到的坑过一遍。

先跑通一遍:init 和 pull
团队里第一个用的人通常要建仓库。可以基于 teamai-hub 组织里的模板仓库点“Use this template”,生成一个自己的仓库。然后执行:
teamai init https://github.com/yourorg/yourrepo这条命令会做几件事:OAuth 登录、关联仓库、注册当前成员,再把仓库里的资源拉下来注入到本地的 AI 工具。
团队成员加入更简单,同样一条 init 命令指向同一个仓库。默认 scope 是 project,资源安装到当前项目目录下。如果希望全局生效,加 --scope user:
teamai init https://github.com/yourorg/yourrepo --scope user还有一种分层模式。项目仓库保持 project scope,同时继承已初始化的 user scope 里的安全资源和可检索知识。用法是加 --inherit-user-scope:
teamai init https://github.com/yourorg/project-repo --inherit-user-scope项目 scope 的资源优先,user scope 的作为兜底。
初始化完成之后,每次开启 AI 会话,SessionStart hook 会自动触发 teamai pull,把管理员最新发布的更新拉到本地。不需要手动同步,也不需要提醒团队成员“记得 pull 一下”。
团队怎么协作:push 和 MR
整个分发流程建立在 Git 的协作模型上。
你在本地改了某个 skill 或 rule,执行:
teamai push它会自动创建一个分支,提交变更,然后发起合并请求。reviewer 审批通过、合并之后,其他成员的 teamai pull 才会拿到这次变更。
这套流程的好处是强制评审。团队里发生过一次直接往主分支 push 导致 hook 配置写错、所有人会话启动都报错的情况。后来规定所有变更走 push + MR,至少一个人 review 才能合进去。
Hooks:团队统一的安全底线
hooks 是 TeamAI 比较实用的功能之一。在 hooks/hooks.yaml 里声明,teamai pull 会自动分发到所有 AI 工具。
一个典型的 hook 配置长这样:
hooks: - id: block-secret description: 提交前扫描密钥 event: PreToolUse matcher: Bash command: 'bash -lc "~/.teamai/team-scripts/scan-secret.sh" || true' tools: [claude, cursor]事件类型是 PreToolUse,匹配 Bash 工具,执行一个扫描脚本。如果脚本检测到密钥,返回非零退出码,这次工具调用就被拦截了。
tools 字段指定这个 hook 只注入到 claude 和 cursor,不往 codebuddy 里写。如果你团队同时用三四种工具,每个工具的 hook 机制不一样,TeamAI 负责把声明转成各工具原生格式写进去。
查看当前哪些 hook 生效:
teamai hooks list重新注入或移除:
teamai hooks injectteamai hooks removeremove 会移除所有 teamai 管理的 hooks,不影响你手写的其他 hook。
MCP Server:一次声明,多工具同步
MCP 配置和 hooks 类似。在 mcp/mcp.yaml 里声明一次,teamai pull 按各工具的原生格式写入对应位置。
配置示例:
servers: - name: gpu-analysis transport: http url: https://example.com/api/mcp headers: Authorization: Bearer ${GPU_ANALYSIS_TOKEN}密钥用环境变量引用,不要写死在文件里。transport 支持 stdio、http、sse 三种。
管理命令和 hooks 对称:
teamai mcp listteamai mcp injectteamai mcp remove知识检索:AI 能主动查团队经验
TeamAI 的 recall 功能默认关闭,需要显式开启。团队可以在 teamai.yaml 里设 sharing.recall.enabled: true 作为默认值,成员也可以本地覆盖:
teamai recall enableteamai recall disableteamai recall status开启后,teamai pull 会内置一个叫 teamai-recall 的子 agent 部署到各 AI 工具的 agents/ 目录。AI 在任务开始前会调用它,子 agent 先做相关性预检,任务跟团队知识无关就直接跳过。
底层命令是 teamai recall,可以手动跑:
$ teamai recall "port conflict"[1/2] MR review caught a port-conflict bug ★1 [user]Author: member-a | Score: 18.5 | Tags: troubleshooting, networking[2/2] Deployment configuration best practices [project]Author: member-b | Score: 12.0 | Tags: deploy, configMatched: conflict | Missing: port输出里有个细节值得留意。当某条结果的标题或内容没有覆盖全部查询词时,会补一行 Matched: … | Missing: …。上面第二条结果只命中了“conflict”,没覆盖“port”,说明它只是主题相邻,并非精确答案。判断权留给调用方,recall 本身不过滤。
多 scope 的情况下,当前目录有 project scope 配置时,先检索项目知识;如果项目启用了 --inherit-user-scope,再检索 user 知识并标注来源。相同条目 project 版本覆盖 user 版本。当前目录没有 project 配置时,只检索 user scope。
检索内容覆盖四类:learnings(session 经验)、docs(团队文档)、rules(编码规则)、skills(各 SKILL.md)。这些在 teamai pull 或 teamai contribute 时构建成 search-index.json。另外还有代码知识图谱,teamai import 生成,检索时实时查询。
排序用 BM25 加图谱增强。当前 scope 的命中会隐式投票,继承来的 user 命中保持只读。
经验沉淀:摩擦信号触发分享
Stop hook 在 session 结束时按摩擦信号评分。触发条件是 session 里出现过具体问题:你打断了 AI、纠正了它的回复、拒绝了某次工具调用,或者 AI 反复重试出错的工具。
长 session 但一路顺畅、工具调用很多却没有任何摩擦,不会触发。真正值得记录的是那些较劲过的 session。
达标后 AI 会显示一段英文提示,列出实际触发的信号,比如打断了两次、工具失败重试了八次,附带任务摘要。这时跑 /teamai-share-learnings,skill 自动总结 session 经验并推送到团队仓库。每个 session 最多提示一次。
分享的内容会进入检索索引,后续其他人遇到类似问题时,recall 能搜到。标题、日期、作者、内容完全相同的条目会被去重,同一条 learning 分享两次不会占两个名额。

代码知识图谱:import 把仓库变成可检索结构
teamai import 把源码仓库解析成图谱,存在 teamwiki/ 下。支持几种用法:
teamai import --from-repo https://github.com/org/repoteamai import --from-org myorg--from-org 会批量导入组织下所有仓库。还可以从 MR、iWiki 导入。
图谱里存了组件、接口、配置和跨仓库依赖边。teamai recall 利用它做增强排名。当召回命中 codebase 页面时,结果附带一行 Sources:,列出相关源文件路径。子 agent 可以直接拿这些文件作为改动入口,不用重新探索代码库。
健康检查:
teamai codebase --lint检查图谱结构是否完整,有没有断掉的依赖边或格式异常的节点。
跨团队订阅:用别人的 skill
如果其他团队公开了 skill 仓库,可以直接订阅:
teamai source add https://github.com/other-team/teamai-public.git --name other-teamteamai source listteamai source browse other-teambrowse 查看对方仓库里有哪些可用 skill,决定要不要保留。移除订阅:
teamai source remove other-team订阅的 skills 在 teamai pull 时自动同步到本地。注意同步的是 skill 定义,不是源文件,不会把对方整个仓库拖下来。
几个日常命令
排除本地不需要的 skill,防止每次 pull 都覆盖:
teamai skill exclude add <skill-name>teamai skill exclude listteamai skill exclude remove <skill-name>查看本地和团队仓库的差异:
teamai status删除资源并创建 MR:
teamai remove <type> <name>诊断配置问题:
teamai doctor彻底移除所有 teamai 资源和 hooks:
teamai uninstall全局选项 --dry-run 和 --verbose 可以加在任意命令后面,先看一遍执行计划再动手。
整个工具最实用的地方在于把“团队经验同步”这件事从口头沟通变成了 Git 流程。hook 和 recall 解决了两个具体问题:安全规则在每个人本地保持一致,以及历史踩过的坑在 AI 做类似任务时能主动出现。如果你团队已经在用 Claude Code 或 CodeBuddy,值得花半小时把 init 跑通试试。
夜雨聆风