loki-mode 10.5.35 → 10.6.6

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 (94) hide show
  1. package/README.md +15 -308
  2. package/SKILL.md +2 -2
  3. package/VERSION +1 -1
  4. package/autonomy/loki +34 -1
  5. package/autonomy/telemetry.sh +1 -1
  6. package/bin/loki +5 -5
  7. package/completions/_loki +1 -0
  8. package/completions/loki.bash +2 -2
  9. package/dashboard/__init__.py +1 -1
  10. package/docs/INSTALLATION.md +6 -5
  11. package/docs/v10/BOARD.md +1 -0
  12. package/docs/v10/CONTROL-PLANE.md +102 -0
  13. package/docs/v10/DECISIONS.md +33 -0
  14. package/docs/v10/DEPS.md +16 -0
  15. package/docs/v10/LEGACY-REMOVAL.md +101 -0
  16. package/docs/v10/OPERATING-MODEL.md +1 -1
  17. package/docs/v10/PROGRESS.md +6 -0
  18. package/loki-ts/dist/loki.js +485 -464
  19. package/mcp/__init__.py +1 -1
  20. package/package.json +14 -3
  21. package/packages/control-plane/dist/server.js +5919 -0
  22. package/packages/control-plane/drizzle/0000_new_maelstrom.sql +49 -0
  23. package/packages/control-plane/drizzle/meta/0000_snapshot.json +343 -0
  24. package/packages/control-plane/drizzle/meta/_journal.json +13 -0
  25. package/packages/control-plane/package.json +20 -0
  26. package/packages/control-plane/src/db/migrate.ts +20 -0
  27. package/packages/control-plane/src/db/schema.ts +54 -0
  28. package/packages/control-plane/src/server/app.ts +63 -0
  29. package/packages/control-plane/src/server/ingest.ts +52 -0
  30. package/packages/control-plane/src/server/runs.ts +116 -0
  31. package/packages/control-plane/src/server/serve.ts +15 -0
  32. package/packages/control-plane/src/shipper/backfill.ts +40 -0
  33. package/packages/control-plane/src/shipper/ship.ts +95 -0
  34. package/packages/control-plane/ui/dist/assets/index-B6EiyukW.js +114 -0
  35. package/packages/control-plane/ui/dist/assets/index-BH3LtKcG.css +1 -0
  36. package/packages/control-plane/ui/dist/index.html +13 -0
  37. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  38. package/web-app/dist/assets/{AdminPage-DEZMrOU2.js → AdminPage-CH-bmw4l.js} +1 -1
  39. package/web-app/dist/assets/{Avatar-Dcn23Doz.js → Avatar-Bos-ky_x.js} +1 -1
  40. package/web-app/dist/assets/{Badge-CsV7PB4a.js → Badge-DNJyHg9Y.js} +1 -1
  41. package/web-app/dist/assets/{Button-C8Q1ckXg.js → Button-KqD3Tt-I.js} +1 -1
  42. package/web-app/dist/assets/{CockpitPage-YYX4FOT9.js → CockpitPage-l6oTsRaL.js} +1 -1
  43. package/web-app/dist/assets/{ComparePage-BrA6JGOn.js → ComparePage-DN6uxXko.js} +1 -1
  44. package/web-app/dist/assets/{ErrorBoundary-CA3xFm23.js → ErrorBoundary-CKQhnvU9.js} +1 -1
  45. package/web-app/dist/assets/{EvidenceReceiptPanel-C9151UPM.js → EvidenceReceiptPanel-CzSIqLmy.js} +1 -1
  46. package/web-app/dist/assets/{GitHubIssuesPanel-DBYUDlkc.js → GitHubIssuesPanel-YJUcDezn.js} +1 -1
  47. package/web-app/dist/assets/{GitHubPRsPanel-x-Ug3n6Q.js → GitHubPRsPanel-Bv7xFvJN.js} +1 -1
  48. package/web-app/dist/assets/{HomePage-DHPokDA2.js → HomePage-CJsxBbii.js} +2 -2
  49. package/web-app/dist/assets/{LoginPage-CB8h5M-E.js → LoginPage-D1V2Ag0s.js} +1 -1
  50. package/web-app/dist/assets/{MagicPage-B6Zg4DHE.js → MagicPage-BBVNMEr5.js} +1 -1
  51. package/web-app/dist/assets/{MetricsPage-JN6AkYit.js → MetricsPage-CtHM-IlA.js} +1 -1
  52. package/web-app/dist/assets/{NotFoundPage-dOUCtSdt.js → NotFoundPage-BBEEJLj5.js} +1 -1
  53. package/web-app/dist/assets/{ProjectPage-DfyhdFcg.js → ProjectPage-BVRJoEaQ.js} +3 -3
  54. package/web-app/dist/assets/{ProjectsPage-oHMOXioV.js → ProjectsPage-DqaA9rUa.js} +1 -1
  55. package/web-app/dist/assets/{SettingsPage-D4BGbBbt.js → SettingsPage-B_RQV_vF.js} +1 -1
  56. package/web-app/dist/assets/{ShowcasePage-CCkk1kPK.js → ShowcasePage-DqN-mrZ8.js} +1 -1
  57. package/web-app/dist/assets/{SystemSettingsPage-N2_JdIbZ.js → SystemSettingsPage-D-CvuL-K.js} +1 -1
  58. package/web-app/dist/assets/{TeamsPage-CEDSFaIj.js → TeamsPage-CzkkDcPj.js} +1 -1
  59. package/web-app/dist/assets/{TemplatesPage-DB9WjPjI.js → TemplatesPage-Bbchk7YQ.js} +1 -1
  60. package/web-app/dist/assets/{TerminalOutput-DK55nBdV.js → TerminalOutput-B32BAX--.js} +1 -1
  61. package/web-app/dist/assets/{activity-3EPj3lfE.js → activity-C9vnEmhG.js} +1 -1
  62. package/web-app/dist/assets/{bell-05FwE2g4.js → bell-XsIhkyjq.js} +1 -1
  63. package/web-app/dist/assets/{bot-DAtzuPmj.js → bot-CvQhqBws.js} +1 -1
  64. package/web-app/dist/assets/{check-DVZjl88M.js → check-HmG8WcD-.js} +1 -1
  65. package/web-app/dist/assets/{chevron-left-BaNjYaIh.js → chevron-left-C1KNgnbD.js} +1 -1
  66. package/web-app/dist/assets/{circle-alert-DlvI6QdR.js → circle-alert-DSmCvZju.js} +1 -1
  67. package/web-app/dist/assets/{clock-B0vWVEQz.js → clock-CPhE3RXd.js} +1 -1
  68. package/web-app/dist/assets/{cloud-Du5W0a4Q.js → cloud-29lwqocB.js} +1 -1
  69. package/web-app/dist/assets/{code-xml-CBNJDFTV.js → code-xml-4jZUzbPt.js} +1 -1
  70. package/web-app/dist/assets/{database-CCqFWW7j.js → database-H0Ct2r-8.js} +1 -1
  71. package/web-app/dist/assets/{dollar-sign-BiD3YO1u.js → dollar-sign-DsXkO0yT.js} +1 -1
  72. package/web-app/dist/assets/{file-code-corner-DCelfbWq.js → file-code-corner-BM8w_nvX.js} +1 -1
  73. package/web-app/dist/assets/{file-plus-B18v-CXD.js → file-plus-BWkYTJ4D.js} +1 -1
  74. package/web-app/dist/assets/{globe-DdaeBtBG.js → globe-FOFDl_8Z.js} +1 -1
  75. package/web-app/dist/assets/{hammer-BaxkIYAS.js → hammer-orm5gvky.js} +1 -1
  76. package/web-app/dist/assets/{index-BnsxsCEv.js → index-B6juCuPX.js} +3 -3
  77. package/web-app/dist/assets/{layers-jmRqcTgA.js → layers-DUQPkPAl.js} +1 -1
  78. package/web-app/dist/assets/{loader-circle-B5eWOgN-.js → loader-circle-Deq6bDar.js} +1 -1
  79. package/web-app/dist/assets/{lock-DCOObKS4.js → lock-CSzWTPRC.js} +1 -1
  80. package/web-app/dist/assets/{package-1nzEtHlZ.js → package-CmACgZuF.js} +1 -1
  81. package/web-app/dist/assets/{plus-B5cRKjki.js → plus-BjPW5v3A.js} +1 -1
  82. package/web-app/dist/assets/{refresh-cw-D769PBG8.js → refresh-cw-DhI1sHaj.js} +1 -1
  83. package/web-app/dist/assets/{rotate-ccw-CTHsioqQ.js → rotate-ccw-Byi2ouWB.js} +1 -1
  84. package/web-app/dist/assets/{scroll-text-DcwZwpH-.js → scroll-text-gq7bJ81H.js} +1 -1
  85. package/web-app/dist/assets/{server-DvIdr3uc.js → server-YbY5s1-X.js} +1 -1
  86. package/web-app/dist/assets/{shield-alert-HsBQ7gvc.js → shield-alert-DhKjtwZt.js} +1 -1
  87. package/web-app/dist/assets/{thumbs-up-Dwy2c2yM.js → thumbs-up-D2X5JR-5.js} +1 -1
  88. package/web-app/dist/assets/{trash-2-DhZM5W4J.js → trash-2-BHAmMxTq.js} +1 -1
  89. package/web-app/dist/assets/{trending-down-Bw3nDTCd.js → trending-down-C41kQa-Q.js} +1 -1
  90. package/web-app/dist/assets/{trending-up-CbZDPnht.js → trending-up-M-OK_9DC.js} +1 -1
  91. package/web-app/dist/assets/{upload-w6RYv_bT.js → upload-CarpPiGw.js} +1 -1
  92. package/web-app/dist/assets/{usePolling-9hkUOMWP.js → usePolling-rJ7rM7R0.js} +1 -1
  93. package/web-app/dist/assets/{user-Cct2X0U_.js → user-cBhWpZen.js} +1 -1
  94. package/web-app/dist/index.html +1 -1
