loki-mode 10.6.6 → 10.6.8

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 (114) hide show
  1. package/.github/actions/issue-to-pr/action.yml +25 -11
  2. package/.github/workflows/loki-issue-to-pr.yml +21 -10
  3. package/README.md +138 -54
  4. package/SKILL.md +11 -8
  5. package/VERSION +1 -1
  6. package/autonomy/lib/workspace.py +290 -0
  7. package/autonomy/lib/worktree_prep.py +143 -0
  8. package/autonomy/loki +68 -5
  9. package/autonomy/run.sh +26 -1
  10. package/bin/loki +9 -1
  11. package/completions/_loki +1 -0
  12. package/completions/loki.bash +1 -2
  13. package/dashboard/__init__.py +1 -1
  14. package/docs/AUDIT-CHAIN-THREAT-MODEL.md +1 -1
  15. package/docs/DEMOS.md +11 -26
  16. package/docs/EVALUATING.md +2 -3
  17. package/docs/INSTALLATION.md +2 -2
  18. package/docs/TOOLS.md +1 -1
  19. package/docs/WANG-PRINCIPLES-PLAN.md +1 -1
  20. package/docs/WORKSPACES.md +29 -0
  21. package/docs/air-gapped.md +1 -1
  22. package/docs/alternative-installations.md +3 -1
  23. package/docs/control-plane-container.md +45 -0
  24. package/docs/dashboard-guide.md +2 -0
  25. package/docs/dev/architecture-reference.md +4 -0
  26. package/docs/dev/project-structure.md +2 -2
  27. package/docs/dev/release-checklist.md +1 -2
  28. package/docs/enterprise/architecture.md +1 -1
  29. package/docs/siem-integration.md +2 -2
  30. package/docs/slack.md +26 -0
  31. package/docs/v10/BOARD.md +26 -1
  32. package/docs/v10/CONTROL-PLANE.md +4 -0
  33. package/docs/v10/D61-SPEED.md +83 -0
  34. package/docs/v10/DECISIONS.md +33 -0
  35. package/docs/v10/DEPS.md +6 -2
  36. package/docs/v10/E2E-D65.md +87 -0
  37. package/docs/v10/GUIDE.md +63 -1
  38. package/docs/v10/HANDOFF-NEXT-WEEK.md +40 -0
  39. package/docs/v10/PROGRESS.md +13 -0
  40. package/docs/v10/ROADMAP-D63.md +35 -0
  41. package/loki-ts/dist/loki.js +593 -569
  42. package/mcp/__init__.py +1 -1
  43. package/mcp/server.py +76 -0
  44. package/mcp/tests/test_v10_tools.py +137 -0
  45. package/mcp/v10_tools.py +172 -0
  46. package/package.json +1 -1
  47. package/packages/control-plane/dist/server.js +56 -4
  48. package/packages/control-plane/src/server/answer.ts +33 -0
  49. package/packages/control-plane/src/server/app.ts +17 -1
  50. package/packages/control-plane/src/server/runs.ts +2 -0
  51. package/packages/control-plane/src/server/serve.ts +2 -2
  52. package/packages/control-plane/ui/dist/assets/index-53E32yrO.js +114 -0
  53. package/packages/control-plane/ui/dist/assets/{index-BH3LtKcG.css → index-CFfrqCx2.css} +1 -1
  54. package/packages/control-plane/ui/dist/index.html +2 -2
  55. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  56. package/web-app/dist/assets/{AdminPage-CH-bmw4l.js → AdminPage-DN_pe8vo.js} +1 -1
  57. package/web-app/dist/assets/{Avatar-Bos-ky_x.js → Avatar-BnQsr8z-.js} +1 -1
  58. package/web-app/dist/assets/{Badge-DNJyHg9Y.js → Badge-DzERiZn2.js} +1 -1
  59. package/web-app/dist/assets/{Button-KqD3Tt-I.js → Button-CaaoxQAt.js} +1 -1
  60. package/web-app/dist/assets/{CockpitPage-l6oTsRaL.js → CockpitPage-SXhnysJA.js} +1 -1
  61. package/web-app/dist/assets/{ComparePage-DN6uxXko.js → ComparePage-krxTCFJY.js} +1 -1
  62. package/web-app/dist/assets/{ErrorBoundary-CKQhnvU9.js → ErrorBoundary-BL96ESMc.js} +1 -1
  63. package/web-app/dist/assets/{EvidenceReceiptPanel-CzSIqLmy.js → EvidenceReceiptPanel-PUiGSpkB.js} +1 -1
  64. package/web-app/dist/assets/{GitHubIssuesPanel-YJUcDezn.js → GitHubIssuesPanel-C0hPs-P2.js} +1 -1
  65. package/web-app/dist/assets/{GitHubPRsPanel-Bv7xFvJN.js → GitHubPRsPanel-CLvqNUlu.js} +1 -1
  66. package/web-app/dist/assets/{HomePage-CJsxBbii.js → HomePage-X-sq_Rc9.js} +2 -2
  67. package/web-app/dist/assets/{LoginPage-D1V2Ag0s.js → LoginPage-DhQuwdua.js} +1 -1
  68. package/web-app/dist/assets/{MagicPage-BBVNMEr5.js → MagicPage-CP2ODjfn.js} +1 -1
  69. package/web-app/dist/assets/{MetricsPage-CtHM-IlA.js → MetricsPage-C6SYiQES.js} +1 -1
  70. package/web-app/dist/assets/{NotFoundPage-BBEEJLj5.js → NotFoundPage-CCDxxYc-.js} +1 -1
  71. package/web-app/dist/assets/{ProjectPage-BVRJoEaQ.js → ProjectPage-yDF--8FQ.js} +3 -3
  72. package/web-app/dist/assets/{ProjectsPage-DqaA9rUa.js → ProjectsPage-BBLspdLn.js} +1 -1
  73. package/web-app/dist/assets/{SettingsPage-B_RQV_vF.js → SettingsPage-C_sWbQRw.js} +1 -1
  74. package/web-app/dist/assets/{ShowcasePage-DqN-mrZ8.js → ShowcasePage-xCMuL0N8.js} +1 -1
  75. package/web-app/dist/assets/{SystemSettingsPage-D-CvuL-K.js → SystemSettingsPage-DnJKGCx7.js} +1 -1
  76. package/web-app/dist/assets/{TeamsPage-CzkkDcPj.js → TeamsPage-BBXdhrSs.js} +1 -1
  77. package/web-app/dist/assets/{TemplatesPage-Bbchk7YQ.js → TemplatesPage-AZ1Lr1rn.js} +1 -1
  78. package/web-app/dist/assets/{TerminalOutput-B32BAX--.js → TerminalOutput-CtIm9tXc.js} +1 -1
  79. package/web-app/dist/assets/{activity-C9vnEmhG.js → activity-Dk1FK25Q.js} +1 -1
  80. package/web-app/dist/assets/{bell-XsIhkyjq.js → bell-dhqXyzP4.js} +1 -1
  81. package/web-app/dist/assets/{bot-CvQhqBws.js → bot-CExHd4Kf.js} +1 -1
  82. package/web-app/dist/assets/{check-HmG8WcD-.js → check-D51zaA1a.js} +1 -1
  83. package/web-app/dist/assets/{chevron-left-C1KNgnbD.js → chevron-left-DEwnQzH1.js} +1 -1
  84. package/web-app/dist/assets/{circle-alert-DSmCvZju.js → circle-alert-C6U90Msk.js} +1 -1
  85. package/web-app/dist/assets/{clock-CPhE3RXd.js → clock-6mFbMzzH.js} +1 -1
  86. package/web-app/dist/assets/{cloud-29lwqocB.js → cloud-BrZZtE7F.js} +1 -1
  87. package/web-app/dist/assets/{code-xml-4jZUzbPt.js → code-xml-DTFzeepP.js} +1 -1
  88. package/web-app/dist/assets/{database-H0Ct2r-8.js → database-B5rEiTre.js} +1 -1
  89. package/web-app/dist/assets/{dollar-sign-DsXkO0yT.js → dollar-sign-bQs4rlS_.js} +1 -1
  90. package/web-app/dist/assets/{file-code-corner-BM8w_nvX.js → file-code-corner-Mo6e6qbf.js} +1 -1
  91. package/web-app/dist/assets/{file-plus-BWkYTJ4D.js → file-plus-DzHZ0jpP.js} +1 -1
  92. package/web-app/dist/assets/{globe-FOFDl_8Z.js → globe-DYN9UhTa.js} +1 -1
  93. package/web-app/dist/assets/{hammer-orm5gvky.js → hammer-bB0hSRcJ.js} +1 -1
  94. package/web-app/dist/assets/{index-B6juCuPX.js → index-CIH5CqZB.js} +3 -3
  95. package/web-app/dist/assets/{layers-DUQPkPAl.js → layers-qhFkY8Nu.js} +1 -1
  96. package/web-app/dist/assets/{loader-circle-Deq6bDar.js → loader-circle-BGBkaYH7.js} +1 -1
  97. package/web-app/dist/assets/{lock-CSzWTPRC.js → lock-DIcsNFum.js} +1 -1
  98. package/web-app/dist/assets/{package-CmACgZuF.js → package-BdIIbZhS.js} +1 -1
  99. package/web-app/dist/assets/{plus-BjPW5v3A.js → plus-Co1Bv8zT.js} +1 -1
  100. package/web-app/dist/assets/{refresh-cw-DhI1sHaj.js → refresh-cw-CGF4ABWH.js} +1 -1
  101. package/web-app/dist/assets/{rotate-ccw-Byi2ouWB.js → rotate-ccw-BX10Q79h.js} +1 -1
  102. package/web-app/dist/assets/{scroll-text-gq7bJ81H.js → scroll-text-CbXDlpGp.js} +1 -1
  103. package/web-app/dist/assets/{server-YbY5s1-X.js → server-CIhi6yUO.js} +1 -1
  104. package/web-app/dist/assets/{shield-alert-DhKjtwZt.js → shield-alert-DJ5fB6Dg.js} +1 -1
  105. package/web-app/dist/assets/{thumbs-up-D2X5JR-5.js → thumbs-up-BEft2T94.js} +1 -1
  106. package/web-app/dist/assets/{trash-2-BHAmMxTq.js → trash-2-CWGUPn7Y.js} +1 -1
  107. package/web-app/dist/assets/{trending-down-C41kQa-Q.js → trending-down-CjqstvxQ.js} +1 -1
  108. package/web-app/dist/assets/{trending-up-M-OK_9DC.js → trending-up-CTyLjMzE.js} +1 -1
  109. package/web-app/dist/assets/{upload-CarpPiGw.js → upload-BmRx-uv4.js} +1 -1
  110. package/web-app/dist/assets/{usePolling-rJ7rM7R0.js → usePolling-ChHkSJye.js} +1 -1
  111. package/web-app/dist/assets/{user-cBhWpZen.js → user-ZXh_f35z.js} +1 -1
  112. package/web-app/dist/index.html +1 -1
  113. package/docs/walkthrough/README.md +0 -44
  114. package/packages/control-plane/ui/dist/assets/index-B6EiyukW.js +0 -114
