@astrosheep/keiyaku 2.9.8 → 2.9.10

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 (230) hide show
  1. package/README.md +50 -182
  2. package/build/.tsbuildinfo +1 -1
  3. package/build/agents/harness/control-types.js +18 -1
  4. package/build/agents/harness/index.js +2 -0
  5. package/build/agents/harness/outcome-error.js +81 -0
  6. package/build/agents/harness/projection.js +10 -7
  7. package/build/agents/harness/router.js +5 -1
  8. package/build/agents/providers/claude-agent-sdk/adapter.js +18 -4
  9. package/build/agents/providers/claude-agent-sdk/registration.js +11 -1
  10. package/build/agents/providers/claude-agent-sdk/session.js +19 -5
  11. package/build/agents/providers/codex-app-server/adapter.js +11 -6
  12. package/build/agents/providers/codex-app-server/events.js +67 -6
  13. package/build/agents/providers/codex-app-server/registration.js +11 -1
  14. package/build/agents/providers/opencode-sdk/adapter.js +8 -1
  15. package/build/agents/providers/opencode-sdk/events.js +24 -2
  16. package/build/agents/providers/opencode-sdk/registration.js +11 -1
  17. package/build/agents/providers/pi/checkpoint.js +9 -1
  18. package/build/agents/providers/pi/events.js +2 -0
  19. package/build/agents/providers/pi/registration.js +14 -1
  20. package/build/cli/commands/akuma/akuma/handler.js +1 -1
  21. package/build/cli/commands/akuma/akuma/meta.js +3 -3
  22. package/build/cli/commands/akuma/catalog.js +2 -2
  23. package/build/cli/commands/akuma/{view → show}/handler.js +5 -5
  24. package/build/cli/commands/akuma/{view → show}/meta.js +3 -3
  25. package/build/cli/commands/akuma.js +1 -1
  26. package/build/cli/commands/contract/amend/handler.js +5 -4
  27. package/build/cli/commands/contract/arc/handler.js +5 -4
  28. package/build/cli/commands/contract/audit/handler.js +2 -2
  29. package/build/cli/commands/contract/bind/handler.js +12 -3
  30. package/build/cli/commands/contract/bind/meta.js +45 -15
  31. package/build/cli/commands/contract/forfeit/handler.js +9 -5
  32. package/build/cli/commands/contract/log/handler.js +2 -2
  33. package/build/cli/commands/contract/petition/handler.js +34 -7
  34. package/build/cli/commands/contract/renew/handler.js +7 -7
  35. package/build/cli/commands/contract/renew/meta.js +3 -3
  36. package/build/cli/commands/metadata.js +10 -6
  37. package/build/cli/commands/projection/call/meta.js +1 -1
  38. package/build/cli/commands/projection/catalog.js +2 -0
  39. package/build/cli/commands/projection/history/handler.js +21 -0
  40. package/build/cli/commands/projection/history/meta.js +9 -0
  41. package/build/cli/commands/projection/shared.js +3 -4
  42. package/build/cli/commands/projection/status/handler.js +3 -3
  43. package/build/cli/commands/projection/wait/handler.js +20 -11
  44. package/build/cli/commands/task/add/handler.js +14 -5
  45. package/build/cli/commands/task/add/meta.js +2 -2
  46. package/build/cli/commands/task/catalog.js +4 -0
  47. package/build/cli/commands/task/done/handler.js +1 -4
  48. package/build/cli/commands/task/done/meta.js +1 -1
  49. package/build/cli/commands/task/drop/meta.js +1 -1
  50. package/build/cli/commands/task/hold/handler.js +3 -0
  51. package/build/cli/commands/task/hold/meta.js +8 -0
  52. package/build/cli/commands/task/log/handler.js +1 -1
  53. package/build/cli/commands/task/log/meta.js +2 -2
  54. package/build/cli/commands/task/resume/handler.js +3 -0
  55. package/build/cli/commands/task/resume/meta.js +8 -0
  56. package/build/cli/commands/task/shared.js +39 -14
  57. package/build/cli/commands/task/show/handler.js +1 -1
  58. package/build/cli/commands/task/show/meta.js +1 -1
  59. package/build/cli/commands/task/start/meta.js +1 -1
  60. package/build/cli/commands/task/stop/handler.js +1 -4
  61. package/build/cli/commands/task/stop/meta.js +1 -1
  62. package/build/cli/commands/task/update/handler.js +11 -3
  63. package/build/cli/commands/task/update/meta.js +3 -3
  64. package/build/cli/completion.js +3 -2
  65. package/build/cli/flags.js +51 -14
  66. package/build/cli/help.js +4 -1
  67. package/build/cli/index.js +40 -25
  68. package/build/cli/parse-flags.js +40 -7
  69. package/build/cli/parse-metadata.js +5 -2
  70. package/build/cli/parse-selectors.js +2 -3
  71. package/build/cli/parse.js +40 -6
  72. package/build/cli/projection-address.js +12 -10
  73. package/build/cli/render/amendment-warning.js +8 -0
  74. package/build/cli/render/arc.js +6 -2
  75. package/build/cli/render/audit.js +400 -81
  76. package/build/cli/render/kanshi.js +242 -79
  77. package/build/cli/render/lifecycle.js +56 -0
  78. package/build/cli/render/misc.js +24 -28
  79. package/build/cli/render/petition.js +5 -0
  80. package/build/cli/render/projection-activity.js +65 -29
  81. package/build/cli/render/projection-history.js +64 -0
  82. package/build/cli/render/shared.js +23 -9
  83. package/build/cli/render/status.js +13 -35
  84. package/build/cli/render/task.js +51 -26
  85. package/build/cli/render/terminal-failure.js +3 -1
  86. package/build/cli/render/wait.js +45 -69
  87. package/build/cli/subagent-guard.js +1 -1
  88. package/build/cli/types.js +1 -1
  89. package/build/config/env-keys.js +3 -1
  90. package/build/config/env.js +24 -1
  91. package/build/config/settings/schema.js +3 -1
  92. package/build/core/address-carrier.js +89 -0
  93. package/build/core/addressing.js +255 -196
  94. package/build/core/amend.js +115 -38
  95. package/build/core/amendment-criteria.js +17 -0
  96. package/build/core/amendment-warning.js +10 -0
  97. package/build/core/arc.js +184 -83
  98. package/build/core/audit/candidate.js +110 -9
  99. package/build/core/audit/coordinates.js +120 -65
  100. package/build/core/audit/evidence.js +19 -23
  101. package/build/core/audit/facade.js +34 -11
  102. package/build/core/audit/report.js +5 -5
  103. package/build/core/bind-reconciliation.js +390 -0
  104. package/build/core/bind-workspace.js +12 -20
  105. package/build/core/bind.js +242 -273
  106. package/build/core/call/call.js +1 -0
  107. package/build/core/call/context.js +46 -71
  108. package/build/core/call/prompt.js +6 -3
  109. package/build/core/context.js +49 -35
  110. package/build/core/contract-carrier-runtime.js +408 -0
  111. package/build/core/contract-carrier.js +270 -0
  112. package/build/core/contract-view.js +33 -27
  113. package/build/core/contract.js +5 -1
  114. package/build/core/derived-replay.js +207 -0
  115. package/build/core/draft.js +125 -57
  116. package/build/core/forfeit.js +113 -56
  117. package/build/core/identifier-slug.js +63 -13
  118. package/build/core/ids.js +4 -4
  119. package/build/core/lifecycle-history.js +35 -0
  120. package/build/core/lifecycle-recovery.js +117 -0
  121. package/build/core/lifecycle-runner.js +377 -0
  122. package/build/core/log.js +37 -11
  123. package/build/core/outcome-base.js +181 -0
  124. package/build/core/process-group.js +139 -0
  125. package/build/core/projection/generation/database.js +82 -7
  126. package/build/core/projection/generation/model.js +9 -36
  127. package/build/core/projection/generation/projection-generation-continuation.js +10 -22
  128. package/build/core/projection/generation/projection-generation-execution.js +13 -6
  129. package/build/core/projection/index.js +5 -4
  130. package/build/core/projection/projection-activity.js +29 -8
  131. package/build/core/projection/projection-alias.js +23 -10
  132. package/build/core/projection/projection-core.js +21 -7
  133. package/build/core/projection/projection-execution-observer.js +91 -39
  134. package/build/core/projection/projection-history.js +474 -0
  135. package/build/core/projection/projection-runner-lock.js +12 -0
  136. package/build/core/projection/projection-status-observation.js +365 -0
  137. package/build/core/projection/projection-status.js +35 -337
  138. package/build/core/projection/projection-terminal-failure.js +13 -8
  139. package/build/core/projection/projection-wait.js +7 -2
  140. package/build/core/projection/tell/launch-store.js +244 -0
  141. package/build/core/projection/tell/model.js +3 -3
  142. package/build/core/projection/tell/store.js +70 -118
  143. package/build/core/registry.js +22 -87
  144. package/build/core/renew-build.js +424 -0
  145. package/build/core/renew-plan.js +239 -0
  146. package/build/core/renew-rewrite.js +77 -0
  147. package/build/core/renew.js +295 -520
  148. package/build/core/repository-ledger/accepted-fold-read.js +19 -0
  149. package/build/core/repository-ledger/accepted-tail.js +116 -0
  150. package/build/core/repository-ledger/admission.js +38 -0
  151. package/build/core/repository-ledger/authoritative-transaction.js +1 -0
  152. package/build/core/repository-ledger/claim-evidence.js +147 -0
  153. package/build/core/repository-ledger/codec.js +297 -0
  154. package/build/core/repository-ledger/current-state-store.js +853 -0
  155. package/build/core/repository-ledger/fold-repository.js +375 -0
  156. package/build/core/repository-ledger/fold.js +248 -0
  157. package/build/core/repository-ledger/git-object-store.js +243 -0
  158. package/build/core/repository-ledger/history-read.js +15 -0
  159. package/build/core/repository-ledger/incremental-read.js +153 -0
  160. package/build/core/repository-ledger/index.js +15 -0
  161. package/build/core/repository-ledger/inventory-plan.js +75 -0
  162. package/build/core/repository-ledger/inventory.js +310 -0
  163. package/build/core/repository-ledger/publication-admission.js +125 -0
  164. package/build/core/repository-ledger/publication.js +353 -0
  165. package/build/core/repository-ledger/read-model.js +469 -0
  166. package/build/core/repository-ledger/transaction-membership.js +78 -0
  167. package/build/core/repository-ledger/traversal.js +404 -0
  168. package/build/core/repository-ledger/write-transaction.js +339 -0
  169. package/build/core/seal.js +168 -161
  170. package/build/core/settlement/claim-delivery.js +42 -215
  171. package/build/core/settlement/claim.js +235 -153
  172. package/build/core/settlement/index.js +4 -4
  173. package/build/core/settlement/petition-claim-gates.js +52 -33
  174. package/build/core/settlement/petition-forfeit.js +12 -5
  175. package/build/core/settlement/petition-head-guard.js +8 -5
  176. package/build/core/settlement/petition-preview.js +68 -56
  177. package/build/core/settlement/petition-window.js +50 -0
  178. package/build/core/settlement/petition.js +252 -131
  179. package/build/core/settlement/queue-read-model.js +72 -95
  180. package/build/core/settlement/queue-seat-allocation.js +35 -126
  181. package/build/core/settlement/queue.js +1 -1
  182. package/build/core/settlement/settlement.js +172 -80
  183. package/build/core/settlement/verdict.js +112 -66
  184. package/build/core/settlement/verification-coordination.js +305 -0
  185. package/build/core/settlement/verification-supervisor.js +275 -0
  186. package/build/core/settlement/verification.js +398 -31
  187. package/build/core/status/board.js +125 -127
  188. package/build/core/status/lifecycle.js +7 -80
  189. package/build/core/structured-query.js +23 -0
  190. package/build/core/target-ref.js +1 -1
  191. package/build/core/task/board.js +59 -24
  192. package/build/core/task/commands.js +181 -33
  193. package/build/core/task/coordinate.js +56 -0
  194. package/build/core/task/document.js +25 -9
  195. package/build/core/task/index.js +7 -4
  196. package/build/core/task/query.js +17 -27
  197. package/build/core/task/settlement-git.js +164 -179
  198. package/build/core/task/settlement-policy.js +15 -11
  199. package/build/core/task/source-board.js +31 -13
  200. package/build/core/task/task-bind-preparation.js +193 -0
  201. package/build/core/task/task-contract.js +102 -193
  202. package/build/core/task/task-file-transaction.js +171 -0
  203. package/build/core/task/task-git-runtime.js +76 -14
  204. package/build/core/task/task-git-store.js +68 -169
  205. package/build/core/task/task-store-repository.js +13 -6
  206. package/build/core/task/task-worktree.js +6 -33
  207. package/build/core/task/task.js +1 -1
  208. package/build/core/task/tree.js +3 -3
  209. package/build/core/task/validation.js +4 -3
  210. package/build/core/transcripts.js +93 -1
  211. package/build/core/worktree-bootstrap.js +44 -36
  212. package/build/core/worktree-path.js +210 -77
  213. package/build/flow-error.js +7 -7
  214. package/build/generated/version.js +2 -2
  215. package/build/git/core.js +76 -13
  216. package/build/git/refs.js +168 -46
  217. package/build/git/streaming-batch.js +73 -13
  218. package/package.json +1 -1
  219. package/skills/keiyaku/SKILL.md +1 -1
  220. package/skills/keiyaku-akuma/SKILL.md +3 -3
  221. package/skills/keiyaku-task/SKILL.md +4 -2
  222. package/skills/keiyaku-workflow/SKILL.md +88 -203
  223. package/build/core/entry.js +0 -305
  224. package/build/core/ledger-batch.js +0 -194
  225. package/build/core/ledger.js +0 -84
  226. package/build/core/projection/leash.js +0 -87
  227. package/build/core/ref-log.js +0 -119
  228. package/build/core/renew-session.js +0 -128
  229. package/build/core/status/ledger-batch.js +0 -1
  230. package/build/core/status/reconciliation.js +0 -137
