@adamancyzhang/claude-orchestrator 0.3.0 → 0.3.1
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 +179 -186
- package/dist/cli/commands.d.ts +6 -17
- package/dist/cli/commands.js +106 -172
- package/dist/cli/commands.js.map +1 -1
- package/dist/config.d.ts +22 -14
- package/dist/config.js +47 -20
- package/dist/config.js.map +1 -1
- package/dist/index.js +110 -246
- package/dist/index.js.map +1 -1
- package/dist/leader/decision-engine.d.ts +35 -0
- package/dist/leader/decision-engine.js +102 -0
- package/dist/leader/decision-engine.js.map +1 -0
- package/dist/leader/index.js +12 -2
- package/dist/leader/index.js.map +1 -1
- package/dist/leader/recovery.d.ts +2 -0
- package/dist/leader/recovery.js +37 -22
- package/dist/leader/recovery.js.map +1 -1
- package/dist/leader/state.d.ts +2 -1
- package/dist/leader/state.js +39 -2
- package/dist/leader/state.js.map +1 -1
- package/dist/leader/task-generator.d.ts +34 -0
- package/dist/leader/task-generator.js +93 -0
- package/dist/leader/task-generator.js.map +1 -0
- package/dist/leader/tui.js +8 -5
- package/dist/leader/tui.js.map +1 -1
- package/dist/leader/watcher.d.ts +3 -1
- package/dist/leader/watcher.js +14 -2
- package/dist/leader/watcher.js.map +1 -1
- package/dist/models/schemas.d.ts +60 -96
- package/dist/models/schemas.js +27 -44
- package/dist/models/schemas.js.map +1 -1
- package/dist/modules/message-router.d.ts +1 -3
- package/dist/modules/message-router.js +3 -26
- package/dist/modules/message-router.js.map +1 -1
- package/dist/modules/registry.js +3 -3
- package/dist/modules/registry.js.map +1 -1
- package/dist/modules/task-queue.d.ts +1 -1
- package/dist/modules/task-queue.js +28 -2
- package/dist/modules/task-queue.js.map +1 -1
- package/dist/skills/CLAUDE.md +155 -0
- package/dist/skills/claude-code-developer/SKILL.md +325 -0
- package/dist/skills/claude-orchestrator/SKILL.md +180 -0
- package/dist/skills/task-acceptance/SKILL.md +201 -0
- package/dist/skills/task-execution/SKILL.md +142 -0
- package/dist/skills/task-planning/SKILL.md +188 -0
- package/dist/skills/task-review/SKILL.md +220 -0
- package/dist/skills/task-traceability/SKILL.md +154 -0
- package/dist/skills/task-verification/SKILL.md +194 -0
- package/dist/templates/leader-decide.md +59 -0
- package/dist/templates/leader-decompose.md +69 -0
- package/dist/templates/worker-accept.md +46 -0
- package/dist/templates/worker-build.md +45 -0
- package/dist/templates/worker-plan.md +43 -0
- package/dist/templates/worker-review.md +46 -0
- package/dist/templates/worker-verify.md +47 -0
- package/dist/utils/exec.d.ts +5 -0
- package/dist/utils/exec.js +25 -0
- package/dist/utils/exec.js.map +1 -1
- package/dist/worker/watcher.d.ts +3 -0
- package/dist/worker/watcher.js +72 -2
- package/dist/worker/watcher.js.map +1 -1
- package/dist/zk/client.d.ts +0 -5
- package/dist/zk/client.js +0 -27
- package/dist/zk/client.js.map +1 -1
- package/dist/zk/paths.d.ts +8 -10
- package/dist/zk/paths.js +1 -6
- package/dist/zk/paths.js.map +1 -1
- package/dist/zk/watcher.d.ts +0 -2
- package/dist/zk/watcher.js +0 -3
- package/dist/zk/watcher.js.map +1 -1
- package/package.json +2 -2
- package/dist/modules/context-store.d.ts +0 -10
- package/dist/modules/context-store.js +0 -25
- package/dist/modules/context-store.js.map +0 -1
- package/dist/templates/leader.md +0 -10
- package/dist/templates/worker.md +0 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-router.js","sourceRoot":"","sources":["../../src/modules/message-router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"message-router.js","sourceRoot":"","sources":["../../src/modules/message-router.ts"],"names":[],"mappings":"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"}
|
package/dist/modules/registry.js
CHANGED
|
@@ -4,10 +4,10 @@ export class InstanceRegistry {
|
|
|
4
4
|
constructor(zk) {
|
|
5
5
|
this.zk = zk;
|
|
6
6
|
}
|
|
7
|
-
async register(name, role = "
|
|
8
|
-
const validRole = ["
|
|
7
|
+
async register(name, role = "builder", instanceId) {
|
|
8
|
+
const validRole = ["planner", "builder", "verifier", "reviewer", "accepter", "leader"].includes(role)
|
|
9
9
|
? role
|
|
10
|
-
: "
|
|
10
|
+
: "builder";
|
|
11
11
|
if (instanceId) {
|
|
12
12
|
const existing = await this.zk.getInstance(instanceId);
|
|
13
13
|
if (existing) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/modules/registry.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,cAAc,GAGf,MAAM,sBAAsB,CAAC;AAE9B,MAAM,OAAO,gBAAgB;IACP;IAApB,YAAoB,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;IAAG,CAAC;IAEpC,KAAK,CAAC,QAAQ,CACZ,IAAY,EACZ,OAAe,SAAS,EACxB,UAAmB;QAEnB,MAAM,SAAS,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/modules/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { type Task } from "../models/schemas.js";
|
|
|
3
3
|
export declare class TaskQueue {
|
|
4
4
|
private zk;
|
|
5
5
|
constructor(zk: ZkClient);
|
|
6
|
-
push(title: string, description?: string, priority?: number, createdBy?: string, assignedTo?: string, createdByName?: string, assignedToName?: string | null): Promise<Task>;
|
|
6
|
+
push(title: string, description?: string, priority?: number, createdBy?: string, assignedTo?: string, createdByName?: string, assignedToName?: string | null, link?: string | null, chainId?: string | null, dependsOn?: string[], blockedBy?: string[]): Promise<Task>;
|
|
7
7
|
claim(instanceId: string): Promise<Task | null>;
|
|
8
8
|
complete(instanceId: string, taskId: string, result: string): Promise<Task>;
|
|
9
9
|
block(instanceId: string, taskId: string, reason: string): Promise<Task>;
|
|
@@ -7,7 +7,7 @@ export class TaskQueue {
|
|
|
7
7
|
constructor(zk) {
|
|
8
8
|
this.zk = zk;
|
|
9
9
|
}
|
|
10
|
-
async push(title, description = "", priority = 1, createdBy = "", assignedTo, createdByName, assignedToName) {
|
|
10
|
+
async push(title, description = "", priority = 1, createdBy = "", assignedTo, createdByName, assignedToName, link, chainId, dependsOn, blockedBy) {
|
|
11
11
|
const task = createTask({
|
|
12
12
|
title,
|
|
13
13
|
description,
|
|
@@ -16,6 +16,10 @@ export class TaskQueue {
|
|
|
16
16
|
assigned_to: assignedTo ?? null,
|
|
17
17
|
created_by_name: createdByName,
|
|
18
18
|
assigned_to_name: assignedToName ?? null,
|
|
19
|
+
link,
|
|
20
|
+
chain_id: chainId,
|
|
21
|
+
depends_on: dependsOn ?? [],
|
|
22
|
+
blocked_by: blockedBy ?? [],
|
|
19
23
|
});
|
|
20
24
|
const taskId = await this.zk.createPendingTask(task);
|
|
21
25
|
task.id = taskId;
|
|
@@ -23,12 +27,30 @@ export class TaskQueue {
|
|
|
23
27
|
}
|
|
24
28
|
async claim(instanceId) {
|
|
25
29
|
const pending = await this.zk.listPendingTasks();
|
|
30
|
+
// Read instance role for weight matching
|
|
31
|
+
let instanceRole = "";
|
|
32
|
+
try {
|
|
33
|
+
const instData = await this.zk.getInstance(instanceId);
|
|
34
|
+
instanceRole = instData?.role ?? "";
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// proceed without role-weight sorting
|
|
38
|
+
}
|
|
39
|
+
const roleToLink = {
|
|
40
|
+
planner: "plan",
|
|
41
|
+
builder: "build",
|
|
42
|
+
verifier: "verify",
|
|
43
|
+
reviewer: "review",
|
|
44
|
+
accepter: "accept",
|
|
45
|
+
};
|
|
26
46
|
const sortKey = (item) => {
|
|
27
47
|
const [, data] = item;
|
|
28
48
|
const assigned = data.assigned_to;
|
|
29
49
|
const prio = data.priority ?? 1;
|
|
30
50
|
const isAssignedToMe = assigned === instanceId ? 0 : 1;
|
|
31
|
-
|
|
51
|
+
const taskLink = data.link ?? "";
|
|
52
|
+
const roleMatch = taskLink && roleToLink[instanceRole] === taskLink ? 0 : 1;
|
|
53
|
+
return [isAssignedToMe, roleMatch, prio, item[0]];
|
|
32
54
|
};
|
|
33
55
|
pending.sort((a, b) => {
|
|
34
56
|
const ka = sortKey(a);
|
|
@@ -81,6 +103,8 @@ export class TaskQueue {
|
|
|
81
103
|
completed_at: now,
|
|
82
104
|
completed_by_name: claimedData.claimed_by_name ?? "",
|
|
83
105
|
result,
|
|
106
|
+
link: claimedData.link ?? null,
|
|
107
|
+
chain_id: claimedData.chain_id ?? null,
|
|
84
108
|
retry_count: claimedData.retry_count ?? 0,
|
|
85
109
|
duration_seconds: durationSeconds,
|
|
86
110
|
created_by_name: claimedData.created_by_name ?? "",
|
|
@@ -135,6 +159,8 @@ export class TaskQueue {
|
|
|
135
159
|
assigned_to_name: completedData.assigned_to_name ?? null,
|
|
136
160
|
created_by_name: completedData.created_by_name ?? "",
|
|
137
161
|
created_at: utcNow(),
|
|
162
|
+
link: completedData.link ?? null,
|
|
163
|
+
chain_id: completedData.chain_id ?? null,
|
|
138
164
|
retry_count: retryCount,
|
|
139
165
|
status: "pending",
|
|
140
166
|
blocked_reason: null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-queue.js","sourceRoot":"","sources":["../../src/modules/task-queue.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,UAAU,GAEX,MAAM,sBAAsB,CAAC;AAE9B,SAAS,MAAM;IACb,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,OAAO,SAAS;IACA;IAApB,YAAoB,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;IAAG,CAAC;IAEpC,KAAK,CAAC,IAAI,CACR,KAAa,EACb,cAAsB,EAAE,EACxB,WAAmB,CAAC,EACpB,YAAoB,EAAE,EACtB,UAAmB,EACnB,aAAsB,EACtB,cAA8B;
|
|
1
|
+
{"version":3,"file":"task-queue.js","sourceRoot":"","sources":["../../src/modules/task-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# Skills for Multi-Agent Orchestration
|
|
2
|
+
|
|
3
|
+
Skills 是按责任链角色设计的标准化工作流。每个 skill 对应一个责任链角色,定义明确的输入、步骤、和产出。Skills 之间通过交叉引用形成闭环协作。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 责任链与 Skill 映射
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
Leader (协调层)
|
|
11
|
+
└── claude-orchestrator: 实例注册、任务分发、消息传递、上下文共享
|
|
12
|
+
|
|
13
|
+
责任链: Plan → Build → Verify → Review → Accept
|
|
14
|
+
│ │ │ │ │
|
|
15
|
+
▼ ▼ ▼ ▼ ▼
|
|
16
|
+
task- task- task- task- task-
|
|
17
|
+
planning execution verification review acceptance
|
|
18
|
+
|
|
19
|
+
基础层 (所有角色):
|
|
20
|
+
task-traceability: 追溯 → 执行 → 映射 → 举证 → 记录 — 责任链可审计、可交接、可签收的基础
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
| 角色 | Skill | 输入 | 产出 |
|
|
24
|
+
|------|-------|------|------|
|
|
25
|
+
| **Leader** | `claude-orchestrator` | 需求/目标 | 任务在队列中,Worker 在工作 |
|
|
26
|
+
| **Planner** | `task-planning` + `task-traceability` | 需求上下文 | 蓝图文档 + 任务队列 + 可追溯记录 |
|
|
27
|
+
| **Builder** | `task-execution` + `task-traceability` | 蓝图 + 任务 | 代码 commit + 可追溯记录 |
|
|
28
|
+
| **Verifier** | `task-verification` + `task-traceability` | 蓝图 + Builder 产出 | 验证报告 + 可追溯记录 |
|
|
29
|
+
| **Reviewer** | `task-review` + `task-traceability` | 蓝图 + Build 代码 + Verify 报告 | 审查报告 (Pass/Revise) + 可追溯记录 |
|
|
30
|
+
| **Accepter** | `task-acceptance` + `task-traceability` | 全链产出 + 验收标准 | 验收报告 (Go/No-Go) + 可追溯记录 |
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 各 Skill 详述
|
|
35
|
+
|
|
36
|
+
### claude-orchestrator
|
|
37
|
+
|
|
38
|
+
Multi-agent orchestration CLI backed by ZooKeeper。所有角色都使用它来完成基础设施操作:注册实例、认领任务、发送消息、读写共享上下文。
|
|
39
|
+
|
|
40
|
+
- **入口**: `claude-orchestrator <command>`
|
|
41
|
+
- **关键命令**: `register`, `claim-task`, `complete-task`, `push-task`, `send-message`, `set-context`, `get-context`
|
|
42
|
+
- **适用角色**: 所有角色
|
|
43
|
+
|
|
44
|
+
### task-planning
|
|
45
|
+
|
|
46
|
+
Planner 将需求分析拆解为可执行任务蓝图的标准化工作流。
|
|
47
|
+
|
|
48
|
+
- **触发**: "分析需求"、"拆解任务"、"制定计划"
|
|
49
|
+
- **六步法**: 读取需求 → 定义蓝图 → 拆解任务 → 推入队列 → 建立验收标准 → 通知 Leader
|
|
50
|
+
- **产出**: 蓝图文档 + orchestrator 任务队列中的任务
|
|
51
|
+
- **依赖**: 需求上下文(Leader 提供或文档来源)
|
|
52
|
+
|
|
53
|
+
### task-execution
|
|
54
|
+
|
|
55
|
+
Builder 认领任务后精准执行的工作流。
|
|
56
|
+
|
|
57
|
+
- **触发**: "执行任务"、"开始构建"、claim build 类型任务后
|
|
58
|
+
- **六步法**: 认领并获取上下文 → 理解范围 → 执行实现 → 自测验证 → 提交代码 → 报告完成
|
|
59
|
+
- **产出**: 代码 commit + 可追溯记录 (commit hash → 任务文档)
|
|
60
|
+
- **协作 skill**: `task-traceability` (提交规范)
|
|
61
|
+
- **依赖**: Planner 的蓝图
|
|
62
|
+
|
|
63
|
+
### task-verification
|
|
64
|
+
|
|
65
|
+
Verifier 对照蓝图独立验证 Builder 产出的工作流。
|
|
66
|
+
|
|
67
|
+
- **触发**: "验证任务"、"verify"、claim verify 类型任务后
|
|
68
|
+
- **六步法**: 认领并读蓝图 → 收集产出物 → 逐项验证 → 边缘检查 → 判定偏离 → 产出报告
|
|
69
|
+
- **产出**: 验证报告(通过/不通过 + 问题清单)
|
|
70
|
+
- **依赖**: Planner 的蓝图 + Builder 的代码 commit
|
|
71
|
+
|
|
72
|
+
### task-review
|
|
73
|
+
|
|
74
|
+
Reviewer 从设计意图高度审查全链产出的工作流。
|
|
75
|
+
|
|
76
|
+
- **触发**: "审查"、"review"、"code review"、claim review 类型任务后
|
|
77
|
+
- **六步法**: 收集全链信息 → 审查设计一致性 → 审查验证报告 → 判定问题等级 → 书写报告 → 通知流转
|
|
78
|
+
- **产出**: 审查报告(Pass/Revise + P0-P3 问题清单)
|
|
79
|
+
- **依赖**: Plan 蓝图 + Build 代码 + Verify 报告
|
|
80
|
+
|
|
81
|
+
### task-acceptance
|
|
82
|
+
|
|
83
|
+
Accepter 从业务需求角度验收最终交付物的工作流。
|
|
84
|
+
|
|
85
|
+
- **触发**: "确认并验收"、"验收一下"、"检查完成情况"
|
|
86
|
+
- **八步法**: 参见 `skills/task-acceptance/SKILL.md`
|
|
87
|
+
- **产出**: 验收报告(Go/No-Go + 问题清单)
|
|
88
|
+
- **依赖**: 全链产出(Plan → Build → Verify → Review)+ 业务验收标准
|
|
89
|
+
|
|
90
|
+
### task-traceability
|
|
91
|
+
|
|
92
|
+
基础层工作流:责任链可审计、可交接、可签收的基石。所有角色都依赖它来建立可追溯记录。
|
|
93
|
+
|
|
94
|
+
- **触发**: 任何责任链环节的任务执行
|
|
95
|
+
- **五步法**: 追溯上游要求 → 按追溯到的要求执行 → 将产出映射回上游要求 → 为每个映射提供证据 → 持久化追溯记录
|
|
96
|
+
- **适用**: 所有角色(Plan / Build / Verify / Review / Accept)
|
|
97
|
+
- **为什么是基础层**: 没有追溯,Plan 的蓝图无法被 Build 执行,Build 的产出无法被 Verify 验证,Verify 的报告无法被 Review 采信,Review 的判定无法被 Accept 签收。任何一个环节的追溯断裂,整个责任链就断了。
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Skill 间协作关系
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
105
|
+
│ task-traceability (基础层) │
|
|
106
|
+
│ 追溯 → 执行 → 映射 → 举证 → 记录 — 每个环节的通用模式 │
|
|
107
|
+
└─────────────────────────────────────────────────────────────┘
|
|
108
|
+
│ │ │ │ │
|
|
109
|
+
▼ ▼ ▼ ▼ ▼
|
|
110
|
+
task-planning task-execution task-verification task-review task-acceptance
|
|
111
|
+
(Planner) (Builder) (Verifier) (Reviewer) (Accepter)
|
|
112
|
+
│ │ │ │ │
|
|
113
|
+
│ 蓝图+标准 │ 代码+记录 │ 验证报告+问题 │ 审查报告 │ 验收报告
|
|
114
|
+
▼ ▼ ▼ ▼ ▼
|
|
115
|
+
责任链流转: Plan → Build → Verify → Review → Accept
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
每个环节发现问题可向前反馈至对应环节。例如:
|
|
119
|
+
- Verifier 发现偏离 → 反馈 Builder
|
|
120
|
+
- Reviewer 发现设计意图未实现 → 反馈 Planner 和 Builder
|
|
121
|
+
- Accepter 发现验收不通过 → 反馈至对应环节的负责人
|
|
122
|
+
|
|
123
|
+
`task-traceability` 确保每个环节的产出都有完整的追溯链:谁做的 → 基于什么要求 → 产出是什么 → 证据在哪里 → 记录存在哪里。没有追溯链,反馈就找不到锚点,交接就不可靠,签收就无法审计。
|
|
124
|
+
|
|
125
|
+
所有角色通过 `claude-orchestrator` 的消息和共享上下文进行跨角色沟通。
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## 角色预设权重与 Skill 选择
|
|
130
|
+
|
|
131
|
+
Worker 注册时的 role 是预设权重,认领任务后才确定当前角色和对应的 skill:
|
|
132
|
+
|
|
133
|
+
| 注册 role | 预设匹配的任务 link | 认领后使用的 skill |
|
|
134
|
+
|-----------|-------------------|-------------------|
|
|
135
|
+
| `planner` | `plan` | `task-planning` + `task-traceability` |
|
|
136
|
+
| `builder` | `build` | `task-execution` + `task-traceability` |
|
|
137
|
+
| `verifier` | `verify` | `task-verification` + `task-traceability` |
|
|
138
|
+
| `reviewer` | `review` | `task-review` + `task-traceability` |
|
|
139
|
+
| `accepter` | `accept` | `task-acceptance` + `task-traceability` |
|
|
140
|
+
|
|
141
|
+
任意 Worker 可认领任意环节的任务。认领后以任务所属环节的角色身份执行,使用对应的 skill。
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 快速索引
|
|
146
|
+
|
|
147
|
+
| 我想做... | 使用 skill |
|
|
148
|
+
|-----------|-----------|
|
|
149
|
+
| 分析需求,拆解成任务 | `task-planning` + `task-traceability` |
|
|
150
|
+
| 认领并执行一个开发任务 | `task-execution` + `task-traceability` |
|
|
151
|
+
| 建立可追溯的执行记录 | `task-traceability` |
|
|
152
|
+
| 验证 Builder 的产出是否合格 | `task-verification` + `task-traceability` |
|
|
153
|
+
| 审查代码质量和设计一致性 | `task-review` + `task-traceability` |
|
|
154
|
+
| 验收最终交付物,签 Go/No-Go | `task-acceptance` + `task-traceability` |
|
|
155
|
+
| 注册实例、收发消息、管理任务 | `claude-orchestrator` |
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: claude-code-developer
|
|
3
|
+
description: Reference for developing Claude Code extensions — hooks, settings, MCP, CLI, and skills. Use when building tools on Claude Code, configuring automation, debugging hooks, or understanding extension points.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Claude Code Developer Guide
|
|
7
|
+
|
|
8
|
+
Reference for building tools and automations on top of Claude Code. Covers hooks, settings, MCP integration, and CLI usage.
|
|
9
|
+
|
|
10
|
+
## Hooks
|
|
11
|
+
|
|
12
|
+
Hooks run shell commands at specific points in Claude Code's lifecycle. Configured in `settings.json` under `hooks.<EventName>`.
|
|
13
|
+
|
|
14
|
+
### Hook Event Reference
|
|
15
|
+
|
|
16
|
+
| Event | Matcher | Fires when | Use for |
|
|
17
|
+
|-------|---------|-----------|---------|
|
|
18
|
+
| `SessionStart` | — | Session starts | Auto-register, init workspace |
|
|
19
|
+
| `SessionEnd` | — | Session truly ends | Cleanup, unregister |
|
|
20
|
+
| `Stop` | — | Claude stops (clear/resume/compact too) | Logging — prefer `SessionEnd` for cleanup |
|
|
21
|
+
| `UserPromptSubmit` | — | User submits a prompt | Pre-processing, logging |
|
|
22
|
+
| `PreToolUse` | Tool name | Before a tool runs | Validation, blocking dangerous ops |
|
|
23
|
+
| `PostToolUse` | Tool name | After a tool succeeds | Formatting, logging, notifications |
|
|
24
|
+
| `PostToolUseFailure` | Tool name | After a tool fails | Error recovery |
|
|
25
|
+
| `PreCompact` | `"manual"`/`"auto"` | Before context compaction | Save state, warn user |
|
|
26
|
+
| `PostCompact` | `"manual"`/`"auto"` | After compaction | Post-processing |
|
|
27
|
+
| `Notification` | Notification type | On notifications | Custom notification handling |
|
|
28
|
+
| `PermissionRequest` | Tool name | Before permission prompt | Custom permission logic |
|
|
29
|
+
| `SubagentStart` | — | Subagent spawns | Agent lifecycle tracking |
|
|
30
|
+
| `SubagentStop` | — | Subagent exits | Agent lifecycle tracking |
|
|
31
|
+
|
|
32
|
+
### Hook Structure
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"hooks": {
|
|
37
|
+
"EVENT_NAME": [
|
|
38
|
+
{
|
|
39
|
+
"matcher": "ToolName|OtherTool",
|
|
40
|
+
"hooks": [
|
|
41
|
+
{
|
|
42
|
+
"type": "command",
|
|
43
|
+
"command": "your-command-here",
|
|
44
|
+
"timeout": 60
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
- **matcher**: tool name (`"Bash"`, `"Write"`, `"Edit"`), pipe-separated list (`"Write|Edit"`), or `""` to match all. For non-tool events, omit or use `""`.
|
|
54
|
+
- **hooks**: array of hook objects, each with `type` and type-specific fields.
|
|
55
|
+
|
|
56
|
+
### Hook Types
|
|
57
|
+
|
|
58
|
+
**command** — Shell command:
|
|
59
|
+
```json
|
|
60
|
+
{ "type": "command", "command": "echo 'hello'", "timeout": 30 }
|
|
61
|
+
```
|
|
62
|
+
- Receives JSON on stdin with event context
|
|
63
|
+
- `timeout` in seconds (optional)
|
|
64
|
+
- `statusMessage` for spinner text (optional)
|
|
65
|
+
- `once`: auto-remove after first run (optional)
|
|
66
|
+
- `async`: run in background without blocking (optional)
|
|
67
|
+
|
|
68
|
+
**prompt** — LLM evaluation (PreToolUse/PostToolUse/PermissionRequest only):
|
|
69
|
+
```json
|
|
70
|
+
{ "type": "prompt", "prompt": "Is this safe? $ARGUMENTS" }
|
|
71
|
+
```
|
|
72
|
+
- `$ARGUMENTS` placeholder replaced with hook input JSON
|
|
73
|
+
|
|
74
|
+
**agent** — Agent with tools (PreToolUse/PostToolUse/PermissionRequest only):
|
|
75
|
+
```json
|
|
76
|
+
{ "type": "agent", "prompt": "Verify tests pass", "timeout": 60 }
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**http** — POST hook input to a URL:
|
|
80
|
+
```json
|
|
81
|
+
{ "type": "http", "url": "https://example.com/hook", "headers": {} }
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**mcp_tool** — Call an MCP tool:
|
|
85
|
+
```json
|
|
86
|
+
{ "type": "mcp_tool", "server": "server-name", "tool": "tool_name", "input": {} }
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Hook stdin JSON
|
|
90
|
+
|
|
91
|
+
Hooks receive context on stdin. Key fields:
|
|
92
|
+
|
|
93
|
+
```json
|
|
94
|
+
{
|
|
95
|
+
"session_id": "abc123",
|
|
96
|
+
"tool_name": "Write",
|
|
97
|
+
"tool_input": { "file_path": "/path/to/file.txt", "content": "..." },
|
|
98
|
+
"tool_response": { "success": true }
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Extract with `jq`:
|
|
103
|
+
```bash
|
|
104
|
+
jq -r '.tool_input.file_path'
|
|
105
|
+
jq -r '.tool_input.command' # for Bash
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Hook JSON Output
|
|
109
|
+
|
|
110
|
+
Commands can output JSON to control behavior:
|
|
111
|
+
|
|
112
|
+
```json
|
|
113
|
+
{
|
|
114
|
+
"systemMessage": "Warning shown to user",
|
|
115
|
+
"continue": false,
|
|
116
|
+
"stopReason": "Blocked because...",
|
|
117
|
+
"decision": "block",
|
|
118
|
+
"reason": "Explanation",
|
|
119
|
+
"hookSpecificOutput": {
|
|
120
|
+
"hookEventName": "PostToolUse",
|
|
121
|
+
"additionalContext": "Injected into model context",
|
|
122
|
+
"permissionDecision": "allow",
|
|
123
|
+
"permissionDecisionReason": "Why allowed"
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Common Hook Pitfalls
|
|
129
|
+
|
|
130
|
+
1. **`Stop` vs `SessionEnd`**: `Stop` fires on clear/resume/compact — use `SessionEnd` for cleanup
|
|
131
|
+
2. **Matcher is required**: each hook entry needs `"matcher"` (use `""` for all)
|
|
132
|
+
3. **Nested hooks array**: the outer `hooks` object contains arrays of `{matcher, hooks:[...]}`
|
|
133
|
+
4. **Silent failure**: invalid JSON in settings.json silently disables ALL settings from that file
|
|
134
|
+
5. **Hook command format**: `{matcher: "", hooks: [{type: "command", command: "..."}]}` — NOT flat `{matcher: "", command: "..."}`
|
|
135
|
+
|
|
136
|
+
## Settings
|
|
137
|
+
|
|
138
|
+
### File Locations
|
|
139
|
+
|
|
140
|
+
| File | Scope | Git | Use for |
|
|
141
|
+
|------|-------|-----|---------|
|
|
142
|
+
| `~/.claude/settings.json` | Global (user) | No | Personal preferences |
|
|
143
|
+
| `.claude/settings.json` | Project | Yes | Team-wide config |
|
|
144
|
+
| `.claude/settings.local.json` | Project local | Gitignore | Personal overrides |
|
|
145
|
+
|
|
146
|
+
Priority: user → project → local (later overrides earlier).
|
|
147
|
+
|
|
148
|
+
### Key Settings for Tool Developers
|
|
149
|
+
|
|
150
|
+
**Permissions** — allow/deny tool operations:
|
|
151
|
+
```json
|
|
152
|
+
{
|
|
153
|
+
"permissions": {
|
|
154
|
+
"allow": ["Bash(npm *)", "Bash(git *)"],
|
|
155
|
+
"deny": ["Bash(rm -rf *)"],
|
|
156
|
+
"defaultMode": "default"
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**MCP Servers** — manage server approval:
|
|
162
|
+
```json
|
|
163
|
+
{
|
|
164
|
+
"enableAllProjectMcpServers": true,
|
|
165
|
+
"enabledMcpjsonServers": ["orchestrator"],
|
|
166
|
+
"disabledMcpjsonServers": ["blocked-server"]
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Environment Variables**:
|
|
171
|
+
```json
|
|
172
|
+
{ "env": { "DEBUG": "true", "ZK_HOSTS": "127.0.0.1:2181" } }
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**Model & Agent**:
|
|
176
|
+
```json
|
|
177
|
+
{ "model": "sonnet", "agent": "agent-name" }
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**Plugins**:
|
|
181
|
+
```json
|
|
182
|
+
{ "enabledPlugins": { "formatter@anthropic-tools": true } }
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Status Line** — custom terminal status bar:
|
|
186
|
+
```json
|
|
187
|
+
{
|
|
188
|
+
"statusLine": {
|
|
189
|
+
"type": "command",
|
|
190
|
+
"command": "echo '$(date +%H:%M)'",
|
|
191
|
+
"padding": 0
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### JSON Validation
|
|
197
|
+
|
|
198
|
+
Broken JSON in settings.json silently disables the entire file. Validate with:
|
|
199
|
+
```bash
|
|
200
|
+
jq -e '.hooks.SessionStart' .claude/settings.json
|
|
201
|
+
python3 -m json.tool .claude/settings.json > /dev/null
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## MCP Integration
|
|
205
|
+
|
|
206
|
+
### .mcp.json Format
|
|
207
|
+
|
|
208
|
+
```json
|
|
209
|
+
{
|
|
210
|
+
"mcpServers": {
|
|
211
|
+
"server-name": {
|
|
212
|
+
"type": "http",
|
|
213
|
+
"url": "http://127.0.0.1:3100/mcp",
|
|
214
|
+
"headers": {
|
|
215
|
+
"X-Instance-Name": "my-instance",
|
|
216
|
+
"X-Instance-Role": "developer"
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
- `type`: `"http"` for Streamable HTTP, `"stdio"` for subprocess
|
|
224
|
+
- `headers`: custom HTTP headers sent with every request
|
|
225
|
+
- MCP tools appear as callable tools in Claude Code
|
|
226
|
+
|
|
227
|
+
### MCP Server Best Practices
|
|
228
|
+
|
|
229
|
+
1. Use Streamable HTTP transport on `127.0.0.1` for local servers
|
|
230
|
+
2. Expose a `/health` endpoint for diagnostics
|
|
231
|
+
3. Provide REST endpoints alongside MCP tools for CLI-based interaction
|
|
232
|
+
4. Use `resources/subscribe` for push notifications to Claude Code
|
|
233
|
+
5. Stateless sessions simplify scaling (set `sessionIdGenerator: undefined`)
|
|
234
|
+
|
|
235
|
+
## CLI Reference
|
|
236
|
+
|
|
237
|
+
### Key Commands
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
claude # Interactive session
|
|
241
|
+
claude -p "prompt" # One-shot, print and exit
|
|
242
|
+
claude -c # Continue last session
|
|
243
|
+
claude -r # Resume by ID or picker
|
|
244
|
+
claude --resume <id> # Resume specific session
|
|
245
|
+
claude --model sonnet # Override model
|
|
246
|
+
claude --mcp-config file.json # Additional MCP config
|
|
247
|
+
claude --settings file.json # Additional settings
|
|
248
|
+
claude --add-dir /path # Additional workspace dir
|
|
249
|
+
claude --debug # Debug mode
|
|
250
|
+
claude --debug hooks # Debug hooks specifically
|
|
251
|
+
claude --bare # Minimal mode (no hooks/LSP/plugins)
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Useful Subcommands
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
claude mcp # MCP server management
|
|
258
|
+
claude auth # Auth management
|
|
259
|
+
claude doctor # Health check
|
|
260
|
+
claude update # Check for updates
|
|
261
|
+
claude agents # Background agents management
|
|
262
|
+
claude plugin # Plugin management
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Hook Testing
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
# Debug hooks
|
|
269
|
+
claude --debug hooks
|
|
270
|
+
|
|
271
|
+
# Stream hook events
|
|
272
|
+
claude --include-hook-events --output-format stream-json -p "test"
|
|
273
|
+
|
|
274
|
+
# Validate hook JSON
|
|
275
|
+
jq -e '.hooks.<event>[] | select(.matcher == "<matcher>") | .hooks[] | select(.type == "command") | .command' .claude/settings.json
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
## Skills
|
|
279
|
+
|
|
280
|
+
### Skill File Format
|
|
281
|
+
|
|
282
|
+
Skills live in `skills/<name>/SKILL.md`:
|
|
283
|
+
|
|
284
|
+
```markdown
|
|
285
|
+
---
|
|
286
|
+
name: skill-name
|
|
287
|
+
description: One-line description — used for trigger matching
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
# Skill Title
|
|
291
|
+
|
|
292
|
+
Skill content with instructions for the LLM.
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
- `name`: unique identifier, used for `/skill-name` invocation
|
|
296
|
+
- `description`: used by Claude Code to auto-detect when to invoke the skill
|
|
297
|
+
|
|
298
|
+
### Skill Design Guidelines
|
|
299
|
+
|
|
300
|
+
1. **Clear triggers in description** — mention keywords users will say
|
|
301
|
+
2. **Step-by-step instructions** — the LLM follows the skill literally
|
|
302
|
+
3. **Include bash commands** — for the LLM to run
|
|
303
|
+
4. **Handle edge cases** — re-registration, cleanup, verification
|
|
304
|
+
5. **Keep it concise** — skills are loaded into context
|
|
305
|
+
|
|
306
|
+
## Development Workflow
|
|
307
|
+
|
|
308
|
+
### Testing a Hook
|
|
309
|
+
|
|
310
|
+
1. Write the hook in `.claude/settings.json`
|
|
311
|
+
2. Validate JSON: `jq -e '.hooks' .claude/settings.json`
|
|
312
|
+
3. Reload config: open `/hooks` in Claude Code or restart
|
|
313
|
+
4. Test with `--debug hooks` to see execution logs
|
|
314
|
+
5. For tool hooks: trigger the tool and verify the side effect
|
|
315
|
+
6. For lifecycle hooks (`SessionStart`, `SessionEnd`, `Stop`): restart Claude Code
|
|
316
|
+
|
|
317
|
+
### Troubleshooting
|
|
318
|
+
|
|
319
|
+
| Symptom | Likely cause |
|
|
320
|
+
|---------|-------------|
|
|
321
|
+
| Hook doesn't fire | Invalid JSON, wrong event name, matcher mismatch |
|
|
322
|
+
| All settings ignored | Syntax error in settings.json |
|
|
323
|
+
| Hook fires but command fails | Command not in PATH, permission denied, timeout |
|
|
324
|
+
| `Stop` fires unexpectedly | `Stop` triggers on clear/compact too — use `SessionEnd` |
|
|
325
|
+
| MCP tools not showing | Server not running, wrong URL in mcp.json, port conflict |
|