loki-mode 9.8.0 → 9.12.0

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 (79) hide show
  1. package/README.md +19 -14
  2. package/SKILL.md +3 -2
  3. package/VERSION +1 -1
  4. package/autonomy/loki +122 -1
  5. package/autonomy/run.sh +49 -2
  6. package/dashboard/__init__.py +1 -1
  7. package/dashboard/api_evidence.py +411 -0
  8. package/dashboard/api_operator.py +283 -0
  9. package/dashboard/api_phases.py +262 -0
  10. package/dashboard/api_releases.py +242 -0
  11. package/dashboard/api_runs.py +477 -0
  12. package/dashboard/api_tests.py +444 -0
  13. package/dashboard/api_v2.py +47 -1
  14. package/dashboard/server.py +54 -0
  15. package/dashboard/static/index.html +246 -135
  16. package/docs/ARCHITECTURE-OVERVIEW.md +5 -3
  17. package/docs/CAPABILITY-BACKLOG.md +53 -0
  18. package/docs/COMPARISON.md +2 -2
  19. package/docs/COMPETITIVE-ANALYSIS.md +1 -1
  20. package/docs/COMPETITIVE-SCORECARD.md +422 -0
  21. package/docs/DASHBOARD-9.12-EVIDENCE.md +97 -0
  22. package/docs/DASHBOARD-ARCHITECTURE.md +423 -0
  23. package/docs/DEMOS.md +21 -23
  24. package/docs/HANDOFF-2026-08-03.md +439 -0
  25. package/docs/INSTALLATION.md +17 -10
  26. package/docs/OUTCOME-FRONTIER.md +536 -0
  27. package/docs/PROMPT-ABLATION-RESULT.md +97 -0
  28. package/docs/TOOLS.md +800 -0
  29. package/docs/alternative-installations.md +2 -3
  30. package/docs/audit-logging.md +44 -35
  31. package/docs/authentication.md +13 -2
  32. package/docs/authorization.md +87 -81
  33. package/docs/git-workflow.md +6 -3
  34. package/docs/metrics.md +15 -16
  35. package/docs/network-security.md +16 -13
  36. package/docs/openclaw-integration.md +36 -556
  37. package/docs/show-hn-post.md +2 -2
  38. package/docs/siem-integration.md +39 -36
  39. package/loki-ts/dist/loki.js +18 -18
  40. package/mcp/__init__.py +1 -1
  41. package/package.json +2 -2
  42. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  43. package/references/confidence-routing.md +18 -1
  44. package/references/invariant-checks.md +13 -8
  45. package/references/magic-rarv-integration.md +0 -1
  46. package/references/multi-provider.md +27 -5
  47. package/skills/healing.md +4 -2
  48. package/tools/audit-docs.py +488 -0
  49. package/tools/baseline-pin.py +19 -1
  50. package/tools/calibration-audit.py +523 -0
  51. package/tools/ci-gate.py +19 -1
  52. package/tools/cost-forecast.py +344 -0
  53. package/tools/cost-guard.py +19 -1
  54. package/tools/cost-history.py +19 -1
  55. package/tools/cost-per-outcome.py +394 -0
  56. package/tools/estimate-run.py +19 -1
  57. package/tools/evidence-freshness.py +307 -0
  58. package/tools/gate-init.py +19 -1
  59. package/tools/gate-report.py +19 -1
  60. package/tools/gate-simulate.py +570 -0
  61. package/tools/gate-trend.py +354 -0
  62. package/tools/model-advisor.py +52 -1
  63. package/tools/policy-load.py +19 -1
  64. package/tools/prompt-cost.py +363 -0
  65. package/tools/prompt-diff.py +448 -0
  66. package/tools/prompt-lint.py +448 -0
  67. package/tools/receipt-bundle.py +72 -2
  68. package/tools/receipt-diff.py +19 -1
  69. package/tools/receipt-find.py +19 -1
  70. package/tools/receipt-stats.py +380 -0
  71. package/tools/receipt-timeline.py +478 -0
  72. package/tools/receipt-verify-batch.py +291 -0
  73. package/tools/run-replay.py +19 -1
  74. package/tools/signing-status.py +19 -1
  75. package/tools/token-guard.py +19 -1
  76. package/tools/token-tax.py +375 -0
  77. package/tools/tool-index.py +19 -1
  78. package/tools/verification-tax.py +277 -0
  79. package/tools/verify-chain.py +361 -0
@@ -67,8 +67,10 @@ What you get:
67
67
  the changed files (secret-leak axis) - v8.0.0, `SKILL.md`.
68
68
 
69
69
  Provider-agnostic (stable since v5.0.0): Claude (Tier 1, full), Cline (Tier 2),
70
- Codex and Aider (Tier 3, degraded, sequential). Gemini deprecated v7.5.18. See
71
- `skills/providers.md`.
70
+ Codex and Aider (Tier 3, degraded, sequential), opencode (sequential). With
71
+ `LOKI_PROVIDER` unset, auto-detection picks the first installed provider in that
72
+ order (`providers/loader.sh:191`); an explicit choice always wins. Gemini was
73
+ removed as a provider in v7.5.18. See `skills/providers.md`.
72
74
 
73
75
  ---
74
76
 
@@ -168,7 +170,7 @@ in `autonomy/completion-council.sh`; proof generation in
168
170
  sequenceDiagram
169
171
  participant Runner as run_autonomous (run.sh)
170
172
  participant Prompt as build_prompt
171
- participant Provider as Provider (Claude/Codex/Cline/Aider)
173
+ participant Provider as Provider (Claude/Cline/Codex/Aider/opencode)
172
174
  participant Verify as Gates + council
173
175
  participant Evidence as Evidence gate
174
176
  participant Council as completion council