package/README.md CHANGED
@@ -1,223 +1,91 @@
1
- # Keiyaku
1
+ # 契約 Keiyaku
2
2
 
3
- CLI for contract-style coding work in git repositories. AI code changes run on an isolated branch. Tasks are written into the repo. Nothing closes without your sign-off.
3
+ **You don't prompt an agent. You sign a contract with a devil.**
4
4
 
5
- ```bash
6
- npm install -g @astrosheep/keiyaku
7
- ```
8
-
9
- ---
10
-
11
- ## Before You Start
12
-
13
- Missing any of these? Don't come crying.
14
-
15
- - **Git repo.** Clean worktree. Dirty = refused.
16
- - **Supported providers.** `codex-sdk`, `codex-app-server`, `claude-agent-sdk`, `opencode-sdk`, and `pi`.
17
-
18
- ---
19
-
20
- ## Setup
21
-
22
- Open a git repo. Run `keiyaku guide` and `keiyaku akuma list`. Then use `keiyaku <command> --help` for exact command formats.
23
-
24
- ---
25
-
26
- ## Flow
27
-
28
- ```
29
- bind -> delivery work -> petition
30
- optional: arc -> delivery work -> arc; renew on base drift
31
- ```
32
-
33
- ---
34
-
35
- ## Tools
36
-
37
- **`call NAME <BODY|->`** — Calls in an agent to do scoped work. When commissioned, call receives the current bind a0 or explicit arc intent. Body is a required literal or `-` for stdin; omitting body is an error even if stdin is piped. Add `--incognito` for a one-off run with no response history.
5
+ Keiyaku (契約, "contract") is a CLI where AI coding agents work under written terms: the change starts as a contract, runs on an isolated branch, and lands only after it survives your gates. The agents are called **akuma** (悪魔) — devils. Devils are excellent workers and terrible masters, which is why everything here is in writing.
38
6
 