@@ -15,7 +15,7 @@ branding:
15
15
  # ran the agent; this one does not.
16
16
  #
17
17
  # Token co-location within THIS job: the fetch step below holds GH_TOKEN and
18
- # runs no agent; the agent step runs `loki start` on the pre-fetched PRD file
18
+ # runs no agent; the agent step runs Loki 10 (`loki "<task>" --no-pr`) on the pre-fetched PRD text
19
19
  # and is given no token (GH_TOKEN/GITHUB_TOKEN/GH_ENTERPRISE_TOKEN/
20
20
  # GITHUB_ENTERPRISE_TOKEN all explicitly blanked, overriding anything the
21
21
  # caller's `uses:` step set at a level this composite's steps would otherwise
@@ -191,7 +191,8 @@ runs:
191
191
  env:
192
192
  LOKI_PROVIDER: ${{ inputs.provider }}
193
193
  LOKI_BUDGET_LIMIT: ${{ inputs.budget_limit }}
194
- LOKI_MAX_ITERATIONS: ${{ inputs.max_iterations }}
194
+ LOKI_MAX_ITERATIONS: ${{ inputs.max_iterations }} # not read by engine10
195
+ LOKI_E10_CAP_S: '2400'
195
196
  # The agent step never pushes or opens a PR (Rule of Two).
196
197
  LOKI_DELEGATE_PR: '0'
197
198
  ISSUE_REF: ${{ steps.ref.outputs.ref }}
@@ -213,29 +214,42 @@ runs:
213
214
 
214
215
  START_SHA="$(git rev-parse HEAD)"
215
216
  RC=0
216
- loki start "$PRD_FILE" || RC=$?
217
+ # Loki 10 engine, routed explicitly: the task is prefixed so it is always
218
+ # multi-word and never starts with "-" (bin/loki sends a one-word or
219
+ # flag-first argument to the legacy CLI or a subcommand, and a body like
220
+ # "status" would otherwise run that subcommand). The task goes first and
221
+ # --no-pr after it, because a flag-first call also stays on legacy.
222
+ # --no-pr: engine10 ignores LOKI_DELEGATE_PR; this step holds no token.
223
+ # The run commits on loki/<runId> in this checkout, so HEAD has the change.
224
+ TASK="Resolve ${ISSUE_REF}. Task spec follows. $(cat "$PRD_FILE")"
225
+ loki "$TASK" --no-pr || RC=$?
217
226
 
218
227
  OUT="$RUNNER_TEMP/loki-out"
219
228
  mkdir -p "$OUT"
220
229
  git diff --binary "$START_SHA" HEAD -- . ':(exclude).loki' > "$OUT/loki.patch"
