loki-mode 7.39.1 → 7.40.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.
- package/README.md +2 -2
- package/SKILL.md +2 -2
- package/VERSION +1 -1
- package/autonomy/run.sh +70 -0
- package/dashboard/__init__.py +1 -1
- package/docs/INSTALLATION.md +32 -9
- package/loki-ts/dist/loki.js +2 -2
- package/mcp/__init__.py +1 -1
- package/package.json +1 -1
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
package/README.md
CHANGED
|
@@ -105,7 +105,7 @@ loki quick "build a landing page with a signup form"
|
|
|
105
105
|
|--------|---------|-------|
|
|
106
106
|
| **Bun (recommended)** | `bun install -g loki-mode` | Fastest startup for CLI commands. |
|
|
107
107
|
| **Homebrew** | `brew tap asklokesh/tap && brew install loki-mode` | Auto-installs Bun as a dep |
|
|
108
|
-
| **Docker** | `docker pull asklokesh/loki-mode:7.
|
|
108
|
+
| **Docker** | `docker pull asklokesh/loki-mode:7.40.0 && docker run --rm asklokesh/loki-mode:7.40.0 start prd.md` | Bun pre-installed in image |
|
|
109
109
|
| **npm (compat)** | `npm install -g loki-mode` | Works without Bun (bash fallback). Migrate any time with `loki self-update --to bun`. |
|
|
110
110
|
|
|
111
111
|
**Upgrading:**
|
|
@@ -165,7 +165,7 @@ The next major release sunsets the Bash runtime entirely. There is no firm calen
|
|
|
165
165
|
| Method | Command |
|
|
166
166
|
|--------|---------|
|
|
167
167
|
| **Homebrew** | `brew tap asklokesh/tap && brew install loki-mode` |
|
|
168
|
-
| **Docker** | `docker pull asklokesh/loki-mode:7.
|
|
168
|
+
| **Docker** | `docker pull asklokesh/loki-mode:7.40.0` |
|
|
169
169
|
| **Inside Claude Code** | `claude --dangerously-skip-permissions` then type "Loki Mode" |
|
|
170
170
|
| **Git clone** | `git clone https://github.com/asklokesh/loki-mode.git` |
|
|
171
171
|
|
package/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: loki-mode
|
|
|
3
3
|
description: Autonomous spec-driven build system with a built-in trust layer. It does not call work done until it is verified (RARV-C closure loop, 11 quality gates, completion council, verified-completion evidence gate). Triggers on "Loki Mode". Takes a spec (PRD, GitHub issue, OpenAPI doc, etc.) to deployed product with minimal human intervention. Provider-agnostic. Requires --dangerously-skip-permissions flag.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Loki Mode v7.
|
|
6
|
+
# Loki Mode v7.40.0
|
|
7
7
|
|
|
8
8
|
**You are an autonomous agent. You make decisions. You do not ask questions. You do not stop.**
|
|
9
9
|
|
|
@@ -398,4 +398,4 @@ See `CHANGELOG.md` entries [7.5.7], [7.5.8], [7.5.13] for the per-fix list and r
|
|
|
398
398
|
|
|
399
399
|
---
|
|
400
400
|
|
|
401
|
-
**v7.
|
|
401
|
+
**v7.40.0 | [Autonomi](https://www.autonomi.dev/) flagship product | ~260 lines core**
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
7.
|
|
1
|
+
7.40.0
|
package/autonomy/run.sh
CHANGED
|
@@ -10887,6 +10887,20 @@ build_prompt() {
|
|
|
10887
10887
|
# the result is diff-friendly for later incremental updates).
|
|
10888
10888
|
local analysis_instruction="CODEBASE_ANALYSIS_MODE: No PRD provided. Reverse-engineer a precise PRD from the existing code in three passes, cheaply and without blind full scans. PASS 1 (orient): list the top two directory levels; read ONLY high-signal manifests that exist (package.json, requirements.txt, pyproject.toml, Cargo.toml, go.mod, pom.xml, build.gradle, composer.json) to identify language, framework, and scripts; read README and any docs index. PASS 2 (locate): from the manifests and conventional layout, identify the entrypoints, the public API or CLI surface, the test directory and runner, and the config or env contract; read those first; skip generated, vendored, and lockfile content; prefer LSP workspace symbols when the lsp-proxy server is available. PASS 3 (write): write .loki/generated-prd.md with these sections: Overview, Detected Stack, Entrypoints and Components, Existing Behavior and Requirements (reverse-engineered, observable), Test and Build Setup, Gaps and TODOs, Out of Scope. Keep it under 200 lines, plain Markdown, no emojis, no em dashes. Do not invent features not evidenced by the code. THEN execute SDLC phases against that PRD."
|
|
10889
10889
|
|
|
10890
|
+
# v7.40.0 (#584): when the autonomous complexity-gated decision in
|
|
10891
|
+
# run_autonomous chose the Claude Code Dynamic Workflow path
|
|
10892
|
+
# (USE_WORKFLOW_ANALYSIS=1), prefix the read-only analysis instruction with
|
|
10893
|
+
# "ultracode: " so the three-pass reverse-engineer-a-PRD flow runs as a
|
|
10894
|
+
# workflow fan-out. The decision (and its one-time stderr disclosure) is made
|
|
10895
|
+
# ONCE in run_autonomous, not here -- this subshell only reads the resolved
|
|
10896
|
+
# global so the prefix is deterministic per iteration. When the global is 0 /
|
|
10897
|
+
# unset (simple/standard + var unset, or non-Claude, or degraded, or escape
|
|
10898
|
+
# hatch =0), the instruction stays byte-identical to before. Parity-locked
|
|
10899
|
+
# with analysisInstruction() in loki-ts/src/runner/build_prompt.ts.
|
|
10900
|
+
if [ "${USE_WORKFLOW_ANALYSIS:-0}" = "1" ]; then
|
|
10901
|
+
analysis_instruction="ultracode: ${analysis_instruction}"
|
|
10902
|
+
fi
|
|
10903
|
+
|
|
10890
10904
|
# v7.8.1: incremental-update instruction for when a generated PRD already
|
|
10891
10905
|
# exists and the codebase changed (GENERATED_PRD_ACTION=update). Reconcile,
|
|
10892
10906
|
# do not regenerate, so the PRD stays continuous and the update is cheap.
|
|
@@ -12547,6 +12561,62 @@ except Exception as exc:
|
|
|
12547
12561
|
return 1
|
|
12548
12562
|
fi
|
|
12549
12563
|
|
|
12564
|
+
# v7.40.0 (#584): autonomous complexity-gated decision for the no-PRD
|
|
12565
|
+
# codebase-analysis dispatch. detect_complexity() is defined (~1611) but was
|
|
12566
|
+
# never called on the bash route, so DETECTED_COMPLEXITY stayed "" and the
|
|
12567
|
+
# gate was inert here. Call it ONCE per run, before the first build_prompt,
|
|
12568
|
+
# so DETECTED_COMPLEXITY is populated for the gate AND for the existing
|
|
12569
|
+
# complexity consumers (effort-for-tier, telemetry, phase selection) that
|
|
12570
|
+
# previously always fell back to "standard" on bash. detect_complexity()
|
|
12571
|
+
# sets the DETECTED_COMPLEXITY global directly (no echo); call once and let
|
|
12572
|
+
# the cached value carry through every iteration so the static prompt prefix
|
|
12573
|
+
# is stable across the run.
|
|
12574
|
+
if [ -z "${DETECTED_COMPLEXITY:-}" ]; then
|
|
12575
|
+
detect_complexity "$prd_path"
|
|
12576
|
+
fi
|
|
12577
|
+
|
|
12578
|
+
# Decide the workflow-analysis dispatch ONCE here (parent shell), not inside
|
|
12579
|
+
# build_prompt (which runs in a $(...) subshell where a write would not
|
|
12580
|
+
# propagate). The decision is parity-locked with the Bun route
|
|
12581
|
+
# (useClaudeWorkflowsForAnalysis in loki-ts/src/runner/build_prompt.ts) and
|
|
12582
|
+
# evaluated in the SAME order:
|
|
12583
|
+
# provider != claude -> three-pass (USE_WORKFLOW_ANALYSIS=0)
|
|
12584
|
+
# PROVIDER_DEGRADED=true -> three-pass
|
|
12585
|
+
# LOKI_USE_CLAUDE_WORKFLOWS=0 -> three-pass (escape hatch)
|
|
12586
|
+
# LOKI_USE_CLAUDE_WORKFLOWS=1 -> workflow (force on)
|
|
12587
|
+
# var UNSET -> workflow IFF DETECTED_COMPLEXITY == complex
|
|
12588
|
+
# When the workflow path is chosen AUTONOMOUSLY (var unset + complex), emit a
|
|
12589
|
+
# one-time cost disclosure to stderr (NOT stdout, which is the prompt). The
|
|
12590
|
+
# decision is read by build_prompt to prefix the analysis instruction with
|
|
12591
|
+
# "ultracode: ". This ONLY affects the read-only no-PRD analysis instruction,
|
|
12592
|
+
# so the entire decision is gated on the no-PRD case ([ -z "$prd_path" ]).
|
|
12593
|
+
# When a PRD exists, build_prompt never emits the analysis instruction, so
|
|
12594
|
+
# USE_WORKFLOW_ANALYSIS stays 0 and no disclosure fires (the "no PRD found"
|
|
12595
|
+
# message would be false otherwise). detect_complexity above stays
|
|
12596
|
+
# unconditional because its other consumers run in PRD mode too.
|
|
12597
|
+
USE_WORKFLOW_ANALYSIS=0
|
|
12598
|
+
local _wf_autonomous=0
|
|
12599
|
+
if [ -z "$prd_path" ] && [ "${LOKI_PROVIDER:-claude}" = "claude" ] && [ "${PROVIDER_DEGRADED:-false}" != "true" ]; then
|
|
12600
|
+
if [ "${LOKI_USE_CLAUDE_WORKFLOWS:-}" = "0" ]; then
|
|
12601
|
+
USE_WORKFLOW_ANALYSIS=0
|
|
12602
|
+
elif [ "${LOKI_USE_CLAUDE_WORKFLOWS:-}" = "1" ]; then
|
|
12603
|
+
USE_WORKFLOW_ANALYSIS=1
|
|
12604
|
+
elif [ -z "${LOKI_USE_CLAUDE_WORKFLOWS:-}" ] && [ "${DETECTED_COMPLEXITY:-}" = "complex" ]; then
|
|
12605
|
+
USE_WORKFLOW_ANALYSIS=1
|
|
12606
|
+
_wf_autonomous=1
|
|
12607
|
+
fi
|
|
12608
|
+
fi
|
|
12609
|
+
# One-time autonomous-decision disclosure to stderr. Only fires when this run
|
|
12610
|
+
# took the workflow path on its own (not when forced via =1, not when off).
|
|
12611
|
+
# No fabricated dollar figure (no price API): name the cost CLASS and the
|
|
12612
|
+
# opt-out. Guard so it prints once per run.
|
|
12613
|
+
if [ "$_wf_autonomous" = "1" ] && [ -z "${_LOKI_WORKFLOW_DISCLOSED:-}" ]; then
|
|
12614
|
+
echo "Loki: no PRD found and this repo looks complex (complexity=complex), so the codebase-analysis pass is dispatching a Claude Code Dynamic Workflow (parallel fan-out). Workflows are more thorough but cost meaningfully more than the default three-pass analysis. Set LOKI_USE_CLAUDE_WORKFLOWS=0 to keep the cheaper three-pass pass." >&2
|
|
12615
|
+
_LOKI_WORKFLOW_DISCLOSED=1
|
|
12616
|
+
export _LOKI_WORKFLOW_DISCLOSED
|
|
12617
|
+
fi
|
|
12618
|
+
export USE_WORKFLOW_ANALYSIS
|
|
12619
|
+
|
|
12550
12620
|
while [ $retry -lt $MAX_RETRIES ]; do
|
|
12551
12621
|
# Check for human intervention BEFORE incrementing iteration count
|
|
12552
12622
|
# BUG-ST-010: Moved pause/stop checks before ITERATION_COUNT increment
|
package/dashboard/__init__.py
CHANGED
package/docs/INSTALLATION.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
The flagship product of [Autonomi](https://www.autonomi.dev/). Loki Mode is a spec-driven autonomous builder with a built-in trust layer that takes any spec to a deployed product and verifies completion with evidence (quality gates plus a completion council), not just a "done" claim. Complete installation instructions for all platforms and use cases.
|
|
4
4
|
|
|
5
|
-
**Version:** v7.
|
|
5
|
+
**Version:** v7.40.0
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -40,7 +40,8 @@ setting any flag to `0`.
|
|
|
40
40
|
|
|
41
41
|
## Table of Contents
|
|
42
42
|
|
|
43
|
-
- [
|
|
43
|
+
- [Bun (Recommended)](#bun-recommended)
|
|
44
|
+
- [npm](#npm)
|
|
44
45
|
- [Homebrew](#homebrew)
|
|
45
46
|
- [Quick Start](#quick-start)
|
|
46
47
|
- [Verify Installation](#verify-installation)
|
|
@@ -57,17 +58,39 @@ setting any flag to `0`.
|
|
|
57
58
|
|
|
58
59
|
---
|
|
59
60
|
|
|
60
|
-
##
|
|
61
|
+
## Bun (Recommended)
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
bun install -g loki-mode
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Installs the `loki` CLI. Bun is the recommended path: the `loki` shim runs the
|
|
68
|
+
faster TypeScript runtime when `bun` is on `PATH`, and the stable bash engine
|
|
69
|
+
(the autonomous loop, quality gates, and completion council) runs underneath on
|
|
70
|
+
every route, so you lose nothing by choosing Bun. Run `loki setup-skill` once
|
|
71
|
+
after install to create the per-provider skill symlinks (Claude Code, Codex CLI).
|
|
72
|
+
|
|
73
|
+
**Prerequisites:** Bun 1.3+ (`curl -fsSL https://bun.sh/install | bash`, or
|
|
74
|
+
`brew install oven-sh/bun/bun`). No separate Node install is required.
|
|
75
|
+
|
|
76
|
+
**Update:** `bun update -g loki-mode`
|
|
77
|
+
|
|
78
|
+
**Uninstall:** `bun remove -g loki-mode`
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## npm
|
|
61
83
|
|
|
62
84
|
```bash
|
|
63
85
|
npm install -g loki-mode
|
|
64
86
|
```
|
|
65
87
|
|
|
66
|
-
|
|
67
|
-
`loki setup-skill` once after install
|
|
68
|
-
symlinks (Claude Code, Codex CLI). The `loki`
|
|
69
|
-
read-only commands to the Bun runtime when `bun` is on `PATH`
|
|
70
|
-
back to the bash CLI otherwise
|
|
88
|
+
A fully supported alternative when you prefer npm or do not have Bun. As of
|
|
89
|
+
v7.4.12 there is no postinstall step; run `loki setup-skill` once after install
|
|
90
|
+
to create the per-provider skill symlinks (Claude Code, Codex CLI). The `loki`
|
|
91
|
+
shim auto-routes read-only commands to the Bun runtime when `bun` is on `PATH`
|
|
92
|
+
and falls back to the bash CLI otherwise (the core autonomous engine is the
|
|
93
|
+
same on both routes).
|
|
71
94
|
|
|
72
95
|
**Prerequisites:** Node.js 18+. Bun 1.3+ optional but recommended for the
|
|
73
96
|
faster routed commands and forward-compat with v8.0.0.
|
|
@@ -117,7 +140,7 @@ and orchestrator components ship via npm, Docker, and Homebrew only.
|
|
|
117
140
|
pip install loki-mode-sdk
|
|
118
141
|
|
|
119
142
|
# Install the full CLI (recommended)
|
|
120
|
-
|
|
143
|
+
bun install -g loki-mode # or: npm install -g loki-mode, or: brew tap asklokesh/tap && brew install loki-mode
|
|
121
144
|
```
|
|
122
145
|
|
|
123
146
|
The naming asymmetry (`loki-mode` on npm vs `loki-mode-sdk` on PyPI) is
|
package/loki-ts/dist/loki.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var n6=Object.defineProperty;var a6=($)=>$;function s6($,Q){this[$]=a6.bind(null,Q)}var h=($,Q)=>{for(var Z in Q)n6($,Z,{get:Q[Z],enumerable:!0,configurable:!0,set:s6.bind(Q,Z)})};var L=($,Q)=>()=>($&&(Q=$($=0)),Q);var K$=import.meta.require;var S1={};h(S1,{lokiDir:()=>P,homeLokiDir:()=>o$,findRepoRootForVersion:()=>d$,REPO_ROOT:()=>m});import{resolve as n,dirname as l$}from"path";import{fileURLToPath as t6}from"url";import{existsSync as P$}from"fs";import{homedir as r6}from"os";function i6(){let $=N1;for(let Q=0;Q<6;Q++){if(P$(n($,"VERSION"))&&P$(n($,"autonomy/run.sh")))return $;let Z=l$($);if(Z===$)break;$=Z}return n(N1,"..","..","..")}function d$($){let Q=$;for(let Z=0;Z<6;Z++){if(P$(n(Q,"VERSION"))&&P$(n(Q,"autonomy/run.sh")))return Q;let z=l$(Q);if(z===Q)break;Q=z}return n($,"..","..","..")}function P(){return process.env.LOKI_DIR??n(process.cwd(),".loki")}function o$(){return n(r6(),".loki")}var N1,m;var C=L(()=>{N1=l$(t6(import.meta.url));m=i6()});import{readFileSync as e6}from"fs";import{resolve as $Q,dirname as QQ}from"path";import{fileURLToPath as ZQ}from"url";function F$(){if($$!==null)return $$;let $="7.
|
|
2
|
+
var n6=Object.defineProperty;var a6=($)=>$;function s6($,Q){this[$]=a6.bind(null,Q)}var h=($,Q)=>{for(var Z in Q)n6($,Z,{get:Q[Z],enumerable:!0,configurable:!0,set:s6.bind(Q,Z)})};var L=($,Q)=>()=>($&&(Q=$($=0)),Q);var K$=import.meta.require;var S1={};h(S1,{lokiDir:()=>P,homeLokiDir:()=>o$,findRepoRootForVersion:()=>d$,REPO_ROOT:()=>m});import{resolve as n,dirname as l$}from"path";import{fileURLToPath as t6}from"url";import{existsSync as P$}from"fs";import{homedir as r6}from"os";function i6(){let $=N1;for(let Q=0;Q<6;Q++){if(P$(n($,"VERSION"))&&P$(n($,"autonomy/run.sh")))return $;let Z=l$($);if(Z===$)break;$=Z}return n(N1,"..","..","..")}function d$($){let Q=$;for(let Z=0;Z<6;Z++){if(P$(n(Q,"VERSION"))&&P$(n(Q,"autonomy/run.sh")))return Q;let z=l$(Q);if(z===Q)break;Q=z}return n($,"..","..","..")}function P(){return process.env.LOKI_DIR??n(process.cwd(),".loki")}function o$(){return n(r6(),".loki")}var N1,m;var C=L(()=>{N1=l$(t6(import.meta.url));m=i6()});import{readFileSync as e6}from"fs";import{resolve as $Q,dirname as QQ}from"path";import{fileURLToPath as ZQ}from"url";function F$(){if($$!==null)return $$;let $="7.40.0";if(typeof $==="string"&&$.length>0)return $$=$,$$;try{let Q=QQ(ZQ(import.meta.url)),Z=d$(Q);$$=e6($Q(Z,"VERSION"),"utf-8").trim()}catch{$$="unknown"}return $$}var $$=null;var n$=L(()=>{C()});var C1={};h(C1,{runOrThrow:()=>zQ,run:()=>j,commandVersion:()=>KQ,commandExists:()=>f,ShellError:()=>a$});async function j($,Q={}){let Z=Bun.spawn({cmd:[...$],stdout:"pipe",stderr:"pipe",env:Q.env?{...process.env,...Q.env}:process.env,cwd:Q.cwd}),z,X;if(Q.timeoutMs&&Q.timeoutMs>0)z=setTimeout(()=>{try{Z.kill("SIGTERM")}catch{}X=setTimeout(()=>{try{Z.kill("SIGKILL")}catch{}},2000)},Q.timeoutMs);try{let[W,K,U]=await Promise.all([new Response(Z.stdout).text(),new Response(Z.stderr).text(),Z.exited]);return{stdout:W,stderr:K,exitCode:U}}finally{if(z)clearTimeout(z);if(X)clearTimeout(X)}}async function zQ($,Q={}){let Z=await j($,Q);if(Z.exitCode!==0)throw new a$(`command failed (${Z.exitCode}): ${$.join(" ")}`,Z.exitCode,Z.stdout,Z.stderr);return Z}async function f($){let Q=XQ($),Z=await j(["sh","-c",`command -v ${Q}`],{timeoutMs:5000});if(Z.exitCode===0)return Z.stdout.trim()||null;return null}function XQ($){if(!/^[A-Za-z0-9._/-]+$/.test($))throw Error(`refused to shell-escape suspect token: ${$}`);return $}async function KQ($,Q="--version"){if(!await f($))return null;let z=await j([$,Q],{timeoutMs:5000});if(z.exitCode!==0)return null;return((z.stdout||z.stderr).split(/\r?\n/)[0]?.trim()??"")||null}var a$;var d=L(()=>{a$=class a$ extends Error{message;exitCode;stdout;stderr;constructor($,Q,Z,z){super($);this.message=$;this.exitCode=Q;this.stdout=Z;this.stderr=z;this.name="ShellError"}}});function a($){return WQ?"":$}var WQ,T,S,I,TZ,w,R,y,q;var c=L(()=>{WQ=(process.env.NO_COLOR??"").length>0;T=a("\x1B[0;31m"),S=a("\x1B[0;32m"),I=a("\x1B[1;33m"),TZ=a("\x1B[0;34m"),w=a("\x1B[0;36m"),R=a("\x1B[1m"),y=a("\x1B[2m"),q=a("\x1B[0m")});import{existsSync as TQ}from"fs";async function Q$(){if(B$!==void 0)return B$;let $="/opt/homebrew/bin/python3.12";if(TQ($))return B$=$,$;let Q=await f("python3.12");if(Q)return B$=Q,Q;let Z=await f("python3");return B$=Z,Z}async function Z$($,Q={}){let Z=await Q$();if(!Z)return{stdout:"",stderr:"python3 not found",exitCode:127};return j([Z,"-c",$],Q)}var B$;var W$=L(()=>{d()});var t1={};h(t1,{runStatus:()=>gQ});import{existsSync as v,readFileSync as U$,readdirSync as l1,statSync as d1}from"fs";import{resolve as D,basename as xQ}from"path";import{homedir as NQ}from"os";async function DQ(){if(await f("jq"))return!0;return process.stdout.write(`${T}Error: jq is required but not installed.${q}
|
|
3
3
|
`),process.stdout.write(`Install with:
|
|
4
4
|
`),process.stdout.write(` brew install jq (macOS)
|
|
5
5
|
`),process.stdout.write(` apt install jq (Debian/Ubuntu)
|
|
@@ -789,4 +789,4 @@ Set LOKI_LEGACY_BASH=1 to force the bash CLI for every command.
|
|
|
789
789
|
`),2}default:return process.stderr.write(`Unknown command: ${Q}
|
|
790
790
|
`),process.stderr.write(o6),2}}p1();process.on("SIGINT",()=>process.exit(130));process.on("SIGTERM",()=>process.exit(143));var ZZ=await QZ(Bun.argv.slice(2));process.exit(ZZ);
|
|
791
791
|
|
|
792
|
-
//# debugId=
|
|
792
|
+
//# debugId=CE2296A3A5523BAE64756E2164756E21
|
package/mcp/__init__.py
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "loki-mode",
|
|
3
3
|
"mcpName": "io.github.asklokesh/loki-mode",
|
|
4
|
-
"version": "7.
|
|
4
|
+
"version": "7.40.0",
|
|
5
5
|
"description": "Loki Mode by Autonomi. Autonomous spec-to-product system: takes a PRD, GitHub issue, OpenAPI/JSON/YAML, or one-line brief to a deployed app via the RARV-C closure loop with 11 quality gates. Provider-agnostic (Claude Code, OpenAI Codex, Cline, Aider).",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"agent",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
3
3
|
"name": "loki-mode",
|
|
4
4
|
"displayName": "Loki Mode",
|
|
5
|
-
"version": "7.
|
|
5
|
+
"version": "7.40.0",
|
|
6
6
|
"description": "Autonomous spec-to-product build system with a built-in trust layer (RARV-C closure loop, 11 quality gates, completion council). Ships Loki's spec-hardening, drift-detection, and deterministic PR verification commands plus the Loki MCP server.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Autonomi",
|