team-skills 1.0.0 → 1.1.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.
@@ -11,7 +11,7 @@ argument-hint: [target-dir]
11
11
 
12
12
  安装内容:
13
13
 
14
- - `skills/*` → `{target-dir}/`(Agent Skills,含 team-score 评分 Skill 和 using-team-skills meta-skill)
14
+ - `skills/*` → `{target-dir}/`(Agent Skills,含 using-team-skills meta-skill)
15
15
  - `skills/_team-rules/*` → `{target-dir}/_team-rules/`(共享规则文件,被所有 Skill 引用)
16
16
  - `.claude/commands/*` → `{target-dir}/{name}/SKILL.md`(Commands 也作为 Skill 安装,Cursor 可发现)
17
17
  - `.claude/commands/*` → `~/.claude/commands/`(兼容 Claude Code 斜杠命令)
package/README.md CHANGED
@@ -12,7 +12,7 @@
12
12
  [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen?style=flat-square)](CONTRIBUTING.md)
13
13
  [![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow?style=flat-square)](https://conventionalcommits.org)
14
14
 
15
- **Spec-Driven · 有向图回退 · 质量门禁 · 100 分制评分**
15
+ **Spec-Driven · 有向图回退 · 质量门禁**
16
16
 
17
17
  </div>
18
18
 
@@ -60,104 +60,77 @@ reviewAgent 发现 spec 遗漏 ──→ 自动回退 specAgent
60
60
  - **反规避条款**:预判 6 种常见借口并逐一反驳
61
61
  - **三视角对抗审查**:攻击者/怀疑者/用户视角反向验证
62
62
 
63
- ### 📊 100 分制评分,不是凭感觉
64
-
65
- ```
66
- 7 项硬门槛(任一不通过则整体不通过)
67
- 5 个维度 × 25 子项
68
- 每个子项有可检查的证据要求
69
- ```
70
-
71
63
  ---
72
64
 
73
- ## 🚀 安装与使用
65
+ ## 🚀 安装
74
66
 
75
67
  ### 前置条件
76
68
 
77
69
  - **Node.js** >= 18
78
70
  - **Claude Code** 或 **Cursor**:至少安装其中之一
79
71
 
80
- ### 方式一:npx 安装(推荐)
81
-
82
- 无需 clone 仓库,直接全局安装 Skills:
72
+ ### 一键安装(推荐)
83
73
 
84
74
  ```bash
85
- npx team-skills setup
75
+ npx team-skills@latest setup
86
76
  ```
87
77
 
88
- ### 方式二:clone 后安装
78
+ 自动将 Skills、斜杠命令和 Hooks 以 symlink 方式安装到全局目录。
79
+
80
+ 如需频繁使用 CLI,可全局安装:
89
81
 
90
82
  ```bash
91
- git clone https://github.com/andeya/team-skills.git
92
- cd team-skills
93
- npm install
94
- npm run setup
83
+ npm i -g team-skills
84
+ team-skills setup
95
85
  ```
96
86
 
97
- ### 方式三:初始化到项目(版本控制)
87
+ ### 初始化到项目(可选)
98
88
 
99
- 将 Skills 复制到你的项目中,可以版本控制和自定义:
89
+ 将 Skills 复制到项目中,支持版本控制和自定义:
100
90
 
101
91
  ```bash
102
- npx team-skills init
103
- # 或在已 clone 的仓库中
104
- node bin/team-skills.js init /path/to/your-project
92
+ npx team-skills@latest init
105
93
  ```
106
94
 
107
- 这会在项目中创建 `.team-skills/` 目录,包含所有 Skills、Hooks 和命令文件。
108
-
109
- ### 安装内容
110
-
111
- | 安装内容 | 说明 |
112
- |----------|------|
113
- | 12 个 Agent Skills | 安装到 `~/.agents/skills/`,Cursor 自动发现 |
114
- | 斜杠命令 | 安装到 `~/.claude/commands/`,Claude Code 可用 `/team-{name}` |
115
- | 共享规则 | `_team-rules/` 被所有 Skill 引用 |
116
- | Hooks(可选) | session-start 钩子,每次新 session 自动加载 |
117
-
118
- ### CLI 命令
95
+ 创建 `.team-skills/` 目录,包含 Skills、Hooks 和命令文件。后续更新:
119
96
 
120
- | 命令 | 说明 |
121
- |------|------|
122
- | `team-skills setup [target]` | symlink 安装到全局目录(开发者模式) |
123
- | `team-skills init [dir]` | 复制到用户项目(消费者模式) |
124
- | `team-skills update [dir]` | 增量更新 init 的副本 |
125
- | `team-skills uninstall [target]` | 移除所有 symlink |
126
- | `team-skills list` | 列出已安装 Skills 及状态 |
127
- | `team-skills --version` | 显示版本 |
97
+ ```bash
98
+ npx team-skills@latest update
99
+ ```
128
100
 
129
- 所有命令支持 `--dry-run` 查看将执行的操作。
101
+ ### 安装内容
130
102
 
131
- ### 验证安装
103
+ | 内容 | 位置 | 说明 |
104
+ |------|------|------|
105
+ | 12 个 Agent Skills | `~/.agents/skills/` | Cursor 自动发现 |
106
+ | 斜杠命令 | `~/.claude/commands/` | Claude Code `/team-{name}` |
107
+ | 共享规则 | `~/.agents/skills/_team-rules/` | 被所有 Skill 引用 |
108
+ | Hooks(可选) | `~/.cursor/hooks/` | session-start 自动加载 |
132
109
 
133
- 安装后,在聊天框中输入 `/` 查看是否出现 `team-` 开头的命令列表。或使用 CLI 检查:
110
+ ### 验证
134
111
 
135
112
  ```bash
136
- team-skills list
137
-
138
- # 或在 Claude Code / Cursor 中
113
+ # 在 Claude Code / Cursor 中输入 / 查看 team- 开头的命令
139
114
  /using-team-skills
140
-
141
- # 评估项目协作成熟度
142
- /team-score
143
115
  ```
144
116
 
145
- ### 更新 Skills
117
+ ### CLI 参考
146
118
 
147
- ```bash
148
- # npx 安装用户
149
- npx team-skills setup
119
+ | 命令 | 说明 |
120
+ |------|------|
121
+ | `team-skills setup` | symlink 安装到全局目录 |
122
+ | `team-skills init [dir]` | 复制到项目目录 |
123
+ | `team-skills update [dir]` | 增量更新项目副本 |
124
+ | `team-skills uninstall` | 移除所有 symlink |
125
+ | `team-skills list` | 查看安装状态 |
150
126
 
151
- # 项目内 init 用户
152
- npx team-skills update
127
+ 所有命令支持 `--dry-run`。
153
128
 
154
- # clone 安装用户
155
- git pull && npm run setup
156
- ```
129
+ ---
157
130
 
158
- ### 使用方式
131
+ ## 📖 使用方式
159
132
 
160
- #### 方式一:全自动编排(推荐)
133
+ ### 全自动编排(推荐)
161
134
 
162
135
  一条命令启动完整流水线,适合从零开始的功能开发:
163
136
 
@@ -165,29 +138,15 @@ git pull && npm run setup
165
138
  /team-orchestrator 实现用户登录功能
166
139
  ```
167
140
 
168
- 编排器会自动完成 7 个步骤:
169
-
170
- ```
171
-
172
- 1. H1: 向你确认目标理解
173
- 2. specAgent: 产出 SDD 规格
174
- 3. H2: 向你确认规格方案
175
- 4. implAgent: TDD 实现
176
- 5. testAgent: 四维测试
177
- 6. reviewAgent: 五维审查
178
- 7. H4: 向你交付验收
179
-
180
- ```
141
+ 编排器自动完成:H1 确认目标 → specAgent 产出 SDD → H2 确认规格 → implAgent TDD 实现 → testAgent 四维测试 → reviewAgent 五维审查 → H4 验收交付
181
142
 
182
- 简单任务可用精简模式(H1 简化为单句确认,跳过 H2,H4 保留):
143
+ 简单任务可用精简模式:
183
144
 
184
145
  ```bash
185
146
  /team-orchestrator --compact 修复登录页按钮样式
186
147
  ```
187
148
 
188
- #### 方式二:按需调用单个 Skill
189
-
190
- 你可以在任意阶段单独调用某个 Skill,适合只想做其中一步的场景:
149
+ ### 按需调用单个 Skill
191
150
 
192
151
  | 场景 | 命令 |
193
152
  |------|------|
@@ -202,13 +161,6 @@ git pull && npm run setup
202
161
  | 代码写完了 | `/team-finish` |
203
162
  | 不知道用哪个 | `/using-team-skills` |
204
163
 
205
- #### 方式三:评估项目成熟度
206
-
207
- ```bash
208
- /team-score
209
- # 输出 100 分制评分报告 + 改进建议
210
- ```
211
-
212
164
  ---
213
165
 
214
166
  ## 🏗️ 核心架构
@@ -280,7 +232,6 @@ graph TD
280
232
  Q -->|"遇到 Bug"| DEBUG[🐛 team-debug<br/>→ 根因分析 + 修复]:::skill
281
233
  Q -->|"实现完成,准备合并"| FINISH[🏁 team-finish<br/>→ 合并/PR/清理]:::skill
282
234
  Q -->|"声称完成"| VERIFY[✅ team-verify<br/>→ 验证证据链]:::skill
283
- Q -->|"评估项目成熟度"| SCORE[📊 team-score<br/>→ 100 分制评分]:::skill
284
235
  Q -->|"不知道用哪个"| USING[🧭 using-team-skills<br/>→ Skill 推荐]:::skill
285
236
  Q -->|"需要完整交付流水线"| ORCH[⚙️ team-orchestrator<br/>→ 全自动编排]:::orch
286
237
 
@@ -301,7 +252,7 @@ graph TD
301
252
 
302
253
  ---
303
254
 
304
- ## 📦 包含 12 个可独立使用的 Skill
255
+ ## 📦 包含 11 个可独立使用的 Skill
305
256
 
306
257
  | Skill | 一句话说明 | 使用场景 |
307
258
  |-------|-----------|----------|
@@ -315,7 +266,6 @@ graph TD
315
266
  | `team-debug` | 四阶段根因分析 + 修复 | "这个 bug 怎么回事?" |
316
267
  | `team-feedback` | 先验证再实施,非表演性同意 | "Review 反馈来了" |
317
268
  | `team-finish` | 分支完成处理(合并/PR/保留/丢弃) | "代码写完了" |
318
- | `team-score` | 100 分制扫描评估 | "项目协作成熟度如何?" |
319
269
  | `using-team-skills` | Meta-skill,自动引导你选正确的 Skill | "我该用哪个?" |
320
270
 
321
271
  > 每个 Skill 可独立使用,也可通过 `team-orchestrator` 串联成完整流水线。
@@ -366,19 +316,15 @@ Team Skills 融合了业界多个 AI 协作框架的精华:
366
316
  | **OpenSpec** (Fission AI) | Delta Spec 增量规格、RFC 2119 + Given/When/Then |
367
317
  | **Karpathy Skills** | 过度抽象防御、死代码清理、困惑管理 |
368
318
  | **Agent-Style** | 5 条 LLM 输出质量约束 |
369
- | **独创** | 有向图回退、评分追溯矩阵、消费方契约、H1-H4 人类介入点 |
319
+ | **独创** | 有向图回退、质量追溯矩阵、消费方契约、H1-H4 人类介入点 |
370
320
 
371
321
  ---
372
322
 
373
323
  ## 🔧 本地开发
374
324
 
375
- ### 前置要求
376
-
377
- - Node.js >= 18
378
-
379
- ### 安装依赖
380
-
381
325
  ```bash
326
+ git clone https://github.com/andeya/team-skills.git
327
+ cd team-skills
382
328
  npm install
383
329
  ```
384
330
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "team-skills",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "AI Agent Skills framework — Spec-Driven development with directed-graph rollback, quality gates, and 100-point scoring",
5
5
  "type": "module",
6
6
  "bin": {
@@ -56,7 +56,7 @@ NO AGENT DISPATCH WITHOUT H1 HUMAN CONFIRMATION FIRST
56
56
  - Claude Code:通过 `/team-orchestrator`、`/team-spec`、`/team-impl`、`/team-test`、`/team-review` 调用
57
57
  - Cursor:通过 `~/.agents/skills/` 下的 Skill 机制自动发现
58
58
 
59
- <!-- 评分追溯矩阵(内部参考,不产出到文件)
59
+ <!-- 质量检查追溯矩阵(内部参考,不产出到文件)
60
60
  硬门槛:
61
61
  G1 任务规划 → 01-plan.md
62
62
  G2 修改边界 → 04-boundary.md
@@ -65,7 +65,7 @@ NO AGENT DISPATCH WITHOUT H1 HUMAN CONFIRMATION FIRST
65
65
  G5 资产可执行 → 12-asset-update.md(消费方契约)+ CLAUDE.md
66
66
  G6 风险说明 → 05-risk.md + 11-review.md §四
67
67
  G7 决策解释 → 08-ai-decisions.md + 15-brief.md
68
- 评分维度:
68
+ 质量维度:
69
69
  D1.1 分层组织 → CLAUDE.md + {module}/CLAUDE.md + task-rules.md
70
70
  D1.2 内容8类 → 02-context.md + CLAUDE.md + review-checklist + delivery-checklist
71
71
  D1.3 规则可执行 → 12-asset-update.md(触发条件+可执行指令+示例)
@@ -231,8 +231,6 @@ NO AGENT DISPATCH WITHOUT H1 HUMAN CONFIRMATION FIRST
231
231
 
232
232
  判断标准:预计修改文件数 ≤ 3 且无跨模块影响 → Small;修改文件 4-15 → Medium;修改文件 > 15 或跨 2+ 模块 → Large。
233
233
 
234
- > **评分注意**:精简模式跳过 01-plan、02-context、05-risk、14-team、15-brief,无法通过 team-score 满分评估。如需满分评估,使用完整模式。
235
-
236
234
  **精简模式 vs 完整模式对比**:
237
235
 
238
236
  | 环节 | 完整模式 | 精简模式 |
@@ -479,9 +477,9 @@ NO AGENT DISPATCH WITHOUT H1 HUMAN CONFIRMATION FIRST
479
477
  | ---- | ---- | ---- | ----------- | ---- |
480
478
  ```
481
479
 
482
- ### Step 8:最终质量检查(评分对齐验证)
480
+ ### Step 8:最终质量检查
483
481
 
484
- 逐条核验,确保每个评分维度都有明确证据。以下清单对齐 team-score 全部评分子项。
482
+ 逐条核验,确保每个维度都有明确证据。
485
483
 
486
484
  **硬门槛(7 项全部必须通过):**
487
485
 
@@ -560,7 +558,7 @@ NO AGENT DISPATCH WITHOUT H1 HUMAN CONFIRMATION FIRST
560
558
  Team 全流程完成 ✅
561
559
  产出目录:docs/tasks/{slug}/
562
560
  文件总数:17 个文档(01-15 + prompt-template + task-rules)+ 代码 + 测试 + 资产更新
563
- 全部质量检查通过(对齐 team-score 全部评分子项)
561
+ 全部质量检查通过
564
562
  ```
565
563
 
566
564
  ## 集成关系
@@ -576,9 +574,7 @@ Team 全流程完成 ✅
576
574
  - `team-test` — REQUIRED:编排流程中必须调度测试审计
577
575
  - `team-review` — REQUIRED:编排流程中必须调度代码审查
578
576
  - `team-finish` — 分支完成处理
579
- - `team-score` — 评估项目协作成熟度
580
577
 
581
578
  ## 下一步
582
579
 
583
- - 交付完成后,推荐使用 `team-score` 评估项目协作成熟度
584
580
  - 如果发现流程问题,更新 `CLAUDE.md` 和 `skills/_team-rules/` 中的规则
@@ -317,7 +317,7 @@ NO COMPLETION CLAIMS WITHOUT CONSTITUTIONAL COMPLIANCE CHECK
317
317
  3. **新规则沉淀**(§二.5):列出本次发现的可固化规则,注明写入位置和理由。对每条新规则,必须同时执行写入——追加到目标文件(CLAUDE.md / 模块 CLAUDE.md / task-rules.md),并在 12-asset-update.md 中记录变更
318
318
  4. **改进承诺**(§三):具体行动 + 预期效果
319
319
 
320
- > 重点:§二.5 的新规则沉淀是评分项 D4.4 的关键证据,不可省略。"发现规则但未写入目标文件"视为未完成。
320
+ > 重点:§二.5 的新规则沉淀是质量检查 D4.4 的关键证据,不可省略。"发现规则但未写入目标文件"视为未完成。
321
321
 
322
322
  ## 产出文件
323
323
 
@@ -56,7 +56,6 @@ NO SKILL RECOMMENDATION WITHOUT SCENE ANALYSIS FIRST
56
56
  | 声明完成,需验证门禁 | team-verify |
57
57
  | 实现完成,需处理分支 | team-finish |
58
58
  | 需完整交付流水线 | team-orchestrator |
59
- | 评估项目协作成熟度 | team-score |
60
59
 
61
60
  ## 执行步骤
62
61
 
@@ -73,7 +72,6 @@ NO SKILL RECOMMENDATION WITHOUT SCENE ANALYSIS FIRST
73
72
  - 收到审查反馈 → 推荐 `team-feedback`
74
73
  - 实现完成 → 推荐 `team-finish`
75
74
  - 需要完整流水线 → 推荐 `team-orchestrator`
76
- - 评估成熟度 → 推荐 `team-score`
77
75
 
78
76
  ### Step 2:推荐并说明理由
79
77
 
@@ -16,13 +16,15 @@ export function registerInit(program) {
16
16
  .argument('[dir]', 'Project directory', '.')
17
17
  .option('--no-hooks', 'Skip hooks')
18
18
  .option('--no-commands', 'Skip command files')
19
+ .option('--with-score', 'Include team-score skill (hidden by default)', false)
19
20
  .option('--dry-run', 'Show what would be copied', false)
20
21
  .action(runInit);
21
22
  }
22
23
 
23
24
  function runInit(dir, opts) {
24
- const { hooks, commands, dryRun } = opts;
25
+ const { hooks, commands, withScore, dryRun } = opts;
25
26
  const installDir = join(dir, LOCAL_INSTALL_DIR);
27
+ const exclude = withScore ? [] : ['team-score'];
26
28
 
27
29
  const existing = readManifest(installDir);
28
30
  if (existing) {
@@ -38,15 +40,16 @@ function runInit(dir, opts) {
38
40
 
39
41
  // Copy skills/
40
42
  log.heading('复制 Skills');
41
- const skillsSrc = join(PACKAGE_ROOT, SKILLS_DIR);
42
43
  const skillsDst = join(installDir, 'skills');
43
- if (dryRun) {
44
- log.info(`${tag}${skillsSrc} → ${skillsDst}`);
45
- } else {
46
- copyRecursive(skillsSrc, skillsDst);
47
- }
48
- const skills = discoverSkills();
44
+ const skills = discoverSkills(PACKAGE_ROOT, { exclude });
49
45
  const rules = discoverSharedRules();
46
+ if (!dryRun) {
47
+ ensureDir(skillsDst);
48
+ for (const s of skills) copyRecursive(s.path, join(skillsDst, s.name));
49
+ const rulesDst = join(skillsDst, '_team-rules');
50
+ ensureDir(rulesDst);
51
+ for (const r of rules) fsCopyFile(r.path, join(rulesDst, r.name));
52
+ }
50
53
  fileCount += skills.length + rules.length;
51
54
  for (const s of skills) log.success(`${tag}Skill: ${s.name}`);
52
55
  for (const r of rules) log.success(`${tag}Rule: ${r.name}`);
@@ -14,18 +14,20 @@ export function registerSetup(program) {
14
14
  .argument('[target]', 'Target skills directory', DEFAULT_SKILLS_TARGET)
15
15
  .option('--no-hooks', 'Skip hook installation')
16
16
  .option('--no-commands', 'Skip Claude Code command symlinks')
17
+ .option('--with-score', 'Include team-score skill (hidden by default)', false)
17
18
  .option('--force', 'Overwrite existing symlinks', false)
18
19
  .option('--dry-run', 'Show what would be done without doing it', false)
19
20
  .action(runSetup);
20
21
  }
21
22
 
22
23
  function runSetup(target, opts) {
23
- const { hooks, commands, force, dryRun } = opts;
24
+ const { hooks, commands, withScore, force, dryRun } = opts;
24
25
  const tag = dryRun ? '[dry-run] ' : '';
26
+ const exclude = withScore ? [] : ['team-score'];
25
27
  let count = 0;
26
28
 
27
29
  log.heading('安装 Agent Skills');
28
- const skills = discoverSkills();
30
+ const skills = discoverSkills(PACKAGE_ROOT, { exclude });
29
31
  for (const skill of skills) {
30
32
  const dest = join(target, skill.name);
31
33
  const result = createSymlinkSafe(skill.path, dest, { force, dryRun });
@@ -2,13 +2,14 @@ import { readdirSync, statSync, existsSync } from 'node:fs';
2
2
  import { join, basename } from 'node:path';
3
3
  import { PACKAGE_ROOT, SKILLS_DIR, HOOKS_DIR, COMMANDS_DIR } from './constants.js';
4
4
 
5
- export function discoverSkills(root = PACKAGE_ROOT) {
5
+ export function discoverSkills(root = PACKAGE_ROOT, { exclude = [] } = {}) {
6
6
  const skillsDir = join(root, SKILLS_DIR);
7
7
  if (!existsSync(skillsDir)) return [];
8
8
 
9
9
  return readdirSync(skillsDir)
10
10
  .filter(name => {
11
11
  if (name.startsWith('_') || name === 'CLAUDE.md') return false;
12
+ if (exclude.includes(name)) return false;
12
13
  const full = join(skillsDir, name);
13
14
  return statSync(full).isDirectory();
14
15
  })