230
+ # PR body: the Loki 10 receipt this run sealed under .loki/runs/e10-*/.
231
+ # Rendered from the run's own receipt.md; the digest comes from receipt.json.
232
+ RUN_DIR="$(ls -d .loki/runs/e10-* 2>/dev/null | sort | tail -n 1)"
221
233
  {
222
234
  echo "Resolves ${ISSUE_REF}."
223
235
  echo ""
224
- ID="$(cat .loki/state/last-proof-id.txt 2>/dev/null || true)"
225
- LIB="$(npm root -g)/loki-mode/autonomy/lib/proof-pr.sh"
226
- if [ -n "$ID" ] && [ -f ".loki/proofs/$ID/proof.json" ] && [ -f "$LIB" ]; then
227
- # shellcheck source=/dev/null
228
- . "$LIB" && render_evidence_receipt_md ".loki/proofs/$ID/proof.json" "" ""
236
+ if [ -n "$RUN_DIR" ] && [ -f "$RUN_DIR/receipt.md" ]; then
237
+ head -c 20000 "$RUN_DIR/receipt.md"
238
+ cp "$RUN_DIR/receipt.json" "$OUT/receipt.json" 2>/dev/null || true
239
+ SHA="$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1])).get("receipt_sha256",""))' "$RUN_DIR/receipt.json" 2>/dev/null || true)"
240
+ echo ""
241
+ echo "Receipt digest (sha256): ${SHA:-unavailable}"
242
+ echo "Check it: download the loki-patch artifact of this run and run \`loki verify receipt.json\`."
229
243
  else
230
- echo "Evidence Receipt: unavailable for this run."
244
+ echo "Evidence Receipt: unavailable for this run (no receipt under .loki/runs/)."
231
245
  fi
232
246
  } > "$OUT/pr-body.md"
233
247
  echo "patch=$OUT/loki.patch" >> "$GITHUB_OUTPUT"
234
248
  echo "pr_body=$OUT/pr-body.md" >> "$GITHUB_OUTPUT"
235
249
 
236
250
  echo "::warning::This action does not open the pull request (Rule of Two). Upload outputs.patch and open the PR from a job that holds the write token and runs no agent; see .github/workflows/loki-issue-to-pr.yml in asklokesh/loki-mode."
237
- if [ -d .loki/proofs ]; then
238
- echo "Evidence receipts under .loki/proofs/"
251
+ if [ -n "$RUN_DIR" ]; then
252
+ echo "Loki 10 receipt under $RUN_DIR/"
239
253
  fi
240
254
 
241
255
  exit "$RC"
@@ -82,8 +82,10 @@ jobs:
82
82
  # to fetch the issue and withholds it from the agent session.
83
83
  GH_TOKEN: ${{ github.token }}
84
84
  ISSUE: ${{ github.event.issue.number || inputs.issue }}
85
- LOKI_BUDGET_LIMIT: '10.00'
86
- LOKI_MAX_ITERATIONS: '20'
85
+ # engine10 reads no cost or iteration cap; its only cap is wall time.
86
+ LOKI_E10_CAP_S: '2400'
87
+ LOKI_BUDGET_LIMIT: '10.00' # not read by engine10; kept for the legacy path
88
+ LOKI_MAX_ITERATIONS: '20' # not read by engine10; kept for the legacy path
87
89
  # Never push or open a PR from here; the publish job does that.
88
90
  LOKI_DELEGATE_PR: '0'
89
91
  run: |
@@ -97,7 +99,12 @@ jobs:
97
99
  git config user.email "${GITHUB_ACTOR:-loki-mode}@users.noreply.github.com"
98
100
 
99
101
  RC=0
100
- loki start "${GITHUB_REPOSITORY}#${ISSUE}" || RC=$?
102
+ # Loki 10 issue entry. --no-pr is required: engine10 ignores
103
+ # LOKI_DELEGATE_PR, and this job's read-only token cannot push, open a
104
+ # PR or comment (supervisor.ts main: noPr drops opts.pr and opts.comment).
105
+ # The run commits on branch loki/<runId> checked out in this very
106
+ # checkout (stages/intake.ts ensureBranch), so HEAD carries the change.
107
+ loki "${GITHUB_REPOSITORY}#${ISSUE}" --no-pr || RC=$?
101
108
 
102
109
  OUT="$RUNNER_TEMP/loki-out"
103
110
  mkdir -p "$OUT"
@@ -105,17 +112,21 @@ jobs:
105
112
  # this run started from. .loki/ is run state, never part of the change.
106
113
  git diff --binary "$GITHUB_SHA" HEAD -- . ':(exclude).loki' > "$OUT/loki.patch"
107
114
 
108
- # PR body: the evidence receipt this run wrote, when there is one.
115
+ # PR body: the Loki 10 receipt this run sealed under .loki/runs/e10-*/.
116
+ # Rendered from the run's own receipt.md; the digest comes from receipt.json.
117
+ RUN_DIR="$(ls -d .loki/runs/e10-* 2>/dev/null | sort | tail -n 1)"
109
118
  {
110
119
  echo "Resolves #${ISSUE}."
111
120
  echo ""
112
- ID="$(cat .loki/state/last-proof-id.txt 2>/dev/null || true)"
113
- LIB="$(npm root -g)/loki-mode/autonomy/lib/proof-pr.sh"
114
- if [ -n "$ID" ] && [ -f ".loki/proofs/$ID/proof.json" ] && [ -f "$LIB" ]; then
115
- # shellcheck source=/dev/null
116
- . "$LIB" && render_evidence_receipt_md ".loki/proofs/$ID/proof.json" "" ""
121
+ if [ -n "$RUN_DIR" ] && [ -f "$RUN_DIR/receipt.md" ]; then
122
+ head -c 20000 "$RUN_DIR/receipt.md"
123
+ cp "$RUN_DIR/receipt.json" "$OUT/receipt.json" 2>/dev/null || true
124
+ SHA="$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1])).get("receipt_sha256",""))' "$RUN_DIR/receipt.json" 2>/dev/null || true)"
125
+ echo ""
126
+ echo "Receipt digest (sha256): ${SHA:-unavailable}"
127
+ echo "Check it: download the loki-patch artifact of this run and run \`loki verify receipt.json\`."
117
128
  else
118
- echo "Evidence Receipt: unavailable for this run."
129
+ echo "Evidence Receipt: unavailable for this run (no receipt under .loki/runs/)."
119
130
  fi
120
131
  } > "$OUT/pr-body.md"
121
132
 
package/README.md CHANGED
@@ -11,7 +11,7 @@ An autonomous software factory that knows what it is supposed to deliver, and pr
11
11
 
