team-skills 1.1.1 → 1.2.0
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/.claude/commands/team-setup.md +36 -154
- package/.claude/commands/team-uninstall.md +31 -85
- package/CHANGELOG.md +62 -1
- package/README.md +5 -3
- package/examples/debugging.md +63 -0
- package/examples/failure-paths.md +124 -0
- package/examples/quickstart.md +85 -0
- package/examples/spec-to-code.md +77 -0
- package/package.json +2 -1
- package/scripts/check-skill-structure.js +1 -0
- package/skills/_team-rules/constitutional-rules.md +13 -0
- package/skills/_team-rules/first-principles.md +18 -0
- package/skills/_team-rules/verification-protocol.md +1 -1
- package/skills/team-brainstorm/SKILL.md +52 -12
- package/skills/team-debug/SKILL.md +21 -1
- package/skills/team-feedback/SKILL.md +20 -1
- package/skills/team-finish/SKILL.md +20 -1
- package/skills/team-impl/SKILL.md +30 -10
- package/skills/team-orchestrator/SKILL.md +158 -57
- package/skills/team-orchestrator/references/14-team-template.md +5 -3
- package/skills/team-review/SKILL.md +58 -37
- package/skills/team-review/references/12-asset-update-template.md +3 -3
- package/skills/team-review/references/13-retrospective-template.md +1 -1
- package/skills/team-review/references/delivery-checklist-template.md +31 -0
- package/skills/team-review/references/review-checklist-template.md +39 -0
- package/skills/team-score/SKILL.md +23 -3
- package/skills/team-spec/SKILL.md +42 -22
- package/skills/team-spec/references/05-risk-template.md +2 -2
- package/skills/team-test/SKILL.md +16 -4
- package/skills/team-verify/SKILL.md +23 -4
- package/skills/using-team-skills/SKILL.md +19 -2
- package/src/commands/init.js +17 -12
- package/src/commands/list.js +23 -6
- package/src/commands/setup.js +49 -34
- package/src/commands/uninstall.js +41 -61
- package/src/commands/update.js +40 -18
- package/src/lib/fs-utils.js +2 -35
- package/src/lib/inventory.js +0 -5
- package/skills/CLAUDE.md +0 -121
|
@@ -1,183 +1,65 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: 安装 team-skills 的 Skills、斜杠命令和 Hooks 到全局目录
|
|
3
3
|
argument-hint: [target-dir]
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# /team-setup — Skills
|
|
6
|
+
# /team-setup — Skills 全局安装
|
|
7
7
|
|
|
8
8
|
## 功能
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
将 team-skills 的所有组件以 symlink 方式安装到全局目录,使 Claude Code 和 Cursor 都能发现并使用。
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
## 安装内容
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
| 组件 | 目标位置 | 说明 |
|
|
15
|
+
|------|----------|------|
|
|
16
|
+
| Agent Skills | `~/.agents/skills/{name}` | Cursor 自动发现 |
|
|
17
|
+
| Skill 斜杠命令 | `~/.claude/commands/{name}.md` | Claude Code `/team-{name}` |
|
|
18
|
+
| 共享规则 | `~/.agents/skills/_team-rules/` | 被所有 Skill 引用 |
|
|
19
|
+
| CLI 辅助命令 | 两端均安装 | team-setup/uninstall/pull/push |
|
|
20
|
+
| Hooks(可选) | `~/.cursor/hooks/` | session-start 自动加载 |
|
|
19
21
|
|
|
20
|
-
##
|
|
21
|
-
|
|
22
|
-
- `$1`(可选):目标目录,默认为 `~/.agents/skills`
|
|
23
|
-
|
|
24
|
-
## 执行步骤
|
|
25
|
-
|
|
26
|
-
### 1. 确定目标目录
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
set -euo pipefail
|
|
30
|
-
TARGET="${1:-$HOME/.agents/skills}"
|
|
31
|
-
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || echo "$(cd "$(dirname "$0")/../.." && pwd)")"
|
|
32
|
-
mkdir -p "$TARGET"
|
|
33
|
-
echo "目标目录: $TARGET"
|
|
34
|
-
echo "仓库根目录: $REPO_ROOT"
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
### 2. 安装 Agent Skills
|
|
38
|
-
|
|
39
|
-
对本仓库 `skills/` 下的每个子目录(排除 `_team-rules` 和 `CLAUDE.md`),在目标目录下创建同名软链接。
|
|
22
|
+
## 使用方式
|
|
40
23
|
|
|
41
24
|
```bash
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
# 跳过 _team-rules(单独处理)
|
|
45
|
-
[ "$name" = "_team-rules" ] && continue
|
|
46
|
-
ln -sfn "$dir" "$TARGET/$name"
|
|
47
|
-
echo " ✅ Skill: $name → $TARGET/$name"
|
|
48
|
-
done
|
|
49
|
-
```
|
|
25
|
+
# 基本安装
|
|
26
|
+
team-skills setup
|
|
50
27
|
|
|
51
|
-
|
|
28
|
+
# 含可选的 team-score 评分 Skill
|
|
29
|
+
team-skills setup --with-score
|
|
52
30
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
for f in "$REPO_ROOT/skills/_team-rules"/*; do
|
|
56
|
-
[ -f "$f" ] || continue
|
|
57
|
-
ln -sf "$f" "$TARGET/_team-rules/$(basename "$f")"
|
|
58
|
-
echo " ✅ Rule: $(basename "$f")"
|
|
59
|
-
done
|
|
60
|
-
```
|
|
31
|
+
# 覆盖已有安装
|
|
32
|
+
team-skills setup --force
|
|
61
33
|
|
|
62
|
-
|
|
34
|
+
# 跳过 Hooks
|
|
35
|
+
team-skills setup --no-hooks
|
|
63
36
|
|
|
64
|
-
|
|
37
|
+
# 预览不执行
|
|
38
|
+
team-skills setup --dry-run
|
|
65
39
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
[ -f "$cmd" ] || continue
|
|
69
|
-
name="$(basename "$cmd" .md)"
|
|
70
|
-
# 跳过已作为 Skill 安装的同名目录,避免写入跟随 symlink
|
|
71
|
-
if [ -L "$TARGET/$name" ]; then
|
|
72
|
-
echo " ⚠️ Command Skill $name 跳过:已存在同名 Skill 目录"
|
|
73
|
-
continue
|
|
74
|
-
fi
|
|
75
|
-
mkdir -p "$TARGET/$name"
|
|
76
|
-
ln -sf "$cmd" "$TARGET/$name/SKILL.md"
|
|
77
|
-
echo " ✅ Command Skill: $name → $TARGET/$name/SKILL.md"
|
|
78
|
-
done
|
|
40
|
+
# 指定目标目录(默认 ~/.agents/skills)
|
|
41
|
+
team-skills setup /path/to/target
|
|
79
42
|
```
|
|
80
43
|
|
|
81
|
-
|
|
44
|
+
## 选项
|
|
82
45
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
echo " ✅ Claude Command: $name → $HOME/.claude/commands/$name"
|
|
90
|
-
done
|
|
91
|
-
```
|
|
46
|
+
| 选项 | 说明 |
|
|
47
|
+
|------|------|
|
|
48
|
+
| `--with-score` | 包含 team-score Skill(默认隐藏) |
|
|
49
|
+
| `--no-hooks` | 跳过 Hooks 安装 |
|
|
50
|
+
| `--force` | 覆盖已有的 symlink 和文件 |
|
|
51
|
+
| `--dry-run` | 只显示操作,不实际执行 |
|
|
92
52
|
|
|
93
|
-
|
|
53
|
+
## 验证
|
|
94
54
|
|
|
95
|
-
|
|
55
|
+
安装后会自动验证每个 symlink 是否正确创建。也可手动检查:
|
|
96
56
|
|
|
97
57
|
```bash
|
|
98
|
-
|
|
99
|
-
local hook_dir="$1"
|
|
100
|
-
local platform="$2"
|
|
101
|
-
mkdir -p "$hook_dir"
|
|
102
|
-
if [ -f "$REPO_ROOT/hooks/hooks.json" ]; then
|
|
103
|
-
ln -sf "$REPO_ROOT/hooks/hooks.json" "$hook_dir/hooks.json"
|
|
104
|
-
echo " ✅ ${platform} hooks.json"
|
|
105
|
-
fi
|
|
106
|
-
if [ -f "$REPO_ROOT/hooks/session-start" ]; then
|
|
107
|
-
ln -sf "$REPO_ROOT/hooks/session-start" "$hook_dir/session-start"
|
|
108
|
-
chmod +x "$hook_dir/session-start" 2>/dev/null || true
|
|
109
|
-
echo " ✅ ${platform} session-start"
|
|
110
|
-
fi
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
# Cursor hooks
|
|
114
|
-
install_hooks "$HOME/.cursor/hooks" "Cursor"
|
|
115
|
-
# Claude Code hooks
|
|
116
|
-
install_hooks "$HOME/.claude/hooks" "Claude Code"
|
|
58
|
+
team-skills list
|
|
117
59
|
```
|
|
118
60
|
|
|
119
|
-
##
|
|
61
|
+
## 卸载
|
|
120
62
|
|
|
121
63
|
```bash
|
|
122
|
-
|
|
123
|
-
echo "=== 验证安装 ==="
|
|
124
|
-
|
|
125
|
-
# 确认每个 Agent Skill 目录是软链接
|
|
126
|
-
errors=0
|
|
127
|
-
for dir in "$REPO_ROOT/skills"/*/; do
|
|
128
|
-
name="$(basename "$dir")"
|
|
129
|
-
[ "$name" = "_team-rules" ] && continue
|
|
130
|
-
if [ -L "$TARGET/$name" ] && [ -d "$TARGET/$name" ]; then
|
|
131
|
-
echo " ✅ $name → $(readlink "$TARGET/$name")"
|
|
132
|
-
else
|
|
133
|
-
echo " ❌ $name 未正确安装"
|
|
134
|
-
errors=$((errors + 1))
|
|
135
|
-
fi
|
|
136
|
-
done
|
|
137
|
-
|
|
138
|
-
# 确认 _team-rules 规则文件
|
|
139
|
-
for f in "$REPO_ROOT/skills/_team-rules"/*; do
|
|
140
|
-
[ -f "$f" ] || continue
|
|
141
|
-
name="$(basename "$f")"
|
|
142
|
-
if [ -L "$TARGET/_team-rules/$name" ]; then
|
|
143
|
-
echo " ✅ _team-rules/$name → $(readlink "$TARGET/_team-rules/$name")"
|
|
144
|
-
else
|
|
145
|
-
echo " ❌ _team-rules/$name 未正确安装"
|
|
146
|
-
errors=$((errors + 1))
|
|
147
|
-
fi
|
|
148
|
-
done
|
|
149
|
-
|
|
150
|
-
# 确认 Command Skills
|
|
151
|
-
for cmd in "$REPO_ROOT/.claude/commands"/*.md; do
|
|
152
|
-
[ -f "$cmd" ] || continue
|
|
153
|
-
name="$(basename "$cmd" .md)"
|
|
154
|
-
if [ -L "$TARGET/$name/SKILL.md" ]; then
|
|
155
|
-
echo " ✅ Command Skill $name → $(readlink "$TARGET/$name/SKILL.md")"
|
|
156
|
-
else
|
|
157
|
-
echo " ❌ Command Skill $name 未正确安装"
|
|
158
|
-
errors=$((errors + 1))
|
|
159
|
-
fi
|
|
160
|
-
done
|
|
161
|
-
|
|
162
|
-
# 确认 Claude Code 命令
|
|
163
|
-
for cmd in "$REPO_ROOT/.claude/commands"/*.md; do
|
|
164
|
-
[ -f "$cmd" ] || continue
|
|
165
|
-
name="$(basename "$cmd")"
|
|
166
|
-
if [ -L "$HOME/.claude/commands/$name" ]; then
|
|
167
|
-
echo " ✅ Claude Command $name → $(readlink "$HOME/.claude/commands/$name")"
|
|
168
|
-
else
|
|
169
|
-
echo " ❌ Claude Command $name 未正确安装"
|
|
170
|
-
errors=$((errors + 1))
|
|
171
|
-
fi
|
|
172
|
-
done
|
|
173
|
-
|
|
174
|
-
if [ "$errors" -eq 0 ]; then
|
|
175
|
-
echo ""
|
|
176
|
-
echo "🎉 安装完成!所有组件已正确安装。"
|
|
177
|
-
echo ""
|
|
178
|
-
echo "后续可通过 /team-pull 拉取更新。"
|
|
179
|
-
else
|
|
180
|
-
echo ""
|
|
181
|
-
echo "⚠️ 有 $errors 个组件安装异常,请检查。"
|
|
182
|
-
fi
|
|
64
|
+
team-skills uninstall
|
|
183
65
|
```
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: 卸载 team-skills 的所有 symlink(Skills
|
|
2
|
+
description: 卸载 team-skills 的所有 symlink(Skills、斜杠命令、Hooks)
|
|
3
3
|
argument-hint: [target-dir]
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -7,101 +7,47 @@ argument-hint: [target-dir]
|
|
|
7
7
|
|
|
8
8
|
## 功能
|
|
9
9
|
|
|
10
|
-
移除
|
|
10
|
+
移除 `team-skills setup` 创建的所有软链接,不影响源文件。
|
|
11
11
|
|
|
12
|
-
##
|
|
12
|
+
## 移除内容
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
| 组件 | 位置 |
|
|
15
|
+
|------|------|
|
|
16
|
+
| Cursor Skills | `~/.agents/skills/team-*` |
|
|
17
|
+
| Claude Code Skill 斜杠命令 | `~/.claude/commands/team-*.md` |
|
|
18
|
+
| 共享规则 | `~/.agents/skills/_team-rules/` |
|
|
19
|
+
| CLI 辅助命令 | 两端均移除 |
|
|
20
|
+
| Hooks | `~/.cursor/hooks/`、`~/.claude/hooks/` |
|
|
15
21
|
|
|
16
|
-
##
|
|
17
|
-
|
|
18
|
-
### 1. 确定目标目录
|
|
22
|
+
## 使用方式
|
|
19
23
|
|
|
20
24
|
```bash
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || echo "$(cd "$(dirname "$0")/../.." && pwd)")"
|
|
24
|
-
echo "卸载来源: $REPO_ROOT"
|
|
25
|
-
echo "目标目录: $TARGET"
|
|
26
|
-
removed=0
|
|
27
|
-
```
|
|
25
|
+
# 完整卸载
|
|
26
|
+
team-skills uninstall
|
|
28
27
|
|
|
29
|
-
|
|
28
|
+
# 保留 Hooks
|
|
29
|
+
team-skills uninstall --no-hooks
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
name="$(basename "$dir")"
|
|
34
|
-
[ "$name" = "_team-rules" ] && continue
|
|
35
|
-
if [ -L "$TARGET/$name" ]; then
|
|
36
|
-
rm "$TARGET/$name"
|
|
37
|
-
echo " 🗑️ Skill: $name"
|
|
38
|
-
removed=$((removed + 1))
|
|
39
|
-
fi
|
|
40
|
-
done
|
|
41
|
-
```
|
|
31
|
+
# 保留 CLI 辅助命令
|
|
32
|
+
team-skills uninstall --no-commands
|
|
42
33
|
|
|
43
|
-
|
|
34
|
+
# 预览不执行
|
|
35
|
+
team-skills uninstall --dry-run
|
|
44
36
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
[ -f "$f" ] || continue
|
|
48
|
-
name="$(basename "$f")"
|
|
49
|
-
if [ -L "$TARGET/_team-rules/$name" ]; then
|
|
50
|
-
rm "$TARGET/_team-rules/$name"
|
|
51
|
-
echo " 🗑️ Rule: $name"
|
|
52
|
-
removed=$((removed + 1))
|
|
53
|
-
fi
|
|
54
|
-
done
|
|
55
|
-
rmdir "$TARGET/_team-rules" 2>/dev/null || true
|
|
37
|
+
# 指定目标目录
|
|
38
|
+
team-skills uninstall /path/to/target
|
|
56
39
|
```
|
|
57
40
|
|
|
58
|
-
|
|
41
|
+
## 选项
|
|
59
42
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
rm "$TARGET/$name/SKILL.md"
|
|
66
|
-
rmdir "$TARGET/$name" 2>/dev/null || true
|
|
67
|
-
echo " 🗑️ Command Skill: $name"
|
|
68
|
-
removed=$((removed + 1))
|
|
69
|
-
fi
|
|
70
|
-
done
|
|
71
|
-
```
|
|
43
|
+
| 选项 | 说明 |
|
|
44
|
+
|------|------|
|
|
45
|
+
| `--no-hooks` | 跳过移除 Hooks |
|
|
46
|
+
| `--no-commands` | 跳过移除 CLI 辅助命令 |
|
|
47
|
+
| `--dry-run` | 只显示操作,不实际执行 |
|
|
72
48
|
|
|
73
|
-
|
|
49
|
+
## 安全机制
|
|
74
50
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
name="$(basename "$cmd")"
|
|
79
|
-
if [ -L "$HOME/.claude/commands/$name" ]; then
|
|
80
|
-
rm "$HOME/.claude/commands/$name"
|
|
81
|
-
echo " 🗑️ Claude Command: $name"
|
|
82
|
-
removed=$((removed + 1))
|
|
83
|
-
fi
|
|
84
|
-
done
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### 6. 移除 Hooks
|
|
88
|
-
|
|
89
|
-
```bash
|
|
90
|
-
for hook_dir in "$HOME/.cursor/hooks" "$HOME/.claude/hooks"; do
|
|
91
|
-
for f in hooks.json session-start; do
|
|
92
|
-
if [ -L "$hook_dir/$f" ]; then
|
|
93
|
-
rm "$hook_dir/$f"
|
|
94
|
-
echo " 🗑️ Hook: $hook_dir/$f"
|
|
95
|
-
removed=$((removed + 1))
|
|
96
|
-
fi
|
|
97
|
-
done
|
|
98
|
-
done
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
### 7. 汇报
|
|
102
|
-
|
|
103
|
-
```bash
|
|
104
|
-
echo ""
|
|
105
|
-
echo "✅ 卸载完成,共移除 $removed 个软链接。"
|
|
106
|
-
echo "本仓库源文件未受影响。"
|
|
107
|
-
```
|
|
51
|
+
- 只移除指向 team-skills 源文件的 symlink
|
|
52
|
+
- 指向其他来源的同名 symlink 会跳过(标记为 `foreign`)
|
|
53
|
+
- 非 symlink 文件不会被删除
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,67 @@
|
|
|
5
5
|
格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),
|
|
6
6
|
本项目遵循[语义化版本](https://semver.org/lang/zh-CN/spec/v2.0.0.html)。
|
|
7
7
|
|
|
8
|
+
## [1.1.2] - 2026-06-23
|
|
9
|
+
|
|
10
|
+
### 变更
|
|
11
|
+
|
|
12
|
+
- 所有 Skill 的项目规范引用从 `CLAUDE.md` 扩展为 `CLAUDE.md / .cursor/rules/`,支持 Cursor 项目
|
|
13
|
+
- `.claude/commands/team-setup.md` 和 `team-uninstall.md` 重写为 Node.js CLI 文档(原为过时的 bash 脚本)
|
|
14
|
+
- CHANGELOG.md 补齐 1.x 版本记录
|
|
15
|
+
|
|
16
|
+
### 修复
|
|
17
|
+
|
|
18
|
+
- hooks.json 仅安装到 Cursor hooks 目录(不再错误安装到 Claude Code)
|
|
19
|
+
- `cleanStaleSkills` 仅清理 `team-*` 前缀目录(保护用户自定义 Skill)
|
|
20
|
+
- `list` 命令 hooks.json 仅显示在 Cursor 下
|
|
21
|
+
- README/CHANGELOG 与代码实现对齐
|
|
22
|
+
|
|
23
|
+
## [1.1.1] - 2026-06-23
|
|
24
|
+
|
|
25
|
+
### 新增
|
|
26
|
+
|
|
27
|
+
- `setup` 为所有 Skill 创建 Claude Code 斜杠命令(`~/.claude/commands/{name}.md`)
|
|
28
|
+
- `init` 支持 Claude Code:将 SKILL.md 复制为斜杠命令
|
|
29
|
+
- `update` 支持 Claude Code 命令更新 + 过时命令清理
|
|
30
|
+
- `uninstall` 移除 Claude Code Skill 斜杠命令
|
|
31
|
+
- `list` 新增 "Claude Code Skill 斜杠命令" 独立展示区
|
|
32
|
+
|
|
33
|
+
### 修复
|
|
34
|
+
|
|
35
|
+
- P0: `--force` 处理目录时使用 `rmSync` 替代 `unlinkSync`
|
|
36
|
+
- P0: `update.js` 修复 shell 注入(`readFileSync` 替代 `execSync`)
|
|
37
|
+
- P0: `JSON.parse("1.1.0")` 崩溃修复
|
|
38
|
+
|
|
39
|
+
### 变更
|
|
40
|
+
|
|
41
|
+
- `skills/CLAUDE.md` 合并到根目录 `CLAUDE.md` §十三(SKILL.md 开发规范)
|
|
42
|
+
|
|
43
|
+
## [1.1.0] - 2026-06-22
|
|
44
|
+
|
|
45
|
+
### 新增
|
|
46
|
+
|
|
47
|
+
- Node.js CLI 工具(`bin/team-skills.js`),取代原有 bash 脚本
|
|
48
|
+
- 5 个命令:`setup`、`init`、`update`、`uninstall`、`list`
|
|
49
|
+
- `--ide` 选项:强制指定目标 IDE(claude/cursor/both)
|
|
50
|
+
- `--with-score` 选项:可选安装 team-score Skill
|
|
51
|
+
- `--dry-run` 选项:所有命令均支持
|
|
52
|
+
- `detectIDE` 共享模块:自动检测项目 IDE 类型
|
|
53
|
+
- `check-skill-structure.js` CI 检查脚本
|
|
54
|
+
- npm 发布配置(`package.json` 的 `files`、`bin`、`engines`)
|
|
55
|
+
- GitHub Actions release workflow:`v*` tag 自动发布到 npm
|
|
56
|
+
|
|
57
|
+
### 变更
|
|
58
|
+
|
|
59
|
+
- `team-score` 默认不安装,需 `--with-score` 显式启用
|
|
60
|
+
- 从其他 Skill 中移除 team-score 硬编码引用
|
|
61
|
+
- CI 简化为 npm scripts 驱动
|
|
62
|
+
|
|
63
|
+
### 移除
|
|
64
|
+
|
|
65
|
+
- Makefile(功能迁移到 npm scripts)
|
|
66
|
+
- `src/lib/manifest.js`(不再需要)
|
|
67
|
+
- `rules/` 目录(开发规范已合并到 CLAUDE.md)
|
|
68
|
+
|
|
8
69
|
## [0.2.0] - 2026-06-22
|
|
9
70
|
|
|
10
71
|
### 新增
|
|
@@ -32,7 +93,7 @@
|
|
|
32
93
|
- Spec-Driven 开发框架,含 SDD 规格标准
|
|
33
94
|
- 有向图回退机制,支持测试/审查反馈自动回退
|
|
34
95
|
- 5 步验证协议,杜绝虚假通过声明
|
|
35
|
-
-
|
|
96
|
+
- 9 条 Constitutional Rules(不可覆盖的硬约束)
|
|
36
97
|
- 4 个人类介入点(H1-H4)
|
|
37
98
|
- 100 分制评分体系:7 项硬门槛 + 5 个维度
|
|
38
99
|
- 三层资产体系:项目级 → 模块级 → 任务级
|
package/README.md
CHANGED
|
@@ -56,7 +56,7 @@ reviewAgent 发现 spec 遗漏 ──→ 自动回退 specAgent
|
|
|
56
56
|
### 🛡️ 质量门禁,不是"我觉得"
|
|
57
57
|
|
|
58
58
|
- **5 步验证协议**:确定命令 → 新鲜执行 → 完整阅读 → 检查退出码 → 声明通过
|
|
59
|
-
- **
|
|
59
|
+
- **9 条 Constitutional Rules**:不可覆盖的硬约束
|
|
60
60
|
- **反规避条款**:预判 6 种常见借口并逐一反驳
|
|
61
61
|
- **三视角对抗审查**:攻击者/怀疑者/用户视角反向验证
|
|
62
62
|
|
|
@@ -113,8 +113,9 @@ npx team-skills@latest update
|
|
|
113
113
|
| 内容 | 位置 | 说明 |
|
|
114
114
|
|------|------|------|
|
|
115
115
|
| 11 个 Agent Skills | `~/.agents/skills/` | Cursor 自动发现 |
|
|
116
|
-
| 斜杠命令 | `~/.claude/commands/` | Claude Code `/team-{name}` |
|
|
116
|
+
| 11 个 Skill 斜杠命令 | `~/.claude/commands/` | Claude Code `/team-{name}` |
|
|
117
117
|
| 共享规则 | `~/.agents/skills/_team-rules/` | 被所有 Skill 引用 |
|
|
118
|
+
| CLI 辅助命令 | 两端均安装 | team-setup/uninstall/pull/push |
|
|
118
119
|
| Hooks(可选) | `~/.cursor/hooks/` | session-start 自动加载 |
|
|
119
120
|
|
|
120
121
|
### 验证
|
|
@@ -282,10 +283,11 @@ graph TD
|
|
|
282
283
|
|
|
283
284
|
---
|
|
284
285
|
|
|
285
|
-
## 📋
|
|
286
|
+
## 📋 每个任务最多产出 18 个结构化文档
|
|
286
287
|
|
|
287
288
|
```
|
|
288
289
|
docs/tasks/{slug}/
|
|
290
|
+
├── 00-design-brief.md # 设计概要(team-brainstorm 产出,可选)
|
|
289
291
|
├── 01-plan.md # 任务规划(目标 + 分期 + 预算)
|
|
290
292
|
├── 02-context.md # 上下文选择(术语 + 引用 + 排除)
|
|
291
293
|
├── 03-sdd.md # SDD 规格(七部分完整)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# 示例:使用 team-debug 进行调试
|
|
2
|
+
|
|
3
|
+
本示例展示 `team-debug` 如何系统性地定位根因。
|
|
4
|
+
|
|
5
|
+
## 问题描述
|
|
6
|
+
|
|
7
|
+
用户报告:"登录接口间歇性返回 500 错误。"
|
|
8
|
+
|
|
9
|
+
## 第一步:收集证据
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
/team-debug 登录接口间歇性 500 错误
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
调试 Agent 开始收集:
|
|
16
|
+
|
|
17
|
+
- 过去一小时的错误日志
|
|
18
|
+
- 请求/响应模式
|
|
19
|
+
- 最近的代码变更
|
|
20
|
+
- 依赖版本
|
|
21
|
+
|
|
22
|
+
## 第二步:生成假设
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
H1:数据库连接池耗尽
|
|
26
|
+
H2:会话创建时的竞态条件
|
|
27
|
+
H3:认证中间件内存泄漏
|
|
28
|
+
H4:第三方限流
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 第三步:判别性验证
|
|
32
|
+
|
|
33
|
+
每个假设通过特定实验验证:
|
|
34
|
+
|
|
35
|
+
| 假设 | 实验 | 结果 |
|
|
36
|
+
|------|------|------|
|
|
37
|
+
| H1:连接池耗尽 | 检查 max_connections vs 活跃连接数 | ❌ 活跃连接 < 连接池 50% |
|
|
38
|
+
| H2:竞态条件 | 在会话创建前后增加日志 | ✅ 两个并发请求创建了重复会话 |
|
|
39
|
+
| H3:内存泄漏 | 监控认证前后的堆内存 | ❌ 无明显变化 |
|
|
40
|
+
| H4:第三方限流 | 检查第三方 API 响应码 | ❌ 无 429 响应 |
|
|
41
|
+
|
|
42
|
+
## 第四步:找到根因
|
|
43
|
+
|
|
44
|
+
**竞态条件**:当两个登录请求同时到达同一个新用户时,两个请求都通过了"用户是否存在"检查,然后都尝试创建会话。第二个请求因为第一个已创建而失败。
|
|
45
|
+
|
|
46
|
+
## 第五步:修复
|
|
47
|
+
|
|
48
|
+
```python
|
|
49
|
+
# 修复前(存在竞态条件)
|
|
50
|
+
if not user.has_session():
|
|
51
|
+
user.create_session()
|
|
52
|
+
|
|
53
|
+
# 修复后(原子操作)
|
|
54
|
+
user.create_session_if_not_exists() # 数据库级别的原子操作
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## 第六步:验证
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# 运行模拟并发登录的测试
|
|
61
|
+
pytest tests/test_login_concurrent.py -v
|
|
62
|
+
# ✅ 所有测试通过
|
|
63
|
+
```
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# 失败路径示例:回退、H3 介入与 Kill Switch
|
|
2
|
+
|
|
3
|
+
真实项目不会总走 happy path。本指南展示 Team Skills 在遇到问题时如何处理。
|
|
4
|
+
|
|
5
|
+
## 场景 1:testAgent 发现 bug → 回退 implAgent
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
用户: /team-orchestrator 实现金额计算功能
|
|
9
|
+
|
|
10
|
+
[H1 确认通过]
|
|
11
|
+
[specAgent 产出 01-05 文件]
|
|
12
|
+
[H2 确认通过]
|
|
13
|
+
[implAgent 完成 TDD 开发]
|
|
14
|
+
|
|
15
|
+
testAgent:
|
|
16
|
+
发现 bug:边界条件未处理 — 当金额为 0 时,计算返回 NaN 而非 0
|
|
17
|
+
路由决策:→ implAgent
|
|
18
|
+
|
|
19
|
+
编排器:
|
|
20
|
+
回退计数:test→impl = 1(上限 2)
|
|
21
|
+
传递上下文:
|
|
22
|
+
- 问题:金额为 0 时返回 NaN
|
|
23
|
+
- 复现步骤:calculateAmount(0) → NaN
|
|
24
|
+
- 期望行为:calculateAmount(0) → 0(SDD §七 B3)
|
|
25
|
+
- 建议方向:添加零值边界检查
|
|
26
|
+
|
|
27
|
+
implAgent(第二次):
|
|
28
|
+
1. RED: 写测试 expect(calculateAmount(0)).toBe(0) → 失败 ✓
|
|
29
|
+
2. GREEN: 添加零值检查 → 通过 ✓
|
|
30
|
+
3. REFACTOR: 无需重构
|
|
31
|
+
git commit -m "fix: handle zero amount edge case"
|
|
32
|
+
|
|
33
|
+
testAgent(第二次):
|
|
34
|
+
全部通过 → reviewAgent
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## 场景 2:reviewAgent 发现 spec 遗漏 → 回退 specAgent
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
reviewAgent:
|
|
41
|
+
Phase 1.5 Constitutional 合规检查:
|
|
42
|
+
发现 03-sdd.md 未定义并发场景 — 两个用户同时修改同一记录
|
|
43
|
+
严重级别:P1(spec 遗漏)
|
|
44
|
+
路由决策:→ specAgent
|
|
45
|
+
|
|
46
|
+
编排器:
|
|
47
|
+
回退计数:review→spec = 1(上限 2)
|
|
48
|
+
传递上下文:
|
|
49
|
+
- 问题:并发修改场景未定义
|
|
50
|
+
- 发现位置:11-review.md §一 正确性审查
|
|
51
|
+
- 期望补充:03-sdd.md §七 添加并发边界条件
|
|
52
|
+
- 建议方向:乐观锁 vs 悲观锁
|
|
53
|
+
|
|
54
|
+
specAgent(第二次):
|
|
55
|
+
更新 03-sdd.md:
|
|
56
|
+
§七 新增 B5:并发修改 — 使用乐观锁,版本号冲突返回 409
|
|
57
|
+
更新 04-boundary.md:新增并发约束
|
|
58
|
+
|
|
59
|
+
[重新走 impl → test → review]
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 场景 3:回退超限 → 触发 H3
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
testAgent 发现 bug → 回退 implAgent(计数 1)
|
|
66
|
+
implAgent 修复后 → testAgent 又发现新 bug → 回退 implAgent(计数 2)
|
|
67
|
+
implAgent 再次修复 → testAgent 又发现 bug
|
|
68
|
+
|
|
69
|
+
编排器:
|
|
70
|
+
回退计数 test→impl = 3 → 超过上限(≤ 2)
|
|
71
|
+
强制触发 H3!
|
|
72
|
+
|
|
73
|
+
H3 人类介入请求:
|
|
74
|
+
触发来源:testAgent | 触发原因:回退超限
|
|
75
|
+
问题描述:test→impl 已回退 3 次,可能存在架构问题
|
|
76
|
+
已尝试:
|
|
77
|
+
- 第 1 次:修复零值边界
|
|
78
|
+
- 第 2 次:修复类型转换
|
|
79
|
+
- 第 3 次:又发现精度丢失
|
|
80
|
+
选项:
|
|
81
|
+
- A: 重新审视 SDD 架构方案(回退 specAgent)
|
|
82
|
+
- B: 人类直接介入修复
|
|
83
|
+
- C: Kill Switch — 终止任务
|
|
84
|
+
推荐:A — 反复出现的计算问题暗示底层数据类型选择有误
|
|
85
|
+
|
|
86
|
+
用户选择 A → 编排器回退到 specAgent,传递三次失败的完整上下文
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## 场景 4:Kill Switch 激活
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
implAgent Phase 0.5(审计同步):
|
|
93
|
+
发现:spec 要求调用第三方支付 API,但该 API 文档标注 deprecated,
|
|
94
|
+
将于下月下线。方案不可行。
|
|
95
|
+
|
|
96
|
+
编排器:
|
|
97
|
+
触发 Kill Switch → H3
|
|
98
|
+
|
|
99
|
+
H3 人类介入请求:
|
|
100
|
+
触发来源:implAgent | 触发原因:Kill Switch
|
|
101
|
+
问题描述:第三方支付 API 已标记 deprecated,下月下线,SDD 方案不可行
|
|
102
|
+
选项:
|
|
103
|
+
- A: 回退 specAgent,改用新版 API 重新设计
|
|
104
|
+
- B: 回退 specAgent,改用其他支付服务商
|
|
105
|
+
- C: Kill Switch — 终止任务,等 API 迁移完成后再启动
|
|
106
|
+
推荐:A — 新版 API 已上线且接口兼容性好
|
|
107
|
+
|
|
108
|
+
用户选择 C → 任务终止
|
|
109
|
+
进度账本记录:0005-payment | KILLED | 原因:第三方 API deprecated
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## 场景 5:BLOCKED 状态
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
specAgent:
|
|
116
|
+
Phase 1 探索:需要读取数据库 schema,但没有数据库访问权限
|
|
117
|
+
状态:BLOCKED
|
|
118
|
+
阻塞原因:无法访问 production DB schema
|
|
119
|
+
需要:DBA 提供 schema dump 或只读访问
|
|
120
|
+
|
|
121
|
+
编排器:
|
|
122
|
+
触发 H3
|
|
123
|
+
用户提供 schema.sql → specAgent 继续
|
|
124
|
+
```
|