loki-mode 10.5.11 → 10.5.13

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 (92) hide show
  1. package/README.md +30 -962
  2. package/SKILL.md +3 -3
  3. package/VERSION +1 -1
  4. package/autonomy/app-runner.sh +2 -1
  5. package/autonomy/completion-council.sh +40 -3
  6. package/autonomy/lib/doctor-fix.py +1 -1
  7. package/autonomy/lib/proof-generator.py +40 -84
  8. package/autonomy/lib/proof-template.html +7 -11
  9. package/autonomy/loki +118 -69
  10. package/autonomy/receipt_jwt.py +59 -14
  11. package/autonomy/run.sh +91 -124
  12. package/autonomy/trigger-server.py +2 -2
  13. package/autonomy/verify.sh +37 -2
  14. package/dashboard/__init__.py +1 -1
  15. package/dashboard/server.py +2 -2
  16. package/docs/COMPETITIVE-NEXT-10.md +3 -4
  17. package/docs/INSTALLATION.md +1 -1
  18. package/docs/README-FULL.md +977 -0
  19. package/docs/SIGNED-RECEIPTS.md +40 -82
  20. package/docs/TOOLS.md +0 -23
  21. package/docs/VERIFICATION-COST.md +2 -2
  22. package/docs/v10/ADOPTION-PLAN.md +1 -1
  23. package/docs/v10/BOARD.md +42 -22
  24. package/docs/v10/DECISIONS.md +11 -0
  25. package/docs/v10/ENGINE.md +4 -4
  26. package/docs/v10/FOUNDER-QUEUE.md +1 -0
  27. package/docs/v10/GUIDE.md +0 -4
  28. package/docs/v10/PROGRESS.md +43 -0
  29. package/loki-ts/dist/loki.js +587 -563
  30. package/mcp/__init__.py +1 -1
  31. package/package.json +2 -2
  32. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  33. package/tools/gate-status.py +3 -46
  34. package/tools/receipt-attest.py +1 -1
  35. package/web-app/dist/assets/{AdminPage-bi-XcWhD.js → AdminPage-C8zraQ0u.js} +1 -1
  36. package/web-app/dist/assets/{Avatar-CmeIKHo6.js → Avatar-DnjIA4Ap.js} +1 -1
  37. package/web-app/dist/assets/{Badge-Bc3RMd7Y.js → Badge-C487hf0b.js} +1 -1
  38. package/web-app/dist/assets/{Button-Dc7yzWmJ.js → Button-5AWAEksl.js} +1 -1
  39. package/web-app/dist/assets/{CockpitPage-C_aRTgNm.js → CockpitPage-B6_1gTFO.js} +1 -1
  40. package/web-app/dist/assets/{ComparePage-B8eqE3GD.js → ComparePage-DDbC8-yi.js} +1 -1
  41. package/web-app/dist/assets/{ErrorBoundary-BRVSyrME.js → ErrorBoundary-CWHKwjEp.js} +1 -1
  42. package/web-app/dist/assets/{EvidenceReceiptPanel-DBkXGSAF.js → EvidenceReceiptPanel-MfJq92Ty.js} +1 -1
  43. package/web-app/dist/assets/{GitHubIssuesPanel-rRZ4rP-a.js → GitHubIssuesPanel-BBdijzdg.js} +1 -1
  44. package/web-app/dist/assets/{GitHubPRsPanel-NMj2a_-3.js → GitHubPRsPanel-DjBHyymT.js} +1 -1
  45. package/web-app/dist/assets/{HomePage-YGPKiV9F.js → HomePage-B_6m7ITK.js} +2 -2
  46. package/web-app/dist/assets/{LoginPage-CVx7_jtD.js → LoginPage-OGgMvfjT.js} +1 -1
  47. package/web-app/dist/assets/{MagicPage-G9BuqW4T.js → MagicPage-m4MSfxWf.js} +1 -1
  48. package/web-app/dist/assets/{MetricsPage-CrPo66D6.js → MetricsPage-D8Ea1ALe.js} +1 -1
  49. package/web-app/dist/assets/{NotFoundPage-CbjchFXV.js → NotFoundPage-ttvXL-7K.js} +1 -1
  50. package/web-app/dist/assets/{ProjectPage-CmPoA170.js → ProjectPage-CDX8tSPV.js} +3 -3
  51. package/web-app/dist/assets/{ProjectsPage-CfVMc4nw.js → ProjectsPage-BQ73nYWf.js} +1 -1
  52. package/web-app/dist/assets/{SettingsPage-6nZ-vONY.js → SettingsPage-B6k71q2g.js} +1 -1
  53. package/web-app/dist/assets/{ShowcasePage-CxdZjDzY.js → ShowcasePage-CNbwtr7D.js} +1 -1
  54. package/web-app/dist/assets/{SystemSettingsPage-Bu0kwwMe.js → SystemSettingsPage-CD2qys43.js} +1 -1
  55. package/web-app/dist/assets/{TeamsPage-Ck6xWgOM.js → TeamsPage-DAmsRIVD.js} +1 -1
  56. package/web-app/dist/assets/{TemplatesPage-BduvcCsH.js → TemplatesPage-CcRyyUhL.js} +1 -1
  57. package/web-app/dist/assets/{TerminalOutput-BmleKz7Q.js → TerminalOutput-DRquxtQ1.js} +1 -1
  58. package/web-app/dist/assets/{activity-xUOENXj1.js → activity-DUDUi3Qd.js} +1 -1
  59. package/web-app/dist/assets/{bell-Do1DnngS.js → bell-tDpCOcHx.js} +1 -1
  60. package/web-app/dist/assets/{bot-Csus-lhk.js → bot-87IR4aTF.js} +1 -1
  61. package/web-app/dist/assets/{check-CDMuF2fW.js → check-C2Y2z-Ge.js} +1 -1
  62. package/web-app/dist/assets/{chevron-left-1pxhei7a.js → chevron-left-CsPFT88x.js} +1 -1
  63. package/web-app/dist/assets/{circle-alert-HufOSfwc.js → circle-alert-Cp2UJikd.js} +1 -1
  64. package/web-app/dist/assets/{clock-BoCMViPQ.js → clock-DZ1cwNyf.js} +1 -1
  65. package/web-app/dist/assets/{cloud-B7JfKA_r.js → cloud-q5TrIOV-.js} +1 -1
  66. package/web-app/dist/assets/{code-xml-BduQ3MqM.js → code-xml-0TNGOS3c.js} +1 -1
  67. package/web-app/dist/assets/{database-CQ9s31cU.js → database-g73vgDVx.js} +1 -1
  68. package/web-app/dist/assets/{dollar-sign-CVJu5-A0.js → dollar-sign-DAKkR_MO.js} +1 -1
  69. package/web-app/dist/assets/{file-code-corner-BPu1BX6Z.js → file-code-corner-DTAvdxjl.js} +1 -1
  70. package/web-app/dist/assets/{file-plus-CGa7y-QG.js → file-plus-D5SB-1Uk.js} +1 -1
  71. package/web-app/dist/assets/{globe-ClS0c8Cw.js → globe-j5YaNmx9.js} +1 -1
  72. package/web-app/dist/assets/{hammer-CeljzUTd.js → hammer-C9yoXOC6.js} +1 -1
  73. package/web-app/dist/assets/{index-Dn35XhiL.js → index--EayJsJ-.js} +3 -3
  74. package/web-app/dist/assets/{layers-CzGZ-NNL.js → layers-B4mxkWdH.js} +1 -1
  75. package/web-app/dist/assets/{loader-circle-Dy1j6q2e.js → loader-circle-CP-qD1W2.js} +1 -1
  76. package/web-app/dist/assets/{lock-pmDyRsWL.js → lock-DwHNUSTU.js} +1 -1
  77. package/web-app/dist/assets/{package-C1dXDph_.js → package-BxLWioQ8.js} +1 -1
  78. package/web-app/dist/assets/{plus-CKPSHefh.js → plus-B-43Byzl.js} +1 -1
  79. package/web-app/dist/assets/{refresh-cw-CRmwRgDw.js → refresh-cw-5s47zAFV.js} +1 -1
  80. package/web-app/dist/assets/{rotate-ccw-Br04gZR3.js → rotate-ccw-BewZ8_Rx.js} +1 -1
  81. package/web-app/dist/assets/{scroll-text-BHjpthNc.js → scroll-text-DPNpHL-Z.js} +1 -1
  82. package/web-app/dist/assets/{server-Db3IfTpl.js → server-hL8_-vRq.js} +1 -1
  83. package/web-app/dist/assets/{shield-alert-jJXWKLDZ.js → shield-alert-DAGc2aLO.js} +1 -1
  84. package/web-app/dist/assets/{thumbs-up-BksBTkqT.js → thumbs-up-DRGzcWEH.js} +1 -1
  85. package/web-app/dist/assets/{trash-2-CzXuGa-4.js → trash-2-Bo_YPIqS.js} +1 -1
  86. package/web-app/dist/assets/{trending-down-c_JXJq0s.js → trending-down-BQ1cK9F3.js} +1 -1
  87. package/web-app/dist/assets/{trending-up-DtvURYKn.js → trending-up-BpnkTO1T.js} +1 -1
  88. package/web-app/dist/assets/{upload-BSsOPrmR.js → upload-DDdQNxmW.js} +1 -1
  89. package/web-app/dist/assets/{usePolling-CFWdgkmg.js → usePolling-z_FXsGz7.js} +1 -1
  90. package/web-app/dist/assets/{user-CL-HjV4R.js → user-obPH42HX.js} +1 -1
  91. package/web-app/dist/index.html +1 -1
  92. package/tools/signing-status.py +0 -292