39
7
  ```bash
40
- keiyaku call worker-akuma "Implement the retry tests. Report touched files and verification."
41
- keiyaku call worker-akuma - < prompt.md
42
- ```
43
-
44
- ---
45
-
46
- **`tell PROJECTION [--wait DURATION] [--] <BODY|->`** — Writes intent to a projection mailbox. Body is a required literal or `-` for stdin. Ordinary bodies need no `--`; use `--` only when the body looks like an option or address. `tell --wait` joins after acceptance without a mandatory separator.
47
-
48
- ```bash
49
- keiyaku tell kaji/3f2a1c99 "run integration first"
50
- keiyaku tell kaji/3f2a1c99 - < direction.md
51
- keiyaku tell kaji/3f2a1c99 --wait 5m "run integration first"
52
- keiyaku tell kaji/3f2a1c99 -- --stop
53
- ```
54
-
55
- ---
56
-
57
- **`revive ARTIFACT [BODY|-]`** — Starts a new helper projection from a retained response artifact. Omit body for the default continuation; pass a literal body or `-` for explicit stdin (blank explicit stdin fails).
58
-
59
- ```bash
60
- keiyaku revive rsp_01ARZ3NDEKTSV4RRFFQ69G5FAV
61
- keiyaku revive rsp_01ARZ3NDEKTSV4RRFFQ69G5FAV "continue with the failing test"
62
- keiyaku revive rsp_01ARZ3NDEKTSV4RRFFQ69G5FAV - < continuation.md
63
- ```
64
-
65
- ---
66
-
67
- **`akuma list` / `akuma show <name>`** — Inspect available helpers before choosing `keiyaku call NAME`.
68
-
69
- ```bash
70
- keiyaku akuma list
71
- keiyaku akuma show akuma-codex
72
- ```
73
-
74
- ---
75
-
76
- **`bind`** — Opens a branch and writes `KEIYAKU.md`. Repo must be clean. Bind supplies derived default intent a0.
77
-
78
- Vague criteria = vague results. Write "make it better" and don't blame anyone but yourself.
79
-
80
- ```
81
- # Retry logic for HTTP client
82
-
83
- ## Objective
84
- 5xx failures retry up to 3 times with exponential backoff
85
-
86
- ## Scope
87
- - src/http/**
88
-
89
- ## Checks
90
- - Retry unit tests pass
91
- - Public API unchanged
92
- - Existing tests still pass
93
- ```
94
-
95
- ---
96
-
97
- **`arc`** — Optional iteration boundary, not admission. Frames the next delivery intent; the first explicit arc seals a0, and later arcs seal the previous open explicit arc.
98
-
99
- ```
100
- # Retry backoff
101
-
102
- ## Objective
103
- Implement retries with exponential backoff.
104
-
105
- ## Brief
106
- Keep the public API unchanged. Commit the delivery work before sealing the arc.
8
+ npm install -g @astrosheep/keiyaku
107
9
  ```