package/README.md CHANGED
@@ -24,7 +24,6 @@ Before a build counts as done, a review council selects reviewers from a special
24
24
  - [loki doctor](#loki-doctor)
25
25
  - [Modernization: status of loki modernize](#modernization-status-of-loki-modernize)
26
26
  - [Providers](#providers)
27
- - [Legacy engine reference](#legacy-engine-reference) (the engine `loki` runs by default today)
28
27
 
29
28
  ## Install
30
29
 
@@ -72,19 +71,21 @@ loki-seal is a Claude Code Stop hook that runs your repo's real test suite when
72
71
 
73
72
  ## Loki 10 engine
74
73
 
75
- Default: Loki 10 engine for `loki "<task>"`, `loki owner/repo#N` and `loki quick "<task>"`. Set LOKI_ENGINE=legacy or run `loki legacy <args>` for the previous engine. <!-- loki10-default -->
74
+ Loki Mode now runs the v10 engine for all commands. <!-- loki10-default -->
76
75
 
77
- Loki 10 is the rewritten engine and the default for tasks, issue mode and `quick`; `status`, `verify` and `dashboard` use it when `LOKI_ENGINE=v10` is set. Guide, provider table and summary format: [docs/v10/GUIDE.md](docs/v10/GUIDE.md).
76
+ Guide, provider table and summary format: [docs/v10/GUIDE.md](docs/v10/GUIDE.md).
78
77
 
79
78
  ```
80
- LOKI_ENGINE=v10 loki "fix the login redirect loop" --no-pr
79
+ loki "fix the login redirect loop" --no-pr
81
80
  ```
82
81
 
83
82
  ```
84
- LOKI_ENGINE=v10 loki owner/repo#123
83
+ loki owner/repo#123
85
84
  ```
86
85
 
87
- The router sends a quoted multi-word task, a GitHub, GitLab or Jira issue reference, and the `status`, `verify` and `dashboard` subcommands to the v10 engine. A one-word argument that is not an issue ref, or any first argument starting with `-`, stays on the legacy CLI. Flags (`loki-ts/src/engine10/cli.ts` USAGE): `--no-pr` builds and verifies without opening a pull request, `--deep` requests the deep verify pass and a longer implement budget, `--provider <name>` picks the coding provider (`--json` and `--verbose` are also parsed by the supervisor, see [Quiet output](#quiet-output)). The v10 engine needs Bun; without it the command exits 1 with a message.
86
+ The v10 engine accepts a quoted multi-word task, a GitHub, GitLab or Jira issue reference, `status`, `verify`, `dashboard`, and other subcommands. Flags (`loki-ts/src/engine10/cli.ts` USAGE): `--no-pr` builds and verifies without opening a pull request, `--deep` requests the deep verify pass and a longer implement budget, `--provider <name>` picks the coding provider (`--json` and `--verbose` are also parsed by the supervisor, see [Quiet output](#quiet-output)). The engine needs Bun; without it the command exits 1 with a message and installation instructions.
87
+
88
+ Migration note: Legacy engine removed in 10.6.0; use `loki "<task>"`, `loki owner/repo#N`, or `loki backlog` instead.
88
89
 
89
90
  ### The state machine
90
91
 
@@ -148,10 +149,10 @@ Every sealed v10 run writes a receipt to `.loki/runs/<run-id>/receipt.json`. `re
148
149
  Receipts are signed by default. On the first run Loki generates an Ed25519 key at `~/.loki/keys/receipt-ed25519.pem` (mode 0600, directory 0700), or you supply your own with `LOKI_RECEIPT_SIGNING_KEY` or `LOKI_RECEIPT_SIGNING_KEY_FILE`. See [docs/SIGNED-RECEIPTS.md](docs/SIGNED-RECEIPTS.md).
149
150
 
150
151
  ```
151
- LOKI_ENGINE=v10 loki verify
152
+ loki verify
152
153
  ```
153
154
 
154
- `loki verify [run-id]` (latest run by default) re-hashes the receipt, checks the signature against your local key (and retired keys listed in `LOKI_RECEIPT_RETIRED_PUBKEYS`), and checks the receipt against the event log. Verdicts and exit codes on the v10 path (`loki-ts/src/engine10/verify_cmd.ts`):
155
+ `loki verify [run-id]` (latest run by default) re-hashes the receipt, checks the signature against your local key (and retired keys listed in `LOKI_RECEIPT_RETIRED_PUBKEYS`), and checks the receipt against the event log. Verdicts and exit codes (`loki-ts/src/engine10/verify_cmd.ts`):
155
156
 
156
157
  | Verdict | Exit | Meaning |
157
158
  |---------|------|---------|
@@ -163,8 +164,6 @@ LOKI_ENGINE=v10 loki verify
163
164
 
164
165
  A verified receipt is bound to the run's event log, so a receipt lifted out of its run, or a log edited after sealing, does not verify. Signing proves the receipt came from the key holder; it does not prove the generated code is bug-free. A receipt only claims what its checks ran, and states what they did not.
165
166
 
166
- On the legacy engine, receipts live under `.loki/proofs/<run_id>/` and are inspected with `loki proof list`, `loki proof show <id>` and `loki proof verify <id>` (exit 0 clean, 1 on tamper or drift, 2 could not check).
167
-
168
167
  ## Quiet output
169
168
 
170
169
  The v10 run is quiet by default: no stage chatter, only the final summary. `--verbose` tails the event stream live (one line per finished stage and a heartbeat with elapsed time and the running diff size). `--json` prints one JSON object (`ok`, `outcome`, `stop`, `run_id`, `receipt_sha256`) instead of text.
@@ -213,10 +212,7 @@ Exit 0 when every required check passes; optional warnings (an absent provider C
213
212
 
214
213
  ## Modernization: status of loki modernize
215
214
 
216
- There are two different things behind the name today.
217
-
218
- - `loki modernize heal <path>` and `loki modernize migrate <path>` are the shipped legacy commands (agent-driven phases). `loki modernize heal <path> --assess` is read-only. See [Already have a codebase](#already-have-a-codebase-start-read-only).
219
- - `loki modernize <repo> --to <target>` is the new v10 command with behavior-captured equivalence. It is routed to the v10 engine whatever `LOKI_ENGINE` says, but it is not finished: only the `--dry-run` estimate works (inventory, dependency graph, unit clustering, cost, time and risk estimate, no model spend). A real run stops after the estimate and prints `modernize: oracle capture and execution are not built yet; use --dry-run`. Targets `python3` and `java21` exist; the Java dependency graph is not wired in yet. Nothing in v10 modernize claims a unit is proven equivalent today. Design: [docs/v10/MODERNIZE.md](docs/v10/MODERNIZE.md), user summary: [docs/v10/GUIDE-MODERNIZE.md](docs/v10/GUIDE-MODERNIZE.md).
215
+ Migration: `loki modernize heal <repo> --assess` was a legacy command for read-only analysis. The v10 path `loki modernize <repo> --to <target>` is not yet finished: only `--dry-run` works (inventory, dependency graph, unit clustering, cost, time and risk estimate). A real run stops after the estimate and prints `modernize: oracle capture and execution are not built yet; use --dry-run`. Targets `python3` and `java21` exist; the Java dependency graph is not wired in yet. Design: [docs/v10/MODERNIZE.md](docs/v10/MODERNIZE.md), user summary: [docs/v10/GUIDE-MODERNIZE.md](docs/v10/GUIDE-MODERNIZE.md).
220
216
 
221
217
  ## Providers
222
218
 
@@ -234,98 +230,6 @@ Claude Code is the provider Loki is built for and the one that is run end to end
234
230
 
235
231
  ---
236
232
 
237
- # Legacy engine reference
238
-
239
- Everything below describes the legacy engine, which `loki` still runs by default (and which stays reachable when Loki 10 is made the default). The long-form commands, `loki start`, `loki quick`, `loki quickstart` and `loki proof` all live here.
240
-
241
- ## Use it
242
-
243
- ```bash
244
- loki quickstart # guided first build: asks a few questions, quotes cost, builds
245
- ```
246
-
247
- That is the whole happy path. It asks for a one-line idea, picks a template,
248
- shows the real cost and time estimate before spending anything, then builds.
249
- Press Enter through every step and you get a sample Todo app.
250
-
251
- One command, no prompts (CI, scripts, containers, any shell without a terminal):
252
-
253
- ```bash
254
- loki quickstart "a todo app with user accounts" --yes
255
- ```
256
-
257
- Both halves are required with no terminal: an idea (or a path to a PRD file)
258
- and an explicit `--yes`. Given both, Loki picks the top-ranked template
259
- automatically, prints the same honest cost and time estimate, and starts the
260
- build without asking anything. Missing either half exits 2 with the
261
- needs-a-terminal message and writes nothing, so an ambient `LOKI_AUTO_CONFIRM`
262
- or a stray argument in CI can never start a paid build on its own. Existing
263
- files are never overwritten: if `prd.md` is present the PRD lands at
264
- `prd-quickstart.md`, then numbered suffixes as needed.
265
-
266
- Choose an exact shipped starter when the top-ranked match is not the one you
267
- want:
268
-
269
- ```bash
270
- loki quickstart --list-templates
271
- loki quickstart --list-templates --json # schema-v1 automation output
272
- loki quickstart "an internal reporting workspace" --template dashboard --yes
273
- ```
274
-
275
- Template discovery works without a terminal or provider and lists every shipped
276
- starter's stable name and purpose in catalog order. It returns before estimation,
277
- consent, PRD writes, or build execution. Positional input and execution/preview
278
- flags are intentionally incompatible; `--json` is the only optional modifier.
279
-
280
- `--template` accepts an exact template name for idea inputs and works the same
281
- way with interactive use or `--dry-run` (including JSON preview). Unknown
282
- templates, duplicate flags, and combinations with a PRD path refuse before
283
- provider discovery, estimation, writes, or build execution.
284
-
285
- Preview the same deterministic template choice and estimator-backed plan with
286
- zero writes or execution:
287
-
288
- ```bash
289
- loki quickstart "a todo app with user accounts" --dry-run
290
- ```
291
-
292
- Preview requires an idea or readable PRD path, works without a terminal or AI
293
- provider, and exits before creating a PRD or starting a build. `--dry-run` and
294
- `--yes` are mutually exclusive so execution intent is never ambiguous.
295
-
296
- For scripts and local dashboards, add `--json` to receive one versioned JSON
297
- object instead of terminal text:
298
-
299
- ```bash
300
- loki quickstart "a todo app with user accounts" --dry-run --json > preview.json
301
- loki quickstart --verify-preview preview.json --json
302
- loki quickstart --from-preview preview.json --yes
303
- ```
304
-
305
- The object contains the input kind, deterministic selected template (or `null`
306
- for an existing PRD), the exact estimator response under `plan`, and a bounded
307
- continuation containing the exact idea/template or the PRD path and SHA-256.
308
- `--verify-preview` validates the same bounded duplicate-key-rejecting schema and
309
- requires either a currently shipped idea template or the unchanged digest-bound
310
- PRD, while emitting no idea or PRD path. It accepts a file or piped stdin and
311
- returns before provider discovery, estimation, writes, or build execution.
312
- `--from-preview` requires explicit argv `--yes`, rejects malformed, conflicting,
313
- symlinked, or changed inputs before provider and build boundaries, then uses the
314
- existing no-clobber quickstart path. The saved plan is evidence rather than
315
- execution authority: Loki recomputes and displays the current estimate before
316
- starting. `--json` requires `--dry-run`; invalid input or estimator failure
317
- writes no JSON, and preview still exits before provider discovery, file writes,
318
- or build execution.
319
-
320
- Or go straight at it:
321
-
322
- ```bash
323
- loki quick "build a landing page with a signup form" # one-shot task
324
- loki start prd.md # build from a spec you wrote
325
- loki modernize heal ./your-repo --assess # existing codebase, read-only
326
- ```
327
-
328
-
329
233
  ## Try it first, without installing
330
234
 
331
235
  ```bash
@@ -346,121 +250,7 @@ Headline: VERIFIED WITH GAPS
346
250
  | Cost | $10.3218 |
347
251
  ```
348
252
 
349
- **"WITH GAPS" is the point.** Build was not run, security has findings, and the
350
- receipt says so on its own front page. Recompute the diff hash yourself and
351
- check it matches -- you are not asked to trust the agent's self-report.
352
-
353
- ## How the legacy engine works
354
-
355
- Drop a spec: a PRD, GitHub issue, OpenAPI/JSON/YAML, or a one-line brief. Loki Mode classifies complexity (`run.sh:detect_complexity()`), selects reviewers from a specialist pool (`agents/types.json` ships the role definitions; 10 are keyword-scored by the review selector at `run.sh:FOCUS_KEYWORDS`, alongside the mandatory reviewers, and the rest are role descriptions in `references/agents.md` that the orchestrator adopts per phase rather than separate processes), with a blind review council and optional git-worktree streams on Claude Code, sequential on most other providers, and runs autonomous RARV cycles (Reason, Act, Reflect, Verify; see `run.sh:run_autonomous()`) with 8 quality gates (see `skills/quality-gates.md`). Code is not "done" until it passes automated verification. Output is a Git repo with source, tests, configs and audit logs.
356
-
357
- **Why verified completion matters.** Self-reported completion is the failure users actually hit: the agent says it is done and the work is not. Loki treats "done" as a claim to be checked. [docs/EVALUATING.md](docs/EVALUATING.md) puts a runnable command next to every claim we make, and states plainly what we do not have (no enterprise case studies, no independent benchmark placement, and generation is not air-gapped). `bash tests/test-competitor-verify-surface.sh` reruns our check of which local agent CLIs expose a command that verifies their own output.
358
-
359
- ## Already have a codebase? Start read-only.
360
-
361
- Most agents are built to create new apps. The harder, more valuable problem is
362
- the ten-year-old repo that pays the bills. Loki works on both, and on an
363
- existing codebase it starts by **changing nothing**:
364
-
365
- ```bash
366
- loki modernize heal ./your-repo --assess # read-only. no writes, no commits.
367
- loki modernize heal ./your-repo --assess --json # same, machine-readable
368
- ```
369
-
370
- You get a modernization readiness report: language mix, a 4-level maturity
371
- rating, technical-debt signals (test coverage, TODO density, oversized files,
372
- dependency staleness), and a **ranked list of where to start** -- ordered by
373
- blast radius, so the first change is the one least likely to break something.
374
-
375
- Then, if you want it to act:
376
-
377
- ```bash
378
- loki modernize heal ./your-repo --strict # block ALL behavioral change without approval
379
- loki modernize heal ./your-repo --phase archaeology # extract knowledge only
380
- loki modernize heal ./your-repo --compliance healthcare # preset flag: healthcare, fintech or government (not a certification)
381
- ```
382
-
383
- The healing pipeline runs in phases -- archaeology, stabilize, isolate,
384
- modernize, validate -- and the validate phase checks **behavioral equivalence
385
- against the pre-change baseline**, not just that the tests are green. Friction
386
- points (the weird code that exists for a reason nobody remembers) are cataloged
387
- before anything touches them, because in a legacy system the strange code is
388
- usually load-bearing.
389
-
390
- ## The Evidence Receipt: don't trust the agent, check it
391
-
392
- Every coding agent tells you it finished. Loki hands you something you can
393
- check yourself.
394
-
395
- **We are not the only tool that checks its own work, and you should be
396
- suspicious of anyone who claims to be.** Lovable runs a security scan on every
397
- publish and can block the publish outright. Claude Code's review has a step that
398
- checks findings against actual code behavior. Replit says its agent tests its
399
- own work.
400
-
401
- The difference is what you are left holding. Their output lives in their
402
- dashboard: a findings count in a dialog, a check run that by design never blocks
403
- a merge. Ours is a **file**. It is bound to a specific diff by `diff_sha256`, it
404
- records what was NOT proven as prominently as what was, and someone who has
405
- never installed Loki can re-verify it from the repository alone. Commit it,
406
- attach it to the PR, hand it to an auditor.
407
-
408
- Portable, diff-bound, and honest about its gaps -- that is the claim, and it is
409
- the one worth checking.
410
-
411
- Each run writes a receipt to `.loki/proofs/<run_id>/` that separates
412
- **deterministic FACTS** (the git diff with base and head SHAs plus a
413
- `diff_sha256`, the test command and its exit code, the build command and its
414
- exit code, each gate verdict) from **AI ASSESSMENTS** (the council verdict,
415
- labeled as judgment, never as proof). The headline is computed from the facts
416
- alone:
417
-
418
- | Headline | Means |
419
- |---|---|
420
- | VERIFIED | tests ran a real command and exited 0, diff non-empty, nothing skipped |
421
- | VERIFIED WITH GAPS | each gap listed by name |
422
- | NOT VERIFIED | a check ran and failed |
423
-
424
- ```bash
425
- loki proof list # every receipt from this project
426
- loki proof show <id> # the facts, the assessments, and the headline
427
- loki proof verify <id> # re-hash the receipt and re-derive the diff
428
- ```
429
-
430
- `loki proof verify` exits 0 clean, 1 on tamper or drift, 2 when it could not check
431
- (full table: [docs/exit-codes.md](docs/exit-codes.md)). Receipts are attached
432
- to pull requests automatically (`LOKI_PROVEN_PR=0` to opt out), so a reviewer
433
- sees the evidence next to the code.
434
-
435
- **What the receipt does NOT claim.** On the unsigned path the generator is
436
- trusted: someone who rewrites both the facts and the headline into a mutually
437
- consistent lie and recomputes the hash will still pass verification. That is
438
- defense-in-depth, not non-forgeability, and neutral non-forgeability needs the
439
- signed record. We tested for exactly this and locked the limitation into the
440
- suite (`tests/test-proof-forgery-defense.sh`), and in v7.111.0 we removed our
441
- own earlier "non-forgeable" claim once we found it was false on that path. An
442
- honest boundary you can verify beats a marketing claim you cannot.
443
-
444
- To close that gap, receipts are signed automatically with an Ed25519 key
445
- generated on first run (or your own via `LOKI_RECEIPT_SIGNING_KEY_FILE`; this needs the
446
- Python `cryptography` package, otherwise the receipt stays unsigned). See [docs/SIGNED-RECEIPTS.md](docs/SIGNED-RECEIPTS.md).
447
-
448
- ## What the legacy engine guarantees
449
-
450
- - **Verified completion** - the evidence gate (`skills/quality-gates.md`) refuses a "done" claim on an empty git diff against the run-start commit, blocks completion when tests run red, blocks when a serveable app is confirmed unhealthy (opt out `LOKI_EVIDENCE_BOOT_GATE=0`) or a credential is detected in the changed files (opt out `LOKI_EVIDENCE_SECRET_GATE=0`).
451
- - **An honest checklist verifier** - each completion checklist item is checked deterministically before the completion council accepts "done". A check that cannot be established is reported as inconclusive (pending), never as a false pass or a false failure. `rc == 0` alone is not a pass: a test check goes green only on a real "N passed" signal from the runner.
452
- - **Quality gates and review** - 8 quality gates (`skills/quality-gates.md`), blind 3-reviewer code review (`run.sh:run_code_review()`), anti-sycophancy checks.
453
- - **Standalone verification: `loki verify`** - runs the deterministic gates (build, tests, static analysis, secret scan, dependency audit) against any branch or PR diff, including code written by other agents or humans. Exit codes 0 VERIFIED, 1 CONCERNS, 2 BLOCKED, 3 verifier error; machine-readable evidence at `.loki/verify/evidence.json`. Inconclusive evidence is reported as CONCERNS; see [docs/exit-codes.md](docs/exit-codes.md) for the known gaps, including `--fast`, which can exit 0 when nothing was scanned.
454
- - **Living spec and pre-build interrogation** - `loki spec` locks a spec and detects drift; `loki grill` runs a Devil's-Advocate interrogation of the spec before you build.
455
- - **Confidence is not evidence** - when the agent's self-reported confidence spikes to near-certainty, Loki forces an extra verification pass (opt out `LOKI_CONFIDENCE_SPIKE=0`).
456
- - **Stops paying for failures that cannot succeed** - a positively identified permanent failure (bad credentials, unknown model, exhausted quota) exits instead of burning the retry budget; an unrecognized error still retries (opt out `LOKI_SMART_RETRY=0`).
457
- - **Cross-project memory** - episodic, semantic and procedural memory with optional vector search (`memory/engine.py`).
458
- - **Guided first build** - `loki quickstart` quotes the real cost and time estimate before anything is spent. `loki preview` prints the running app URL.
459
- - **MCP server** - 36 tools plus 3 resources and 2 prompts (`mcp/server.py`, magic tools from `mcp/magic_tools.py`, the managed-memory tool from `mcp/managed_tools.py`). Of the 36, 35 are always available; `loki_memory_redact` only succeeds when `LOKI_MANAGED_AGENTS=true` and `LOKI_MANAGED_MEMORY=true`. Launch with `loki mcp`.
460
- - **Legacy system healing** - `loki modernize heal` runs archaeology, stabilize, isolate, modernize and validate phases (`skills/healing.md`).
461
- - **Self-hosted and source-available (BUSL-1.1)** - your keys, your infrastructure. Free for personal, internal and academic use.
462
-
463
- ---
253
+ **"WITH GAPS" is the point.** Build was not run, security has findings, and the receipt says so on its own front page. Recompute the diff hash yourself and check it matches.
464
254
 
465
255
  ## Loki does not lie about "done"
466
256
 
@@ -493,81 +283,6 @@ This is honesty-of-done, not a claim of perfection. The receipt proves the
493
283
  completion claim is backed by deterministic evidence and is independently
494
284
  re-checkable; it does not claim the generated code is bug-free.
495
285
 
496
- <details>
497
- <summary><strong>Verify a receipt yourself -- <code>loki proof</code> commands, tamper/drift checks, proven PRs (advanced)</strong></summary>
498
-
499
- ### Verify it yourself
500
-
501
- Receipts are written to `.loki/proofs/<run_id>/` automatically at run completion
502
- (opt out with `LOKI_PROOF=0`). Inspect and re-check them with `loki proof`
503
- (aliased as `loki receipt`):
504
-
505
- ```bash
506
- loki proof list # every receipt: run id, time, council verdict, cost, files
507
- loki proof show <id> # the full proof.json (facts, assessments, honesty)
508
- loki proof verify <id> # re-check the receipt against the repo (exit 0 clean, 1 tamper/drift, 2 could not check)
509
- ```
510
-
511
- `loki proof verify` does two independent checks and prints the result as JSON:
512
-
513
- - **Tamper check** -- recomputes the receipt's integrity hash and compares it to
514
- the recorded one. If anyone edited the receipt after it was written, `hash_ok`
515
- is `false`.
516
- - **Drift check** -- re-runs the diff from the recorded base SHA against the
517
- current repo and compares the file/insertion/deletion counts and `diff_sha256`
518
- to what the receipt recorded. If the repo no longer matches, `diff_drift` is
519
- `true`.
520
-
521
- A clean receipt prints `"ok": true` and exits 0. A tampered or drifted receipt
522
- exits 1. When a check cannot run (for example a receipt with no recorded base
523
- SHA), the verifier reports it as unverifiable rather than passing it silently.
524
-
525
- ```json
526
- {
527
- "hash_ok": true,
528
- "diff_drift": false,
529
- "gpg_ok": "n/a",
530
- "degraded": [],
531
- "reason": "",
532
- "ok": true
533
- }
534
- ```
535
-
536
- You can share a receipt as a self-contained HTML page (`loki proof open <id>`),
537
- or publish it as a GitHub Gist with `loki proof share <id>` (opt-in; the page is
538
- redacted before it leaves your machine). Receipts carry an Ed25519
539
- attestation (`LOKI_RECEIPT_SIGNING_KEY_FILE` to use your own key).
540
-
541
- ### Proven PR
542
-
543
- When Loki opens a pull request, the PR body includes the Evidence Receipt
544
- summary, so a reviewer does not have to take the agent on faith. It shows the
545
- honest verdict (VERIFIED / VERIFIED WITH GAPS / NOT VERIFIED), the key facts
546
- (diff hash, tests, secure-gate, cost), and a "verify this yourself" line:
547
- `loki proof verify <id>` against the recorded base SHA. A green claim appears
548
- only when the receipt's own headline is VERIFIED. This is on by default whenever
549
- Loki opens or advises a PR; opt out with `LOKI_PROVEN_PR=0`.
550
-
551
- For a review-before-publish workflow, preparation and GitHub mutation are two
552
- explicit steps:
553
-
554
- ```bash
555
- loki start owner/repo#42 --prepare-pr # builds and writes exact title/body locally
556
- loki ship --publish # pushes that issue branch and opens the PR
557
- ```
558
-
559
- The second command consumes `.loki/state/pr-title.txt` and
560
- `.loki/state/pr-body.md` byte-for-byte. Plain `loki ship`, previews, and default
561
- start paths remain non-publishing. A failed PR creation preserves both files and
562
- prints the exact remote-branch rollback command.
563
-
564
- An optional advisory status check (`loki: verified-completion`) maps the verdict
565
- to a GitHub check-run. It is opt-in (`LOKI_PROVEN_PR_CHECK=1`) and can never block
566
- a merge on its own. To make verified-completion blocking, add it as a required
567
- status check in your repository's branch-protection settings.
568
-
569
- </details>
570
-
571
286
  <details>
572
287
  <summary><b>Setup details: providers, other models, what loki doctor checks</b></summary>
573
288
 
@@ -701,11 +416,11 @@ See the [Installation Guide](docs/INSTALLATION.md) for the long form.
701
416
  <details>
702
417
  <summary><strong>Runtime architecture: dual Bash/Bun runtime and the rollback flag</strong></summary>
703
418
 
704
- Loki Mode runs a dual runtime by design: the Bash engine is the stable core (the autonomous loop, quality gates and completion council), and newer product surfaces are TypeScript/Bun modules that wrap it. Bash support is not going away.
419
+ Loki Mode v10 runs on the Bun runtime by default, which hosts the autonomous build engine. Bash is used for system integration where needed.
705
420
 
706
- - Commands routed to the Bun runtime when `bun` is on `PATH` (the router is `bin/loki`): `version`, `--version`, `-v`, `status`, `stats`, `doctor`, `provider`, `memory`, `rollback`, `kpis`, `trust`, `proof`, `receipt`, `wiki`, `crash`, `internal`, and `report kpis`. Every other command runs on the Bash CLI (`autonomy/loki`), including the autonomous `loki start` loop (`autonomy/run.sh`), unless `LOKI_SDK_LOOP` or `LOKI_SDK_MODE=full` selects the Bun loop.
707
- - If `bun` is not on `PATH`, the shim falls through to Bash silently.
708
- - Force every command onto the Bash path with `LOKI_LEGACY_BASH=1 loki <cmd>`. This is a rollback flag for the Bun route; it is not the same as the legacy engine switch.
421
+ - Commands that require Bun: `version`, `--version`, `-v`, `status`, `stats`, `doctor`, `provider`, `memory`, `rollback`, `kpis`, `trust`, `wiki`, `crash`, `internal`, and `report kpis`.
422
+ - If `bun` is not on `PATH`, commands exit 1 with installation instructions.
423
+ - For troubleshooting, force commands onto alternate paths with environment variables; see `loki doctor` for available options.
709
424
 
710
425
  See [UPGRADING.md](UPGRADING.md) and [ADR-001: Runtime Migration](docs/architecture/ADR-001-runtime-migration.md).
711
426
 
@@ -736,14 +451,6 @@ All formats land in the same RARV pipeline and pass the same 8 quality gates (`s
736
451
 
737
452
  ---
738
453
 
739
- ## Internal architecture (legacy engine)
740
-
741
- - **RARV cycle** - every iteration: Reason (read state), Act (execute, commit), Reflect (update context), Verify (run tests, check spec). Failures trigger self-correction. [Core Workflow](references/core-workflow.md)
742
- - **8 quality gates** - static analysis, test suite (pass/fail), blind 3-reviewer code review with severity blocking, anti-sycophancy Devil's Advocate, mock-integrity detection, test-mutation detection, documentation coverage, and Magic Modules debate. Backward compatibility is a conditional healing-mode auditor, not one of the 8. [Quality Gates](skills/quality-gates.md)
743
- - **Memory** - episodic (interaction traces), semantic (generalized patterns), procedural (learned skills). Vector search optional. [Memory Architecture](references/memory-system.md)
744
- - **Dashboard** - real-time monitoring, task queue, WebSocket streaming and a Live App Preview. Starts at `localhost:57374`. [Dashboard Guide](docs/dashboard-guide.md)
745
- - **Enterprise layer** - TLS, OIDC bearer-token validation (the foundation for SSO; browser SAML login is roadmap), scoped RBAC, OTEL tracing and audit logs, activated via env vars. See [Enterprise Identity Roadmap](docs/ENTERPRISE-IDENTITY-ROADMAP.md) and [Enterprise Guide](docs/enterprise/architecture.md).
746
-
747
454
  For how Loki compares with other tools, see [docs/COMPARISON.md](docs/COMPARISON.md) and [docs/EVALUATING.md](docs/EVALUATING.md).
748
455
 
749
456
  ---
package/SKILL.md CHANGED
@@ -3,7 +3,7 @@ name: loki-mode
3
3
  description: An autonomous software factory that knows what it is supposed to deliver, and proves it did. Use when the user says Loki Mode or asks to build, fix or verify software autonomously.
4
4
  ---
5
5
 
6
- # Loki Mode v10.5.35
6
+ # Loki Mode v10.6.6
7
7
 
8
8
  **You are an autonomous agent. You make decisions. You do not ask questions. You do not stop.**
9
9
 
@@ -470,4 +470,4 @@ See `CHANGELOG.md` entries [7.5.7], [7.5.8], [7.5.13] for the per-fix list and r
470
470
 
471
471
  ---
472
472
 
473
- **v10.5.35 | [Autonomi](https://www.autonomi.dev/) flagship product | ~410 lines core**
473
+ **v10.6.6 | [Autonomi](https://www.autonomi.dev/) flagship product | ~410 lines core**
package/VERSION CHANGED
@@ -1 +1 @@
1
- 10.5.35
1
+ 10.6.6
package/autonomy/loki CHANGED
@@ -1782,6 +1782,7 @@ show_help() {
1782
1782
  echo " syslog telemetry template test tour trigger trust trust-metrics"
1783
1783
  echo " ultracode update verify version voice watch watchdog web welcome why"
1784
1784
  echo " wiki worktree (wt)"
1785
+ echo " control (preview, needs LOKI_CONTROL=1)"
1785
1786
  echo ""
1786
1787
  echo "Any command: loki <command> --help"
1787
1788
  echo ""
@@ -21581,7 +21582,7 @@ status stop pause resume monitor watch watchdog dashboard web open preview share
21581
21582
  memory context ctx checkpoint state report kpis cost metrics stats logs otel \
21582
21583
  syslog telemetry crash config provider doctor setup-skill onboard quickstart \
21583
21584
  welcome update self-update rollback failover cluster enterprise remote deploy docker \
21584
- sandbox api mcp magic compound assets export wiki docs explain why audit compliance \
21585
+ sandbox api mcp magic compound assets export wiki control docs explain why audit compliance \
21585
21586
  secrets analyze optimize bench ci reset cleanup notify trigger voice sentrux \
21586
21587
  worktree wt projects cp rc trust-metrics serve agent code self_update test help version"
21587
21588
  local best
@@ -22072,6 +22073,9 @@ main() {
22072
22073
  wiki)
22073
22074
  cmd_wiki "$@"
22074
22075
  ;;
22076
+ control)
22077
+ cmd_control "$@"
22078
+ ;;
22075
22079
  magic)
22076
22080
  cmd_magic "$@"
22077
22081
  ;;
@@ -33803,6 +33807,35 @@ cmd_outcomes() {
33803
33807
  LOKI_DIR="${LOKI_DIR:-.loki}" python3 "$lib" "$@"
33804
33808
  }
33805
33809
 
33810
+ # loki control -- D56 control plane (preview). The live route is the Bun CLI
33811
+ # (loki-ts/src/commands/control.ts); this is the LOKI_LEGACY_BASH / no-shim
33812
+ # fallback. It keeps the gate and help in bash and hands the work to Bun.
33813
+ cmd_control() {
33814
+ local sub="${1:-}"
33815
+ case "$sub" in
33816
+ ""|-h|--help|help)
33817
+ echo "Usage: loki control <command> [options] (preview, requires LOKI_CONTROL=1)"
33818
+ echo ""
33819
+ echo "Commands:"
33820
+ echo " serve [--port N] [--db PATH] Run the control plane + UI on 127.0.0.1"
33821
+ echo " backfill [DIR] Ship DIR/.loki/runs to the control plane"
33822
+ echo " status Show whether the control plane is reachable"
33823
+ return 0
33824
+ ;;
33825
+ esac
33826
+ if [ "${LOKI_CONTROL:-}" != "1" ]; then
33827
+ echo "loki control is in preview. Enable it with: export LOKI_CONTROL=1"
33828
+ return 0
33829
+ fi
33830
+ local cli="$SKILL_DIR/loki-ts/dist/loki.js"
33831
+ if ! command -v bun >/dev/null 2>&1; then
33832
+ echo "loki control requires bun (https://bun.sh)" >&2
33833
+ return 1
33834
+ fi
33835
+ [ -f "$cli" ] || cli="$SKILL_DIR/loki-ts/src/cli.ts"
33836
+ exec bun "$cli" control "$@"
33837
+ }
33838
+
33806
33839
  cmd_wiki() {
33807
33840
  local subcmd="${1:-}"
33808
33841
  shift 2>/dev/null || true
@@ -168,7 +168,7 @@ _loki_known_command() {
168
168
  case "${1:-}" in
169
169
  --help|--version|-h|-v|agent|analyze|api|assets\
170
170
  |audit|bench|checkpoint|ci|cleanup|cluster|cockpit|code\
171
- |completions|compliance|compound|config|context|cost|council|cp\
171
+ |completions|compliance|compound|config|context|control|cost|council|cp\
172
172
  |crash|ctx|dashboard|demo|deploy|docker|docs|doctor\
173
173
  |dogfood|enterprise|explain|export|failover|github|grill|handoff\
174
174
  |heal|help|import|init|internal|issue|kpis|logs\
package/bin/loki CHANGED
@@ -244,8 +244,8 @@ if [ "${LOKI_LEGACY_BASH:-0}" = "1" ] || [ "${LOKI_LEGACY_BASH:-}" = "true" ]; t
244
244
  fi
245
245
 
246
246
  # Loki 10 bun resolver: bun on PATH, then an npm-installed @oven/bun-* optional
247
- # dependency under REPO_ROOT (postinstall moves it to node_modules/bun/bin/bun.exe;
248
- # under --ignore-scripts it stays in @oven/bun-<os>-<arch>). A candidate counts only if `--version` exits 0
247
+ # dependency under REPO_ROOT (the per-platform packages ship the binary and have no
248
+ # install scripts; node_modules/bun/bin/bun.exe is a legacy fallback). A candidate counts only if `--version` exits 0
249
249
  # within 2s. Prints the path, or nothing.
250
250
  _loki_bun_probe() {
251
251
  local c="$1" t p w rc
@@ -263,7 +263,7 @@ _loki_bun() {
263
263
  local c
264
264
  c=$(command -v bun 2>/dev/null || true)
265
265
  if [ -n "$c" ] && _loki_bun_probe "$c"; then printf '%s\n' "$c"; return 0; fi
266
- for c in "$REPO_ROOT/node_modules/bun/bin/bun.exe" "$REPO_ROOT"/node_modules/@oven/bun-*/bin/bun; do
266
+ for c in "$REPO_ROOT"/node_modules/@oven/bun-*/bin/bun "$REPO_ROOT"/node_modules/@oven/bun-*/bin/bun.exe "$REPO_ROOT/node_modules/bun/bin/bun.exe"; do
267
267
  [ -x "$c" ] && _loki_bun_probe "$c" && { printf '%s\n' "$c"; return 0; }
268
268
  done
269
269
  return 0
@@ -271,7 +271,7 @@ _loki_bun() {
271
271
  # Reason text for the fallback notice: missing, or failed to start, exit N.
272
272
  _loki_bun_why() {
273
273
  local c rc
274
- for c in "$REPO_ROOT/node_modules/bun/bin/bun.exe" "$REPO_ROOT"/node_modules/@oven/bun-*/bin/bun; do
274
+ for c in "$REPO_ROOT"/node_modules/@oven/bun-*/bin/bun "$REPO_ROOT"/node_modules/@oven/bun-*/bin/bun.exe "$REPO_ROOT/node_modules/bun/bin/bun.exe"; do
275
275
  [ -x "$c" ] || continue
276
276
  _loki_bun_probe "$c"; rc=$?
277
277
  echo "failed to start, exit $rc"; return 0
@@ -559,7 +559,7 @@ fi
559
559
  # Two-token routes (provider show/list, memory list/index) match on the first
560
560
  # token only; the Bun dispatcher handles subcommand routing internally.
561
561
  case "${1:-}" in
562
- version|--version|-v|status|stats|doctor|provider|memory|rollback|internal|kpis|trust|proof|receipt|wiki|crash)
562
+ version|--version|-v|status|stats|doctor|provider|memory|rollback|internal|kpis|trust|proof|receipt|wiki|crash|control)
563
563
  # v7.5.2: rollback added (wires loki-ts/src/commands/rollback.ts).
564
564
  # v7.5.3: internal added for autonomy/run.sh phase1-hooks calls.
565
565
  # v7.5.28: kpis added (Phase K MVP: read-only KPI snapshot).
package/completions/_loki CHANGED
@@ -206,6 +206,7 @@ function _loki_commands {
206
206
  'crash:Crash report management'
207
207
  'otel:OpenTelemetry management'
208
208
  'wiki:Wiki commands'
209
+ 'control:Control plane (preview, LOKI_CONTROL=1)'
209
210
  'backlog:Run every matching open issue, N in parallel'
210
211
  'explain:Explain Loki concepts'
211
212
  'optimize:Optimization commands'
@@ -5,8 +5,8 @@ _loki_completion() {
5
5
  _init_completion || return
6
6
 
7
7
  # Main subcommands (must match autonomy/loki main case statement)
8
- local main_commands="start backlog quick monitor demo tour welcome init stop pause resume steer status next ship dashboard web serve api sandbox notify import github issue config provider reset memory compound checkpoint council dogfood projects enterprise secrets cockpit secure own handoff doctor watchdog audit metrics syslog onboard share proof receipt outcomes explain plan report cost estimate kpis stats test ci watch telemetry agent context ctx code run export review optimize heal modernize migrate cluster worktree wt trigger failover remote deploy docker mcp magic assets analyze compliance crash open otel preview quickstart rc rollback self-update sentrux setup-skill spec state template trust trust-metrics ultracode update verify voice why wiki bench cleanup logs grill docs cp version completions help keys"
9
- local main_commands="start backlog quick monitor demo tour welcome init stop pause resume steer status next ship dashboard web serve api sandbox notify import github issue intent config provider reset memory compound checkpoint council dogfood projects enterprise secrets cockpit secure own handoff doctor watchdog audit metrics syslog onboard share proof receipt explain plan report cost estimate kpis stats test ci watch telemetry agent context ctx code run export review optimize heal modernize migrate cluster worktree wt trigger failover remote deploy docker mcp magic assets analyze compliance crash open otel preview quickstart rc rollback self-update sentrux setup-skill spec state template trust trust-metrics ultracode update verify voice why wiki bench cleanup logs grill docs cp version completions help keys"
8
+ local main_commands="start backlog quick monitor demo tour welcome init stop pause resume steer status next ship dashboard web serve api sandbox notify import github issue config provider reset memory compound checkpoint council dogfood projects enterprise secrets cockpit secure own handoff doctor watchdog audit metrics syslog onboard share proof receipt outcomes explain plan report cost estimate kpis stats test ci watch telemetry agent context ctx code run export review optimize heal modernize migrate cluster worktree wt trigger failover remote deploy docker mcp magic assets analyze compliance crash control open otel preview quickstart rc rollback self-update sentrux setup-skill spec state template trust trust-metrics ultracode update verify voice why wiki bench cleanup logs grill docs cp version completions help keys"
9
+ local main_commands="start backlog quick monitor demo tour welcome init stop pause resume steer status next ship dashboard web serve api sandbox notify import github issue intent config provider reset memory compound checkpoint council dogfood projects enterprise secrets cockpit secure own handoff doctor watchdog audit metrics syslog onboard share proof receipt explain plan report cost estimate kpis stats test ci watch telemetry agent context ctx code run export review optimize heal modernize migrate cluster worktree wt trigger failover remote deploy docker mcp magic assets analyze compliance crash control open otel preview quickstart rc rollback self-update sentrux setup-skill spec state template trust trust-metrics ultracode update verify voice why wiki bench cleanup logs grill docs cp version completions help keys"
10
10
 
11
11
  # 1. If we are on the first argument (subcommand)
12
12
  if [[ $cword -eq 1 ]]; then
@@ -7,7 +7,7 @@ Modules:
7
7
  control: Session control API (start/stop/pause/resume)
8
8
  """
9
9
 
10
- __version__ = "10.5.35"
10
+ __version__ = "10.6.6"
11
11
 
12
12
  # Expose the control app for easy import
13
13
  try:
@@ -2,7 +2,9 @@
2
2
 
3
3
  The flagship product of [Autonomi](https://www.autonomi.dev/). Loki Mode is a spec-driven autonomous builder with a built-in trust layer that takes any spec to a deployed product and verifies completion with evidence (quality gates plus a completion council), not just a "done" claim. Complete installation instructions for all platforms and use cases.
4
4
 
5
- **Version:** v10.5.35
5
+ **Version:** v10.6.6
6
+
7
+ **Migration Note:** Legacy engine removed in 10.6.0. Use `loki "<task>"`, `loki owner/repo#N`, or `loki backlog` instead.
6
8
 
7
9
  ---
8
10
 
@@ -149,10 +151,9 @@ Install Loki Mode without the bundled bun binary. This reduces the package size
149
151
  - OpenTelemetry instrumentation packages
150
152
 
151
153
  **What happens:**
152
- - The legacy bash engine runs when loki is invoked
153
- - Each `loki` command that would use the Loki 10 engine prints this as the first line on stderr: "loki: the Loki 10 engine cannot run on this machine: no working bun (none on PATH, and the bundled bun for darwin-aarch64 is missing). Running the legacy engine instead. To fix: install bun from https://bun.sh, or reinstall loki-mode without --omit=optional."
154
+ - Loki 10 requires Bun. Each `loki` command prints an error on stderr if Bun is not found: "loki: the Loki 10 engine cannot run on this machine: no working bun (none on PATH, and the bundled bun for darwin-aarch64 is missing). To fix: install bun from https://bun.sh, or reinstall loki-mode without --omit=optional."
154
155
 
155
- **To restore Loki 10 engine access:**
156
+ **To restore Loki access:**
156
157
  - Install bun: `curl -fsSL https://bun.sh/install | bash` or `brew install oven-sh/bun/bun`
157
158
  - Or reinstall loki-mode without the flag: `npm install -g loki-mode`
158
159
 
@@ -164,7 +165,7 @@ Install Loki Mode without the bundled bun binary. This reduces the package size
164
165
  brew tap asklokesh/tap && brew install loki-mode
165
166
  ```
166
167
 
167
- Installs the `loki` CLI. For the Loki 10 default engine the formula in `asklokesh/tap` needs bun; if bun is not installed, run `brew install oven-sh/bun/bun`. Without bun, each Loki 10 command prints the "no working bun" line and runs the legacy engine (see Slim install above).
168
+ Installs the `loki` CLI. Loki 10 requires Bun; if bun is not installed, run `brew install oven-sh/bun/bun`. Without bun, each command exits 1 with an error message.
168
169
 
169
170
  To also install the skill for interactive use with all providers:
170
171
 
package/docs/v10/BOARD.md CHANGED
@@ -618,6 +618,7 @@ Source: ~/git/autonomi-dev/research/2026-09-30-adoption/SWARM-PROMPT-ADOPTION.md
618
618
  | D50-F2r | D50-F2 rework, honest label only: label a test value change only on the expected side of an assert comparison or a parametrize expected value, only when the old or new value appears in the task text; wording 'assertion value changed (not shown to be required by the task): file:line old -> new' and keep the 'weakened test' line beside it; exclude control flow, range, tolerances, approx kwargs, decorators | loki-ts/src/e10ext classifier, engine10 verify and seal wiring, tests, dist | probes C D E F G H K from the F2 review all keep 'weakened test'; A labelled only when 5 appears in the task; verdict PARTIAL in every case | HIGH | building@2026-10-01T13:50Z r3 (r2 38d8ffe7 REJECTED: tolerance column never read in the body passes as expected; token boundaries let -25 match 25; required: seal re-check on the committed blob with verify counts) | none |
619
619
  | D50-F2-S3 | humanize-174 lift: let the implement brief edit an existing assertion only when the task text states the new expected value; verdict stays PARTIAL, never VERIFIED (moat). CTO call needed first: does a PARTIAL spec-required test edit count as the right outcome, and does the brief license weaken the append-only rule (context.ts:23) | loki-ts/src/e10ext/context.ts, verify and wall policy, eval fixture through implement | humanize-174 fixture through implement ends with code fixed and the spec value assertion changed, PARTIAL with an honest note | HIGH | ready (D53 ruled 12:39Z: VERIFIED allowed when the new literal is verbatim in the issue, the edit changes only that literal in an existing assert, and Wall plus other tests pass; PARTIAL never scores completed; red bypass tests for tolerance, if True to False, deleted assert, literal not in issue) | needs D50-F2r |
620
620
  | D50-F4b | D50-F4 hardening from the opus review (non-blocking): validate base from the worker-written event log as ^[0-9a-f]{40,64}$ before any git call, and skip the backstop when log.verify() fails | loki-ts/src/engine10/supervisor.ts or e10ext/commit_filter.ts, tests | a base of --output=x is refused with no git call; a tampered log runs no backstop | MEDIUM | ready@2026-10-01T13:50Z | none |
621
+ | NPM-LAG | CORRECTED 16:14Z: v10.5.34 (ceb6942a) was accepted by npm at 15:37Z with the notice that it was being processed, and appeared in the registry only at 16:05:58Z (about 29 min; gitHead ceb6942a correct). Not a lost publish, a long npm processing delay, while the Release run already showed success. Guard: publish-npm, post-release-smoke and promote wait up to 45 min for the version (registry, no cache) before declaring it missing, and promote re-triggers when it appears, so a delay is never read as a failure or a pass (10.5.34 smoke failed ETARGET during the lag and skipped promote; rerun 16:30Z); train-cycle merges origin/main back into local main after each release (it stalled at 16:20Z with local main behind its own release) and waits on previous version visible; the release captain (train-cycle.sh) refuses the next release while the previous version is missing from npm | .github/workflows/release.yml publish-npm, scripts/train-cycle.sh, tests | a stubbed npm that never lists the version fails the step; train-cycle logs PREV_NOT_ON_NPM and waits | MEDIUM | ready@2026-10-01T16:14Z | none |
621
622
  | D53-Q1 | CTO call before D50-F2-S3: under D53(a) a bug-report task ('Expected 200, got 404') lets a test change to the buggy value pass the literal-only gate; only Wall coverage of that behaviour stops it. Options: require the new literal to sit on the expected side of an expected/should phrase in the task, or require Wall coverage of the edited assertion | docs/v10/DECISIONS.md D53 | ruling recorded | HIGH | released@2026-10-01T14:20Z (ruled in DECISIONS D53 amendment: literal must be the EXPECTED value in the acceptance criteria with a source span; Wall must cover the behaviour; unclassifiable stays PARTIAL) | none |
622
623
  | D50-F4 | aiq-52 diagnosis: on FAILED, backstopCommit runs git add -A and re-stages the commit stage's exclusions (pre-existing dirt, Wall files, stray lockfiles), so a PR with only setup dirt is pushed. Backstop applies the same exclusions; nothing left means no commit and no PR | loki-ts/src/engine10/supervisor.ts, e10ext helper, tests, dist | preexisting-dirty fixture with FAILED: HEAD equals base and no PR; with a run edit the backstop commit holds only that edit; Wall and stray lockfile never committed | HIGH | merged@2026-10-01T13:50Z 8364a03e (ed8caedf, opus APPROVE r2: filter fixture shows no token, hooks, fsmonitor, textconv or ext-diff with the supervisor env; train/61) | none |
623
624
  | D50-F5 | aiq-52 lift: already_done.ts findEvidence misses compound task keywords (searchbar vs search-command); add deterministic compound-token matching and a same-stem source plus referencing-test category pair; confirmation still must cite a real hit | loki-ts/src/e10ext/already_done.ts, tests, dist | aiq-52-shaped fixture yields a candidate; unrelated keyword, source without referencing test and short prefix yield none | HIGH | building@2026-10-01T13:50Z r3 (r2 f4aa8cc9 REJECTED: derivational suffixes, authorization vs author.ts, productivity vs product.ts; import detection counts strings, comments and docstrings) | none |