package/README.md CHANGED
@@ -1,989 +1,57 @@
1
- <div align="center">
1
+ Your agent says done. Loki proves it.
2
2
 
3
- # Loki Mode
3
+ An autonomous software factory that knows what it is supposed to deliver, and proves it did.
4
4
 
5
- ### The spec-driven autonomous builder with verified completion.
6
-
7
- _The free, source-available autonomous coding agent by [Autonomi](https://www.autonomi.dev/). Same Loki CLI, SDK, and MCP for everyone; the commercial editions for teams and enterprises are sold under the **Autonomi** brand (Autonomi Cloud, Autonomi Enterprise)._
8
-
9
- **Hand it a spec. It does not accept "done" on an empty diff or failing tests.**
10
-
11
- [![npm version](https://img.shields.io/npm/v/loki-mode?style=for-the-badge&logo=npm&logoColor=white&color=553DE9)](https://www.npmjs.com/package/loki-mode)
12
- [![npm downloads](https://img.shields.io/npm/dt/loki-mode?style=for-the-badge&logo=npm&logoColor=white&color=1FC5A8&label=downloads)](https://www.npmjs.com/package/loki-mode)
13
- [![Docker Pulls](https://img.shields.io/docker/pulls/asklokesh/loki-mode?style=for-the-badge&logo=docker&logoColor=white&color=2F71E3)](https://hub.docker.com/r/asklokesh/loki-mode)
14
- [![License](https://img.shields.io/badge/License-BUSL--1.1-36342E?style=for-the-badge)](LICENSE)
15
-
16
- [Website](https://www.autonomi.dev/) | [Documentation](wiki/Home.md) | [Installation](docs/INSTALLATION.md) | [Changelog](CHANGELOG.md)
17
-
18
- </div>
19
-
20
- ---
5
+ <!-- 20-second loki-seal GIF: placeholder until recorded. Script: packages/loki-seal/demo/demo.tape -->
6
+ [loki-seal demo script](packages/loki-seal/demo/demo.tape)
21
7
 
22
8
  ## Install
23
9
 
24
10
  ```bash
25
- bun install -g loki-mode # recommended (npm, Homebrew, Docker below)
26
- ```
27
-
28
- <details>
29
- <summary>Other install methods</summary>
30
-
31
- | Method | Command | Notes |
32
- |--------|---------|-------|
33
- | **Bun (recommended)** | `bun install -g loki-mode` | Fastest startup for CLI commands. |
34
- | **npm** | `npm install -g loki-mode` | Works without Bun (bash fallback). Migrate any time with `loki self-update --to bun`. |
35
- | **Homebrew** | `brew tap asklokesh/tap && brew install loki-mode` | Auto-installs Bun as a dep. |
36
- | **Docker** | `docker pull asklokesh/loki-mode:latest` | Bun + Claude CLI pre-installed. See [DOCKER_README.md](DOCKER_README.md). |
37
-
38
- Upgrade with `loki self-update`. Long form: [Installation Guide](docs/INSTALLATION.md).
39
-
40
- </details>
41
-
42
- <details>
43
- <summary>Claude Code plugin (adds /loki-grill, /loki-spec-status, /loki-verify)</summary>
44
-
45
- ```bash
46
- claude plugin marketplace add asklokesh/loki-mode
47
- claude plugin install loki-mode@loki-mode
48
- ```
49
-
50
- Adds three slash commands and the Loki MCP server (memory, task queue, code
51
- search, build management) to Claude Code. It calls the CLI rather than bundling
52
- it, so install `loki-mode` above first. Verify with `claude plugin list`:
53
- a healthy install reports `Status: enabled`.
54
-
55
- </details>
56
-
57
- ## Use it
58
-
59
- ```bash
60
- loki quickstart # guided first build: asks a few questions, quotes cost, builds
11
+ git clone https://github.com/asklokesh/loki-mode
12
+ claude plugin marketplace add ./loki-mode/packages/loki-seal # then /plugin in Claude Code, install loki-seal
13
+ npx loki-mode tour # zero-key replay of a real Evidence Receipt
61
14
  ```
62
15
 
63
- That is the whole happy path. It asks for a one-line idea, picks a template,
64
- shows the real cost and time estimate before spending anything, then builds.
65
- Press Enter through every step and you get a sample Todo app.
16
+ loki-seal is a Claude Code Stop hook: when your agent tries to finish, it runs your repo's real test suite and refuses "done" if tests newly fail or if tests or CI config were deleted, skipped or weakened. Details: [packages/loki-seal/README.md](packages/loki-seal/README.md).
66
17
 
67
- One command, no prompts (CI, scripts, containers, any shell without a terminal):
68
-
69
- ```bash
70
- loki quickstart "a todo app with user accounts" --yes
71
- ```
18
+ The Seal is the verdict loki-seal prints on every stop attempt: PASS with a receipt, or a block with the reason.
72
19
 
73
- Both halves are required with no terminal: an idea (or a path to a PRD file)
74
- and an explicit `--yes`. Given both, Loki picks the top-ranked template
75
- automatically, prints the same honest cost and time estimate, and starts the
76
- build without asking anything. Missing either half exits 2 with the
77
- needs-a-terminal message and writes nothing, so an ambient `LOKI_AUTO_CONFIRM`
78
- or a stray argument in CI can never start a paid build on its own. Existing
79
- files are never overwritten: if `prd.md` is present the PRD lands at
80
- `prd-quickstart.md`, then numbered suffixes as needed.
20
+ ## What Loki Mode does
81
21
 
82
- Choose an exact shipped starter when the top-ranked match is not the one you
83
- want:
22
+ Hand it a PRD, GitHub issue, OpenAPI doc or one-line brief. It derives a delivery contract (the acceptance criteria), builds against it with a Reason, Act, Reflect, Verify loop, and ends with an Evidence Receipt that states what was proven and what was not. If the contract cannot be derived, it stops and asks one question instead of guessing.
84
23
 
85
24
  ```bash
86
- loki quickstart --list-templates
87
- loki quickstart --list-templates --json # schema-v1 automation output
88
- loki quickstart "an internal reporting workspace" --template dashboard --yes
25
+ npm install -g loki-mode # or: bun install -g loki-mode
26
+ loki quickstart # guided first build
27
+ loki start ./prd.md # build from a PRD
28
+ loki start owner/repo#123 # build from an issue
89
29
  ```
90
30
 
91
- Template discovery works without a terminal or provider and lists every shipped
92
- starter's stable name and purpose in catalog order. It returns before estimation,
93
- consent, PRD writes, or build execution. Positional input and execution/preview
94
- flags are intentionally incompatible; `--json` is the only optional modifier.
95
-
96
- `--template` accepts an exact template name for idea inputs and works the same
97
- way with interactive use or `--dry-run` (including JSON preview). Unknown
98
- templates, duplicate flags, and combinations with a PRD path refuse before
99
- provider discovery, estimation, writes, or build execution.
100
-
101
- Preview the same deterministic template choice and estimator-backed plan with
102
- zero writes or execution:
103
-
104
- ```bash
105
- loki quickstart "a todo app with user accounts" --dry-run
106
- ```
107
-
108
- Preview requires an idea or readable PRD path, works without a terminal or AI
109
- provider, and exits before creating a PRD or starting a build. `--dry-run` and
110
- `--yes` are mutually exclusive so execution intent is never ambiguous.
111
-
112
- For scripts and local dashboards, add `--json` to receive one versioned JSON
113
- object instead of terminal text:
114
-
115
- ```bash
116
- loki quickstart "a todo app with user accounts" --dry-run --json > preview.json
117
- loki quickstart --verify-preview preview.json --json
118
- loki quickstart --from-preview preview.json --yes
119
- ```
120
-
121
- The object contains the input kind, deterministic selected template (or `null`
122
- for an existing PRD), the exact estimator response under `plan`, and a bounded
123
- continuation containing the exact idea/template or the PRD path and SHA-256.
124
- `--verify-preview` validates the same bounded duplicate-key-rejecting schema and
125
- requires either a currently shipped idea template or the unchanged digest-bound
126
- PRD, while emitting no idea or PRD path. It accepts a file or piped stdin and
127
- returns before provider discovery, estimation, writes, or build execution.
128
- `--from-preview` requires explicit argv `--yes`, rejects malformed, conflicting,
129
- symlinked, or changed inputs before provider and build boundaries, then uses the
130
- existing no-clobber quickstart path. The saved plan is evidence rather than
131
- execution authority: Loki recomputes and displays the current estimate before
132
- starting. `--json` requires `--dry-run`; invalid input or estimator failure
133
- writes no JSON, and preview still exits before provider discovery, file writes,
134
- or build execution.
135
-
136
- Or go straight at it:
137
-
138
- ```bash
139
- loki quick "build a landing page with a signup form" # one-shot task
140
- loki start prd.md # build from a spec you wrote
141
- loki modernize heal ./your-repo --assess # existing codebase, read-only
142
- ```
143
-
144
- **Loki needs a model to drive.** An `ANTHROPIC_API_KEY` alone is enough (the
145
- Claude Agent SDK ships inside Loki); or point it at Claude Code, aider, cline,
146
- or an open model. Run `loki doctor` and it tells you exactly what is missing.
147
-
148
- ```bash
149
- export ANTHROPIC_API_KEY=sk-...
150
- loki doctor # checks your setup, names any blocker
151
- ```
152
-
153
- ## Try it first, without installing
154
-
155
- ```bash
156
- npx loki-mode tour # no install, no API key, no spend, no network
157
- ```
158
-
159
- Prints a real Evidence Receipt from a past build, headline and all:
160
-
161
- ```
162
- Headline: VERIFIED WITH GAPS
163
-
164
- | Fact | Value |
165
- | Files changed | 8 |
166
- | Diff sha256 | c2be6fff3e774c387f276277b25fc424f07b667… |
167
- | Tests | verified (node-test) |
168
- | Build | not_run |
169
- | Security | findings |
170
- | Cost | $10.3218 |
171
- ```
172
-
173
- **"WITH GAPS" is the point.** Build was not run, security has findings, and the
174
- receipt says so on its own front page. Recompute the diff hash yourself and
175
- check it matches -- you are not asked to trust the agent's self-report.
176
-
177
- ---
178
-
179
- > **How it works:** Drop a spec -- a PRD, GitHub issue, OpenAPI/JSON/YAML, or one-line brief. Loki Mode classifies complexity (`run.sh:detect_complexity()`), selects reviewers from a specialist pool (`agents/types.json` ships 41 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 parallel review (blind council) and optional worktree streams on Claude Code, sequential on 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.
180
-
181
- ---
182
-
183
- <details>
184
- <summary><b>Why verified completion matters</b> -- the failure this exists to fix</summary>
185
-
186
- Self-reported completion is the failure users actually hit. A survey of the
187
- open issue trackers of seven coding harnesses (OpenHands, Cline, Aider,
188
- SWE-agent, Roo-Code, OpenCode, Continue) found the recurring complaint is the
189
- agent silently not doing the work -- "always stuck at Preparing write"
190
- ([opencode#11112](https://github.com/anomalyco/opencode/issues/11112), 76
191
- comments), "Continue not making changes to code"
192
- ([continue#7143](https://github.com/continuedev/continue/issues/7143)), "Agent
193
- does not execute functions"
194
- ([continue#5696](https://github.com/continuedev/continue/issues/5696)). None of
195
- those seven publishes a machine-checkable completion artifact.
196
-
197
- We measured every named competitor that ships a local CLI -- opencode 1.18.9,
198
- aider 0.86.2, codex-cli 0.146.0, Claude Code 2.1.220, cursor-agent -- and none
199
- exposes a command that verifies the agent's own output. Rerun it yourself with
200
- `bash tests/test-competitor-verify-surface.sh`.
201
-
202
- That is a measurement of the CLI surface, not of whole products: a web UI or an
203
- API could expose something `--help` does not, and Devin and Replit Agent ship no
204
- local CLI so they are not covered.
205
-
206
- **Evaluating this against something else?** [docs/EVALUATING.md](docs/EVALUATING.md)
207
- puts a runnable command next to every claim we make, and states plainly what we
208
- do not have (no enterprise case studies, no independent benchmark placement, and
209
- generation is not air-gapped). It ends with the one question worth asking any
210
- agent vendor, including us.
211
-
212
- </details>
213
-
214
- ## Already have a codebase? Start read-only.
215
-
216
- Most agents are built to create new apps. The harder, more valuable problem is
217
- the ten-year-old repo that pays the bills. Loki works on both, and on an
218
- existing codebase it starts by **changing nothing**:
219
-
220
- ```bash
221
- loki modernize heal ./your-repo --assess # read-only. no writes, no commits.
222
- loki modernize heal ./your-repo --assess --json # same, machine-readable
223
- ```
224
-
225
- You get a modernization readiness report: language mix, a 4-level maturity
226
- rating, technical-debt signals (test coverage, TODO density, oversized files,
227
- dependency staleness), and a **ranked list of where to start** -- ordered by
228
- blast radius, so the first change is the one least likely to break something.
229
-
230
- Then, if you want it to act:
231
-
232
- ```bash
233
- loki modernize heal ./your-repo --strict # block ALL behavioral change without approval
234
- loki modernize heal ./your-repo --phase archaeology # extract knowledge only
235
- loki modernize heal ./your-repo --compliance healthcare # or fintech | government
236
- ```
237
-
238
- The healing pipeline runs in phases -- archaeology, stabilize, isolate,
239
- modernize, validate -- and the validate phase checks **behavioral equivalence
240
- against the pre-change baseline**, not just that the tests are green. Friction
241
- points (the weird code that exists for a reason nobody remembers) are cataloged
242
- before anything touches them, because in a legacy system the strange code is
243
- usually load-bearing.
244
-
245
- ## The Evidence Receipt: don't trust the agent, check it
246
-
247
- Every coding agent tells you it finished. Loki hands you something you can
248
- check yourself.
249
-
250
- **We are not the only tool that checks its own work, and you should be
251
- suspicious of anyone who claims to be.** Lovable runs a security scan on every
252
- publish and can block the publish outright. Claude Code's review has a step that
253
- checks findings against actual code behavior. Replit says its agent tests its
254
- own work.
255
-
256
- The difference is what you are left holding. Their output lives in their
257
- dashboard: a findings count in a dialog, a check run that by design never blocks
258
- a merge. Ours is a **file**. It is bound to a specific diff by `diff_sha256`, it
259
- records what was NOT proven as prominently as what was, and someone who has
260
- never installed Loki can re-verify it from the repository alone. Commit it,
261
- attach it to the PR, hand it to an auditor.
262
-
263
- Portable, diff-bound, and honest about its gaps -- that is the claim, and it is
264
- the one worth checking.
265
-
266
- Each run writes a receipt to `.loki/proofs/<run_id>/` that separates
267
- **deterministic FACTS** (the git diff with base and head SHAs plus a
268
- `diff_sha256`, the test command and its exit code, the build command and its
269
- exit code, each gate verdict) from **AI ASSESSMENTS** (the council verdict,
270
- labeled as judgment, never as proof). The headline is computed from the facts
271
- alone:
272
-
273
- | Headline | Means |
274
- |---|---|
275
- | VERIFIED | tests ran a real command and exited 0, diff non-empty, nothing skipped |
276
- | VERIFIED WITH GAPS | each gap listed by name |
277
- | NOT VERIFIED | a check ran and failed |
278
-
279
- ```bash
280
- loki proof list # every receipt from this project
281
- loki proof show <id> # the facts, the assessments, and the headline
282
- loki proof verify <id> # re-hash the receipt and re-derive the diff
283
- ```
284
-
285
- `loki proof verify` exits 0 clean, 1 on tamper or drift, 2 when it could not check
286
- (full table: [docs/exit-codes.md](docs/exit-codes.md)). Receipts are attached
287
- to pull requests automatically (`LOKI_PROVEN_PR=0` to opt out), so a reviewer
288
- sees the evidence next to the code.
289
-
290
- **What the receipt does NOT claim.** On the unsigned path the generator is
291
- trusted: someone who rewrites both the facts and the headline into a mutually
292
- consistent lie and recomputes the hash will still pass verification. That is
293
- defense-in-depth, not non-forgeability, and neutral non-forgeability needs the
294
- signed record. We tested for exactly this and locked the limitation into the
295
- suite (`tests/test-proof-forgery-defense.sh`), and in v7.111.0 we removed our
296
- own earlier "non-forgeable" claim once we found it was false on that path. An
297
- honest boundary you can verify beats a marketing claim you cannot.
298
-
299
- To close that gap, sign your receipts: `export LOKI_PROOF_GPG_KEY=<key-id>` and
300
- every receipt carries a detached GPG signature that any third party with your
301
- public key can verify offline. See [docs/SIGNED-RECEIPTS.md](docs/SIGNED-RECEIPTS.md).
302
-
303
- ## Why Loki Mode?
304
-
305
- - **Spec-driven, autonomous, with a built-in trust layer** -- Hand Loki a spec, walk away, come back to working code with tests. The full RARV-C closure loop (Reason - Act - Reflect - Verify - Close) runs until the work is actually done, not just attempted. The verified-completion evidence gate (`skills/quality-gates.md`) refuses any "done" claim on an empty git diff against the run-start commit, blocks completion when tests run red, and (v8.0.0) also blocks when a serveable app is confirmed unhealthy (runtime-boot axis, opt out `LOKI_EVIDENCE_BOOT_GATE=0`) or a credential is detected in the changed files (secret-leak axis, opt out `LOKI_EVIDENCE_SECRET_GATE=0`), so "complete" means proven, not promised.
306
- - **A checklist verifier that is honest, not brittle** -- Each completion checklist item is checked deterministically before the completion council will accept "done". The verifier speaks extended regex (`grep -E`) so real LLM-emitted patterns match instead of erroring, and it is runner-agnostic: it runs the project's own declared test command rather than assuming a fixed runner. Crucially, a check that cannot be established is reported as inconclusive (pending), never as a false pass and never as 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 (v7.121.x).
307
- - **Production quality built in** -- 8 quality gates (`skills/quality-gates.md`), blind 3-reviewer code review (`run.sh:run_code_review()`), anti-sycophancy checks
308
- - **Standalone verification: `loki verify`** -- Run Loki's deterministic gates (build, tests, static analysis, secret scan, dependency audit) against any branch or PR diff, including code written by other agents or humans. CI-ready exit codes (0 VERIFIED, 1 CONCERNS, 2 BLOCKED), machine-readable evidence at `.loki/verify/evidence.json`. Inconclusive evidence is never reported as VERIFIED (v7.27.0).
309
- - **Living spec and pre-build interrogation** -- `loki spec` locks a spec and detects drift deterministically (`spec.lock`, `drift-report.json`, and a `SPEC_DRIFT` finding in `loki verify` with CI exit codes), so you can tell when the build diverges from what was agreed. For an OpenAPI/GraphQL/Postman contract it locks one requirement per operation with a per-operation hash, so a single changed response schema drifts exactly that operationId (v8.0.0). `loki grill` runs a Devil's-Advocate interrogation of the spec before you build, surfacing gaps and contradictions early (v7.28.0).
310
- - **Mid-flight model switching** -- switch the model a live run uses from the dashboard (applies at the next iteration, current run only). A Fable tier lever exists in the CLI, dashboard, and override paths, but Claude Fable 5 is not yet available at the API, so selecting Fable currently collapses to Opus at every dispatch chokepoint and the `loki plan` quote reflects Opus accordingly. For every model lever (session pin, mid-flight override, architect pass) and every `LOKI_MAX_TIER` path, the `loki plan` quote, the dashboard's reported model, and the actual dispatched model agree, with the ceiling enforced (v7.31.0; Fable-to-Opus collapse v7.39.1).
311
- - **A calmer CLI** -- the help surface is ~20 grouped workflow entries instead of a 70-command wall; merged commands live on as aliases that forward byte-identically with a one-line stderr pointer, so no script breaks (v7.31.0).
312
- - **Guided first build: `loki quickstart`** -- four quick questions (setup check, one-line idea, template pick, plan review) and your build starts; pressing Enter through every step builds the sample Todo app. The plan step quotes the real cost/time estimate before anything is spent, and `loki demo` now confirms its estimate the same way. If no AI provider CLI is installed, Loki offers to install Claude Code (consent-gated, interactive terminals only) (v7.29.0).
313
- - **Live App Preview** -- The dashboard embeds the locally-running app in an iframe so you can interact with it immediately during a build. Use `loki preview` (alias `loki open`) to print the URL and open it in your browser. Local-first: no hosted service, no vendor lock (v7.24.0).
314
- - **Compose-first fullstack** -- When a spec needs more than one service (web + database + cache) Loki generates a 12-factor `docker-compose.yml` with healthchecks, `depends_on` wiring, env-var config, and a `.env.example`. The Live App Preview surfaces the web service URL (not a database port), and health reflects the web service's Docker healthcheck so a crashed app shows as crashed even when the database stays up. Single-service apps stay on a plain run command. All local-first, no hosted service (v7.26.0).
315
- - **Intelligent `loki start`** -- For interactive foreground runs the dashboard auto-opens in the browser (cross-platform; skipped in CI, SSH-without-TTY, and piped runs; opt out with `LOKI_NO_AUTO_OPEN=1`). The completion summary shows "Your app is live at <url>" so you know exactly where to try what Loki just built. The autonomous loop passes Claude Code's `--effort`, `--max-budget-usd`, and `--fallback-model` on every iteration (each gated on CLI support and individual opt-out env vars) for better long-run unattended execution (v7.25.0).
316
- - **Confidence is not evidence** -- When the agent's self-reported confidence spikes to near-certainty, Loki forces an EXTRA verification pass before accepting a stop, rather than taking the claim at face value. Strictly additive: high confidence makes the engine look harder, never less hard, and it can never skip or satisfy a gate (v8.0.0, opt out `LOKI_CONFIDENCE_SPIKE=0`).
317
- - **Goals it can actually measure** -- A goal with no checkable success condition ("make it fast") gives the loop no gradient: every iteration can claim progress and none can be verified. Loki flags an un-measurable goal up front and asks for a threshold, a metric, or a concrete artifact. Advisory only, and never rewrites your goal (v8.0.0, opt out `LOKI_GOAL_SCORING=0`).
318
- - **Stops paying for failures that cannot succeed** -- A positively-identified permanent failure (bad credentials, unknown model, exhausted quota) exits immediately instead of burning the retry budget on guaranteed-identical failures. Fail-safe: an unrecognized error still retries exactly as before, and rate limits are never treated as permanent (v8.0.0, opt out `LOKI_SMART_RETRY=0`).
319
- - **Cross-project memory** -- Episodic/semantic/procedural memory with vector search; knowledge learned on one project surfaces on the next (v5.15.0+, see `memory/engine.py`)
320
- - **Self-hosted and private** -- Your keys, your infrastructure, no data leaves your network
321
- - **Legacy system healing** -- `loki modernize heal` archaeology/stabilize/isolate/modernize/validate phases (v6.67.0, see `skills/healing.md`)
322
- - **MCP server** -- 36 tools (including ChromaDB code search) plus 3 resources and 2 prompts (`mcp/server.py`, with magic tools registered from `mcp/magic_tools.py` and the managed-memory tool from `mcp/managed_tools.py`). Of the 36, 35 are always available; `loki_memory_redact` is registered but only succeeds when `LOKI_MANAGED_AGENTS=true` and `LOKI_MANAGED_MEMORY=true`. Launch with `loki mcp` (bootstraps the Python MCP SDK on first run).
323
- - **Full-stack output** -- Source code, tests, Docker Compose stacks (multi-service with healthchecks), CI/CD pipelines, audit logs
324
- - **Provider-agnostic** -- runs on Claude, Cline, Codex, Aider, or opencode with automatic failover (`loki-ts/src/runner/providers.ts`); no vendor lock-in. When `LOKI_PROVIDER` is unset, Loki auto-detects in that order; an explicit choice always wins and is never silently substituted. Gemini was removed as a provider in v7.5.18.
325
- - **Source-available (BUSL-1.1)** -- Free for personal, internal, and academic use.
326
-
327
- ---
328
-
329
- ## Loki does not lie about "done"
330
-
331
- Most coding agents declare a task done by telling you so in a transcript. The
332
- transcript is the agent's own narration; there is nothing to check. Loki Mode
333
- takes a different stance: it does not call work done until the work is verified,
334
- and every build produces an **Evidence Receipt** you can re-verify yourself.
335
-
336
- The receipt separates two things most tools blur together:
337
-
338
- - **Facts** -- deterministic, non-LLM, and re-derivable by anyone: the git diff
339
- (base/head SHAs, file/insertion/deletion counts, a `diff_sha256`), the test
340
- command that ran with its exit code, the build command with its exit code, and
341
- each quality-gate verdict. A skeptic can recompute every one of these from the
342
- same repo state.
343
- - **Assessments** -- AI judgments such as the review council's verdict. These are
344
- labeled explicitly as judgment, not proof, and never make the headline green on
345
- their own.
346
-
347
- The receipt's headline is computed only from the facts:
348
-
349
- - **VERIFIED** -- tests recorded a real command, ran, and exited 0; the diff is
350
- non-empty; nothing was skipped.
351
- - **VERIFIED WITH GAPS** -- some facts checked out, but something was not run or
352
- was inconclusive. Every gap is listed by name, so silence never reads as a pass.
353
- - **NOT VERIFIED** -- a test, build, or gate ran and failed (or there was nothing
354
- to verify).
355
-
356
- This is honesty-of-done, not a claim of perfection. The receipt proves the
357
- completion claim is backed by deterministic evidence and is independently
358
- re-checkable; it does not claim the generated code is bug-free.
359
-
360
- <details>
361
- <summary><strong>Verify a receipt yourself -- <code>loki proof</code> commands, tamper/drift checks, proven PRs (advanced)</strong></summary>
362
-
363
- ### Verify it yourself
364
-
365
- Receipts are written to `.loki/proofs/<run_id>/` automatically at run completion
366
- (opt out with `LOKI_PROOF=0`). Inspect and re-check them with `loki proof`
367
- (aliased as `loki receipt`):
368
-
369
- ```bash
370
- loki proof list # every receipt: run id, time, council verdict, cost, files
371
- loki proof show <id> # the full proof.json (facts, assessments, honesty)
372
- loki proof verify <id> # re-check the receipt against the repo (exit 0 clean, 1 tamper/drift, 2 could not check)
373
- ```
374
-
375
- `loki proof verify` does two independent checks and prints the result as JSON:
376
-
377
- - **Tamper check** -- recomputes the receipt's integrity hash and compares it to
378
- the recorded one. If anyone edited the receipt after it was written, `hash_ok`
379
- is `false`.
380
- - **Drift check** -- re-runs the diff from the recorded base SHA against the
381
- current repo and compares the file/insertion/deletion counts and `diff_sha256`
382
- to what the receipt recorded. If the repo no longer matches, `diff_drift` is
383
- `true`.
384
-
385
- A clean receipt prints `"ok": true` and exits 0. A tampered or drifted receipt
386
- exits 1. When a check cannot run (for example a receipt with no recorded base
387
- SHA), the verifier reports it as unverifiable rather than passing it silently.
388
-
389
- ```json
390
- {
391
- "hash_ok": true,
392
- "diff_drift": false,
393
- "gpg_ok": "n/a",
394
- "degraded": [],
395
- "reason": "",
396
- "ok": true
397
- }
398
- ```
399
-
400
- You can share a receipt as a self-contained HTML page (`loki proof open <id>`),
401
- or publish it as a GitHub Gist with `loki proof share <id>` (opt-in; the page is
402
- redacted before it leaves your machine). An optional, off-by-default GPG detached
403
- signature (`LOKI_PROOF_GPG_KEY`) lets a third party confirm the receipt came from
404
- you.
405
-
406
- ### Proven PR
407
-
408
- When Loki opens a pull request, the PR body includes the Evidence Receipt
409
- summary, so a reviewer does not have to take the agent on faith. It shows the
410
- honest verdict (VERIFIED / VERIFIED WITH GAPS / NOT VERIFIED), the key facts
411
- (diff hash, tests, secure-gate, cost), and a "verify this yourself" line:
412
- `loki proof verify <id>` against the recorded base SHA. A green claim appears
413
- only when the receipt's own headline is VERIFIED. This is on by default whenever
414
- Loki opens or advises a PR; opt out with `LOKI_PROVEN_PR=0`.
415
-
416
- For a review-before-publish workflow, preparation and GitHub mutation are two
417
- explicit steps:
418
-
419
- ```bash
420
- loki start owner/repo#42 --prepare-pr # builds and writes exact title/body locally
421
- loki ship --publish # pushes that issue branch and opens the PR
422
- ```
423
-
424
- The second command consumes `.loki/state/pr-title.txt` and
425
- `.loki/state/pr-body.md` byte-for-byte. Plain `loki ship`, previews, and default
426
- start paths remain non-publishing. A failed PR creation preserves both files and
427
- prints the exact remote-branch rollback command.
428
-
429
- An optional advisory status check (`loki: verified-completion`) maps the verdict
430
- to a GitHub check-run. It is opt-in (`LOKI_PROVEN_PR_CHECK=1`) and can never block
431
- a merge on its own. To make verified-completion blocking, add it as a required
432
- status check in your repository's branch-protection settings.
433
-
434
- </details>
435
-
436
- ---
437
-
438
- <details>
439
- <summary><b>Setup details: providers, other models, what loki doctor checks</b></summary>
440
-
441
- Other spec sources work the same way:
442
-
443
- ```bash
444
- loki init my-app --template simple-todo-app # scaffold a starter PRD
445
- loki start owner/repo#123 # a GitHub issue
446
- loki start ./openapi.yaml # an OpenAPI/YAML spec
447
- loki demo --offline # replay a sample receipt, no key, no spend
448
- ```
449
-
450
- Loki needs a model to drive. There are two ways to give it one.
451
-
452
- **Without a separate CLI (v8).** The Claude Agent SDK ships inside Loki, so an API key alone is enough:
453
-
454
- ```bash
455
- export ANTHROPIC_API_KEY=sk-... # or ANTHROPIC_AUTH_TOKEN / ANTHROPIC_BASE_URL
456
- LOKI_SDK_MODE=full loki start prd.md # runs the loop and the judges through the bundled SDK
457
- ```
458
-
459
- This needs Bun on your PATH (the SDK loop runs on the Bun runtime). `loki doctor` reports `Bundled Claude Agent SDK is usable -- no separate CLI needed` when that path is genuinely ready, and stays on the normal blocker otherwise: it checks that the SDK's platform binary is actually extracted, that credentials are present, and that the SDK loop is really the route your next run will take. It will not tell you that you are ready and then fail the build.
460
-
461
- **With a coding-agent CLI.** The classic path, and still the default: Loki drives a separate CLI (Claude Code is the recommended one) plus a couple of common tools on your PATH.
462
-
463
- **With a different model or provider.** Loki is not tied to Anthropic, but
464
- *how* you reach another model depends on which API the endpoint speaks. There
465
- are two routes, and picking the wrong one fails confusingly.
466
-
467
- *Route 1 -- OpenAI-shaped endpoints (OpenRouter, and most hosted open models).*
468
- Use a provider that speaks that API natively. `aider` and `cline` both do, and
469
- Loki now defaults them to open-weight models rather than Claude:
470
-
471
- ```bash
472
- loki provider set aider
473
- export OPENROUTER_API_KEY=sk-or-...
474
- loki start prd.md # defaults to deepseek-v3.2
475
-
476
- export LOKI_AIDER_MODEL=openrouter/z-ai/glm-4.6 # or pick your own
477
- ```
478
-
479
- OpenRouter serves **only** the OpenAI-shaped `/v1/chat/completions`; it has no
480
- Anthropic `/v1/messages` endpoint. Pointing `ANTHROPIC_BASE_URL` at it does not
481
- work, which earlier versions of this README incorrectly suggested.
482
-
483
- [OrcaRouter](https://www.orcarouter.ai) is an OpenAI-compatible gateway that
484
- also serves the Anthropic Messages API, so unlike OpenRouter the same key works
485
- through Route 2 below as well as Route 1 here.
486
-
487
- *Route 2 -- Anthropic-protocol gateways.* `ANTHROPIC_BASE_URL` routes Claude
488
- Code itself, so the endpoint must speak the Anthropic Messages API. LiteLLM,
489
- Bedrock proxies, and self-hosted gateways can:
490
-
491
- ```bash
492
- # Ollama, fully local (no API key, no per-token cost)
493
- export ANTHROPIC_BASE_URL=http://localhost:11434/v1
494
- export LOKI_MODEL_OVERRIDE=<model you have pulled, e.g. the output of `ollama list`>
495
- loki start prd.md
496
-
497
- # LiteLLM / vLLM / any self-hosted gateway
498
- export ANTHROPIC_BASE_URL=https://your-gateway.internal/v1
499
- export ANTHROPIC_API_KEY=...
500
- export LOKI_MODEL_OVERRIDE=<whatever your gateway calls the model>
501
- loki start prd.md
502
-
503
- # OrcaRouter (one key for both routes; model ids are namespaced by provider).
504
- # The bare host is deliberate here: the Anthropic SDK appends /v1/messages
505
- # itself, so adding /v1 would double it.
506
- export ANTHROPIC_BASE_URL=https://api.orcarouter.ai
507
- export ANTHROPIC_API_KEY=sk-orca-...
508
- export LOKI_MODEL_OVERRIDE=<namespaced id, e.g. anthropic/claude-sonnet-5>
509
- loki start prd.md
510
- ```
511
-
512
- **Set both variables.** `LOKI_MODEL_OVERRIDE` is what makes the alt-provider
513
- path work: without it Loki keeps asking for `opus` / `sonnet` / `haiku`, which
514
- only Anthropic resolves, and most providers reject those names outright. A
515
- proxy that maps the aliases for you (LiteLLM can) is the one exception.
516
-
517
- Model IDs are not listed here on purpose -- OpenRouter's catalogue changes every
518
- week, and a stale ID in a README is a failure you would hit at runtime. Take the
519
- exact string from your provider's own model list.
520
-
521
- Both routes honor these variables identically -- the bundled-SDK path and the
522
- Claude Code CLI path -- and `loki doctor` reports the endpoint it detected plus a
523
- warning if the model override is missing.
524
-
525
- The quality gates, the completion council, and the Evidence Receipt do not care
526
- which model produced the code. They check what was actually built.
31
+ Works with Claude Code (full support), Cline, OpenAI Codex CLI, Aider and opencode.
527
32
 
528
- Either way, run `loki doctor` any time and it tells you exactly what is present and what is missing, with a copy-pasteable install command for each gap.
529
-
530
- **What Loki needs (and what `loki doctor` checks)**
531
-
532
- Required:
533
-
534
- - An agent provider CLI: [Claude Code](https://docs.claude.com/en/docs/claude-code) (`claude`, Tier 1, recommended and E2E-verified - the provider Loki Mode is built for). Cline, Codex, Aider, and opencode are supported as experimental providers (wiring in place; not yet E2E-verified by us). Loki cannot run a build without one of these installed and authenticated.
535
- - Python 3.10+ (`python3`) for the dashboard, memory system, and orchestration helpers.
536
- - Node.js 18+ (`node`) for the npm install path and the bundled runtime.
537
- - `jq` for the JSON that the shell flows and the quality gates parse.
538
- - Git 2.x (`git`) for checkpoints and worktrees.
539
- - `curl` for installation and network calls.
540
-
541
- Recommended:
542
-
543
- - Bun 1.3.0+ (`bun`) for the fast runtime (the recommended install path above installs it).
544
- - Docker if you want Loki's App Runner to run containerized projects, or to run Loki itself from the published image.
545
-
546
- You also need credentials for whichever provider you use (for Claude Code, an authenticated `claude` login or `ANTHROPIC_API_KEY`). `loki doctor` flags a missing or unauthenticated provider as the first thing to fix.
547
-
548
- If you do not have Bun yet:
549
-
550
- ```bash
551
- curl -fsSL https://bun.sh/install | bash # macOS / Linux (or: brew install oven-sh/bun/bun)
552
- ```
553
-
554
- Docker without installing loki locally: `loki docker start prd.md` runs it in the
555
- published image with zero config, bind-mounting the current folder so `.loki`
556
- state and resume work exactly like local. See [DOCKER_README.md](DOCKER_README.md).
557
-
558
- Upgrading: `loki self-update` auto-detects which package manager installed loki
559
- and runs the right upgrade. `loki self-update --to bun` migrates an npm install
560
- to Bun in one command. `loki self-update --check` shows the install path.
561
-
562
- See the [Installation Guide](docs/INSTALLATION.md) for the long form.
563
-
564
- </details>
565
-
566
- ---
567
-
568
- <details>
569
- <summary><strong>Runtime architecture -- dual Bash/Bun runtime, rollback flag, migration cost (advanced)</strong></summary>
570
-
571
- Loki Mode runs a dual runtime by deliberate design: the battle-tested Bash engine is the stable core (the autonomous loop, quality gates, and completion council stay on it; it receives bug fixes and hardening), and new product surfaces are built TypeScript/Bun-first as modules that wrap the engine rather than reimplement it. An earlier plan to make v8 Bun-only has been superseded by this stable-engine approach: rewriting the verified trust layer would risk the exact guarantees this product exists to provide, for no capability gain. Bash support is not going away.
572
-
573
- **What ships today:**
574
-
575
- - Commands routed to the Bun runtime when `bun` is on `PATH` (the router lives in `bin/loki`): `version`, `--version`, `-v`, `status`, `stats`, `doctor`, `provider` (covers `provider show` and `provider list`), `memory` (covers `memory list` and `memory index`), `rollback`, `kpis`, and `internal`.
576
- - Every other command continues to execute on the existing Bash CLI (`autonomy/loki`), including the autonomous `loki start` / `loki run` loop which remains the Bash orchestrator (`autonomy/run.sh`).
577
- - If `bun` is not on `PATH`, the shim falls through to Bash silently. Existing users without Bun installed see no behavior change.
578
-
579
- **Rollback flag:**
580
-
581
- Force every command to take the legacy Bash path:
582
-
583
- ```bash
584
- LOKI_LEGACY_BASH=1 loki <cmd>
585
- ```
586
-
587
- This is the documented escape hatch for any user who hits a regression on the Bun route. The Bash path remains the source of truth through Phase 5.
588
-
589
- **Phase 6 (planned, calendar TBD):**
590
-
591
- The next major release sunsets the Bash runtime entirely. There is no firm calendar date. Users who need to stay on the Bash route should pin the last v7.x release.
592
-
593
- **Cost:**
594
-
595
- - Adds a Bun runtime dependency (Bun 1.3.0 or newer recommended; the shim works as long as `bun` resolves).
596
- - Adds a Bun toolchain to the system (Bun itself is roughly 50 MB installed via `brew install` or the official curl installer). The published `loki-ts/dist/loki.js` bundle inside the npm tarball is approximately 152 KB.
597
- - Speedup on the ported commands is measured in `.loki/metrics/migration_bench_soak.jsonl` and analysed in [ADR-001](docs/architecture/ADR-001-runtime-migration.md). Recorded soak results show roughly 3x to 5x faster execution on the ported commands (per-command range 2.9x to 5.0x); treat as indicative, not contractual.
598
-
599
- **More:**
600
-
601
- - [UPGRADING.md](UPGRADING.md) -- per-version upgrade and rollback guidance.
602
- - [ADR-001: Runtime Migration](docs/architecture/ADR-001-runtime-migration.md) -- design rationale and phase definitions.
603
-
604
- </details>
605
-
606
- ---
607
-
608
- <details>
609
- <summary><strong>Other install methods</strong></summary>
610
-
611
- | Method | Command |
612
- |--------|---------|
613
- | **Homebrew** | `brew tap asklokesh/tap && brew install loki-mode` |
614
- | **Docker** | `docker pull asklokesh/loki-mode:latest` |
615
- | **Inside Claude Code** | `claude --dangerously-skip-permissions` then type "Loki Mode" |
616
- | **Git clone** | `git clone https://github.com/asklokesh/loki-mode.git` |
617
-
618
- See the full [Installation Guide](docs/INSTALLATION.md).
619
-
620
- </details>
621
-
622
- <details>
623
- <summary><strong>Supported spec formats</strong></summary>
624
-
625
- A "spec" is whatever you hand `loki start`. Loki auto-detects the format and normalises it before the RARV loop. A Markdown PRD is one form of spec; the table below lists every input the CLI accepts.
626
-
627
- | Format | Example | Notes |
628
- |--------|---------|-------|
629
- | Markdown PRD | `loki start ./prd.md` | Canonical form. Headings become section anchors. |
630
- | JSON spec | `loki start ./spec.json` | Free-form JSON; keys surfaced to agents. |
631
- | YAML spec | `loki start ./openapi.yaml` | OpenAPI / AsyncAPI / plain YAML all accepted. An OpenAPI/GraphQL/Postman contract expands into a per-operation build checklist (one item per operationId/field/request) so no operation is lost to prompt truncation (v8.0.0). |
632
- | Plain text brief | `loki start ./brief.txt` | One-paragraph briefs work; complexity auto-detects to "simple". |
633
- | GitHub issue URL | `loki start https://github.com/owner/repo/issues/42` | Title + body + labels become the spec. |
634
- | GitHub shorthand | `loki start owner/repo#42` | Same as above, shorter. |
635
- | Jira ticket key | `loki start PROJ-456` | Requires `JIRA_BASE_URL` + `JIRA_TOKEN` env vars. |
636
- | GitLab / Azure DevOps URL | `loki start https://gitlab.com/group/proj/-/issues/7` | GitLab and Azure DevOps issue URLs both supported. |
637
- | Bare issue number | `loki start #123` or `loki start 123` | Resolved against the current repo's `origin` remote. |
638
- | OpenSpec change directory | `loki start --openspec ./openspec/change-001` | Reads OpenSpec change manifest + delta files. |
639
- | Auto-detect (no input) | `loki start` | Picks up `./prd.md`, `./spec.{json,yaml,yml}`, or `./SPEC.md` from cwd. |
640
-
641
- All formats land in the same RARV pipeline and pass the same 8 quality gates (`skills/quality-gates.md`).
642
-
643
- </details>
644
-
645
- ---
646
-
647
- ## What You Can Build
648
-
649
- | Project | Build Time | Complexity |
650
- |---------|:----------:|:----------:|
651
- | Landing page with signup form | ~10 min | Simple |
652
- | REST API with JWT auth | ~20 min | Simple |
653
- | Portfolio with animations | ~15 min | Simple |
654
- | SaaS dashboard with analytics | ~25 min | Standard |
655
- | E-commerce store with Stripe | ~45 min | Standard |
656
- | Task manager with kanban board | ~25 min | Standard |
657
- | Chat app with WebSocket | ~30 min | Standard |
658
- | Blog platform with MDX | ~30 min | Standard |
659
- | Microservice architecture | ~2 hours | Complex |
660
- | ML pipeline with monitoring | ~3 hours | Complex |
661
-
662
- ---
663
-
664
- ## What To Expect
665
-
666
- | | Simple | Standard | Complex |
667
- |---|---|---|---|
668
- | **Examples** | Landing page, todo app, single API | CRUD + auth, REST API + React | Microservices, real-time, ML pipelines |
669
- | **Duration** | 5-30 min | 30-90 min | 2+ hours |
670
- | **Autonomy** | Completes independently | May need guidance on complex parts | Use as accelerator with human review |
671
-
672
- ---
673
-
674
- <details>
675
- <summary><strong>Internal architecture -- RARV cycle, agent roles, quality gates, memory, dashboard, enterprise layer (advanced)</strong></summary>
676
-
677
- <div align="center">
678
- <img width="100%" alt="Loki Mode Architecture" src="https://github.com/user-attachments/assets/c9798120-9587-4847-8e8d-8f421f984dfc" />
679
- </div>
680
-
681
- <table>
682
- <tr>
683
- <td width="33%" valign="top">
684
-
685
- ### RARV Cycle
686
- Every iteration: **Reason** (read state) - **Act** (execute, commit) - **Reflect** (update context) - **Verify** (run tests, check spec). Failures trigger self-correction.
687
-
688
- [Core Workflow](references/core-workflow.md)
689
-
690
- </td>
691
- <td width="33%" valign="top">
692
-
693
- ### 41 Agent Roles
694
- 8 domains: engineering, operations, business, data, product, growth, review, orchestration. These are prompt-defined role specifications the orchestrator adopts per phase, auto-composed by PRD complexity; parallelism comes from the blind review council, the adversarial reviewer, and optional git-worktree streams on Claude Code, sequential on other providers.
695
-
696
- [Agent Types](references/agent-types.md)
697
-
698
- </td>
699
- <td width="33%" valign="top">
700
-
701
- ### 8 Quality Gates
702
- 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). Code does not ship until all gates pass.
703
-
704
- [Quality Gates](skills/quality-gates.md)
705
-
706
- </td>
707
- </tr>
708
- <tr>
709
- <td width="33%" valign="top">
710
-
711
- ### Memory System
712
- 3-tier architecture: episodic (interaction traces), semantic (generalized patterns), procedural (learned skills). Vector search optional.
713
-
714
- [Memory Architecture](references/memory-system.md)
715
-
716
- </td>
717
- <td width="33%" valign="top">
718
-
719
- ### Dashboard
720
- Real-time monitoring, agent status, task queue, WebSocket streaming, and Live App Preview (embedded iframe of the running app with Refresh/Open/Restart toolbar). Auto-starts at `localhost:57374`.
721
-
722
- [Dashboard Guide](docs/dashboard-guide.md)
723
-
724
- </td>
725
- <td width="33%" valign="top">
726
-
727
- ### Enterprise Layer
728
- TLS, OIDC bearer-token validation (the foundation for SSO; browser SAML login is
729
- roadmap), scoped RBAC, OTEL tracing, policy engine, audit trails. Activated via
730
- env vars. See [Enterprise Identity Roadmap](docs/ENTERPRISE-IDENTITY-ROADMAP.md).
731
-
732
- [Enterprise Guide](docs/enterprise/architecture.md)
733
-
734
- </td>
735
- </tr>
736
- </table>
737
-
738
- </details>
739
-
740
- ---
741
-
742
- ## Loki Mode vs. Alternatives
743
-
744
- | Feature | Loki Mode | bolt.new | Replit | Lovable |
745
- |---------|:---------:|:--------:|:------:|:-------:|
746
- | Self-hosted / your keys | Yes | No | No | No |
747
- | Multi-provider failover (5 providers) | Yes | No | No | No |
748
- | 8 quality gates | Yes | No | No | No |
749
- | Blind code review | Yes | No | No | No |
750
- | Enterprise auth (OIDC token + scoped RBAC) | Yes | No | Yes | No |
751
- | Air-gapped deployment | Verification and the build pipeline, yes; builds need a model you host ([details](docs/air-gapped.md)) | No | No | No |
752
- | Docker + CI/CD generation | Yes | No | Yes | No |
753
- | Source-available (BUSL-1.1) | Yes | No | No | No |
754
- | Free tier | Source-available | Yes | Yes | Yes |
755
-
756
- Among the four tools in this table, Loki Mode is the one that is fully self-hosted, source-available (BUSL-1.1), and includes automated quality verification. Your code, your keys, your infrastructure. We have not surveyed every tool on the market, so read this as a comparison against the named three, not a claim about the whole category.
757
-
758
- ---
759
-
760
- <details>
761
- <summary><strong>Provider matrix -- per-provider status, autonomous flags, parallelism, install (includes deprecated Gemini)</strong></summary>
762
-
763
- Loki's autonomy and quality loop are the product; the underlying coding CLI is swappable. Loki runs on any of the providers below so you are never locked to one vendor. With `LOKI_PROVIDER` unset, Loki auto-detects the first installed provider in the order the table lists (claude, cline, codex, aider, opencode); setting it explicitly always wins and is never silently substituted.
764
-
765
- | Provider | Status | Autonomous Flag | Parallel Agents | Install |
766
- |----------|--------|:-:|:-:|---------|
767
- | **Claude Code** | Active (Tier 1, E2E-verified) | `--dangerously-skip-permissions` | Yes (10+) | `npm i -g @anthropic-ai/claude-code` |
768
- | **Cline CLI** | Experimental (Tier 2) | `-y` | Sequential | `npm install -g cline` |
769
- | **Codex CLI** | Experimental (Tier 3) | `exec --sandbox workspace-write --skip-git-repo-check` | Sequential | `npm i -g @openai/codex` |
770
- | **Aider** | Experimental (Tier 3) | `--yes-always` | Sequential | `pip install aider-chat` |
771
- | **opencode** | Experimental | `--auto` | Sequential | `npm install -g opencode-ai` |
772
- | **Google Gemini CLI** | REMOVED v7.5.18 | -- | -- | Upstream deprecated; runtime removed. `LOKI_PROVIDER=gemini` exits with a migration message. |
773
-
774
- Status legend: "E2E-verified" means we run real spec-to-code builds on it ourselves. Claude Code is the primary, fully supported provider and the one Loki Mode is built for; it gets full features (subagents, parallelization, MCP, Task tool). "Experimental" means the wiring is in place but we have not produced an end-to-end verified build ourselves; treat as community-tested. Experimental providers run sequentially. Auto-failover switches providers when rate-limited. See [Provider Guide](skills/providers.md).
775
-
776
- </details>
777
-
778
- ---
779
-
780
- ## CLI Reference
781
-
782
- <details>
783
- <summary><strong>All commands</strong></summary>
784
-
785
- | Command | Description |
786
- |---------|-------------|
787
- | `loki start [PRD]` | Start with optional PRD file (also accepts an issue ref; replaces deprecated `loki run`). Auto-opens the dashboard in the browser for interactive runs and passes native `--effort`/`--max-budget-usd`/`--fallback-model` for resilience (v7.25.0) |
788
- | `loki stop` | Stop execution |
789
- | `loki modernize heal <path>` | Legacy system healing (archaeology, stabilize, isolate, modernize, validate -- v6.67.0; was: `loki heal`) |
790
- | `loki pause` / `resume` | Pause/resume after current session |
791
- | `loki steer "<note>"` | Nudge a running build with a directive (writes `.loki/HUMAN_INPUT.md`; the loop reads it when `LOKI_PROMPT_INJECTION=1`) (v8.0.0) |
792
- | `loki status` | Show current status |
793
- | `loki why` | Explain the last outcome; on a stalled run names the real stall reason (proactive stuck-detector + convergence signal) and suggests `loki steer` (v8.0.0) |
794
- | `loki cockpit` | Live multi-repo status as an inline terminal image (Kitty/iTerm2/WezTerm/Ghostty); text + dashboard fallback elsewhere (v7.126.0) |
795
- | `loki dashboard` | Open web dashboard |
796
- | `loki preview` | Print running app URL and open in browser (Live App Preview, v7.24.0; was: `loki open`) |
797
- | `loki web` | Launch Purple Lab web UI [DEPRECATED in v7.44.0 -- use `loki start` which auto-opens the dashboard at http://localhost:57374; for the hosted platform see Autonomi Cloud] |
798
- | `loki doctor` | Check environment and dependencies |
799
- | `loki plan [PRD]` | Pre-execution analysis: complexity, cost, iterations |
800
- | `loki review [--staged\|--diff]` | AI-powered code review with severity filtering |
801
- | `loki test [--file\|--dir\|--changed]` | AI test generation (8 languages, 9 frameworks) |
802
- | `loki analyze onboard [path]` | Project analysis and CLAUDE.md generation (was: `loki onboard`) |
803
- | `loki import` | Import GitHub issues as tasks |
804
- | `loki ci` | CI/CD quality gate integration |
805
- | `loki failover` | Cross-provider auto-failover management |
806
- | `loki memory <cmd>` | Memory system: index, timeline, search, consolidate |
807
- | `loki enterprise` | Enterprise feature management |
808
- | `loki version` | Show version |
809
-
810
- </details>
811
-
812
- Run `loki --help` for all options. Full reference: [CLI Reference](wiki/CLI-Reference.md) | Config: [config.example.yaml](autonomy/config.example.yaml)
813
-
814
- ### Configuration file
815
-
816
- Pass a config file to `loki start` with `--config <path>` (aliases: `--env-file`, `--vars`), or set `LOKI_CONFIG_FILE`. The format is detected from the extension or content: `.yaml`/`.yml`, `.json`, or `.env` (flat `LOKI_*=value` lines). Values resolve by precedence: a CLI flag beats an ambient env var, which beats the `--config` file, which beats built-in defaults. Never inline a secret; reference an env var with `${VAR}` and the loader expands it at load time (an unset reference is skipped with a warning, and a raw-looking secret literal is flagged). Generate a starter with `loki config example`.
817
-
818
- ```bash
819
- # config.yaml
820
- dashboard:
821
- port: 9000
822
- github:
823
- token: ${GITHUB_TOKEN} # expanded from the environment, never stored inline
824
-
825
- loki start --config config.yaml ./prd.md
826
- ```
827
-
828
- ---
829
-
830
- <details>
831
- <summary><strong>Configuration env vars (intelligent defaults, opt-out knobs)</strong></summary>
832
-
833
- Loki Mode's accuracy and autonomy behaviors are default-on. Each is an opt-out escape hatch, not a setting you have to discover. The most relevant knobs from the v7.41.x accuracy/autonomy hardening:
834
-
835
- | Env var | Default | Effect |
836
- |---------|---------|--------|
837
- | `LOKI_REVIEW_INCONCLUSIVE_BLOCK` | `1` | Blocks completion when a code-review round returns zero usable verdicts (an all-empty review proves nothing). Set `0` to record the inconclusive result without blocking. |
838
- | `LOKI_COMPLETION_TEST_CAPTURE` | `1` | Captures fresh test results before the verified-completion evidence gate evaluates. Set `0` to skip the pre-gate capture. |
839
- | `LOKI_AUTO_DOCS` | `true` | Generates the `.loki/docs/` suite before the documentation gate scores it (bounded: once per run when docs are missing, and again only when >10 commits stale). Set `false` to opt out. |
840
- | `LOKI_CAVEMAN` | `1` (on) | Output-token compressor for free-form generation only (never trust-gate subcalls). Set `0` to opt out. |
841
- | `LOKI_CAVEMAN_LEVEL` | inferred | Compression level for the compressor. Auto-inferred per invocation from the run's RARV tier; set explicitly (`lite` / `full` / `ultra`) to override the inference. |
842
- | `LOKI_CONFIDENCE_SPIKE` | `1` (on) | Forces one EXTRA verification pass when the agent's self-reported confidence spikes, instead of trusting the claim. Strictly additive -- it can never skip a gate. Set `0` to opt out; tune with `LOKI_CONFIDENCE_SPIKE_DELTA` (default `40`) and `LOKI_CONFIDENCE_SPIKE_MIN` (default `90`). |
843
- | `LOKI_GOAL_SCORING` | `1` (on) | Flags a goal with no measurable success condition and asks for a threshold, metric, or concrete artifact. Advisory only -- never blocks a build or rewrites the goal. Set `0` to opt out. |
844
- | `LOKI_SMART_RETRY` | `1` (on) | Stops early on a positively-identified permanent failure (bad credentials, unknown model, exhausted quota) rather than burning retries. Unrecognized errors and rate limits still retry as before. Set `0` to retry every failure. |
845
- | `LOKI_SIMPLE` | `0` (off) | EXPERIMENTAL. Strips the coaching half of the system prompt -- the RARV cycle, SDLC phases and memory habits that a frontier model already does natively. Per-iteration state (which gate failed, self-heal output, checklist status) is never touched, because that is information the model cannot derive. Measured at -78% prompt size, ~1562 tokens per iteration, on both the bash and Bun routes. INERT on degraded providers (Codex, Aider): those take an earlier return path whose prompt is already minimal by design, so the flag has nothing to strip there -- a measured zero, not an untested case. Whether it changes build speed or quality is NOT yet measured, so treat it as an experiment, not a tuning knob: run `benchmarks/run-prompt-ablation.sh` on your own workload before adopting it. |
846
-
847
- This is a subset. See the [wiki](wiki/Home.md) for the full env-var reference and the RARV-C closure knobs (`LOKI_INJECT_FINDINGS`, `LOKI_OVERRIDE_COUNCIL`, `LOKI_AUTO_LEARNINGS`, `LOKI_HANDOFF_MD`).
848
-
849
- </details>
850
-
851
- <details>
852
- <summary><strong>BMAD Method Integration</strong></summary>
853
-
854
- Loki Mode integrates with the [BMAD Method](https://github.com/bmad-code-org/BMAD-METHOD), a structured AI-driven agile methodology. If your project uses BMAD for requirements elicitation, Loki Mode can consume those artifacts directly:
855
-
856
- ```bash
857
- loki start --bmad-project ./my-project
858
- ```
859
-
860
- The adapter handles BMAD's frontmatter conventions, FR-format functional requirements, Given/When/Then acceptance criteria, and artifact chain validation. Non-BMAD projects are unaffected -- the integration is opt-in via `--bmad-project`.
861
-
862
- See [BMAD Integration Validation](docs/architecture/bmad-integration-validation.md).
863
-
864
- </details>
865
-
866
- <details>
867
- <summary><strong>Enterprise Features</strong></summary>
868
-
869
- Enterprise features are included but require env var activation.
870
-
871
- ```bash
872
- export LOKI_ENTERPRISE_AUTH=true # token auth (dashboard/auth.py)
873
- export LOKI_OIDC_ISSUER=https://accounts.google.com
874
- export LOKI_OIDC_CLIENT_ID=your-client-id # OIDC needs issuer + client id
875
- export LOKI_ENTERPRISE_AUDIT=true # force audit logging on
876
- export LOKI_TLS_CERT=/path/cert.pem # HTTPS: set BOTH cert and key
877
- export LOKI_TLS_KEY=/path/key.pem
878
- loki enterprise status
879
- ```
880
-
881
- [Enterprise Architecture](docs/enterprise/architecture.md) | [Security](docs/enterprise/security.md) | [Authentication](docs/authentication.md) | [Authorization](docs/authorization.md) | [Metrics](docs/metrics.md) | [Audit Logging](docs/audit-logging.md)
882
-
883
- </details>
884
-
885
- <details>
886
- <summary><strong>Benchmarks</strong></summary>
887
-
888
- Self-reported results from the included test harness. Verification scripts included for reproduction.
889
-
890
- | Benchmark | Result | Notes |
891
- |-----------|--------|-------|
892
- | HumanEval | 162/164 (98.78%) | Self-reported; harness + results JSON in `benchmarks/results/humaneval-loki-results.json`. Max 3 retries, RARV self-verification. |
893
- | SWE-bench | Not yet measured | Harness exists and generates patches, but the official SWE-bench evaluator has not been run, so there is no pass-rate to report. Run it yourself: `./benchmarks/run-benchmarks.sh swebench --execute` |
894
-
895
- See [benchmarks/](benchmarks/) for methodology.
896
-
897
- </details>
898
-
899
- <details>
900
- <summary><strong>Presentation</strong></summary>
901
-
902
- ![Loki Mode Presentation](docs/loki-mode-presentation.gif)
903
-
904
- *11 slides: Problem, Solution, 41 Agents, RARV Cycle, 8 Quality Gates (HumanEval 98.78%), Multi-Provider, Enterprise Hardening (Live App Preview), Full Lifecycle*
905
-
906
- **[Download PPTX](docs/loki-mode-presentation.pptx)**
907
-
908
- </details>
909
-
910
- ---
33
+ Before a build counts as done, a review council selects reviewers from a specialist pool (`agents/types.json`, scored by `run.sh:FOCUS_KEYWORDS`). The bundled MCP server exposes 36 tools over stdio (`mcp/server.py`).
911
34
 
912
35
  ## Loki 10 engine (preview)
913
36
 
914
37
  Opt-in: set LOKI_ENGINE=v10 <!-- loki10-default -->
915
38
 
916
- A rewritten engine is under active development. Full guide, provider
917
- table and the 5-line summary format: [docs/v10/GUIDE.md](docs/v10/GUIDE.md).
918
-
919
- ```
920
- LOKI_ENGINE=v10 loki "fix the login redirect loop" --no-pr
921
- ```
922
-
923
- The router (bin/loki), the CLI surface (`--help`), and the run itself
924
- (intake, plan, wall, implement, verify, seal, PR) are on main, so the
925
- command above executes a real build end to end. `status`, `verify` and
926
- `dashboard` are also built. The guide says exactly what is still wired up
927
- (`--resume`, Slack) and what already runs.
928
-
929
- ---
39
+ Guide, provider table and summary format: [docs/v10/GUIDE.md](docs/v10/GUIDE.md).
930
40
 
931
- ## Limitations
41
+ ## Full reference
932
42
 
933
- | Area | What Works | What Doesn't (Yet) |
934
- |------|-----------|---------------------|
935
- | **Code Gen** | Full-stack apps from PRDs | Complex domain logic may need human review |
936
- | **Deploy** | Generates configs, Dockerfiles, CI/CD; `loki deploy` prints the exact deploy command | Does not deploy -- human runs the printed deploy command (Loki never runs a cloud CLI or git push) |
937
- | **Testing** | 8 automated quality gates | Test quality depends on AI assertions |
938
- | **Providers** | 5 providers with auto-failover | Non-Claude providers lack parallel agents |
939
- | **Dashboard** | Real-time single-machine monitoring | No multi-node clustering |
43
+ The previous long README moved, unchanged apart from link paths, to [docs/README-FULL.md](docs/README-FULL.md). It holds:
940
44
 
941
- > **What "autonomous" means:** The system runs RARV cycles without prompting. It does NOT access your cloud accounts, payment systems, or external services unless you provide credentials. Human oversight is expected for deployment, API keys, and critical decisions.
45
+ - Install methods (Bun, npm, Homebrew, Docker), the Claude Code plugin, and first-build commands
46
+ - Try it without installing, and read-only brownfield mode
47
+ - The Evidence Receipt, verification and Proven PR sections
48
+ - Architecture, quality gates, memory, dashboard and the enterprise layer
49
+ - Comparisons with other tools, the CLI reference and configuration
50
+ - Loki 10 engine preview, limitations and research foundation
942
51
 
943
- ---
52
+ More: [Installation](docs/INSTALLATION.md) | [Documentation](wiki/Home.md) | [Comparison](docs/COMPARISON.md) | [Changelog](CHANGELOG.md) | [Contributing](CONTRIBUTING.md) | [Website](https://www.autonomi.dev/)
944
53
 
945
- ## Research Foundation
946
-
947
- <details>
948
- <summary><strong>Papers and sources</strong></summary>
949
-
950
- | Source | What We Use |
951
- |--------|-------------|
952
- | [Anthropic: Building Effective Agents](https://www.anthropic.com/research/building-effective-agents) | Evaluator-optimizer, parallelization |
953
- | [Anthropic: Constitutional AI](https://www.anthropic.com/research/constitutional-ai-harmlessness-from-ai-feedback) | Self-critique against quality principles |
954
- | [DeepMind: Scalable Oversight via Debate](https://deepmind.google/research/publications/34920/) | Debate-based verification in council review |
955
- | [DeepMind: SIMA 2](https://deepmind.google/blog/sima-2-an-agent-that-plays-reasons-and-learns-with-you-in-virtual-3d-worlds/) | Self-improvement loop design |
956
- | [OpenAI: Agents SDK](https://openai.github.io/openai-agents-python/) | Guardrails, tripwires, tracing |
957
- | [NVIDIA ToolOrchestra](https://github.com/NVlabs/ToolOrchestra) | Efficiency metrics, reward signals |
958
- | [CONSENSAGENT (ACL 2025)](https://aclanthology.org/2025.findings-acl.1141/) | Anti-sycophancy in blind review |
959
- | [GoalAct](https://arxiv.org/abs/2504.16563) | Hierarchical planning for complex PRDs |
960
-
961
- **Practitioner insights:** Boris Cherny, Simon Willison, [HN Community](https://news.ycombinator.com/item?id=44623207)
962
-
963
- **[Full Acknowledgements](docs/ACKNOWLEDGEMENTS.md)** -- 50+ papers and resources
964
-
965
- </details>
966
-
967
- ---
968
-
969
- ## Contributing
970
-
971
- ```bash
972
- git clone https://github.com/asklokesh/loki-mode.git && cd loki-mode
973
- npm install && npm test # CLI + Node test suites
974
- python3 -m pytest # Python test suite
975
- ```
976
-
977
- See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
978
-
979
- ## License
980
-
981
- [Business Source License 1.1](LICENSE) -- Free for personal, internal, academic, and non-commercial use. Converts to Apache 2.0 on March 19, 2030. Contact founder@autonomi.dev for commercial licensing.
982
-
983
- ---
984
-
985
- <div align="center">
986
-
987
- **[Autonomi](https://www.autonomi.dev/)** | **[Documentation](wiki/Home.md)** | **[Changelog](CHANGELOG.md)** | **[Comparisons](references/competitive-analysis.md)**
54
+ [![npm version](https://img.shields.io/npm/v/loki-mode?style=for-the-badge&logo=npm&logoColor=white&color=553DE9)](https://www.npmjs.com/package/loki-mode)
55
+ [![License](https://img.shields.io/badge/License-BUSL--1.1-36342E?style=for-the-badge)](LICENSE)
988
56
 
989
- </div>
57
+ License: [BUSL-1.1](LICENSE).