108
10
 
109
- ---
110
-
111
- **`petition`** — Seals the current a0 or open explicit arc and enters settlement.
112
-
113
- `CLAIM` = verified, all criteria pass. `FORFEIT` = abandon, throw everything away.
114
-
115
- Oath required unless you explicitly bypass gates. Configured verification and reviewer gates will reject weak claims.
116
-
117
- ---
118
-
119
- **`status`** — Current state and what's blocking you.
11
+ Node ≥ 22.19 · a git repo · a clean worktree. Dirty worktree = refused at the door.
120
12
 
121
- **`keiyaku guide`** Workflow guide.
13
+ ## How a deal goes down
122
14
 
123
- ---
124
-
125
- ## What Gets Written to the Repo
126
-
127
- | File | |
128
- |------|--|
129
- | `KEIYAKU.md` | Active contract |
130
- | `.keiyaku/draft/*.md` | Recovery input if bind/stdin execution fails |
131
- | `.keiyaku/response/*.md` | Tool response history |
132
-
133
- Don't want these tracked:
134
-
135
- ```gitignore
136
- .keiyaku/draft/
137
- .keiyaku/response/
15
+ ```text
16
+ task bind call petition claim
17
+ ───────► 📋 ───────► ⛓ ───────► 😈 ───────► ⚖ ───────► ✓ main
18
+ the ask the contract devil at work judgement it lands
138
19
  ```
139
20
 
140
- ---
21
+ **1 · Put it in writing.** `keiyaku bind` opens the contract — Title, Context, Objective, Design, Scope, Criteria — and an isolated branch. Devils honor the letter, never the spirit. Write "make it better" and you deserve what you get.
141
22
 
142
- ## Configuration
23
+ **2 · Summon.** `keiyaku call worker-akuma "..."` projects a devil into the contract's worktree. It works; you rule: steer it mid-flight with `tell`, sit in with `wait`, banish it with `kill`. A finished run leaves an artifact — `revive` raises a new devil from its remains.
143
24
 
144
- Keiyaku works with its builtin `akuma-codex` and `akuma-claude` profiles without a settings file. Inspect the effective catalog before launching an Akuma:
25
+ **3 · Judgement.** `keiyaku petition` seals the work and enters settlement. Verification gates and a reviewer stand between the devil and your main branch. **Claim** what passes. **Forfeit** burns the rest. Nothing lands quietly.
145
26
 
146
27
  ```bash