12
12
  Loki Mode is a free, source-available autonomous coding agent by [Autonomi](https://www.autonomi.dev/). Hand it a PRD, GitHub issue, OpenAPI doc or one-line brief. It derives a delivery contract (the acceptance criteria), builds against it, and ends with a signed 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.
13
13
 
14
- 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`).
14
+ 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 39 tools over stdio (`mcp/server.py`), including `loki_v10_run`, `loki_v10_status` and `loki_v10_verify` to start a Loki 10 run in the background, read its phase, verdict and cost, and verify its receipt.
15
15
 
16
16
  ## Contents
17
17
 
@@ -42,12 +42,14 @@ loki doctor # checks your setup, names any blocker
42
42
 
43
43
  Upgrade with `loki self-update`. Long form: [Installation Guide](docs/INSTALLATION.md). `npm install -g loki-mode` installs the `latest` dist-tag; see [Release channels](#release-channels-next-and-latest) for `next`.
44
44
 
45
- **Loki needs a model to drive.** An `ANTHROPIC_API_KEY` alone is enough (the Claude Agent SDK ships inside Loki; on the default engine this path needs Bun and `LOKI_SDK_MODE=full`, see Setup details below), or point it at Claude Code, Cline, Codex, Aider or opencode. `loki doctor` tells you exactly what is missing.
45
+ **Loki needs a model to drive.** An `ANTHROPIC_API_KEY` alone is enough (the Claude Agent SDK ships inside Loki; on the legacy engine this path needs Bun and `LOKI_SDK_MODE=full`, see Setup details below), or point it at Claude Code, Cline, Codex, Aider or opencode. `loki doctor` tells you exactly what is missing.
46
46
 
47
47
  ```bash
48
48
  export ANTHROPIC_API_KEY=sk-...
49
49
  loki doctor
50
- loki quick "fix the login bug" # one small task on the Loki 10 engine
50
+ loki quick "fix the login bug" # one small task on the Loki 10 engine, no PR
51
+ loki "fix the login redirect loop" --no-pr # any task, Loki 10 engine
52
+ loki owner/repo#123 # one GitHub, GitLab or Jira issue to a pull request, Loki 10 engine
51
53
  ```
52
54
 
53
55
  <details>
@@ -71,7 +73,7 @@ loki-seal is a Claude Code Stop hook that runs your repo's real test suite when
71
73
 
72
74
  ## Loki 10 engine
73
75
 
74
- Loki Mode now runs the v10 engine for all commands. <!-- loki10-default -->
76
+ Loki 10 is the default engine for `loki "<task>"`, `loki owner/repo#N` and `loki quick "<task>"`. <!-- loki10-default -->
75
77
 
76
78
  Guide, provider table and summary format: [docs/v10/GUIDE.md](docs/v10/GUIDE.md).
77
79
 
@@ -83,9 +85,9 @@ loki "fix the login redirect loop" --no-pr
83
85
  loki owner/repo#123
84
86
  ```
85
87
 
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.
88
+ 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, `--max-cost <usd>` sets the per-run cost cap (default $20.00, or `budgets.per_run` in `loki.yaml`; the flag wins; the start line prints it as `cap $20.00 (default)`; reaching it ends the run BUDGET_STOP, exit 3) (`--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
89
 
88
- Migration note: Legacy engine removed in 10.6.0; use `loki "<task>"`, `loki owner/repo#N`, or `loki backlog` instead.
90
+ **Legacy engine (being removed).** The previous engine still ships in 10.6.6 and is reachable with `LOKI_ENGINE=legacy` or `loki legacy <args>`. `loki start owner/repo#N`, `loki start <issue URL>` and `loki start "<multi-word task>"` run on Loki 10, the same as `loki owner/repo#N` and `loki "<task>"`; `loki start ./prd.md`, a flag-first call and a one-word start stay on the legacy engine. For many issues use `loki backlog owner/repo --all|--label X|--issues N,N` (many issues, N in parallel, each on a `loki/backlog-N` worktree branch) instead. Legacy removal is planned and resumes on 2026-10-07; see [docs/v10/LEGACY-REMOVAL.md](docs/v10/LEGACY-REMOVAL.md). Sections below marked "legacy" describe features that run only on that engine.
89
91
 
90
92
  ### The state machine
91
93
 
@@ -115,14 +117,81 @@ flowchart TD
115
117
  | implement | A provider session makes the change, under a time budget (480s default, 1800s with `--deep`). |
116
118
  | verify and fix | Runs the checks. Failures feed up to 2 fix rounds (`MAX_FIX_ROUNDS`). The same failures three verifies running end the run as STALLED. |
117
119
  | commit and seal | Commits the diff, then writes `.loki/runs/<run-id>/receipt.json` and `receipt.md`, signed by default. |
118
- | pr | Opened by the supervisor, not the worker (the worker never holds a GitHub token). A non-VERIFIED run opens a draft PR. |
120
+ | pr | Opened by the supervisor, not the worker (the worker never holds a GitHub token). A non-VERIFIED run opens a draft PR. The body is written for a 60-second review: what the issue asked, what changed, how it was tested, NOT PROVEN, then the receipt digest and `loki verify`. Data the run did not record prints "not recorded". |
119
121
  | deep verify | Detached, started after the PR opens (so not with `--no-pr`): full suite, app-boot probe, council, secret scan. A check that is refused or unavailable is reported as NOT PROVEN, never as red. `--deep` is a separate flag that raises the implement and run budgets. |
120
122
 
123
+ Warm start (experimental, `LOKI_SPEED=1`, off by default): `loki engine10 dashboard` also serves a unix socket at `~/.loki/run/engine.sock` (override with `LOKI_WARM_SOCK`) that keeps the repo map and test map in memory, keyed by the tree SHA plus a hash of dirty files, so an edit invalidates them. A run tries the socket for 50ms and prints `warm in Xs` when it answers; with no daemon it runs the cold path with identical events.
124
+
125
+ PR body sample (`loki-ts/src/e10ext/reviewer_body.ts`):
126
+
127
+ ```
128
+ ## What the issue asked
129
+ - handles empty input
130
+ - rejects bad tokens
131
+
132
+ ## What changed and why
133
+ - Why: Fix the parser
134
+ - src/parser.ts
135
+ - tests/parser.test.ts
136
+
137
+ ## How it was tested
138
+ - Verdict: VERIFIED
139
+ - Checks: 2 passed, 0 failed, 0 not run, 0 flaky (4 individual tests counted)
140
+ - Command: `bun test tests/parser.test.ts` -> pass
141
+ - Target tests (written before the fix): parser.test.ts
142
+ - Before the fix: 2 failing, 0 passing on base; after: pass
143
+
144
+ ## NOT PROVEN
145
+ - none
146
+
147
+ ## Receipt
148
+ - Digest: sha256:ab12... (signed)
149
+ - Verify: `loki verify run-1`
150
+ ```
151
+
121
152
  The run cap is 900s (2700s with `--deep`, `DEFAULT_CAP_S` and `DEEP_CAP_S` in `types.ts`); commit, seal and pr still run after the cap fires. A run whose cap fired and which did not verify exits BUDGET_STOP.
122
153
 
123
154
  A finished run prints a short summary (see [Quiet output](#quiet-output), which also shows an example) whose `NOT PROVEN` line is never empty by omission: deep checks deferred to the deep-verify pass are always listed there.
124
155
 
125
- `loki status [run-id]`, `loki verify [run-id]` and `loki dashboard` are built on the v10 path. Slack notifications are not part of the v10 engine surface yet.
156
+ `loki status [run-id]` and `loki verify [run-id]` are built on the v10 path (bare `loki verify` follows the newest run, v10 or legacy). `loki dashboard` and `loki status` reach the v10 commands with `LOKI_ENGINE=v10`. Slack notifications are not part of the v10 engine surface yet.
157
+
158
+ ## Run from Jira or Linear
159
+
160
+ Loki 10 can start from a Jira or Linear issue the same way it starts from a GitHub issue: same run, same receipt. The issue is fetched deterministically before any model runs and normalized into the same `issue.json`, with a `source` field of `jira` or `linear`.
161
+
162
+ ```bash
163
+ loki jira:PROJ-123 # or https://<site>.atlassian.net/browse/PROJ-123
164
+ loki linear:ENG-42 # or a linear.app issue URL
165
+ ```
166
+
167
+ - Jira needs `JIRA_EMAIL` and `JIRA_API_TOKEN`, plus `JIRA_BASE_URL` (for example `https://acme.atlassian.net`) unless you pass the full browse URL. The ADF description is converted to plain text.
168
+ - Linear needs `LINEAR_API_KEY`.
169
+ - A missing variable stops the run before any work with an error naming it (exit code 2, like other intake errors). GitHub refs are unchanged.
170
+
171
+ ## Two-way Slack (preview)
172
+
173
+ With `LOKI_SLACK_INBOUND=1`, `loki slack serve --port N` (127.0.0.1 by default) lets you mention `@loki <issue ref or task>` in Slack to start a run, and answer a BLOCKED question in the same thread. Needs `SLACK_BOT_TOKEN` and `SLACK_SIGNING_SECRET` in the environment. See [docs/slack.md](docs/slack.md) for the scopes.
174
+
175
+ ## Spec to contract
176
+
177
+ Opt in with `LOKI_CONTRACT=1` (off by default). `loki contract <spec.md>` parses a spec or PRD into numbered acceptance criteria (AC-1, AC-2, up to 50) from checklist items (`- [ ]`) and from bullets and numbered lists under headings such as "Acceptance criteria", "Requirements" or "Must", prints them, and writes `.loki/contract.json` at the repo root. When a run seals with a contract present, each criterion is matched to changed files and checks by keyword overlap and recorded in an optional `contract` field on the receipt (`keyword_match` or `no_match`). Unmatched criteria are listed under NOT PROVEN in the receipt and the PR body (advisory only, the verdict is unchanged). Keyword overlap is a heuristic: `keyword_match` means a changed file plausibly relates to the criterion, not that the criterion is proven. The legacy PRD path is unchanged.
178
+
179
+ ## Triggers without a cloud
180
+
181
+ Both run on your own GitHub Actions minutes; there is no hosted service.
182
+
183
+ - Issue to PR: copy `.github/workflows/loki-issue-to-pr.yml` into your repository. Label an issue `loki`, or comment `/loki` as an owner, member or collaborator, and it runs `loki owner/repo#N` (the Loki 10 engine) and opens a pull request with an evidence receipt. The agent job holds a read-only token; a separate publish job opens the PR. Set `ANTHROPIC_API_KEY` in repository secrets.
184
+ - Nightly backlog: copy `examples/loki-nightly-backlog.yml` into `.github/workflows/`. Its `schedule:` trigger runs `loki backlog owner/repo --label loki`, one Loki 10 run per labeled open issue:
185
+
186
+ ```yaml
187
+ on:
188
+ schedule:
189
+ - cron: '17 3 * * *' # nightly, 03:17 UTC
190
+ # ...
191
+ - run: loki backlog "${GITHUB_REPOSITORY}" --label loki --concurrency 2
192
+ ```
193
+
194
+ `loki backlog` also takes `--all`, `--issues 1,2,3` and `--dry-run`. The nightly job runs the agent and a write token together, so label only issues you trust.
126
195
 
127
196
  ## Outcomes and exit codes
128
197
 
@@ -134,7 +203,7 @@ A v10 run ends in exactly one outcome. The mapping is `EXIT` in `loki-ts/src/eng
134
203
  | 0 | ALREADY_SATISFIED | The work was already done; evidence is recorded. |
135
204
  | 1 | FAILED | A check failed, the stage failed, or the event log was modified outside the engine. |
136
205
  | 2 | (usage) | No task given, not inside a git repository, or a preflight refusal. Nothing ran. |
137
- | 3 | BUDGET_STOP | The cost or time cap fired before the work finished. |
206
+ | 3 | BUDGET_STOP | The cost cap (`--max-cost`, `budgets.per_run`, default $20.00) or the time cap fired before the work finished. |
138
207
  | 4 | BLOCKED | Spec conflict: the contract cannot be satisfied as written. The summary names the conflict (`spec conflict: <reason>`); the run never guesses and calls it done. |
139
208
  | 5 | STALLED | The same failures three verifies in a row. |
140
209
 
@@ -164,6 +233,10 @@ loki verify
164
233
 
165
234
  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.
166
235
 
236
+ ### Visual evidence (opt-in)
237
+
238
+ With `LOKI_VISUAL_EVIDENCE=1`, a v10 run that changed web page files (html, jsx, tsx, vue, svelte under app/, pages/, src/ or public/) starts the repo's dev, preview or start script and screenshots each changed route with the repo's own Playwright (nothing is downloaded) into a fresh per-run directory `.loki/runs/<run_id>/evidence/<random>/` (at most 5 routes, total capture budget 25s, aborted with the seal stage). API-only repos with an openapi file get an HTTP transcript at `.loki/runs/<run_id>/evidence/<random>/http.json` (not hashed into the receipt). Each screenshot's sha256 is recorded in the receipt as `evidence_screens`, the PR body gets an Evidence section, and `loki verify` reports TAMPERED if a recorded screenshot is altered, missing or a symlink. Capture never fails the run; a skip is listed in NOT PROVEN. Off by default.
239
+
167
240
  ## Quiet output
168
241
 
169
242
  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.
@@ -189,17 +262,6 @@ The first-run gate runs the README's default entry point for a new user on a thr
189
262
 
190
263
  Policy (D49): every green release is promoted to `latest` after the automated first-run gate. The promote workflow runs automatically after Post-Release Smoke succeeds; a failed smoke or gate leaves the version on `next`. `workflow_dispatch` remains for manual runs of an exact version.
191
264
 
192
- ```mermaid
193
- flowchart LR
194
- S[Slice: one engineer, own tests] --> M[Merge when green]
195
- M --> T[Train: batch pushed once]
196
- T --> CI[Full CI on the exact SHA]
197
- CI --> N[npm next]
198
- N --> G[Automated first-run gate on the installed version]
199
- G -- pass --> L[npm latest, Docker latest, Homebrew]
200
- G -- fail --> X[Stays on next, fix-forward slice]
201
- ```
202
-
203
265
  ## loki doctor
204
266
 
205
267
  ```bash
@@ -214,6 +276,24 @@ Exit 0 when every required check passes; optional warnings (an absent provider C
214
276
 
215
277
  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).
216
278
 
279
+ ## Control Plane v0 (preview)
280
+
281
+ A local control plane and UI for many runs, off by default. Enable it with `LOKI_CONTROL=1`:
282
+
283
+ ```bash
284
+ LOKI_CONTROL=1 loki control serve # 127.0.0.1, default port 47821 (--port N, --db PATH)
285
+ LOKI_CONTROL=1 loki control backfill . # ship ./.loki/runs to the control plane
286
+ LOKI_CONTROL=1 loki control status # reachable? how many runs held?
287
+ ```
288
+
289
+ The URL comes from `LOKI_CONTROL_URL`, else `http://127.0.0.1:${LOKI_CONTROL_PORT:-47821}`. Set `LOKI_CONTROL_URL` on a run to ship it live. See [docs/v10/CONTROL-PLANE.md](docs/v10/CONTROL-PLANE.md).
290
+
291
+ Answering a BLOCKED run: when a run stops on a spec conflict, its run page shows the question and an answer box. Submitting posts to `POST /v1/runs/<source>/<run>/answer` (JSON `{"answer": "..."}`, up to 4000 characters, loopback only) and writes `~/.loki/control/answers/<source>/<run>.answer.txt` (override the directory with `LOKI_CONTROL_ANSWER_DIR`). The page prints the resume command, which re-runs the task with that file's text.
292
+
293
+ Set `LOKI_CONTROL_DEFAULT=1` (off by default) to make `loki dashboard`, `loki dashboard start` and `loki dashboard open` start the Control Plane instead of the old dashboard. The old dashboard is unchanged when the flag is unset.
294
+
295
+ Container, Helm and ECS deployment: [docs/control-plane-container.md](docs/control-plane-container.md).
296
+
217
297
  ## Providers
218
298
 
219
299
  Loki's autonomy and quality loop are the product; the coding CLI is swappable. With `LOKI_PROVIDER` unset, Loki auto-detects the first installed provider in this order (`providers/loader.sh`): claude, cline, codex, aider, opencode. An explicit choice always wins and is never silently substituted. Gemini CLI is deprecated: `LOKI_PROVIDER=gemini` exits with a migration message.
@@ -284,13 +364,13 @@ completion claim is backed by deterministic evidence and is independently
284
364
  re-checkable; it does not claim the generated code is bug-free.
285
365
 
286
366
  <details>
287
- <summary><b>Setup details: providers, other models, what loki doctor checks</b></summary>
367
+ <summary><b>Setup details: providers, other models, what loki doctor checks (PRD-file examples use the legacy `loki start`)</b></summary>
288
368
 
289
- Other spec sources work the same way:
369
+ The `loki start <file>` examples below run on the legacy engine (being removed). A `loki start` call with an issue ref, an issue URL or a quoted multi-word task runs on Loki 10; the provider and model variables apply to both engines. Other spec sources on the legacy engine:
290
370
 
291
371
  ```bash
292
372
  loki init my-app --template simple-todo-app # scaffold a starter PRD
293
- loki start owner/repo#123 # a GitHub issue
373
+ loki start owner/repo#123 # a GitHub issue (Loki 10; same as: loki owner/repo#123)
294
374
  loki start ./openapi.yaml # an OpenAPI/YAML spec
295
375
  loki demo --offline # replay a sample receipt, no key, no spend
296
376
  ```
@@ -381,7 +461,7 @@ Required:
381
461
 
382
462
  - 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.
383
463
  - Python 3.8+ (`python3`) for the dashboard, memory system, and orchestration helpers.
384
- - Node.js 18+ (`node`) for the npm install path and the bundled runtime.
464
+ - Node.js 20+ (`node`) for the npm install path and the bundled runtime.
385
465
  - `jq` for the JSON that the shell flows and the quality gates parse.
386
466
  - Git 2.x (`git`) for checkpoints and worktrees.
387
467
  - `curl` for installation and network calls.
@@ -414,9 +494,9 @@ See the [Installation Guide](docs/INSTALLATION.md) for the long form.
414
494
  ---
415
495
 
416
496
  <details>
417
- <summary><strong>Runtime architecture: dual Bash/Bun runtime and the rollback flag</strong></summary>
497
+ <summary><strong>Runtime architecture: dual Bash/Bun runtime</strong></summary>
418
498
 
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.
499
+ The Loki 10 engine runs on the Bun runtime. The legacy engine is Bash (`autonomy/loki`) and is being removed.
420
500
 
421
501
  - Commands that require Bun: `version`, `--version`, `-v`, `status`, `stats`, `doctor`, `provider`, `memory`, `rollback`, `kpis`, `trust`, `wiki`, `crash`, `internal`, and `report kpis`.
422
502
  - If `bun` is not on `PATH`, commands exit 1 with installation instructions.
@@ -427,9 +507,9 @@ See [UPGRADING.md](UPGRADING.md) and [ADR-001: Runtime Migration](docs/architect
427
507
  </details>
428
508
 
429
509
  <details>
430
- <summary><strong>Supported spec formats</strong></summary>
510
+ <summary><strong>Supported spec formats (legacy engine, being removed)</strong></summary>
431
511
 
432
- 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.
512
+ Loki 10 takes a quoted task or an issue reference (GitHub, GitLab or Jira), also through `loki start`. The table below describes the legacy `loki start`, which accepts files too; rows for an issue ref or an issue URL run on Loki 10. 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.
433
513
 
434
514
  | Format | Example | Notes |
435
515
  |--------|---------|-------|
@@ -460,31 +540,35 @@ For how Loki compares with other tools, see [docs/COMPARISON.md](docs/COMPARISON
460
540
  <details>
461
541
  <summary><strong>All commands</strong></summary>
462
542
 
543
+ Loki 10 engine:
544
+
463
545
  | Command | Description |
464
546
  |---------|-------------|
465
- | `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) |
466
- | `loki stop` | Stop execution |
467
- | `loki modernize heal <path>` | Legacy system healing (archaeology, stabilize, isolate, modernize, validate -- v6.67.0; was: `loki heal`) |
468
- | `loki pause` / `resume` | Pause/resume after current session |
469
- | `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) |
470
- | `loki status` | Show current status |
471
- | `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) |
472
- | `loki cockpit` | Live multi-repo status as an inline terminal image (Kitty/iTerm2/WezTerm/Ghostty); text + dashboard fallback elsewhere (v7.126.0) |
473
- | `loki dashboard` | Open web dashboard |
474
- | `loki preview` | Print running app URL and open in browser (Live App Preview, v7.24.0; was: `loki open`) |
475
- | `loki web` | Launch Purple Lab web UI [DEPRECATED in v7.44.0 -- use `loki start` which auto-opens the dashboard at http://localhost:57374] |
476
- | `loki doctor` | Check environment and dependencies |
477
- | `loki plan [PRD]` | Pre-execution analysis: complexity, cost, iterations |
478
- | `loki review [--staged\|--diff]` | AI-powered code review with severity filtering |
479
- | `loki test [--file\|--dir\|--changed]` | AI test generation |
480
- | `loki analyze onboard [path]` | Project analysis and CLAUDE.md generation (was: `loki onboard`) |
481
- | `loki import` | Import GitHub issues as tasks |
482
- | `loki ci` | CI/CD quality gate integration |
483
- | `loki failover` | Cross-provider auto-failover management |
484
- | `loki memory <cmd>` | Memory system: index, timeline, search, consolidate |
485
- | `loki enterprise` | Enterprise feature management |
547
+ | `loki "<task>" [--no-pr] [--deep] [--provider NAME] [--max-cost USD]` | Build a task, verify it, seal a signed receipt, open a PR |
548
+ | `loki owner/repo#N` | Same, from a GitHub, GitLab or Jira issue |
549
+ | `loki quick "<task>"` | Small task, lean path, no PR |
550
+ | `loki backlog owner/repo --all\|--label X\|--issues N,N` | Run every matching open issue, N in parallel (`--concurrency N`, `--dry-run`) |
551
+ | `loki workspace list \| run <name> <ref>` | Experimental (`LOKI_WORKSPACES=1`): run one issue across the repos of a `loki.yaml` workspace; see [docs/WORKSPACES.md](docs/WORKSPACES.md) |
552
+ | `loki status [--json]` | Current status |
553
+ | `loki verify [run-id]` | Re-check a sealed receipt (exit codes above) |
554
+ | `loki doctor [--json] [--airgap]` | Check environment and providers |
555
+ | `LOKI_CONTROL=1 loki control serve\|backfill\|status` | Control Plane v0 preview |
556
+ | `loki modernize <repo> --to <target> --dry-run` | Estimate only |
557
+ | `loki plan [PRD]` | Dry-run analysis: complexity, cost, execution plan |
486
558
  | `loki version` | Show version |
487
559
 
560
+ Legacy engine, being removed (these run on the previous engine; `loki --help` still lists them):
561
+
562
+ | Command | Description |
563
+ |---------|-------------|
564
+ | `loki start [PRD\|ISSUE-REF\|"TASK"]` | An issue ref, an issue URL or a quoted multi-word task runs on Loki 10 (same as `loki owner/repo#N`); a PRD file, a flag-first call or a one-word start runs the legacy build |
565
+ | `loki stop`, `pause`, `resume` | Control a legacy run |
566
+ | `loki steer "<note>"` | Nudge a legacy run (needs `LOKI_PROMPT_INJECTION=1`) |
567
+ | `loki why`, `loki next` | Explain or continue a legacy run |
568
+ | `loki dashboard` | Operations UI server (`start\|stop\|status\|url\|open`) |
569
+ | `loki review`, `loki test`, `loki analyze`, `loki memory`, `loki failover`, `loki enterprise`, `loki import`, `loki ci` | Review, test generation, codebase analysis, memory, failover, enterprise, issue import, CI gate |
570
+ | `loki modernize heal <path>` | Legacy system healing |
571
+
488
572
  </details>
489
573
 
490
574
  Run `loki --help` for all options. Full reference: [CLI Reference](wiki/CLI-Reference.md) | Config: [config.example.yaml](autonomy/config.example.yaml)
@@ -495,7 +579,7 @@ Pass a config file to `loki start` with `--config <path>` (aliases `--env-file`,
495
579
  ---
496
580
 
497
581
  <details>
498
- <summary><strong>Configuration env vars (intelligent defaults, opt-out knobs)</strong></summary>
582
+ <summary><strong>Configuration env vars (legacy engine knobs, opt-out)</strong></summary>
499
583
 
500
584
  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:
501
585
 
@@ -516,7 +600,7 @@ This is a subset. See the [wiki](wiki/Home.md) for the full env-var reference an
516
600
  </details>
517
601
 
518
602
  <details>
519
- <summary><strong>BMAD Method Integration</strong></summary>
603
+ <summary><strong>BMAD Method Integration (legacy engine, being removed)</strong></summary>
520
604
 
521
605
  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:
522
606
 
@@ -533,7 +617,7 @@ See [BMAD Integration Validation](docs/architecture/bmad-integration-validation.
533
617
  <details>
534
618
  <summary><strong>Enterprise Features</strong></summary>
535
619
 
536
- Enterprise features are included but require env var activation.
620
+ Enterprise features are free, included, and need no license key. They are activated with env vars. (Legacy engine surface, being removed with it.)
537
621
 
538
622
  ```bash
539
623
  export LOKI_ENTERPRISE_AUTH=true # token auth (dashboard/auth.py)
@@ -561,7 +645,7 @@ loki enterprise status
561
645
  | **Testing** | 8 automated quality gates | Test quality depends on AI assertions |
562
646
  | **Providers** | Claude, Cline, Codex, Aider and opencode | Non-Claude providers are experimental and mostly sequential |
563
647
  | **Dashboard** | Real-time single-machine monitoring | No multi-node clustering |
564
- | **Loki 10** | The v10 run, `status`, `verify`, `dashboard` | Not the default yet; `loki modernize <repo> --to` runs `--dry-run` only; Slack is not wired in |
648
+ | **Loki 10** | The v10 run (`loki "<task>"`, `loki owner/repo#N`, `loki quick`), `status`, `verify`, `backlog` | `loki start <issue ref|issue URL|"task">` runs Loki 10, `loki start <file>` stays legacy; `loki modernize <repo> --to` runs `--dry-run` only; Slack is not wired in; Control Plane v0 is a preview |
565
649
 
566
650
  > **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.
567
651
 
@@ -603,7 +687,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
603
687
 
604
688
  ## License
605
689
 
606
- [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.
690
+ [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 other licensing arrangements.
607
691
 
608
692
  ---
609
693
 
package/SKILL.md CHANGED
@@ -3,7 +3,9 @@ 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.6.6
6
+ # Loki Mode v10.6.8
7
+
8
+ **Current entry points (Loki 10 engine):** `loki "<task>"`, `loki owner/repo#N` and `loki quick "<task>"` run the Loki 10 engine and end with a signed receipt (`loki verify`). `loki backlog owner/repo --all` runs many issues in parallel. Guide: `docs/v10/GUIDE.md`. The skill instructions below, and `loki start`, describe the legacy engine, which still ships and is being removed (`loki start owner/repo#N` still routes to it; prefer `loki owner/repo#N`).
7
9
 
8
10
  **You are an autonomous agent. You make decisions. You do not ask questions. You do not stop.**
9
11
 
@@ -11,7 +13,7 @@ description: An autonomous software factory that knows what it is supposed to de
11
13
 
12
14
  **Evidence Receipt (verify it yourself).** Every run writes a receipt to `.loki/proofs/<run_id>/` (opt out with `LOKI_PROOF=0`) that separates deterministic FACTS (git diff with base/head SHAs and a `diff_sha256`, the test command + exit code, the build command + exit code, each gate verdict) from AI ASSESSMENTS (the council verdict, labeled judgment not proof). The headline is computed only from the facts: VERIFIED (tests ran a real command and exited 0, diff non-empty, nothing skipped), VERIFIED WITH GAPS (each gap listed by name), or NOT VERIFIED (a check ran and failed). Inspect and re-check with `loki proof list|show <id>|verify <id>` (aliased `loki receipt`); `loki proof verify` re-hashes the receipt (tamper) and re-derives the diff from the recorded base SHA against the live repo (drift), exiting 0 clean / 1 tamper-or-drift / 2 could not check (64 usage, 66 unknown id; see `docs/exit-codes.md`). This is honesty-of-done, not a claim that the code is bug-free.
13
15
 
14
- **Provider-agnostic (stable since v5.0.0):** runs on Claude/Codex/Cline/Aider with abstract model tiers and degraded mode for non-Claude providers; no vendor lock-in. Gemini deprecated v7.5.18. See `skills/providers.md`. **Current track (v8.0.0):** the Anthropic Agent SDK route (see below), spec-mode expansion for OpenAPI/GraphQL/Postman contracts, the runtime-boot and secret-leak evidence axes, and `loki steer` / `loki why` for mid-run control. Earlier tracks: LSP grounding as a first-class agent tool (v7.7.x) and Phase 1 RARV-C closure (real provider judges, gate-failure flock, synthetic PRD e2e, status `--json`).
16
+ **Provider-agnostic (stable since v5.0.0):** runs on Claude/Codex/Cline/Aider with abstract model tiers and degraded mode for non-Claude providers; no vendor lock-in. Gemini deprecated v7.5.18. See `skills/providers.md`. **Legacy track (v8.0.0):** the Anthropic Agent SDK route (see below), spec-mode expansion for OpenAPI/GraphQL/Postman contracts, the runtime-boot and secret-leak evidence axes, and `loki steer` / `loki why` for mid-run control. Earlier tracks: LSP grounding as a first-class agent tool (v7.7.x) and Phase 1 RARV-C closure (real provider judges, gate-failure flock, synthetic PRD e2e, status `--json`).
15
17
 
16
18
  **Runtime migration:** Bash-to-Bun migration. Read-only commands (`version`, `status`, `stats`, `doctor`, `provider show/list`, `memory list/index`) flow through Bun runtime via `bin/loki` since v7.3.0. Every other command remains on the Bash runtime (`autonomy/loki`). Rollback: `LOKI_LEGACY_BASH=1`. See `UPGRADING.md` and `docs/architecture/ADR-001-runtime-migration.md`.
17
19
 
@@ -105,13 +107,13 @@ These rules guide autonomous operation. Test results and code quality always tak
105
107
  | Integration tests, E2E, deployment | **development** | opus | sonnet | effort=high |
106
108
  | Unit tests, linting, docs, simple fixes | **fast** | sonnet | haiku | effort=low |
107
109
 
108
- **Parallelization rule (Claude only):** Launch up to 10 agents simultaneously for independent tasks.
110
+ **Parallelization rule (Claude only):** Launch independent tasks in parallel.
109
111
 
110
112
  **Degraded mode (Codex/Cline/Aider):** No parallel agents or Task tool. Codex has MCP support. Runs RARV cycle sequentially. See `skills/model-selection.md`.
111
113
 
112
114
  **Git worktree parallelism:** For true parallel feature development, use `--parallel` flag with run.sh. See `skills/parallel-workflows.md`.
113
115
 
114
- **Scale patterns (50+ agents, Claude only):** Use judge agents, recursive sub-planners, optimistic concurrency. See `references/cursor-learnings.md`.
116
+ **Scale patterns (Claude only):** Use judge agents, recursive sub-planners, optimistic concurrency. See `references/cursor-learnings.md`.
115
117
 
116
118
  ---
117
119
 
@@ -195,7 +197,7 @@ This protocol governs **skill module** loading -- task-scoped instruction files
195
197
 
196
198
  ## Invocation
197
199
 
198
- **Unified entry point (v6.84.0):** `loki start [SPEC|ISSUE-REF]` auto-detects whether the input is a PRD file, an issue URL, an issue number, or another spec format (e.g. OpenAPI). No need to pick between `loki start` and `loki run` -- the single command handles all cases.
200
+ **Legacy entry point (v6.84.0, being removed; for Loki 10 use `loki "<task>"` or `loki owner/repo#N`):** `loki start [SPEC|ISSUE-REF]` auto-detects whether the input is a PRD file, an issue URL, an issue number, or another spec format (e.g. OpenAPI). No need to pick between `loki start` and `loki run` -- the single command handles all cases.
199
201
 
200
202
  ```bash
201
203
  # Standard mode (Claude - full features)
@@ -459,15 +461,16 @@ See `CHANGELOG.md` entries [7.5.7], [7.5.8], [7.5.13] for the per-fix list and r
459
461
  | Bun runtime (Phase 2+) | TBD | Migrate write-path commands; tracked on `feat/bun-migration` |
460
462
  | Managed Agents multiagent path | TBD | `LOKI_EXPERIMENTAL_MANAGED_*` flags -- RESEARCH PREVIEW, not on live API |
461
463
  | Benchmarks | TBD | Runner scripts and datasets exist in `benchmarks/`; no published results |
462
- | `loki run` removal | next major | Currently a deprecated alias for `loki start` |
464
+ | `loki run` removal | with legacy removal | Currently a deprecated alias for `loki start` |
463
465
 
464
466
  ## Deprecated
465
467
 
466
468
  | Item | Deprecated In | Notes |
467
469
  |------|---------------|-------|
468
- | `loki run <issue>` | v6.84.0 | Alias for `loki start`. Will be removed in next major. |
470
+ | `loki run <issue>` | v6.84.0 | Alias for `loki start`. Removal is part of the planned legacy removal. |
471
+ | `loki start`, RARV skill loop | v10.6.6 | Legacy engine, planned for removal; use `loki "<task>"` / `loki owner/repo#N`. |
469
472
  | VSCode extension (`vscode-extension/`) | v7.2.0 | No longer actively maintained; dashboard web UI is the supported front-end. |
470
473
 
471
474
  ---
472
475
 
473
- **v10.6.6 | [Autonomi](https://www.autonomi.dev/) flagship product | ~410 lines core**
476
+ **v10.6.8 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
package/VERSION CHANGED
@@ -1 +1 @@
1
- 10.6.6
1
+ 10.6.8