leos-agent 6.3.0 → 10.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.
Files changed (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +547 -24
  3. package/commands/handoff.md +11 -0
  4. package/commands/handon.md +10 -0
  5. package/commands/leo-doctor.md +22 -0
  6. package/commands/leo-install.md +9 -0
  7. package/commands/review-pr.md +9 -0
  8. package/commands-claude/watch-review.md +9 -0
  9. package/index.js +12 -0
  10. package/package.json +30 -18
  11. package/payload/codex-agents/leo-executor.toml +36 -0
  12. package/payload/codex-agents/leo-runner.toml +28 -0
  13. package/rules/preferences.md +97 -0
  14. package/scripts/check.py +244 -0
  15. package/scripts/ghreview.py +24 -6
  16. package/scripts/handoff.py +183 -0
  17. package/scripts/leo-install.py +509 -0
  18. package/scripts/measure_context.py +113 -0
  19. package/scripts/publish-npm.py +138 -0
  20. package/scripts/resolve_attach_target.py +45 -13
  21. package/scripts/watch_review.py +169 -0
  22. package/skills/doctor/SKILL.md +73 -96
  23. package/skills/doctor/agents/openai.yaml +5 -0
  24. package/skills/handoff/SKILL.md +99 -0
  25. package/skills/handoff/agents/openai.yaml +5 -0
  26. package/skills/handon/SKILL.md +61 -0
  27. package/skills/install/SKILL.md +79 -0
  28. package/skills/install/agents/openai.yaml +5 -0
  29. package/skills/review-pr/SKILL.md +59 -308
  30. package/skills/review-pr/reference/lenses.md +67 -0
  31. package/skills/review-pr/reference/procedure.md +348 -0
  32. package/skills-claude/attach-pr/SKILL.md +178 -0
  33. package/skills-claude/watch-review/SKILL.md +91 -0
  34. package/adapters/cursor/agents/executor.md +0 -17
  35. package/adapters/cursor/agents/expert.md +0 -70
  36. package/adapters/cursor/agents/explore.md +0 -16
  37. package/adapters/cursor/agents/implementer.md +0 -18
  38. package/adapters/cursor/agents/investigator.md +0 -18
  39. package/adapters/cursor/agents/planner.md +0 -28
  40. package/adapters/cursor/agents/reviewer.md +0 -34
  41. package/adapters/opencode/agents.json +0 -66
  42. package/adapters/opencode/plugin.js +0 -288
  43. package/config/models.json +0 -408
  44. package/hooks/bash-guard.py +0 -541
  45. package/hooks/cursor-guard.py +0 -84
  46. package/hooks/hooks-cursor.json +0 -11
  47. package/hooks/hooks.json +0 -20
  48. package/hooks/session-start.py +0 -148
  49. package/roles/executor.md +0 -15
  50. package/roles/expert.md +0 -67
  51. package/roles/explore.md +0 -13
  52. package/roles/implementer.md +0 -16
  53. package/roles/investigator.md +0 -15
  54. package/roles/planner.md +0 -25
  55. package/roles/reviewer.md +0 -31
  56. package/scripts/doctor.py +0 -284
  57. package/scripts/memory.py +0 -705
  58. package/scripts/render_adapters.py +0 -473
  59. package/scripts/setup.py +0 -161
  60. package/settings.json +0 -7
  61. package/skills/.gitkeep +0 -0
  62. package/skills/brainstorming/SKILL.md +0 -109
  63. package/skills/debugging/SKILL.md +0 -98
  64. package/skills/delegation/SKILL.md +0 -141
  65. package/skills/executing-plans/SKILL.md +0 -116
  66. package/skills/finishing-a-branch/SKILL.md +0 -123
  67. package/skills/freshness/SKILL.md +0 -118
  68. package/skills/memory/SKILL.md +0 -144
  69. package/skills/resolve-ticket/SKILL.md +0 -269
  70. package/skills/setup/SKILL.md +0 -85
  71. package/skills/test-first/SKILL.md +0 -90
  72. package/skills/using-leo/SKILL.md +0 -96
  73. package/skills/using-leo/references/claude-mapping.md +0 -32
  74. package/skills/using-leo/references/codex-mapping.md +0 -34
  75. package/skills/using-leo/references/cursor-mapping.md +0 -34
  76. package/skills/using-leo/references/hermes-mapping.md +0 -36
  77. package/skills/using-leo/references/opencode-mapping.md +0 -36
  78. package/skills/verification/SKILL.md +0 -109
  79. package/skills/visual-verification/SKILL.md +0 -114
  80. package/skills/watch-review/SKILL.md +0 -125
  81. package/skills/worktrees/SKILL.md +0 -129
  82. package/skills/writing-plans/SKILL.md +0 -96
  83. package/skills/writing-skills/SKILL.md +0 -134
  84. package/workflows/cost-tiered-fix.js +0 -259
@@ -1,408 +0,0 @@
1
- {
2
- "schemaVersion": 3,
3
- "capabilities": [
4
- {
5
- "key": "policyInjection",
6
- "label": "Policy injection",
7
- "modes": [
8
- "hook",
9
- "config-file",
10
- "tool-result",
11
- "none"
12
- ],
13
- "values": {
14
- "claude": {
15
- "mode": "hook",
16
- "note": "`SessionStart` hook, on every startup / resume / clear / compact"
17
- },
18
- "codex": {
19
- "mode": "hook",
20
- "note": "`SessionStart` hook, on every startup / resume / clear / compact"
21
- },
22
- "cursor": {
23
- "mode": "hook",
24
- "note": "`sessionStart` hook, every session"
25
- },
26
- "hermes": {
27
- "mode": "tool-result",
28
- "note": "rides the session's first tool result — so a session that runs no tool gets none; read `leo:using-leo` if the policy is not already in your context"
29
- },
30
- "opencode": {
31
- "mode": "config-file",
32
- "note": "`config.instructions`, with a system-prompt transform as backstop"
33
- }
34
- }
35
- },
36
- {
37
- "key": "subagentSpawn",
38
- "label": "Subagent spawn",
39
- "modes": [
40
- "native-agent",
41
- "generic-prompt",
42
- "delegate-task"
43
- ],
44
- "values": {
45
- "claude": {
46
- "mode": "native-agent",
47
- "note": "spawn the named native agent; its generated frontmatter pins the model"
48
- },
49
- "codex": {
50
- "mode": "generic-prompt",
51
- "note": "generic subagent with `roles/<role>.md` pasted in"
52
- },
53
- "cursor": {
54
- "mode": "native-agent",
55
- "note": "plugin agent from the generated Cursor agents directory"
56
- },
57
- "hermes": {
58
- "mode": "delegate-task",
59
- "note": "native `delegate_task`, canonical role prompt pasted in"
60
- },
61
- "opencode": {
62
- "mode": "native-agent",
63
- "note": "registered agent from `agents.json`, spawned via the task tool"
64
- }
65
- }
66
- },
67
- {
68
- "key": "perSpawnModel",
69
- "label": "Per-spawn model",
70
- "modes": [
71
- "yes",
72
- "no"
73
- ],
74
- "values": {
75
- "claude": {
76
- "mode": "yes",
77
- "note": "yes — the agent's own frontmatter"
78
- },
79
- "codex": {
80
- "mode": "yes",
81
- "note": "yes — pass `model` and `reasoning_effort` explicitly; a user or `AGENTS.md` override still wins"
82
- },
83
- "cursor": {
84
- "mode": "no",
85
- "note": "no — agents are `model: inherit`; select the tier's model in the UI before a homogeneous batch"
86
- },
87
- "hermes": {
88
- "mode": "no",
89
- "note": "no — one `delegation.model` for every child, so batch homogeneous Kimi or GLM work and switch it between batches"
90
- },
91
- "opencode": {
92
- "mode": "no",
93
- "note": "no — each agent always runs its registered model, so `reviewer` never downscales on a trivial diff"
94
- }
95
- }
96
- },
97
- {
98
- "key": "readOnlyRoles",
99
- "label": "Read-only roles",
100
- "modes": [
101
- "tools",
102
- "frontmatter",
103
- "permission",
104
- "prompt"
105
- ],
106
- "values": {
107
- "claude": {
108
- "mode": "tools",
109
- "note": "harness-enforced — the tool allowlist omits Write and Edit"
110
- },
111
- "codex": {
112
- "mode": "prompt",
113
- "note": "prompt only — a convention, never a guarantee; never route work here that depends on it"
114
- },
115
- "cursor": {
116
- "mode": "frontmatter",
117
- "note": "harness-enforced — generated `readonly: true`"
118
- },
119
- "hermes": {
120
- "mode": "prompt",
121
- "note": "prompt only — a convention, never a guarantee; never route work here that depends on it"
122
- },
123
- "opencode": {
124
- "mode": "permission",
125
- "note": "harness-enforced — generated `permission.edit: deny`, refused by OpenCode itself"
126
- }
127
- }
128
- },
129
- {
130
- "key": "worktrees",
131
- "label": "Worktrees",
132
- "modes": [
133
- "native-tool",
134
- "raw-git"
135
- ],
136
- "values": {
137
- "claude": {
138
- "mode": "native-tool",
139
- "note": "`EnterWorktree` / `ExitWorktree`, session-tracked and auto-cleaned; pair every Enter with an Exit"
140
- },
141
- "codex": {
142
- "mode": "raw-git",
143
- "note": "no native tool — raw `git worktree` at `.claude/worktrees/<name>`"
144
- },
145
- "cursor": {
146
- "mode": "raw-git",
147
- "note": "no native tool — raw `git worktree` at `.claude/worktrees/<name>`"
148
- },
149
- "hermes": {
150
- "mode": "raw-git",
151
- "note": "no native tool — raw `git worktree` at `.claude/worktrees/<name>`"
152
- },
153
- "opencode": {
154
- "mode": "raw-git",
155
- "note": "no native tool — raw `git worktree` at `.claude/worktrees/<name>`"
156
- }
157
- }
158
- },
159
- {
160
- "key": "workflowRunner",
161
- "label": "Workflow runner",
162
- "modes": [
163
- "workflow-tool",
164
- "none"
165
- ],
166
- "values": {
167
- "claude": {
168
- "mode": "workflow-tool",
169
- "note": "the Workflow tool runs `workflows/cost-tiered-fix.js` by `scriptPath`"
170
- },
171
- "codex": {
172
- "mode": "none",
173
- "note": "none — fan out by hand and keep the ledger in `<plugin-root>/scripts/state.py`"
174
- },
175
- "cursor": {
176
- "mode": "none",
177
- "note": "none — fan out by hand and keep the ledger in `<plugin-root>/scripts/state.py`"
178
- },
179
- "hermes": {
180
- "mode": "none",
181
- "note": "none — fan out by hand and keep the ledger in `<plugin-root>/scripts/state.py`"
182
- },
183
- "opencode": {
184
- "mode": "none",
185
- "note": "no runner — `cost-tiered-fix.js` ships in the package but nothing here executes it; fan out by hand and keep the ledger in `<plugin-root>/scripts/state.py`"
186
- }
187
- }
188
- },
189
- {
190
- "key": "followUp",
191
- "label": "Follow-up to a live agent",
192
- "modes": [
193
- "tool",
194
- "none",
195
- "unknown"
196
- ],
197
- "values": {
198
- "claude": {
199
- "mode": "tool",
200
- "note": "`SendMessage` to the same agent, which keeps the context it already built"
201
- },
202
- "codex": {
203
- "mode": "unknown",
204
- "note": "none established — re-dispatch cold with the context restated"
205
- },
206
- "cursor": {
207
- "mode": "unknown",
208
- "note": "none established — re-dispatch cold with the context restated"
209
- },
210
- "hermes": {
211
- "mode": "unknown",
212
- "note": "none established — re-dispatch cold with the context restated"
213
- },
214
- "opencode": {
215
- "mode": "unknown",
216
- "note": "none established — re-dispatch cold with the context restated"
217
- }
218
- }
219
- },
220
- {
221
- "key": "skillNames",
222
- "label": "Skill names",
223
- "modes": [
224
- "prefixed",
225
- "bare"
226
- ],
227
- "values": {
228
- "claude": {
229
- "mode": "prefixed",
230
- "note": "`leo:<name>`"
231
- },
232
- "codex": {
233
- "mode": "prefixed",
234
- "note": "`leo:<name>`"
235
- },
236
- "cursor": {
237
- "mode": "prefixed",
238
- "note": "`leo:<name>`"
239
- },
240
- "hermes": {
241
- "mode": "prefixed",
242
- "note": "`leo:<name>`"
243
- },
244
- "opencode": {
245
- "mode": "bare",
246
- "note": "bare `<name>` — read every `leo:<x>` above as `<x>`"
247
- }
248
- }
249
- }
250
- ],
251
- "skills": {
252
- "claudeOnly": [
253
- "attach-pr"
254
- ],
255
- "exclude": {
256
- "claude": [],
257
- "cursor": [],
258
- "codex": [],
259
- "hermes": [],
260
- "opencode": []
261
- },
262
- "reasons": {
263
- "attach-pr": "its entire product is a side effect in Claude Code Desktop's PR-card detector, which no other harness has — the same commands would run here, succeed, and produce nothing observable"
264
- }
265
- },
266
- "visual": {
267
- "claude": "the Browser pane (start or attach a preview, then take a screenshot), an attached Chrome, or the iOS Simulator control tool; some arrive only after a tool search, so an empty tool list is not proof of absence",
268
- "codex": "the bundled browser plugin, else computer-use, else Playwright driven from the shell",
269
- "cursor": "Browser Preview against a running dev server, else a Playwright server if one is registered",
270
- "hermes": "no built-in renderer; Playwright driven from the shell is the only rung, and only when the project already depends on it",
271
- "opencode": "no built-in renderer; a registered Playwright server or the Playwright CLI"
272
- },
273
- "memoryTarget": {
274
- "claude": "the per-user `CLAUDE.md` in the Claude config directory",
275
- "codex": "the per-user `AGENTS.md` in the Codex home directory",
276
- "cursor": "a generated rules file in the per-user Cursor rules directory",
277
- "hermes": "`SOUL.md` in the Hermes home, and only once `leo:setup enable hermes-memory` turns it on — that file is the agent's own identity prompt, so it is never written to unasked and never created",
278
- "opencode": "the per-user `AGENTS.md` in the OpenCode config directory"
279
- },
280
- "roles": {
281
- "expert": {
282
- "tier": "fable",
283
- "access": "read-only"
284
- },
285
- "planner": {
286
- "tier": "opus",
287
- "access": "read-only"
288
- },
289
- "investigator": {
290
- "tier": "opus",
291
- "access": "read-only"
292
- },
293
- "reviewer": {
294
- "tier": "opus",
295
- "access": "read-only"
296
- },
297
- "implementer": {
298
- "tier": "sonnet",
299
- "access": "write"
300
- },
301
- "executor": {
302
- "tier": "haiku",
303
- "access": "write"
304
- },
305
- "explore": {
306
- "tier": "haiku",
307
- "access": "read-only"
308
- }
309
- },
310
- "harnesses": {
311
- "claude": {
312
- "title": "Claude Code",
313
- "fable": {
314
- "model": "fable",
315
- "effort": "max"
316
- },
317
- "opus": {
318
- "model": "opus"
319
- },
320
- "sonnet": {
321
- "model": "sonnet"
322
- },
323
- "haiku": {
324
- "model": "haiku"
325
- }
326
- },
327
- "cursor": {
328
- "title": "Cursor",
329
- "fable": {
330
- "model": "GPT-5.6 Sol"
331
- },
332
- "opus": {
333
- "model": "Grok 4.5"
334
- },
335
- "sonnet": {
336
- "model": "Grok 4.5"
337
- },
338
- "haiku": {
339
- "model": "Composer 2.5"
340
- }
341
- },
342
- "codex": {
343
- "title": "Codex",
344
- "fable": {
345
- "model": "gpt-5.6-sol",
346
- "effort": "max"
347
- },
348
- "opus": {
349
- "model": "gpt-5.6-sol",
350
- "effort": "high"
351
- },
352
- "sonnet": {
353
- "model": "gpt-5.6-terra",
354
- "effort": "medium"
355
- },
356
- "haiku": {
357
- "model": "gpt-5.6-luna",
358
- "effort": "low"
359
- }
360
- },
361
- "hermes": {
362
- "title": "Hermes",
363
- "provider": "openrouter",
364
- "fable": {
365
- "model": "moonshotai/kimi-k3"
366
- },
367
- "opus": {
368
- "model": "moonshotai/kimi-k3"
369
- },
370
- "sonnet": {
371
- "model": "z-ai/glm-5.2"
372
- },
373
- "haiku": {
374
- "model": "z-ai/glm-5.2"
375
- }
376
- },
377
- "opencode": {
378
- "title": "OpenCode",
379
- "provider": "openrouter",
380
- "absentTiers": [
381
- "fable"
382
- ],
383
- "adapter": {
384
- "readOnlyPermission": {
385
- "edit": "deny"
386
- },
387
- "writeBashDeny": [
388
- "rm -rf ~",
389
- "rm -rf ~/*",
390
- "rm -rf /",
391
- "rm -rf /*"
392
- ]
393
- },
394
- "fable": {
395
- "model": "moonshotai/kimi-k3"
396
- },
397
- "opus": {
398
- "model": "moonshotai/kimi-k3"
399
- },
400
- "sonnet": {
401
- "model": "z-ai/glm-5.2"
402
- },
403
- "haiku": {
404
- "model": "z-ai/glm-5.2"
405
- }
406
- }
407
- }
408
- }