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.
- package/.github/actions/issue-to-pr/action.yml +25 -11
- package/.github/workflows/loki-issue-to-pr.yml +21 -10
- package/README.md +138 -54
- package/SKILL.md +11 -8
- package/VERSION +1 -1
- package/autonomy/lib/workspace.py +290 -0
- package/autonomy/lib/worktree_prep.py +143 -0
- package/autonomy/loki +68 -5
- package/autonomy/run.sh +26 -1
- package/bin/loki +9 -1
- package/completions/_loki +1 -0
- package/completions/loki.bash +1 -2
- package/dashboard/__init__.py +1 -1
- package/docs/AUDIT-CHAIN-THREAT-MODEL.md +1 -1
- package/docs/DEMOS.md +11 -26
- package/docs/EVALUATING.md +2 -3
- package/docs/INSTALLATION.md +2 -2
- package/docs/TOOLS.md +1 -1
- package/docs/WANG-PRINCIPLES-PLAN.md +1 -1
- package/docs/WORKSPACES.md +29 -0
- package/docs/air-gapped.md +1 -1
- package/docs/alternative-installations.md +3 -1
- package/docs/control-plane-container.md +45 -0
- package/docs/dashboard-guide.md +2 -0
- package/docs/dev/architecture-reference.md +4 -0
- package/docs/dev/project-structure.md +2 -2
- package/docs/dev/release-checklist.md +1 -2
- package/docs/enterprise/architecture.md +1 -1
- package/docs/siem-integration.md +2 -2
- package/docs/slack.md +26 -0
- package/docs/v10/BOARD.md +26 -1
- package/docs/v10/CONTROL-PLANE.md +4 -0
- package/docs/v10/D61-SPEED.md +83 -0
- package/docs/v10/DECISIONS.md +33 -0
- package/docs/v10/DEPS.md +6 -2
- package/docs/v10/E2E-D65.md +87 -0
- package/docs/v10/GUIDE.md +63 -1
- package/docs/v10/HANDOFF-NEXT-WEEK.md +40 -0
- package/docs/v10/PROGRESS.md +13 -0
- package/docs/v10/ROADMAP-D63.md +35 -0
- package/loki-ts/dist/loki.js +593 -569
- package/mcp/__init__.py +1 -1
- package/mcp/server.py +76 -0
- package/mcp/tests/test_v10_tools.py +137 -0
- package/mcp/v10_tools.py +172 -0
- package/package.json +1 -1
- package/packages/control-plane/dist/server.js +56 -4
- package/packages/control-plane/src/server/answer.ts +33 -0
- package/packages/control-plane/src/server/app.ts +17 -1
- package/packages/control-plane/src/server/runs.ts +2 -0
- package/packages/control-plane/src/server/serve.ts +2 -2
- package/packages/control-plane/ui/dist/assets/index-53E32yrO.js +114 -0
- package/packages/control-plane/ui/dist/assets/{index-BH3LtKcG.css → index-CFfrqCx2.css} +1 -1
- package/packages/control-plane/ui/dist/index.html +2 -2
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/web-app/dist/assets/{AdminPage-CH-bmw4l.js → AdminPage-DN_pe8vo.js} +1 -1
- package/web-app/dist/assets/{Avatar-Bos-ky_x.js → Avatar-BnQsr8z-.js} +1 -1
- package/web-app/dist/assets/{Badge-DNJyHg9Y.js → Badge-DzERiZn2.js} +1 -1
- package/web-app/dist/assets/{Button-KqD3Tt-I.js → Button-CaaoxQAt.js} +1 -1
- package/web-app/dist/assets/{CockpitPage-l6oTsRaL.js → CockpitPage-SXhnysJA.js} +1 -1
- package/web-app/dist/assets/{ComparePage-DN6uxXko.js → ComparePage-krxTCFJY.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-CKQhnvU9.js → ErrorBoundary-BL96ESMc.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-CzSIqLmy.js → EvidenceReceiptPanel-PUiGSpkB.js} +1 -1
- package/web-app/dist/assets/{GitHubIssuesPanel-YJUcDezn.js → GitHubIssuesPanel-C0hPs-P2.js} +1 -1
- package/web-app/dist/assets/{GitHubPRsPanel-Bv7xFvJN.js → GitHubPRsPanel-CLvqNUlu.js} +1 -1
- package/web-app/dist/assets/{HomePage-CJsxBbii.js → HomePage-X-sq_Rc9.js} +2 -2
- package/web-app/dist/assets/{LoginPage-D1V2Ag0s.js → LoginPage-DhQuwdua.js} +1 -1
- package/web-app/dist/assets/{MagicPage-BBVNMEr5.js → MagicPage-CP2ODjfn.js} +1 -1
- package/web-app/dist/assets/{MetricsPage-CtHM-IlA.js → MetricsPage-C6SYiQES.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-BBEEJLj5.js → NotFoundPage-CCDxxYc-.js} +1 -1
- package/web-app/dist/assets/{ProjectPage-BVRJoEaQ.js → ProjectPage-yDF--8FQ.js} +3 -3
- package/web-app/dist/assets/{ProjectsPage-DqaA9rUa.js → ProjectsPage-BBLspdLn.js} +1 -1
- package/web-app/dist/assets/{SettingsPage-B_RQV_vF.js → SettingsPage-C_sWbQRw.js} +1 -1
- package/web-app/dist/assets/{ShowcasePage-DqN-mrZ8.js → ShowcasePage-xCMuL0N8.js} +1 -1
- package/web-app/dist/assets/{SystemSettingsPage-D-CvuL-K.js → SystemSettingsPage-DnJKGCx7.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-CzkkDcPj.js → TeamsPage-BBXdhrSs.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-Bbchk7YQ.js → TemplatesPage-AZ1Lr1rn.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-B32BAX--.js → TerminalOutput-CtIm9tXc.js} +1 -1
- package/web-app/dist/assets/{activity-C9vnEmhG.js → activity-Dk1FK25Q.js} +1 -1
- package/web-app/dist/assets/{bell-XsIhkyjq.js → bell-dhqXyzP4.js} +1 -1
- package/web-app/dist/assets/{bot-CvQhqBws.js → bot-CExHd4Kf.js} +1 -1
- package/web-app/dist/assets/{check-HmG8WcD-.js → check-D51zaA1a.js} +1 -1
- package/web-app/dist/assets/{chevron-left-C1KNgnbD.js → chevron-left-DEwnQzH1.js} +1 -1
- package/web-app/dist/assets/{circle-alert-DSmCvZju.js → circle-alert-C6U90Msk.js} +1 -1
- package/web-app/dist/assets/{clock-CPhE3RXd.js → clock-6mFbMzzH.js} +1 -1
- package/web-app/dist/assets/{cloud-29lwqocB.js → cloud-BrZZtE7F.js} +1 -1
- package/web-app/dist/assets/{code-xml-4jZUzbPt.js → code-xml-DTFzeepP.js} +1 -1
- package/web-app/dist/assets/{database-H0Ct2r-8.js → database-B5rEiTre.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-DsXkO0yT.js → dollar-sign-bQs4rlS_.js} +1 -1
- package/web-app/dist/assets/{file-code-corner-BM8w_nvX.js → file-code-corner-Mo6e6qbf.js} +1 -1
- package/web-app/dist/assets/{file-plus-BWkYTJ4D.js → file-plus-DzHZ0jpP.js} +1 -1
- package/web-app/dist/assets/{globe-FOFDl_8Z.js → globe-DYN9UhTa.js} +1 -1
- package/web-app/dist/assets/{hammer-orm5gvky.js → hammer-bB0hSRcJ.js} +1 -1
- package/web-app/dist/assets/{index-B6juCuPX.js → index-CIH5CqZB.js} +3 -3
- package/web-app/dist/assets/{layers-DUQPkPAl.js → layers-qhFkY8Nu.js} +1 -1
- package/web-app/dist/assets/{loader-circle-Deq6bDar.js → loader-circle-BGBkaYH7.js} +1 -1
- package/web-app/dist/assets/{lock-CSzWTPRC.js → lock-DIcsNFum.js} +1 -1
- package/web-app/dist/assets/{package-CmACgZuF.js → package-BdIIbZhS.js} +1 -1
- package/web-app/dist/assets/{plus-BjPW5v3A.js → plus-Co1Bv8zT.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-DhI1sHaj.js → refresh-cw-CGF4ABWH.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-Byi2ouWB.js → rotate-ccw-BX10Q79h.js} +1 -1
- package/web-app/dist/assets/{scroll-text-gq7bJ81H.js → scroll-text-CbXDlpGp.js} +1 -1
- package/web-app/dist/assets/{server-YbY5s1-X.js → server-CIhi6yUO.js} +1 -1
- package/web-app/dist/assets/{shield-alert-DhKjtwZt.js → shield-alert-DJ5fB6Dg.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-D2X5JR-5.js → thumbs-up-BEft2T94.js} +1 -1
- package/web-app/dist/assets/{trash-2-BHAmMxTq.js → trash-2-CWGUPn7Y.js} +1 -1
- package/web-app/dist/assets/{trending-down-C41kQa-Q.js → trending-down-CjqstvxQ.js} +1 -1
- package/web-app/dist/assets/{trending-up-M-OK_9DC.js → trending-up-CTyLjMzE.js} +1 -1
- package/web-app/dist/assets/{upload-CarpPiGw.js → upload-BmRx-uv4.js} +1 -1
- package/web-app/dist/assets/{usePolling-rJ7rM7R0.js → usePolling-ChHkSJye.js} +1 -1
- package/web-app/dist/assets/{user-cBhWpZen.js → user-ZXh_f35z.js} +1 -1
- package/web-app/dist/index.html +1 -1
- package/docs/walkthrough/README.md +0 -44
- 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
|
|
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
|
-
|
|
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
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
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 [ -
|
|
238
|
-
echo "
|
|
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
|
-
|
|
86
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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]
|
|
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
|
|
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
|
|
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
|
|
497
|
+
<summary><strong>Runtime architecture: dual Bash/Bun runtime</strong></summary>
|
|
418
498
|
|
|
419
|
-
Loki
|
|
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
|
|
466
|
-
| `loki
|
|
467
|
-
| `loki
|
|
468
|
-
| `loki
|
|
469
|
-
| `loki
|
|
470
|
-
| `loki status` |
|
|
471
|
-
| `loki
|
|
472
|
-
| `loki
|
|
473
|
-
| `loki
|
|
474
|
-
| `loki
|
|
475
|
-
| `loki
|
|
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 (
|
|
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
|
|
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`, `
|
|
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
|
|
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
|
+
# 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`. **
|
|
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
|
|
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 (
|
|
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
|
-
**
|
|
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 |
|
|
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`.
|
|
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.
|
|
476
|
+
**v10.6.8 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
10.6.
|
|
1
|
+
10.6.8
|