团队协作技能
载入:base.md
目的: 使多个Claude Code会话能够在团队中协调工作,避免冲突。管理共享状态、待办认领、决策同步和会话感知。
核心理念
┌─────────────────────────────────────────────────────────────────┐
│ 团队CLAUDE CODE │
│ ───────────────────────────────────────────────────────────── │
│ 多个开发者,多个Claude会话,一个代码库。 │
│ 协调>速度。沟通>假设。 │
│ │
│ 开始前:检查谁在做什么。 │
│ 认领前:确保其他人没有认领。 │
│ 决策前:检查是否已有决策。 │
│ 推送前:拉取并同步状态。 │
└─────────────────────────────────────────────────────────────────┘
团队状态结构
当项目变为多人时,创建此结构:
_project_specs/
├── team/
│ ├── state.md # 谁在做什么
│ ├── contributors.md # 团队成员及其专注领域
│ └── handoffs/ # 传递工作给他人的笔记
│ └── [feature]-handoff.md
├── session/
│ ├── current-state.md # 你的会话状态(个人)
│ ├── decisions.md # 共享 - 架构决策
│ └── code-landmarks.md # 共享 - 重要代码位置
└── todos/
├── active.md # 共享 - 带认领注释
├── backlog.md # 共享
└── completed.md # 共享
团队状态文件
_project_specs/team/state.md:
# 团队状态
*最后同步:[时间戳]*
## 活跃会话
| 贡献者 | 正在处理 | 开始 | 涉及文件 | 状态 |
|-------------|------------|---------|---------------|--------|
| @alice | TODO-042: 添加认证 | 2024-01-15 10:30 | src/auth/* | 🟢 活跃 |
| @bob | TODO-038: 修复结账 | 2024-01-15 09:00 | src/cart/* | 🟡 暂停 |
| - | - | - | - | - |
## 已认领待办
| 待办 | 认领者 | 自 | ETA |
|------|------------|-------|-----|
| TODO-042 | @alice | 2024-01-15 | 今天 |
| TODO-038 | @bob | 2024-01-14 | 明天 |
## 最近完成(最后48小时)
| 待办 | 完成者 | 何时 | PR |
|------|--------------|------|-----|
| TODO-037 | @alice | 2024-01-14 | #123 |
## 需要关注的冲突
| 区域 | 贡献者 | 备注 |
|------|--------------|-------|
| src/auth/* | @alice, @carol | Carol需要认证以处理TODO-045,需要协调 |
## 公告
- [2024-01-15] @alice: 正在重构认证模块,避免触碰直到EOD
- [2024-01-14] @bob: 需要新的环境变量:STRIPE_WEBHOOK_SECRET
贡献者文件
_project_specs/team/contributors.md:
# 贡献者
## 团队成员
| 句柄 | 名字 | 专注领域 | 时区 | 状态 |
|--------|------|-------------|----------|--------|
| @alice | Alice Smith | 后端,认证 | EST | 活跃 |
| @bob | Bob Jones | 前端,支付 | PST | 活跃 |
| @carol | Carol White | DevOps,基础设施 | GMT | 兼职 |
## 所有权
| 区域 | 主要 | 备份 | 备注 |
|------|---------|--------|-------|
| 认证 | @alice | @bob | 所有认证变更需要@alice审核 |
| 支付 | @bob | @alice | Stripe集成 |
| 基础设施 | @carol | @alice | 部署脚本,CI/CD |
| 数据库 | @alice | @carol | 迁移需要批准 |
## 沟通
- Slack: #项目名称
- PRs: 总是标记区域所有者以进行审核
- 紧急:在Slack上直接消息
## 工作时间重叠
EST: |████████████████████| PST: | ████████████████████| GMT: |████████████| 6am 12pm 6pm 12am EST
最佳重叠:9am-12pm EST(全部三人)
工作流程
开始会话
┌─────────────────────────────────────────────────────────────────┐
│ 开始会话检查清单 │
│ ───────────────────────────────────────────────────────────── │
│ 1. git pull origin main │
│ 2. 阅读_project_specs/team/state.md │
│ 3. 检查已认领的待办 - 不要认领已被认领的 │
│ 4. 在active.md中认领你的待办 │
│ 5. 在state.md中更新你的会话 │
│ 6. 开始工作前推送状态变化 │
│ 7. 开始工作 │
└─────────────────────────────────────────────────────────────────┘
认领待办
在active.md中,添加认领注释:
## [TODO-042] 添加电子邮件验证
**状态:** 进行中
**认领:** @alice (2024-01-15 10:30 EST)
**预计完成时间:** 今天
...
工作期间
- 如果你触及新文件,更新
state.md - 在做出架构选择前,检查
decisions.md - 如果你做出决策,立即添加到
decisions.md - 每1-2小时推送状态更新(保持团队同步)
结束会话
┌─────────────────────────────────────────────────────────────────┐
│ 结束会话检查清单 │
│ ───────────────────────────────────────────────────────────── │
│ 1. 提交你的工作(即使是WIP) │
│ 2. 更新你的current-state.md │
│ 3. 更新团队state.md(状态 → 暂停或完成) │
│ 4. 如果传递给某人:创建交接笔记 │
│ 5. 如果放弃,取消认领待办 │
│ 6. 推送一切 │
└─────────────────────────────────────────────────────────────────┘
创建交接
当将工作传递给另一个团队成员时,创建:
_project_specs/team/handoffs/auth-feature-handoff.md:
# 交接:认证功能(TODO-042)
**从:** @alice
**到:** @bob
**日期:** 2024-01-15
## 状态
70%完成。核心认证流程工作,需要添加:
- [ ] 密码重置流程
- [ ] 电子邮件验证
## 已完成
- 登录/注销工作
- JWT令牌实现
- 会话管理完成
## 剩余工作
1. 密码重置 - 见src/auth/reset.ts(存在框架)
2. 电子邮件验证 - 需要集成SendGrid
## 做出的关键决策
- 使用JWT而不是会话(见decisions.md)
- 令牌在7天后过期
- 刷新令牌存储在httpOnly cookies中
## 注意事项
- `validateToken`函数有一个奇怪的边缘情况,处理过期令牌
- 不要触碰`authMiddleware.ts` - 它现在很脆弱
## 开始的文件
1. src/auth/reset.ts - 密码重置
2. src/email/verification.ts - 电子邮件流程
3. tests/auth.test.ts - 在这里添加测试
## 有问题?
如果卡住了,Slack我@alice
冲突预防
文件级意识
在修改文件前,检查state.md谁在处理什么:
## 活跃会话
| 贡献者 | 正在处理 | 开始 | 涉及文件 | 状态 |
|-------------|------------|---------|---------------|--------|
| @alice | TODO-042 | ... | src/auth/*, src/middleware/* | 🟢 活跃 |
如果你需要触及src/auth/*而Alice正在那里工作:
- 检查是否真的冲突(同一文件?同一函数?)
- 通过Slack协调后再进行
- 在"需要关注的冲突"部分添加注释
预推送检查
推送前,总是:
git pull origin main
# 解决任何冲突
git push
PR标记
总是在PRs中标记区域所有者:
## PR:添加密码重置流程
实现TODO-042
cc: @alice(认证所有者),@bob(审核者)
### 更改
- 添加了密码重置端点
- 添加了电子邮件模板
### 测试
- [ ] 单元测试通过
- [ ] 手动测试完成
决策同步
做出决策前
- 拉取最新的
decisions.md - 检查是否已有决策
- 如果存在类似决策,遵循它(一致性>偏好)
- 如果需要新的决策,添加它并立即推送
决策格式
## [2024-01-15] JWT与会话用于认证(@alice)
**决策:** 使用JWT令牌
**上下文:** 需要API和移动应用的认证
**选项:**
1. 会话 - 更简单,服务器端状态
2. JWT - 无状态,适用于移动应用
**选择:** JWT
**理由:** 移动应用需要无状态认证,JWT跨平台工作
**权衡:** 令牌撤销更难,需要刷新令牌策略
**批准者:** @bob, @carol
命令
检查团队状态
# 查看谁在做什么
cat _project_specs/team/state.md
# 快速活跃会话检查
grep "🟢 Active" _project_specs/team/state.md
认领待办
- 编辑
_project_specs/todos/active.md - 向待办添加认领注释
- 更新
_project_specs/team/state.md - 提交并推送
释放认领
- 从待办中移除认领注释
- 在state.md中更新(从已认领待办中移除)
- 提交并推送
团队Git钩子
添加预推送钩子
将团队状态同步检查添加到预推送:
# 在.git/hooks/pre-push(添加到现有)
# 检查团队状态是否当前
echo "🔄 检查团队状态..."
git fetch origin main --quiet
LOCAL_STATE=$(git show HEAD:_project_specs/team/state.md 2>/dev/null | md5)
REMOTE_STATE=$(git show origin/main:_project_specs/team/state.md 2>/dev/null | md5)
if [ "$LOCAL_STATE" != "$REMOTE_STATE" ]; then
echo "⚠️ 远程团队状态已更改!"
echo " 运行:git pull origin main"
echo " 然后检查_project_specs/team/state.md以获取更新"
# 仅警告,不阻塞
fi
Claude指令
会话开始时
当用户在团队项目中开始会话时:
-
检查
_project_specs/team/state.md -
如果存在,读取并报告:
- 谁当前活跃
- 哪些待办已被认领
- 任何需要关注的冲突
- 最近的公告
-
询问他们想要处理什么
-
检查是否已被认领
-
帮助他们认领并更新状态
会话期间
- 在触及文件前,检查是否有其他人正在处理那里
- 在做出决策前,检查decisions.md
- 提醒用户定期更新状态
会话结束时
- 提示用户更新state.md
- 询问他们是否需要创建交接
- 提醒他们推送状态变化
单人到多人转换
当项目需要团队协调时:
- 运行
/check-contributors - 创建
_project_specs/team/结构 - 初始化
state.md和contributors.md - 在活跃待办中添加认领注释
- 更新CLAUDE.md以引用team-coordination.md技能
快速参考
状态图标
🟢 活跃 - 当前工作
🟡 暂停 - 暂时离开,将返回
🔴 阻塞 - 需要帮助/等待某事
⚪ 离线 - 今天不工作
认领格式
**认领:** @handle (YYYY-MM-DD HH:MM TZ)
每日站立会议模板
## 站立会议 [日期]
### @alice
- 昨天:完成了TODO-042认证流程
- 今天:开始TODO-045密码重置
- 阻碍:无
### @bob
- 昨天:修复了结账错误
- 今天:支付网关集成
- 阻碍:需要@carol提供STRIPE_WEBHOOK_SECRET
清单
开始工作
- [ ]
git pull origin main - [ ] 阅读team/state.md
- [ ] 检查待办未被认领
- [ ] 在active.md中认领待办
- [ ] 更新state.md
- [ ] 推送状态变化
结束工作
- [ ] 提交所有更改
- [ ] 更新current-state.md
- [ ] 更新team/state.md
- [ ] 如有需要,创建交接
- [ ] 推送一切