147
- keiyaku akuma list
148
- keiyaku akuma show akuma-codex
28
+ keiyaku guide # the walkthrough
29
+ keiyaku status # where you stand, what blocks you
30
+ keiyaku <cmd> --help # exact grammar, no folklore
149
31
  ```
150
32
 
151
- ### Akuma profiles
33
+ ## The command surface
152
34
 
153
- Akuma profiles are Markdown files. The filename is the profile name, YAML frontmatter configures the provider, and the Markdown body supplies the Akuma instructions.
35
+ | | |
36
+ | --- | --- |
37
+ | **Contract** | `bind` `arc` `amend` `renew` `audit` `petition` `forfeit` `log` |
38
+ | **Devils** | `call` `tell` `wait` `kill` `revive` `status` `history` |
39
+ | **Roster** | `akuma list` `akuma show` |
40
+ | **Tasks** | `task add/show/ls/log/start/stop/hold/resume/done/drop/update/doctor` |
41
+ | **System** | `guide` `completion` `dump-env` |
154
42
 
155
- | Layer | Location | Precedence |
156
- |---|---|---|
157
- | Builtin | packaged with Keiyaku | lowest |
158
- | User | `<KEIYAKU_HOME>/akuma/<name>.md` | replaces the same builtin name |
159
- | Project | `.keiyaku/akuma/<name>.md` | highest |
43
+ Tasks are a file-backed board living in your repo: capture work, wire real dependency semantics (`parent` · `needs` · `supersedes` · `relates-to`), then promote a task into a contract when it's ready to bind.
160
44
 
161
- `KEIYAKU_HOME` defaults to `~/.keiyaku`. A higher layer replaces the whole file; layers are not field-merged.
45
+ ## Rolling your own devil
162
46
 
163
- Minimal project profile:
47
+ An akuma is one Markdown file. Filename is its name, frontmatter is its body, prose is its soul:
164
48
 
165
49
  ```markdown