@@ -0,0 +1,53 @@
1
+ # Capability Backlog
2
+
3
+ Generated 2026-08-03. Companion to `docs/COMPETITIVE-SCORECARD.md`.
4
+
5
+ Gaps are referenced by their number in that file's section 4 ("What we do NOT
6
+ know") and are not restated here. Ordering is by pillars unblocked per unit of
7
+ free work, where "free" means no paid model calls and no third-party installs.
8
+
9
+ Pillar numbers refer to the seven-pillar system in the scorecard's "How to read
10
+ this document" section.
11
+
12
+ ## Priority order
13
+
14
+ | # | Item | Closes | Pillars | Free? | Measurement that closes it |
15
+ |---|---|---|---|---|---|
16
+ | 1 | Verification tax instrumentation | Gap 13 | 5, 7 | Yes | SHIPPED 2026-08-03, partial. `tools/verification-tax.py` + 14 tests. First reading: 19.0s wall, outcome changed 1/1. Remaining: token cost, and hit rate over real history |
17
+ | 2 | Confidence calibration audit | Gap 14 | 3, 5 | Yes | Reliability diagram of self-reported confidence against observed outcome, over existing run history |
18
+ | 3 | Provider parity measurement | Pillar 7 cell | 7 | No (paid) | Identical task across `--provider` values, scored on completion quality not flag presence |
19
+ | 4 | T0-T1 tier harness | Gaps 2, 11 | 1, 6 | No (paid) | Completion quality and intervention rate on single-file and multi-file tasks |
20
+ | 5 | T2-T4 architecture tiers | Gaps 2, 12 | 2, 3 | No (paid) | Same dimensions on migration, performance, and distributed-system tasks |
21
+ | 6 | T5 research tier | Gap 11 | 4 | No (paid) | Novelty and usefulness of a research result, needs a domain judge |
22
+
23
+ Items 3-6 require spend and are therefore not startable under the current
24
+ constraint. They are listed so the ordering is visible, not because they are
25
+ actionable now.
26
+
27
+ ## Why item 1 is the slice
28
+
29
+ It is the only candidate that clears all four constraints: free, measurement
30
+ rather than new verification machinery, testable with one runnable check, and it
31
+ closes a numbered gap.
32
+
33
+ It is also a prerequisite rather than an end in itself. The mandated trajectory
34
+ for verification is toward near-zero overhead, applied selectively where
35
+ calibrated confidence is low. Neither "shrink the tax" nor "bypass it
36
+ selectively" can be validated as an improvement without a baseline for what the
37
+ tax currently costs and how often it earns its keep. Item 2 depends on item 1's
38
+ outcome-change data for the same reason.
39
+
40
+ Explicit non-goal: this must not become another gate, another artifact format, or
41
+ another blocking check. If the implementation starts adding verification
42
+ machinery rather than measuring the machinery that exists, it has failed its own
43
+ filter and should be stopped.
44
+
45
+ ## Deliberately not on this list
46
+
47
+ - Any new gate, reviewer, council, or evidence format. The founder constraint is
48
+ to avoid building more verification machinery unless it directly unlocks
49
+ broader capability. Items 1 and 2 measure existing machinery so it can be made
50
+ cheaper or skipped; neither adds any.
51
+ - Marketing-facing comparison content. The scorecard is an evidence ledger and
52
+ two thirds of it is UNKNOWN; it is not ready to be a positioning asset and
53
+ should not be turned into one.
@@ -212,7 +212,7 @@
212
212
  | **npm/wk** | 6.1K | 21.4K | N/A | N/A | N/A | N/A | N/A |
213
213
  | **Agents** | 41 roles in 8 domains | 11 agents | Fresh per task | 108 agents | Swarm-based | 32 agents | N/A |
214
214
  | **Skills** | Progressive disclosure | 6 slash commands | N/A | 129 skills | N/A | 35 skills | Memory focus |
215
- | **Multi-Provider** | Yes (Claude/Codex/Gemini) | 3 CLIs (separate) | No | No | No | No | No |
215
+ | **Multi-Provider** | Yes (Claude/Cline/Codex/Aider/opencode) | 3 CLIs (separate) | No | No | No | No | No |
216
216
  | **Memory System** | 3-tier (episodic/semantic/procedural) | None | N/A | N/A | Hybrid | N/A | SQLite+FTS5 |
217
217
  | **Quality Gates** | 8 gates + Completion Council | User verify only | Two-Stage Review | N/A | Consensus | Tiered | N/A |
218
218
  | **Context Mgmt** | Standard | Fresh per task (core innovation) | Fresh per task | N/A | N/A | N/A | Progressive |
@@ -237,7 +237,7 @@ These are patterns from competing projects that are **practically and scientific
237
237
 
238
238
  | Strength | Details | Competitors Lacking This |
239
239
  |----------|---------|-------------------------|
240
- | **Multi-Provider Support** | Only skill supporting Claude, Codex, and Gemini with graceful degradation | All 8 competitors are Claude-only |
240
+ | **Multi-Provider Support** | Supports Claude, Cline, Codex, Aider, and opencode with graceful degradation | The 8 competitors compared here are Claude-only |
241
241
  | **RARV Cycle** | Reason-Act-Reflect-Verify is more rigorous than Plan-Execute | Most use simple Plan-Execute |
242
242
  | **8-Gate Quality System** | Static analysis + test suite (pass/fail) + 3 blind reviewers with severity blocking + devil's advocate + mock-integrity + test-mutation + documentation coverage + Magic Modules debate (backward-compat is a conditional healing auditor) + Phase 1 closure | Superpowers has 2-stage, others have less |
243
243
  | **Constitutional AI Integration** | Principles-based self-critique from Anthropic research | None have this |
@@ -24,7 +24,7 @@ GSD is the closest competitor -- a context engineering system that spawns fresh
24
24
  | Memory system | Episodic/semantic/procedural + vector search | None | Loki |
25
25
  | Context management | Standard | Fresh subagent contexts per task (core innovation) | GSD |
26
26
  | Time to value | Learn architecture, understand CLI flags | `npx get-shit-done-cc` and go | GSD |
27
- | Multi-provider | Orchestrates across Claude/Codex/Gemini with degraded mode | Installs separately to each | Loki |
27
+ | Multi-provider | Orchestrates across Claude/Cline/Codex/Aider/opencode with degraded mode | Installs separately to each | Loki |
28
28
  | Real-world proof | No public case studies | Testimonials, 1.1K forks, 75 PRs | GSD |
29
29
 
