agents-handoff 0.0.0-stage → 2.0.2
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/CHANGELOG.md +150 -0
- package/LICENSE +21 -0
- package/README.md +110 -2
- package/SKILL.md +147 -0
- package/capability-registry.json +27 -0
- package/docs/ARCHITECTURE.md +164 -0
- package/docs/CHANGELOG.md +151 -0
- package/docs/CLI.md +196 -0
- package/docs/COMPATIBILITY.md +124 -0
- package/docs/CONTRIBUTING.md +134 -0
- package/docs/FORMAT.md +157 -0
- package/docs/INSTALL.md +179 -0
- package/docs/INTEGRATION.md +188 -0
- package/docs/LEVEL4.md +202 -0
- package/docs/LEVEL5.md +96 -0
- package/docs/PERMISSIONS.md +145 -0
- package/docs/PROVENANCE.md +83 -0
- package/docs/SECURITY.md +93 -0
- package/docs/SESSIONS.md +66 -0
- package/docs/TROUBLESHOOTING.md +158 -0
- package/docs/UNINSTALL.md +122 -0
- package/docs/UPGRADE.md +139 -0
- package/docs/_config.yml +16 -0
- package/docs/_data/nav.yml +36 -0
- package/docs/_layouts/default.html +31 -0
- package/docs/assets/style.css +88 -0
- package/docs/index.md +83 -0
- package/handoff.config.example.json +35 -0
- package/handoff.config.schema.json +117 -0
- package/install/CHANGELOG.md +48 -0
- package/install/README.md +76 -0
- package/install/install.mjs +856 -0
- package/install/package.json +39 -0
- package/package.json +66 -4
- package/permission-policy.json +33 -0
- package/refs/ADAPTERS.md +33 -0
- package/refs/bootstrap.md +59 -0
- package/refs/brief-checklist.md +79 -0
- package/refs/handbook.md +58 -0
- package/refs/protocol.md +117 -0
- package/refs/roles.md +75 -0
- package/refs/validator.md +73 -0
- package/schemas/handoff.schema.json +275 -0
- package/skill.json +147 -0
- package/templates/HANDOFF.llm.schema.json +144 -0
- package/templates/HANDOFF.template.md +40 -0
- package/tests/acceptance/acceptance.yaml +209 -0
- package/tests/fixtures/minimal-transcript.jsonl +2 -0
- package/tools/agent-handoff.mjs +410 -0
- package/tools/capability-registry.mjs +120 -0
- package/tools/handoff.mjs +398 -0
- package/tools/handoff.test.mjs +465 -0
- package/tools/lib/handoff-root.mjs +161 -0
- package/tools/runtime-engine.mjs +330 -0
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "Agent-Handoff",
|
|
4
|
+
"description": "Portable execution state for agent-handoff — canonical handoff schema v1.0",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": [
|
|
7
|
+
"schema_version",
|
|
8
|
+
"handoff_id",
|
|
9
|
+
"mission_id",
|
|
10
|
+
"task_id",
|
|
11
|
+
"created_at",
|
|
12
|
+
"updated_at",
|
|
13
|
+
"source",
|
|
14
|
+
"state",
|
|
15
|
+
"next_action"
|
|
16
|
+
],
|
|
17
|
+
"properties": {
|
|
18
|
+
"schema_version": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"pattern": "^1\\.0$",
|
|
21
|
+
"description": "Schema version for compatibility checking"
|
|
22
|
+
},
|
|
23
|
+
"handoff_id": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"minLength": 1,
|
|
26
|
+
"description": "Unique handoff identifier"
|
|
27
|
+
},
|
|
28
|
+
"mission_id": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"minLength": 1,
|
|
31
|
+
"description": "Mission this handoff belongs to"
|
|
32
|
+
},
|
|
33
|
+
"task_id": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"minLength": 1,
|
|
36
|
+
"description": "Task this handoff is for"
|
|
37
|
+
},
|
|
38
|
+
"created_at": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"format": "date-time",
|
|
41
|
+
"description": "ISO 8601 creation timestamp"
|
|
42
|
+
},
|
|
43
|
+
"updated_at": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"format": "date-time",
|
|
46
|
+
"description": "ISO 8601 last update timestamp"
|
|
47
|
+
},
|
|
48
|
+
"source": {
|
|
49
|
+
"type": "object",
|
|
50
|
+
"required": ["agent", "runtime", "version"],
|
|
51
|
+
"properties": {
|
|
52
|
+
"agent": { "type": "string" },
|
|
53
|
+
"runtime": { "type": "string" },
|
|
54
|
+
"version": { "type": "string" }
|
|
55
|
+
},
|
|
56
|
+
"description": "Source agent/runtime that created this handoff"
|
|
57
|
+
},
|
|
58
|
+
"target": {
|
|
59
|
+
"type": "object",
|
|
60
|
+
"properties": {
|
|
61
|
+
"agent": { "type": "string" },
|
|
62
|
+
"runtime": { "type": "string" },
|
|
63
|
+
"version": { "type": "string" }
|
|
64
|
+
},
|
|
65
|
+
"description": "Target agent/runtime for resume"
|
|
66
|
+
},
|
|
67
|
+
"input_contract": {
|
|
68
|
+
"type": "object",
|
|
69
|
+
"description": "Input contract for the session that produced this handoff"
|
|
70
|
+
},
|
|
71
|
+
"state": {
|
|
72
|
+
"type": "object",
|
|
73
|
+
"required": ["status", "current_action"],
|
|
74
|
+
"properties": {
|
|
75
|
+
"status": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"enum": ["PENDING", "ACTIVE", "COMPLETED", "SATISFIED", "NOT_APPLICABLE", "BLOCKED", "FAILED", "IN_PROGRESS"]
|
|
78
|
+
},
|
|
79
|
+
"current_action": { "type": "string" },
|
|
80
|
+
"completed_work": {
|
|
81
|
+
"type": "array",
|
|
82
|
+
"items": { "type": "string" }
|
|
83
|
+
},
|
|
84
|
+
"pending_work": {
|
|
85
|
+
"type": "array",
|
|
86
|
+
"items": { "type": "string" }
|
|
87
|
+
},
|
|
88
|
+
"blockers": {
|
|
89
|
+
"type": "array",
|
|
90
|
+
"items": { "type": "object" }
|
|
91
|
+
},
|
|
92
|
+
"unknowns": {
|
|
93
|
+
"type": "array",
|
|
94
|
+
"items": { "type": "object" }
|
|
95
|
+
},
|
|
96
|
+
"assumptions": {
|
|
97
|
+
"type": "array",
|
|
98
|
+
"items": { "type": "object" }
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"execution": {
|
|
103
|
+
"type": "object",
|
|
104
|
+
"properties": {
|
|
105
|
+
"last_operation": { "type": "string" },
|
|
106
|
+
"result": { "type": "string" },
|
|
107
|
+
"exit_code": { "type": ["integer", "null"] },
|
|
108
|
+
"changed_files": {
|
|
109
|
+
"type": "array",
|
|
110
|
+
"items": { "type": "string" }
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
"capabilities": {
|
|
115
|
+
"type": "object",
|
|
116
|
+
"properties": {
|
|
117
|
+
"required": {
|
|
118
|
+
"type": "array",
|
|
119
|
+
"items": { "$ref": "#/definitions/capability" }
|
|
120
|
+
},
|
|
121
|
+
"selected": {
|
|
122
|
+
"type": "array",
|
|
123
|
+
"items": { "$ref": "#/definitions/capability" }
|
|
124
|
+
},
|
|
125
|
+
"unavailable": {
|
|
126
|
+
"type": "array",
|
|
127
|
+
"items": { "$ref": "#/definitions/capability" }
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
"permissions": {
|
|
132
|
+
"type": "object",
|
|
133
|
+
"properties": {
|
|
134
|
+
"current": {
|
|
135
|
+
"type": "array",
|
|
136
|
+
"items": { "type": "string" }
|
|
137
|
+
},
|
|
138
|
+
"approvals": {
|
|
139
|
+
"type": "array",
|
|
140
|
+
"items": { "type": "object" }
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
"checkpoint": {
|
|
145
|
+
"type": "object",
|
|
146
|
+
"required": ["checkpoint_id", "state_hash", "created_at"],
|
|
147
|
+
"properties": {
|
|
148
|
+
"checkpoint_id": { "type": "string" },
|
|
149
|
+
"predecessor_checkpoint": { "type": "string" },
|
|
150
|
+
"state_summary": { "type": "string" },
|
|
151
|
+
"state_hash": { "type": "string" },
|
|
152
|
+
"created_at": { "type": "string", "format": "date-time" },
|
|
153
|
+
"completed_work": { "type": "array", "items": { "type": "string" } },
|
|
154
|
+
"verified_work": { "type": "array", "items": { "type": "string" } },
|
|
155
|
+
"pending_work": { "type": "array", "items": { "type": "string" } },
|
|
156
|
+
"artifact_manifest": { "type": "array", "items": { "type": "object" } },
|
|
157
|
+
"environment_fingerprint": { "type": "string" },
|
|
158
|
+
"capability_requirements": { "type": "array", "items": { "type": "string" } },
|
|
159
|
+
"permission_state": { "type": "array", "items": { "type": "string" } },
|
|
160
|
+
"verification_results": { "type": "array", "items": { "type": "object" } },
|
|
161
|
+
"next_action": { "type": "string" },
|
|
162
|
+
"recovery_notes": { "type": "string" }
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
"artifacts": {
|
|
166
|
+
"type": "object",
|
|
167
|
+
"properties": {
|
|
168
|
+
"manifest": {
|
|
169
|
+
"type": "array",
|
|
170
|
+
"items": {
|
|
171
|
+
"type": "object",
|
|
172
|
+
"required": ["path", "purpose"],
|
|
173
|
+
"properties": {
|
|
174
|
+
"path": { "type": "string" },
|
|
175
|
+
"purpose": { "type": "string" },
|
|
176
|
+
"canonical": { "type": "boolean" },
|
|
177
|
+
"generated": { "type": "boolean" },
|
|
178
|
+
"source_of_truth": { "type": "string" }
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
"evidence": {
|
|
185
|
+
"type": "object",
|
|
186
|
+
"properties": {
|
|
187
|
+
"verified": {
|
|
188
|
+
"type": "array",
|
|
189
|
+
"items": { "type": "object" }
|
|
190
|
+
},
|
|
191
|
+
"observed": {
|
|
192
|
+
"type": "array",
|
|
193
|
+
"items": { "type": "object" }
|
|
194
|
+
},
|
|
195
|
+
"unresolved": {
|
|
196
|
+
"type": "array",
|
|
197
|
+
"items": { "type": "object" }
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
"decisions": {
|
|
202
|
+
"type": "array",
|
|
203
|
+
"items": {
|
|
204
|
+
"type": "object",
|
|
205
|
+
"required": ["decision", "reason"],
|
|
206
|
+
"properties": {
|
|
207
|
+
"decision": { "type": "string" },
|
|
208
|
+
"reason": { "type": "string" },
|
|
209
|
+
"timestamp": { "type": "string" }
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
"errors": {
|
|
214
|
+
"type": "array",
|
|
215
|
+
"items": {
|
|
216
|
+
"type": "object",
|
|
217
|
+
"required": ["error", "timestamp"],
|
|
218
|
+
"properties": {
|
|
219
|
+
"error": { "type": "string" },
|
|
220
|
+
"timestamp": { "type": "string" },
|
|
221
|
+
"resolved": { "type": "boolean" }
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
"next_action": {
|
|
226
|
+
"type": "object",
|
|
227
|
+
"required": ["objective"],
|
|
228
|
+
"properties": {
|
|
229
|
+
"objective": { "type": "string" },
|
|
230
|
+
"reason": { "type": "string" },
|
|
231
|
+
"preconditions": { "type": "array", "items": { "type": "string" } },
|
|
232
|
+
"required_capabilities": { "type": "array", "items": { "type": "string" } },
|
|
233
|
+
"required_permissions": { "type": "array", "items": { "type": "string" } },
|
|
234
|
+
"verification": { "type": "array", "items": { "type": "string" } }
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
"definitions": {
|
|
239
|
+
"capability": {
|
|
240
|
+
"type": "object",
|
|
241
|
+
"required": ["id", "name", "type", "provider"],
|
|
242
|
+
"properties": {
|
|
243
|
+
"id": { "type": "string" },
|
|
244
|
+
"name": { "type": "string" },
|
|
245
|
+
"type": { "type": "string" },
|
|
246
|
+
"provider": { "type": "string" },
|
|
247
|
+
"purpose": { "type": "string" },
|
|
248
|
+
"inputs": { "type": "array", "items": { "type": "string" } },
|
|
249
|
+
"outputs": { "type": "array", "items": { "type": "string" } },
|
|
250
|
+
"prerequisites": { "type": "array", "items": { "type": "string" } },
|
|
251
|
+
"dependencies": { "type": "array", "items": { "type": "string" } },
|
|
252
|
+
"supports": { "type": "array", "items": { "type": "string" } },
|
|
253
|
+
"does_not_support": { "type": "array", "items": { "type": "string" } },
|
|
254
|
+
"side_effects": { "type": "array", "items": { "type": "string" } },
|
|
255
|
+
"risk_class": { "type": "string", "enum": ["R0", "R1", "R2", "R3", "R4"] },
|
|
256
|
+
"permission_level": { "type": "string" },
|
|
257
|
+
"scope": { "type": "array", "items": { "type": "string" } },
|
|
258
|
+
"targets": { "type": "array", "items": { "type": "string" } },
|
|
259
|
+
"reversibility": { "type": "string" },
|
|
260
|
+
"availability": { "type": "string", "enum": ["available", "unavailable", "degraded"] },
|
|
261
|
+
"health": { "type": "string", "enum": ["healthy", "unhealthy", "unknown"] },
|
|
262
|
+
"version": { "type": "string" },
|
|
263
|
+
"platform": { "type": "array", "items": { "type": "string" } },
|
|
264
|
+
"architecture": { "type": "array", "items": { "type": "string" } },
|
|
265
|
+
"cost": { "type": "string" },
|
|
266
|
+
"latency": { "type": "string" },
|
|
267
|
+
"failure_modes": { "type": "array", "items": { "type": "string" } },
|
|
268
|
+
"verification_method": { "type": "string" },
|
|
269
|
+
"provenance": { "type": "string" },
|
|
270
|
+
"trust": { "type": "string", "enum": ["BUILT_IN", "PROJECT", "LOCAL", "USER_AUTHORIZED_EXTERNAL", "EXTERNAL", "UNTRUSTED"] }
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
"additionalProperties": false
|
|
275
|
+
}
|
package/skill.json
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "agent-handoff",
|
|
3
|
+
"version": "2.0.2",
|
|
4
|
+
"description": "Write, verify, and hand off complete AI working sessions across any harness (Claude Code, Codex, DeepSeek Harness, plain JSONL or text logs). Cross-harness session capture + verified continuation.",
|
|
5
|
+
"domain": "orchestration",
|
|
6
|
+
"installer": {
|
|
7
|
+
"type": "npx",
|
|
8
|
+
"package": "agents-handoff",
|
|
9
|
+
"packageVersion": "2.0.2",
|
|
10
|
+
"repository": "https://github.com/Alot1z/agent-handoff",
|
|
11
|
+
"installCommand": "npx agents-handoff"
|
|
12
|
+
},
|
|
13
|
+
"locations": {
|
|
14
|
+
"source": "skills/agent-handoff/",
|
|
15
|
+
"global": {
|
|
16
|
+
"windows": "<store>/<account-id>/<profile-id>/agent-handoff/ (resolved, see docs/INSTALL.md)",
|
|
17
|
+
"posix": "~/.config/<client>/account-skills/<account-id>/<profile-id>/agent-handoff/ (resolved)"
|
|
18
|
+
},
|
|
19
|
+
"local": "./local/skills/agent-handoff/",
|
|
20
|
+
"project": "./skills/agent-handoff/"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"node": ">=18.0.0",
|
|
24
|
+
"external": []
|
|
25
|
+
},
|
|
26
|
+
"commands": {
|
|
27
|
+
"build": "node tools/handoff.mjs build --source <input> [--session id] [--harness name] [--model name] [--project name] [--objective text]",
|
|
28
|
+
"build-alias": "node tools/handoff.mjs --handoff --source <input>",
|
|
29
|
+
"list": "node tools/handoff.mjs list [project-or-prefix]",
|
|
30
|
+
"show": "node tools/handoff.mjs show <id-prefix>",
|
|
31
|
+
"verify": "node tools/handoff.mjs verify <id-prefix>",
|
|
32
|
+
"rename": "node tools/handoff.mjs rename <id-prefix> <new-project>",
|
|
33
|
+
"retitle": "node tools/handoff.mjs retitle <id-prefix> <new-name>"
|
|
34
|
+
},
|
|
35
|
+
"l4": {
|
|
36
|
+
"runtime": "node tools/agent-handoff.mjs <verb> [args]",
|
|
37
|
+
"verbs": [
|
|
38
|
+
"auto",
|
|
39
|
+
"verify-gate",
|
|
40
|
+
"promote",
|
|
41
|
+
"merge",
|
|
42
|
+
"self-improve",
|
|
43
|
+
"index",
|
|
44
|
+
"dispatch"
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
"handoff": {
|
|
48
|
+
"default_dir": "handoffs/",
|
|
49
|
+
"config_file": "handoff.config.json",
|
|
50
|
+
"environment": {
|
|
51
|
+
"HANDOFFS_ROOT": "Override default handoffs location"
|
|
52
|
+
},
|
|
53
|
+
"max_brief_tokens": 30000,
|
|
54
|
+
"schema_version": "2.0.0"
|
|
55
|
+
},
|
|
56
|
+
"update": {
|
|
57
|
+
"check_url": "https://github.com/Alot1z/agent-handoff/releases/latest",
|
|
58
|
+
"auto_check": true,
|
|
59
|
+
"installer": "npx agents-handoff --update"
|
|
60
|
+
},
|
|
61
|
+
"secrets": {
|
|
62
|
+
"required": false,
|
|
63
|
+
"warning": "Never commit secrets. Use environment variables or local secrets file.",
|
|
64
|
+
"envVars": []
|
|
65
|
+
},
|
|
66
|
+
"files": {
|
|
67
|
+
"source": [
|
|
68
|
+
"SKILL.md",
|
|
69
|
+
"README.md",
|
|
70
|
+
"tools/handoff.mjs",
|
|
71
|
+
"tools/agent-handoff.mjs",
|
|
72
|
+
"tools/handoff.test.mjs",
|
|
73
|
+
"tools/capability-registry.mjs",
|
|
74
|
+
"tools/runtime-engine.mjs",
|
|
75
|
+
"tools/lib/handoff-root.mjs",
|
|
76
|
+
"schemas/handoff.schema.json",
|
|
77
|
+
"templates/*.md",
|
|
78
|
+
"templates/*.json",
|
|
79
|
+
"refs/*.md",
|
|
80
|
+
"install/",
|
|
81
|
+
"tests/"
|
|
82
|
+
],
|
|
83
|
+
"published": [
|
|
84
|
+
"SKILL.md",
|
|
85
|
+
"README.md",
|
|
86
|
+
"LICENSE",
|
|
87
|
+
"package.json",
|
|
88
|
+
"skill.json",
|
|
89
|
+
"capability-registry.json",
|
|
90
|
+
"permission-policy.json",
|
|
91
|
+
"handoff.config.schema.json",
|
|
92
|
+
"handoff.config.example.json",
|
|
93
|
+
"tools/handoff.mjs",
|
|
94
|
+
"tools/agent-handoff.mjs",
|
|
95
|
+
"tools/handoff.test.mjs",
|
|
96
|
+
"tools/capability-registry.mjs",
|
|
97
|
+
"tools/runtime-engine.mjs",
|
|
98
|
+
"tools/lib/handoff-root.mjs",
|
|
99
|
+
"schemas/handoff.schema.json",
|
|
100
|
+
"templates/HANDOFF.template.md",
|
|
101
|
+
"templates/HANDOFF.llm.schema.json",
|
|
102
|
+
"tests/acceptance/acceptance.yaml",
|
|
103
|
+
"tests/fixtures/minimal-transcript.jsonl",
|
|
104
|
+
"refs/ADAPTERS.md",
|
|
105
|
+
"refs/handbook.md",
|
|
106
|
+
"refs/protocol.md",
|
|
107
|
+
"refs/roles.md",
|
|
108
|
+
"refs/validator.md",
|
|
109
|
+
"refs/brief-checklist.md",
|
|
110
|
+
"refs/bootstrap.md",
|
|
111
|
+
"docs/index.md",
|
|
112
|
+
"docs/INSTALL.md",
|
|
113
|
+
"docs/UPGRADE.md",
|
|
114
|
+
"docs/UNINSTALL.md",
|
|
115
|
+
"docs/INTEGRATION.md",
|
|
116
|
+
"docs/LEVEL4.md",
|
|
117
|
+
"docs/LEVEL5.md",
|
|
118
|
+
"docs/FORMAT.md",
|
|
119
|
+
"docs/PERMISSIONS.md",
|
|
120
|
+
"docs/SECURITY.md",
|
|
121
|
+
"docs/COMPATIBILITY.md",
|
|
122
|
+
"docs/PROVENANCE.md",
|
|
123
|
+
"docs/CONTRIBUTING.md",
|
|
124
|
+
"install/install.mjs",
|
|
125
|
+
"install/README.md",
|
|
126
|
+
"install/package.json",
|
|
127
|
+
"CHANGELOG.md",
|
|
128
|
+
"docs/ARCHITECTURE.md",
|
|
129
|
+
"docs/CLI.md",
|
|
130
|
+
"docs/TROUBLESHOOTING.md",
|
|
131
|
+
"docs/CHANGELOG.md",
|
|
132
|
+
"install/CHANGELOG.md"
|
|
133
|
+
],
|
|
134
|
+
"local_only": [
|
|
135
|
+
"local/",
|
|
136
|
+
"projects/",
|
|
137
|
+
"links/",
|
|
138
|
+
"tasks/",
|
|
139
|
+
"private research corpus and internal design notes",
|
|
140
|
+
"docs/ARCHITECTURE-UPDATES.md",
|
|
141
|
+
".env",
|
|
142
|
+
"*.key",
|
|
143
|
+
"*.pem",
|
|
144
|
+
"secrets/"
|
|
145
|
+
]
|
|
146
|
+
}
|
|
147
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"title": "AgentSessionHandoff v1",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"required": [
|
|
6
|
+
"schema_version",
|
|
7
|
+
"session",
|
|
8
|
+
"generated_at",
|
|
9
|
+
"counts",
|
|
10
|
+
"timeline",
|
|
11
|
+
"provenance"
|
|
12
|
+
],
|
|
13
|
+
"properties": {
|
|
14
|
+
"schema_version": {
|
|
15
|
+
"type": "string", "description": "2.0.0 or 2.0.0-summary"
|
|
16
|
+
},
|
|
17
|
+
"session": {
|
|
18
|
+
"type": "object",
|
|
19
|
+
"required": [
|
|
20
|
+
"id",
|
|
21
|
+
"harness"
|
|
22
|
+
],
|
|
23
|
+
"properties": {
|
|
24
|
+
"id": {
|
|
25
|
+
"type": "string"
|
|
26
|
+
},
|
|
27
|
+
"harness": {
|
|
28
|
+
"type": "string"
|
|
29
|
+
},
|
|
30
|
+
"model": {
|
|
31
|
+
"type": "string"
|
|
32
|
+
},
|
|
33
|
+
"thread": {
|
|
34
|
+
"type": "string"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"generated_at": {
|
|
39
|
+
"type": "string"
|
|
40
|
+
},
|
|
41
|
+
"objective": {
|
|
42
|
+
"type": "string"
|
|
43
|
+
},
|
|
44
|
+
"state_now": {
|
|
45
|
+
"type": "string"
|
|
46
|
+
},
|
|
47
|
+
"open_loops": {
|
|
48
|
+
"type": "array",
|
|
49
|
+
"items": {
|
|
50
|
+
"type": "string"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"evidence_class": {
|
|
54
|
+
"enum": [
|
|
55
|
+
"OBSERVED",
|
|
56
|
+
"VERIFIED",
|
|
57
|
+
"DERIVED"
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"counts": {
|
|
61
|
+
"type": "object",
|
|
62
|
+
"properties": {
|
|
63
|
+
"USER": {
|
|
64
|
+
"type": "integer"
|
|
65
|
+
},
|
|
66
|
+
"AGENT": {
|
|
67
|
+
"type": "integer"
|
|
68
|
+
},
|
|
69
|
+
"THOUGHT": {
|
|
70
|
+
"type": "integer"
|
|
71
|
+
},
|
|
72
|
+
"TOOL": {
|
|
73
|
+
"type": "integer"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"timeline": {
|
|
78
|
+
"type": "array",
|
|
79
|
+
"items": {
|
|
80
|
+
"type": "object",
|
|
81
|
+
"required": [
|
|
82
|
+
"seq",
|
|
83
|
+
"class",
|
|
84
|
+
"text"
|
|
85
|
+
],
|
|
86
|
+
"properties": {
|
|
87
|
+
"seq": {
|
|
88
|
+
"type": "integer"
|
|
89
|
+
},
|
|
90
|
+
"ts": {
|
|
91
|
+
"type": [
|
|
92
|
+
"string",
|
|
93
|
+
"integer"
|
|
94
|
+
]
|
|
95
|
+
},
|
|
96
|
+
"class": {
|
|
97
|
+
"enum": [
|
|
98
|
+
"USER",
|
|
99
|
+
"AGENT",
|
|
100
|
+
"THOUGHT",
|
|
101
|
+
"TOOL",
|
|
102
|
+
"OTHER"
|
|
103
|
+
],
|
|
104
|
+
"description": "OTHER = kept for raw fidelity (system/meta turns), omitted from human render tables"
|
|
105
|
+
},
|
|
106
|
+
"text": {
|
|
107
|
+
"type": "string"
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
"tool_calls": {
|
|
113
|
+
"type": "array"
|
|
114
|
+
},
|
|
115
|
+
"provenance": {
|
|
116
|
+
"type": "object",
|
|
117
|
+
"required": [
|
|
118
|
+
"sources",
|
|
119
|
+
"raw_sha256",
|
|
120
|
+
"total_turns"
|
|
121
|
+
],
|
|
122
|
+
"properties": {
|
|
123
|
+
"sources": {
|
|
124
|
+
"type": "array",
|
|
125
|
+
"items": {
|
|
126
|
+
"type": "string"
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
"raw_sha256": {
|
|
130
|
+
"type": "string"
|
|
131
|
+
},
|
|
132
|
+
"manifest_sha256": {
|
|
133
|
+
"type": "string"
|
|
134
|
+
},
|
|
135
|
+
"watermark": {
|
|
136
|
+
"type": "integer"
|
|
137
|
+
},
|
|
138
|
+
"total_turns": {
|
|
139
|
+
"type": "integer"
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Handoff: <SESSION-ID>
|
|
2
|
+
|
|
3
|
+
**Harness:** <claude-code|codex|dsh|ci|generic> | **Model:** <name>
|
|
4
|
+
**Updated:** <ISO> | **Turns:** N | **Watermark:** seq <= N | **Revision:** R
|
|
5
|
+
|
|
6
|
+
## Objective (verbatim head)
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
<first USER (else AGENT) turn, <=400 chars, never paraphrased>
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## State right now (verbatim tail)
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
<last AGENT (else USER) turn tail, <=1200 chars>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Open loops / next steps
|
|
19
|
+
- <lines matching next step|todo|blocked|open loop|remaining>
|
|
20
|
+
|
|
21
|
+
## Timeline (recent turns)
|
|
22
|
+
|
|
23
|
+
| seq | class | text (head 140) |
|
|
24
|
+
|---:|---|---|
|
|
25
|
+
| 0 | USER | ... |
|
|
26
|
+
|
|
27
|
+
<!-- classes: USER · AGENT · THOUGHT (reasoning) · TOOL (tool_use/result) · OTHER (raw-fidelity meta, omitted from render) -->
|
|
28
|
+
|
|
29
|
+
## Tool calls (full)
|
|
30
|
+
- [seq] ts: excerpt <=500 chars
|
|
31
|
+
|
|
32
|
+
## Provenance
|
|
33
|
+
- sources: <original store paths>
|
|
34
|
+
- raw sha256: <hash of exact ingested bytes>
|
|
35
|
+
- manifest sha256: <self-hash of manifest minus this field>
|
|
36
|
+
- incremental: revisions=N (update-not-recreate; watermark skips emitted turns)
|
|
37
|
+
|
|
38
|
+
!! Laws: RAW IS NEVER ALTERED — handoffs RENDER from canonical/vault data · objectives verbatim ·
|
|
39
|
+
re-run = merge not duplicate (watermark) · every artifact carries sha256 provenance · works on ANY
|
|
40
|
+
harness that emits JSONL or plain text (refs/ADAPTERS.md).
|