166
50
  ---
167
51
  provider: codex-sdk
168
- description: Repository implementation agent
169
52
  model: gpt-5.4
170
- effort: high
171
- accessPolicy: write
172
- networkPolicy: disabled
173
- webSearchPolicy: disabled
174
- threadOptions.sandboxMode: workspace-write
53
+ description: Repository implementation agent
175
54
  ---
176
- Follow the repository instructions, make scoped changes, and run relevant tests.
55
+ Make scoped changes and run relevant tests.
177
56
  ```
178
57
 
179
- Provider fields:
58
+ Providers: `codex-sdk` · `codex-app-server` · `claude-agent-sdk` · `opencode-sdk` · `pi`.
59
+ Resolution: builtin < `<KEIYAKU_HOME>/akuma/` < `.keiyaku/akuma/` — a higher circle replaces the file whole.
180
60
 
181
- | Provider | Supported profile fields |
182
- |---|---|
183
- | `codex-sdk` | `description`, `model`, `profile`, `executable`, `effort`, `accessPolicy`, `networkPolicy`, `webSearchPolicy`, `threadOptions.*`, `config.*` |
184
- | `codex-app-server` | `description`, `model`, `profile`, `executable`, `config.*` |
185
- | `claude-agent-sdk` | `description`, `model`, `executable`, `effort`, `permissionMode`, `settingSources` |
186
- | `opencode-sdk` | `description`, `model`, `executable` |
187
- | `pi` | `description`, `model` |
188
-
189
- For `threadOptions.*`, JSON values such as arrays and objects are accepted. Keiyaku owns `workingDirectory` and `skipGitRepoCheck`, so profiles cannot set those paths.
190
-
191
- ### Settings
192
-
193
- Settings select roles and workflow knobs; provider definitions do not belong in settings. Keiyaku loads user settings first and overlays project settings:
194
-
195
- - User: `<KEIYAKU_HOME>/settings.json`
196
- - Project: `.keiyaku/settings.json`
61
+ `.keiyaku/settings.json` picks roles and gates, nothing else:
197
62
 
198
63
  ```json