30
30
  **Key takeaway:** GSD proved the market wants sharp blades, not Swiss Army knives. Loki Mode's Completion Council and quality gates are genuinely unique IP that no competitor has.
@@ -0,0 +1,422 @@
1
+ # Competitive Scorecard
2
+
3
+ Generated 2026-08-03 against Loki Mode v9.8.1.
4
+
5
+ Every cell in this document is one of three things and nothing else:
6
+
7
+ - `[measured]` - reproduced on this machine with a command in the "How to reproduce"
8
+ section, whose output is pasted here or in that section.
9
+ - `[sourced: URL]` - taken from a public page that was actually fetched on
10
+ 2026-08-03. Vendor marketing claims are labelled `vendor-claimed` and are not
11
+ treated as fact.
12
+ - `UNKNOWN` - not measured and not sourced. This is a legitimate and common answer
13
+ in this document.
14
+
15
+ There is deliberately no fourth category in the axis table. Unmarked guesses do
16
+ not appear.
17
+
18
+ One exception, quarantined: section 2b is a **planned** benchmark design. Nothing
19
+ in it has been run, none of it is evidence, and it is excluded from the cell
20
+ counts below. It is separated precisely so it can never be mistaken for a result.
21
+
22
+ **Cell census** (the 48 axis-table cells in section 2, being 6 axes x 8 products):
23
+ **10 measured, 5 sourced, 33 UNKNOWN**. Two thirds of this document is an
24
+ admission of ignorance, which is the honest state of the evidence.
25
+
26
+ This file is distinct from `docs/COMPETITIVE-ANALYSIS.md`, which is a narrative
27
+ positioning document. This one is an evidence ledger and makes no claim it cannot
28
+ back with a pasted command output or a fetched URL. Where the two disagree, this
29
+ file is the one with the receipts; no attempt is made here to reconcile them.
30
+
31
+ ## How to read this document (scope limits)
32
+
33
+ Two limits on what these measurements mean. Both narrow the document; neither
34
+ softens a single cell.
35
+
36
+ **Verification is one sub-axis, not the thesis.** The evidence-document
37
+ capability measured below is adaptive scaffolding: useful at today's model
38
+ capability, expected to become progressively cheaper, more selective, and ideally
39
+ invisible as frontier models get better. The correct trajectory for it is toward
40
+ near-zero overhead, applied where calibrated confidence is low and bypassed where
41
+ it is high - not toward a permanent tollbooth on every build. Pillar 7 sharpens
42
+ this: an orchestration layer is supposed to benefit automatically from model
43
+ improvement rather than be displaced by it, so a verification tax that stays
44
+ fixed while models improve converts from an asset into precisely the drag that
45
+ displaces us. A scorecard row that looks like a win today is therefore a snapshot
46
+ of a gap we intend to make matter less. Do not read the observability row as the
47
+ product's reason to exist, and do not let a competitor closing that gap read as a
48
+ strategic loss. In the structure below, verification appears as one sub-axis of
49
+ observability and as one scored dimension of the proposed benchmark - nowhere as
50
+ the organising claim.
51
+
52
+ **These six axes do not measure the durable ambition.** The stated ambition is
53
+ frontier software-and-research execution at arbitrary complexity, framed as a
54
+ compound capability system of six pillars. The table below barely touches any of
55
+ them:
56
+
57
+ | Pillar | Covered by this table? |
58
+ |---|---|
59
+ | 1. Outcome intelligence - ambiguous intent to excellent products/research, not merely passing tests | No. Nothing here measures outcome quality. |
60
+ | 2. Architecture depth - massive repos, distributed systems, migrations, performance, security, UX, data, infra, long-horizon evolution | No. Deepest probe was a 5-file diff. |
61
+ | 3. Adaptive autonomy - dynamic planning/replanning, hierarchical agents, memory, simulation, tool/model routing, recovery, learning from outcomes | No. Not probed at all. |
62
+ | 4. Scientific research - literature/web/code/data synthesis, hypothesis generation, experiment design, reproducibility, statistical rigor | No. Not probed at all. |
63
+ | 5. Economics - best quality-adjusted completion per dollar and wall-clock, budget-aware routing, minimal coordination/verification tax | Barely. One prompt-size ablation, no quality-adjusted or wall-clock figure. |
64
+ | 6. Developer experience - fastest intent to trustworthy shipped value, excellent observability/control, easy onboarding, graceful human collaboration | Partially, and only as affordances. The onboarding and observability rows list which commands exist; no one was timed, and "graceful human collaboration" is untested. |
65
+ | 7. Extensibility/independence - model-agnostic orchestration that benefits automatically from exponential model improvement rather than being displaced by it | Partially, and the flag overstates it. `loki start --provider claude\|codex\|cline\|aider` exists `[measured]` from `loki --help`, but whether quality holds across providers is unmeasured. Concretely: this machine has `codex-cli 0.146.0` `[measured]`, while the repo still classifies Codex as Tier 3 on v0.98-era flag assumptions (CLAUDE.md). A provider flag that exists against stale assumptions is a capability claim, not an independence result - the same conflation this document polices elsewhere. |
66
+
67
+ The axes in this document are process-and-plumbing axes, and passing all of them
68
+ could coexist with mediocre outcomes. In particular the "quality of completion"
69
+ row measures whether a verdict was produced by an independent runner - it does
70
+ not measure whether the resulting software was any good. Note also that pillar 5
71
+ names the verification tax as a cost to minimise, which is the same direction as
72
+ the scaffolding point above: the observability row measures a capability whose
73
+ own overhead is a tax the roadmap intends to shrink. Treat any gap in this table
74
+ as necessary, not sufficient, evidence. The benchmarks that would test the real
75
+ ambition do not exist yet; the gaps are enumerated in section 4.
76
+
77
+ ## 1. Honest summary
78
+
79
+ Thirty-three of the 48 cells in this table are UNKNOWN, and that is the headline.
80
+ Three of the six axes (reliability, time-to-first-success, quality of completion)
81
+ are UNKNOWN for every product including Loki Mode, because we have run no
82
+ head-to-head build benchmark and any number there would be invented. None of the
83
+ seven capability pillars that constitute the actual ambition - outcome
84
+ intelligence, architecture depth, adaptive autonomy, scientific research,
85
+ economics, developer experience, extensibility - is measured here at all; pillars
86
+ 3 and 4 are entirely unprobed. Every difference this document did find is a
87
+ difference in **CLI affordances**, not in outcomes: what a tool's `--help`
88
+ advertises is not what it delivers. Within that narrow frame, the one capability
89
+ no competitor matched is a persisted, schema-versioned evidence document with a
90
+ freshness re-check (`loki verify --json` emitted a `schema_version: "1.0"` doc
91
+ with a per-gate `runner` field and exit code 2; `--check-fresh` then correctly
92
+ returned STALE once the tree moved). That is one sub-axis of observability, it is
93
+ adaptive scaffolding rather than an identity, and its value is expected to decline
94
+ as models improve - see "How to read this document" above. It is emphatically not
95
+ a claim to be the only tool with review or machine-readable output; the opposite
96
+ is true and competitors are close. Claude Code ships `ultrareview --json`, a
97
+ cloud-hosted multi-agent review printing a raw `bugs.json` payload; Codex ships a
98
+ first-class `codex review` subcommand plus `exec --json` and `--output-schema`;
99
+ cursor-agent has `--output-format json|stream-json`; OpenCode has `run --format
100
+ json`, `export`, and a working `stats`. Structured output is table stakes in 2026.
101
+ On cost we can cite exactly one in-repo measurement (the `LOKI_SIMPLE=1` prompt
102
+ ablation, -78% prompt size, ~1562 tokens/iteration) whose own README entry says
103
+ its effect on build speed and quality is not yet measured - a prompt-size number,
104
+ nothing about value delivered. Devin, Replit and Emergent were **not tested**:
105
+ Devin does publish a local CLI at cli.devin.ai which we deliberately did not
106
+ install, and Replit and Emergent appear to be web-only; all three of their rows
107
+ are sourced or UNKNOWN, never measured.
108
+
109
+ ## 2. Axis table
110
+
111
+ Column key: the first five columns are CLIs installed and version-verified on this
112
+ machine. The last three ship no CLI we tested; their cells are sourced or UNKNOWN.
113
+
114
+ Verified versions `[measured]`, via `<cmd> --version`:
115
+ `claude 2.1.220 (Claude Code)` / `codex-cli 0.146.0` / `cursor-agent
116
+ 2026.05.24-dda726e` / `opencode 1.18.9` / `Loki Mode v9.8.1`. (`aider 0.86.2` is
117
+ installed and probed; see footnote 1 rather than a column.)
118
+
119
+ ### reliability
120
+
121
+ | Loki Mode | Claude Code | Codex CLI | cursor-agent | OpenCode | Devin | Replit | Emergent |
122
+ |---|---|---|---|---|---|---|---|
123
+ | UNKNOWN. No head-to-head reliability benchmark was run. What is `[measured]` is only that a deterministic gate run emits a per-gate pass/fail with a named runner (`tests: fail (jest)`, `static_analysis: pass (syntax)`, `dependency_audit: fail`) - the presence of gates is not a reliability measurement. | UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN. Vendor references "SWE 1.7, our latest model" with no supporting benchmark data on the pricing page `[sourced: https://devin.ai/pricing]` | UNKNOWN. Vendor states the agent "is probabilistic - meaning it may occasionally make mistakes" `[sourced: https://replit.com/pricing]`; this is a disclaimer, not a metric | UNKNOWN `[sourced: https://app.emergent.sh/]` - no reliability or benchmark claim on the landing page |
124
+
125
+ ### time-to-first-success
126
+
127
+ | Loki Mode | Claude Code | Codex CLI | cursor-agent | OpenCode | Devin | Replit | Emergent |
128
+ |---|---|---|---|---|---|---|---|
129
+ | UNKNOWN. Not measured. No build was run for this document. | UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN |
130
+
131
+ This entire row is UNKNOWN by construction: measuring it requires running paid
132
+ model builds on a common task across eight products, which was out of scope and
133
+ would have cost money. Do not fill this row from vendor demos.
134
+
135
+ ### quality of completion
136
+
137
+ | Loki Mode | Claude Code | Codex CLI | cursor-agent | OpenCode | Devin | Replit | Emergent |
138
+ |---|---|---|---|---|---|---|---|
139
+ | UNKNOWN as an outcome. `[measured]`: a verdict is computed only from executed gate rows, and `--explain` prints "pass = independent evidence (a real runner/scanner exit), never a self-assessment". Also `[measured]`: `llm_review.status = "skipped"` with reason "deterministic-only MVP ... blind council are deferred to Phase 2" - so the LLM review half of our own quality story is **not shipped** in `loki verify` today. | UNKNOWN as an outcome. `[measured]` from `claude ultrareview --help`: a cloud-hosted multi-agent code review exists with `--json` emitting a raw `bugs.json` payload. Not executed (paid). | UNKNOWN as an outcome. `[measured]` from `codex review --help`: a dedicated non-interactive review subcommand exists with `--uncommitted`, `--base <BRANCH>`, `--commit <SHA>`. Not executed (paid). | UNKNOWN | UNKNOWN | UNKNOWN. `[sourced: https://docs.devin.ai/]` - docs emphasise making "tasks easy to verify - e.g. checking that CI passes", described as manual verification, not a structured output format | UNKNOWN | UNKNOWN |
140
+
141
+ Note the discipline here: the existence of gates, councils or review subcommands
142
+ is a capability, not a quality measurement. Nobody in this row has a measured
143
+ quality-of-completion number, us included.
144
+
145
+ ### cost
146
+
147
+ | Loki Mode | Claude Code | Codex CLI | cursor-agent | OpenCode | Devin | Replit | Emergent |
148
+ |---|---|---|---|---|---|---|---|
149
+ | Partially `[measured]`, in-repo: `LOKI_SIMPLE=1` strips the coaching half of the system prompt, measured at **-78% prompt size, ~1562 tokens per iteration**, on both the bash and Bun routes (`README.md:757`). The same README entry states plainly that "Whether it changes build speed or quality is NOT yet measured". So this is a prompt-size reduction, not a demonstrated cost-per-delivered-outcome win. Total cost per build: UNKNOWN. `loki report cost` exists `[measured]` from `loki help report`. | UNKNOWN (BYO model spend, not measured) | UNKNOWN (BYO model spend, not measured) | UNKNOWN | `[measured]` `opencode stats` runs locally and prints an OVERVIEW plus COST & TOKENS panel (this machine: 142 sessions, 3,441 messages, Avg Tokens/Session 1.4M, Total Cost $0.00 - the $0.00 reflects local config, not a claim about OpenCode's price) | `[sourced: https://devin.ai/pricing]` Free $0; Pro $20/mo; Max $200/mo; Team $80/mo base + $40/mo per seat; Enterprise custom. Cost per message varies by model and task complexity; overage at API rates | `[sourced: https://replit.com/pricing]` Starter free with daily agent credits; Core $20/mo annually with $25 monthly credits, up to 2 parallel agents; Pro $95/mo annually with $100 monthly credits, up to 10 parallel agents; Enterprise custom | UNKNOWN `[sourced: https://app.emergent.sh/]` - a Pricing link exists in nav but no figures on the landing page |
150
+
151
+ Cross-product cost comparison is deliberately **not** computed. The units are not
152
+ commensurable (subscription credits vs BYO token spend) and we have no
153
+ cost-per-completed-task figure for any product including our own.
154
+
155
+ ### observability
156
+
157
+ | Loki Mode | Claude Code | Codex CLI | cursor-agent | OpenCode | Devin | Replit | Emergent |
158
+ |---|---|---|---|---|---|---|---|
159
+ | `[measured]` `loki verify --json` writes a persisted `evidence.json` with top-level keys `schema_version, verdict, exit_code, subject, produced_by, deterministic_gates, llm_review, findings, suppressed, scope`; verdict BLOCKED, exit_code 2. `--explain` prints a per-gate table with a RUNNER and REPRO column. `--check-fresh` re-reads a prior evidence doc and returned `VERDICT: STALE (worktree modified since 1c80c85ff059)`. `loki status --json`, `loki doctor --json`, `loki report cost/metrics/export`, and a dashboard server also exist `[measured]` from `loki --help`. | `[measured]` `--output-format text\|json\|stream-json` (with `--print`), `--json-schema` for structured output, `--include-partial-messages`; `ultrareview --json` emits raw `bugs.json`. No persisted on-disk evidence document or freshness re-check was found in `--help`. | `[measured]` `codex exec --json` prints events as JSONL; `--output-schema <FILE>` takes a JSON Schema for the final response shape; `-o/--output-last-message <FILE>` writes the last message to a file. `codex review --help` lists **no** `--json` and no evidence-file flag (grep for json/output flags on that subcommand returned 0 matches). `codex doctor` exists. | `[measured]` `--output-format text\|json\|stream-json` with `--print`, plus `--stream-partial-output`. No evidence artifact or freshness check found in `--help`. | `[measured]` `opencode run --format json` (raw JSON events), `opencode export [sessionID]` exports session data as JSON, `opencode stats` prints usage/cost, `opencode serve` headless server. Session export is not a verdict artifact. | UNKNOWN. `[sourced: https://docs.devin.ai/]` - a Devin API is referenced; docs list no machine-readable verdict or evidence artifact | UNKNOWN | UNKNOWN |
160
+
161
+ This is the row where the honest differentiator lives, and it is narrow. Four of
162
+ five installed competitors emit structured JSON. What was not found in any
163
+ competitor's help output is a **persisted verdict document plus a staleness
164
+ re-check** (`--check-fresh`). "Not found in help output" is weaker than "does not
165
+ exist" - see section 4.
166
+
167
+ ### onboarding
168
+
169
+ | Loki Mode | Claude Code | Codex CLI | cursor-agent | OpenCode | Devin | Replit | Emergent |
170
+ |---|---|---|---|---|---|---|---|
171
+ | `[measured]` from `loki --help`: a dedicated first-run path is printed at the top of help - `loki welcome`, `loki doctor`, `loki quickstart`, `loki start ./prd.md`, plus `loki next` ("Run the right next step for you"). Whether this reduces real time-to-first-build: UNKNOWN, not user-tested. | `[measured]` `claude doctor` subcommand; interactive session is the default with no subcommand. | `[measured]` `codex doctor` ("Diagnose local Codex installation, config, auth, and runtime health"); interactive by default; `codex login`. | `[measured]` interactive by default; `install-shell-integration` subcommand. | `[measured]` TUI is the default command; `opencode providers/auth` for credentials; `opencode upgrade`. | `[sourced: https://docs.devin.ai/]` a local CLI ("Devin for Terminal") installs via `curl -fsSL https://cli.devin.ai/install.sh \| bash`, with `/handoff` to escalate to cloud Devin. **We did not install or run it.** | `[sourced: https://replit.com/pricing]` web platform; no local CLI mentioned on the pricing page | `[sourced: https://app.emergent.sh/]` web-based, "Build production-ready apps through conversation"; no CLI mentioned on the landing page |
172
+
173
+ Footnote 1 - aider 0.86.2 is installed and was probed but is not given a column.
174
+ `[measured]`: grepping `aider --help` for verify/json/report/audit/attest returned
175
+ only `--verify-ssl/--no-verify-ssl` and `--git-commit-verify`, both unrelated to
176
+ output verification. No verdict artifact, no JSON output surface found.
177
+
178
+ ## 2b. Proposed benchmark: complexity tiers (PLANNED - nothing here has been run)
179
+
180
+ Everything in this section is a **planned experiment**, not a result. No tier has
181
+ been executed, no score exists, and no cell below should ever be cited as
182
+ evidence. It is here so the gaps in section 4 have a concrete shape.
183
+
184
+ The six axes in section 2 measure plumbing. To measure the seven pillars, tasks
185
+ have to span real complexity and be scored on outcome, not on gate output.
186
+
187
+ **Tiers** (each a real task, run identically across tools):
188
+
189
+ | Tier | Task shape | Which pillars it exercises |
190
+ |---|---|---|
191
+ | T0 | Single-file bug fix with a failing test | 6 |
192
+ | T1 | Multi-file feature in an unfamiliar mid-size repo | 1, 6 |
193
+ | T2 | Cross-cutting migration (framework or API version) over a large repo | 2, 3 |
194
+ | T3 | Performance or security investigation with no known answer | 2, 3 |
195
+ | T4 | Distributed-system change spanning services, with a rollback path | 2, 3 |
196
+ | T5 | Open research task: literature plus code plus data synthesis, hypothesis, experiment, reproducible result | 4 |
197
+
198
+ **Scored dimensions** (per tier, per tool). Note verification is one row here,
199
+ not the frame:
200
+
201
+ | Dimension | Definition | Why it is not a gate metric |
202
+ |---|---|---|
203
+ | Completion quality | Does the result actually solve the stated problem, judged against the intent | Passing tests is the floor, not the score |
204
+ | Intervention rate | Human corrections needed per task | Directly measures autonomy (pillar 3) |
205
+ | Wall-clock time | Intent to shipped value | Pillar 5, 6 |
206
+ | Cost | Total spend, quality-adjusted | Pillar 5; unadjusted cost is meaningless |
207
+ | Recovery | Behaviour after an induced failure | Pillar 3; needs deliberate fault injection |
208
+ | Maintainability | Quality of what is left behind | Long-horizon evolution, pillar 2 |
209
+ | Novelty/usefulness | For T5, is the finding actually new and useful | Pillar 4; needs a domain judge |
210
+ | User value | Would the requester ship it | The only dimension that ends in a human |
211
+ | Verification tax | Time and tokens spent verifying, and how often it changed an outcome | Pillar 5. A *cost* row. Should trend down over time |
212
+
213
+ The verification-tax row is the one that keeps scaffolding honest: it measures
214
+ overhead and the hit rate that justifies it. If overhead rises while the hit rate
215
+ falls, the scaffolding is being over-applied and should be selectively bypassed.
216
+
217
+ ### 2b-FROZEN. Design seal for T1 and T2 (2026-08-03)
218
+
219
+ T1 and T2 are FROZEN as designs. Nothing has been run, no money has been
220
+ spent, and this seal exists so that stays true until a founder decision says
221
+ otherwise.
222
+
223
+ **Held-out discipline, and why it is written down BEFORE any run.** The value
224
+ of a benchmark is destroyed by the ordinary act of debugging against it. Once a
225
+ task has been attempted, the harness tuned, and the task attempted again, the
226
+ score measures fit to that task rather than capability. So:
227
+
228
+ 1. **The T1 and T2 task instances are not selected yet, and must not be
229
+ selected by whoever tunes the harness.** Selection and tuning by the same
230
+ party is how a held-out set stops being held out.
231
+ 2. **One scored attempt per tool per task.** A retry after seeing the result is
232
+ a different experiment and must be reported as such, never averaged in.
233
+ 3. **The scoring rubric is frozen before the first run.** A dimension added
234
+ after seeing results is a dimension chosen because of them.
235
+ 4. **Task text is never committed to this repo.** A task in the repo is a task
236
+ in the training and context of the thing being measured.
237
+
238
+ **What would make a T1/T2 result quotable**, stated now so it cannot be
239
+ loosened later to fit an outcome:
240
+
241
+ - n >= 3 independent instances per tier, scored blind to which tool produced
242
+ the artifact where the dimension allows it.
243
+ - Every competitor run under the same instance, same day, same rubric.
244
+ - Cost and wall clock read from each tool's own artifacts, never from a
245
+ supervising process.
246
+ - Any dimension that could not be scored reads UNKNOWN. A partial rubric is
247
+ reported as partial rather than averaged over the dimensions that happened to
248
+ work.
249
+
250
+ **Explicitly NOT frozen and NOT designed:** T3, T4 and T5. T5 in particular
251
+ needs a domain judge for novelty, and no such judge is identified. Listing them
252
+ in the tier table is a sketch, not a design.
253
+
254
+ **Cost, stated because it is the reason this is frozen rather than run.** Each
255
+ tier instance is a real build across eight tools. At n>=3 that is dozens of paid
256
+ runs, and the T2 shape (cross-cutting migration over a large repo) is the
257
+ expensive end. No run happens without an explicit founder spend decision.
258
+
259
+ **Status separation.** Required reading before quoting anything from this file:
260
+
261
+ | Category | What is in it |
262
+ |---|---|
263
+ | **Measured capability** | Only section 2, and only cells tagged `[measured]` or `[sourced]`. These are CLI affordances and one prompt-size ablation. No outcome quality anywhere. |
264
+ | **Planned experiments** | All of section 2b. Tiers T0-T5 and every scored dimension. Zero runs to date. |
265
+ | **Aspirational** | The seven pillars as a whole. They are the stated ambition and are not claims of current capability. Pillars 3 and 4 are entirely unprobed. |
266
+
267
+ ## 3. How to reproduce
268
+
269
+ Every command below was actually run on 2026-08-03 in the repo working tree at
270
+ `/Users/lokesh/git/lokimode-anthropic/.claude/worktrees/pre-push-scoped-pytest`.
271
+ None of them makes a paid model call.
272
+
273
+ Versions:
274
+
275
+ ```bash
276
+ for c in claude codex cursor-agent opencode aider loki; do
277
+ printf "=== %s ===\n" "$c"; command -v "$c"; "$c" --version 2>&1 | head -3
278
+ done
279
+ ```
280
+
281
+ Capability probes (help text only - no model calls, no spend):
282
+
283
+ ```bash
284
+ loki --help
285
+ loki help verify
286
+ loki help report
287
+ claude --help | grep -iE "output-format|json"
288
+ claude ultrareview --help
289
+ codex --help
290
+ codex review --help
291
+ codex exec --help | grep -iE "json|output-schema|output"
292
+ cursor-agent --help
293
+ opencode --help
294
+ opencode run --help
295
+ aider --help | grep -iE "verify|json|report|audit|attest"
296
+ ```
297
+
298
+ The evidence-document claim, which is the only differentiator asserted here:
299
+
300
+ ```bash
301
+ # Deterministic-only: loki verify's help states there is NO LLM code review in
302
+ # this slice, so this run is free.
303
+ loki verify HEAD~1 --out /tmp/loki-verify-sc2 --explain
304
+
305
+ # Persisted, schema-versioned artifact:
306
+ python3 -c "import json;d=json.load(open('/tmp/loki-verify-sc2/evidence.json'));print(list(d.keys()))"
307
+ # -> ['schema_version','verdict','exit_code','subject','produced_by',
308
+ # 'deterministic_gates','llm_review','findings','suppressed','scope']
309
+
310
+ # Freshness re-check against the current tree:
311
+ loki verify --check-fresh --out /tmp/loki-verify-sc2
312
+ # -> VERDICT: STALE (worktree modified since 1c80c85ff059) -- re-run loki verify
313
+ ```
314
+
315
+ Observed `--explain` output from that run, verbatim:
316
+
317
+ ```
318
+ GATE STATUS RUNNER REPRO EVIDENCE
319
+ ---- ------ ------ ----- --------
320
+ build skipped - true no detectable build command
321
+ tests fail jest true tests failed (rc=1)
322
+ static_analysis pass syntax true 4 file(s) checked, no syntax errors
323
+ nomock skipped - true no scannable UI/data-render files in diff
324
+ secret_scan pass regex-fallback true no secrets matched
325
+ dependency_audit fail npm-audit true 0 critical, 4 high CVEs
326
+ ```
327
+
328
+ SCOPE NOTE on that audit row, because both numbers are real and they mean
329
+ very different things to a release decision:
330
+
331
+ ```
332
+ npm audit -> 7 vulnerabilities (1 low, 2 moderate, 4 high)
333
+ npm audit --production -> 2 moderate, 0 high
334
+
335
+ The four highs (brace-expansion, form-data, js-yaml, ws) do NOT appear in the
336
+ production dependency tree; they arrive through dev tooling. The shipped
337
+ package's own exposure is 2 moderate, both reached via
338
+ @modelcontextprotocol/sdk -> @hono/node-server, one of which is a
339
+ Windows-only path traversal in serve-static.
340
+
341
+ Both are stated rather than one being chosen. "4 high CVEs" unqualified
342
+ overstates what someone installing the package is exposed to; "2 moderate"
343
+ alone understates what our own gate sees and blocks on.
344
+ spec_drift skipped loki-spec true no spec lock (.loki/spec/spec.lock)
345
+
346
+ VERDICT: BLOCKED
347
+ ```
348
+
349
+ Note this is a BLOCKED verdict on our own tree, reported unchanged. A scorecard
350
+ whose own tool passes cleanly on the first try is a scorecard to distrust.
351
+
352
+ Cost citation (in-repo, cite - do not re-derive): `README.md:757`, the
353
+ `LOKI_SIMPLE` row. Re-run the ablation on your own workload with
354
+ `benchmarks/run-prompt-ablation.sh` before drawing any conclusion from it.
355
+
356
+ Cleanup after reproducing:
357
+
358
+ ```bash
359
+ rm -rf /tmp/loki-verify-scorecard /tmp/loki-verify-sc2 /tmp/loki-verify-scorecard.err
360
+ ```
361
+
362
+ ## 4. What we do NOT know
363
+
364
+ This section is mandatory and is not empty.
365
+
366
+ 1. **We did not execute any competitor's review or build command.** Every
367
+ competitor capability above is read from `--help` output only. Running
368
+ `claude ultrareview`, `codex review`, `cursor-agent -p`, or an OpenCode build
369
+ would each make a paid model call, which was out of scope. "Not listed in
370
+ `--help`" is not proof of absence - a capability may exist undocumented, in a
371
+ config file, or behind a subcommand we did not enumerate.
372
+ 2. **No head-to-head build benchmark exists.** Reliability, time-to-first-success
373
+ and quality-of-completion are UNKNOWN for all eight products. We have never
374
+ run the same task through even two of these tools and compared outcomes.
375
+ 3. **We have no cost-per-completed-task figure for any product, including Loki.**
376
+ The `LOKI_SIMPLE` number is a prompt-size measurement only, and its effect on
377
+ speed and quality is explicitly unmeasured per its own README entry.
378
+ 4. **Devin was not tested despite having a local CLI.** `docs.devin.ai` documents
379
+ `curl -fsSL https://cli.devin.ai/install.sh | bash`. We chose not to install
380
+ third-party software, so every Devin cell is sourced or UNKNOWN. An earlier
381
+ read of the pricing page suggested "no local CLI"; the docs page corrected
382
+ that. Treat any Devin claim here as provisional.
383
+ 5. **Replit and Emergent were assessed from marketing pages only** (a pricing page
384
+ and a landing page). Neither page discusses verification. Absence of a claim on
385
+ a marketing page is not evidence the capability is absent from the product.
386
+ 6. **Our own LLM review stage is not shipped in `loki verify`.** The evidence doc
387
+ records `llm_review.status = "skipped"`, reason "deterministic-only MVP ...
388
+ blind council are deferred to Phase 2". The 8-gate build loop is a separate
389
+ path from `loki verify` and was not exercised for this document.
390
+ 7. **The freshness/evidence differentiator is help-text-derived for competitors.**
391
+ We verified our own `--check-fresh` by running it. We did not exhaustively
392
+ search competitor filesystems, config schemas, or APIs for an equivalent.
393
+ 8. **Onboarding is unmeasured.** No user was timed through first build on any
394
+ product. The onboarding row records which affordances exist, not whether they
395
+ work.
396
+ 9. **`opencode stats` showed Total Cost $0.00 on this machine**, which reflects
397
+ local provider configuration and tells us nothing about OpenCode's economics.
398
+ 10. **Vendor benchmark claims were not independently verified.** Devin's "SWE 1.7"
399
+ reference appears with no supporting data on the page fetched.
400
+ 11. **We have no measurement of outcome intelligence for anyone, including us.**
401
+ Nothing here tests whether ambiguous intent becomes an excellent product or
402
+ a real research result, as opposed to a change that passes its gates. Gate
403
+ pass rates and verdict artifacts are explicitly not a proxy for this. No
404
+ benchmark for it currently exists in this repo.
405
+ 12. **We have no measurement of architecture depth for anyone, including us.**
406
+ Nothing here tests reasoning across a massive repository, a distributed
407
+ system, a migration, or a performance investigation. Every probe in this
408
+ document ran against a single repo's help text or a 5-file diff, which is
409
+ the shallowest possible case.
410
+ 13. **The overhead of verification itself is only partially measured.**
411
+ PARTIALLY CLOSED 2026-08-03. `tools/verification-tax.py` now computes wall
412
+ time and outcome-change rate from evidence documents. First real reading, on
413
+ the `loki verify HEAD~1` run cited in section 3: **19.0s, outcome changed 1
414
+ of 1 runs**. That is a single-run sample and a single axis - it is a
415
+ baseline, not a trend. Still unmeasured: **token** cost of verification (only
416
+ wall time is captured), and the hit rate over a meaningful history rather
417
+ than one run. Reproduce with
418
+ `python3 tools/verification-tax.py <log.jsonl>`.
419
+ 14. **Confidence calibration is unmeasured.** Selectively bypassing verification
420
+ where confidence is high presupposes that the confidence signal is
421
+ calibrated. We have not measured whether ours is, so we cannot currently
422
+ say where bypassing would be safe.
@@ -0,0 +1,97 @@
1
+ # Dashboard 9.12: what was measured before any code was written
2
+
3
+ Every number here was measured on 2026-08-03 against the working tree at
4
+ `76e42773`. Commands are included so each can be re-run rather than trusted.
5
+
6
+ ## The premise, corrected
7
+
8
+ An earlier pass in this session measured "is the dashboard rendering fabricated
9
+ data" and answered mostly no: 38 of 43 components call a real API, and only two
10
+ files contain `Math.random`. That measurement was sound and it answered the
11
+ wrong question.
12
+
13
+ The founder directive does not ask whether data is fabricated. It asks whether
14
+ **every metric shows source, freshness, unknown, and error state**. That is a
15
+ different property, and it is where the work is.
16
+
17
+ ## The finding
18
+
19
+ The Python readers were built with strict envelope discipline: an empty result
20
+ carries a `reason`, an unmeasured number reads `None` rather than `0`, and
21
+ `source` names the files consulted. The UI discards most of that.
22
+
23
+ | Envelope field | Components consuming it | What its absence means |
24
+ |---|---|---|
25
+ | `freshness_s` | **0 of 43** | A 40-minute-old poll renders identically to a fresh one |
26
+ | `measured` | **0 of 43** | A real cost observation is indistinguishable from an absent one |
27
+ | `reason` | 6 of 43 | "no runs" and "could not read runs" render the same in 37 components |
28
+ | `source` | 10 of 43 | Most rows cannot be audited back to the file they came from |
29
+
30
+ ```bash
31
+ cd dashboard-ui
32
+ grep -l "freshness_s" components/*.js core/*.js | wc -l # 0
33
+ grep -l "measured" components/*.js core/*.js | wc -l # 0
34
+ ```
35
+
36
+ ### Absent rendered as zero
37
+
38
+ ```bash
39
+ grep -o '|| 0' components/*.js | wc -l # 116
40
+ grep -l '|| 0' components/*.js | wc -l # 23 of 43 components
41
+ grep -o '?? 0' components/*.js | wc -l # 8
42
+ ```
43
+
44
+ 116 occurrences across 23 components. This is the exact violation
45
+ `record_is_measured()` exists to prevent, expressed in the UI layer: an absent
46
+ measurement rendered as the number zero. From an operator's chair it is
47
+ indistinguishable from fabricated data, because a fabricated zero and an
48
+ unmeasured zero look the same.
49
+
50
+ ### No staleness signal exists
51
+
52
+ `stale` appears 112 times but collapses to a SINGLE distinct usage:
53
+
54
+ ```bash
55
+ grep -h -o ".\{45\}stale.\{25\}" components/*.js | sort -u
56
+ # >${st.status === 'running' || st.status === 'stale' ? ...
57
+ ```
58
+
59
+ It is a server-supplied status enum value, never a client-side computation
60
+ over data age. There are no `isStale`, `staleness`, or `stale_s` identifiers.
61
+ Nothing in the UI derives freshness from a timestamp.
62
+
63
+ ## The one genuine fabrication
64
+
65
+ `components/loki-session-timeline.js:_buildPhasesFromStatus` synthesizes a
66
+ timeline and renders it as history. Its own comment says so:
67
+
68
+ ```js
69
+ // Simulate a multi-phase timeline based on iteration count
70
+ const phaseOrder = ['planning', 'building', 'testing', 'reviewing'];
71
+ const duration = segmentDuration * (0.8 + Math.random() * 0.4);
72
+ ```
73
+
74
+ Phase NAMES come from a fixed rotation and durations are randomized. Neither is
75
+ measured. An operator reads plausible phase boundaries for work that never
76
+ happened at those times.
77
+
78
+ The other `Math.random` (`loki-log-stream.js:267`) is benign: a unique key for
79
+ a real log entry.
80
+
81
+ **Fix direction** follows `version_is_ahead`: not a better estimate, an explicit
82
+ "phase history not recorded". Whether real phase transitions can be read from
83
+ `trust-events.jsonl` must be checked against that file rather than inferred
84
+ from the component.
85
+
86
+ ## What this means for scope
87
+
88
+ The redesign is not a rewrite of 31,924 lines of working component code. It is
89
+ making the UI carry the honesty contract the backend already has:
90
+
91
+ 1. Every metric renders `unknown` rather than `0` when unmeasured.
92
+ 2. Every panel shows data age, and marks itself stale past a threshold.
93
+ 3. Every empty state states its `reason` and names its `source`.
94
+ 4. Nothing is synthesized and presented as measured.
95
+
96
+ Items 1-3 are the founder's four required states (source, freshness, unknown,
97
+ error) applied to surfaces that already fetch real data. Item 4 is one bug.