199
64
  {
200
- "default": "akuma-codex",
201
- "reviewer": "akuma-claude",
202
- "defaultBranch": "main",
203
- "gate": {
204
- "commands": [
205
- { "label": "tests", "command": "npm", "args": ["test"] }
206
- ]
207
- }
65
+ "default": "worker-akuma",
66
+ "reviewer": "review-akuma",
67
+ "gate": { "commands": [{ "label": "tests", "command": "npm", "args": ["test"] }] }
208
68
  }
209
69
  ```
210
70
 
211
- The only settings keys are `default`, `reviewer`, `defaultBranch`, and `gate`. The former `agents` key is invalid; define profiles in an `akuma/` directory instead. `keiyaku status` reports invalid settings without hiding the rest of the board.
71
+ ## Paper trail
212
72
 
213
- ### Environment
73
+ Contracts leave marks — that's the point.
214
74
 
215
- ```bash
216
- keiyaku dump-env
75
+ | Path | |
76
+ | --- | --- |
77
+ | `KEIYAKU.md` | the active contract |
78
+ | `.keiyaku/` | devil roster, settings, task board, response history |
79
+
80
+ ```gitignore
81
+ .keiyaku/draft/
82
+ .keiyaku/response/
217
83
  ```
218
84
 
219
- Keiyaku loads `<KEIYAKU_HOME>/.env`, then `.keiyaku/.env`; values already present in the process environment take precedence. `dump-env` is the authoritative template for supported keys and defaults.
85
+ ## Fine print
220
86
 
221
- ---
87
+ The full body of law — product and architecture — lives in [`docs/keiyaku-v3/`](docs/keiyaku-v3/README.md). Start at the authority registry; nothing outside it is normative.
88
+
89
+ Keiyaku is early and experimental, built for AI agents operating end to end, and optimized for rapid iteration. Breaking changes are intentional and unapologetic: the current version is the only version.
222
90
 
223
- MIT
91
+ MIT. The devils are not.