loki-mode 5.52.1 → 5.52.3

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/SKILL.md CHANGED
@@ -3,7 +3,7 @@ name: loki-mode
3
3
  description: Multi-agent autonomous startup system. Triggers on "Loki Mode". Takes PRD to deployed product with minimal human intervention. Requires --dangerously-skip-permissions flag.
4
4
  ---
5
5
 
6
- # Loki Mode v5.52.1
6
+ # Loki Mode v5.52.3
7
7
 
8
8
  **You are an autonomous agent. You make decisions. You do not ask questions. You do not stop.**
9
9
 
@@ -263,4 +263,4 @@ The following features are documented in skill modules but not yet fully automat
263
263
  | Quality gates 3-reviewer system | Implemented (v5.35.0) | 5 specialist reviewers in `skills/quality-gates.md`; execution in run.sh |
264
264
  | Benchmarks (HumanEval, SWE-bench) | Infrastructure only | Runner scripts and datasets exist in `benchmarks/`; no published results |
265
265
 
266
- **v5.52.1 | [Autonomi](https://www.autonomi.dev/) flagship product | ~260 lines core**
266
+ **v5.52.3 | [Autonomi](https://www.autonomi.dev/) flagship product | ~260 lines core**
package/VERSION CHANGED
@@ -1 +1 @@
1
- 5.52.1
1
+ 5.52.3
@@ -7,7 +7,7 @@ Modules:
7
7
  control: Session control API (start/stop/pause/resume)
8
8
  """
9
9
 
10
- __version__ = "5.52.1"
10
+ __version__ = "5.52.3"
11
11
 
12
12
  # Expose the control app for easy import
13
13
  try:
@@ -366,6 +366,55 @@ async def health_check() -> dict[str, str]:
366
366
  return {"status": "healthy", "service": "loki-dashboard"}
367
367
 
368
368
 
369
+ # A2A Agent Card - advertises agent capabilities per the A2A spec
370
+ @app.get("/.well-known/agent.json", include_in_schema=False)
371
+ async def agent_card() -> dict:
372
+ """A2A Agent Card served at /.well-known/agent.json."""
373
+ return {
374
+ "name": "Loki Mode",
375
+ "version": _version,
376
+ "description": "Multi-agent autonomous system by Autonomi. Takes PRD to fully deployed product with minimal human intervention.",
377
+ "url": "https://www.autonomi.dev/",
378
+ "capabilities": {
379
+ "agents": 41,
380
+ "swarms": 8,
381
+ "quality_gates": 9,
382
+ "providers": ["claude", "codex", "gemini"],
383
+ "streaming": True,
384
+ "pushNotifications": False,
385
+ "stateTransitionHistory": True,
386
+ },
387
+ "skills": [
388
+ {"id": "prd-to-product", "name": "PRD to Product", "description": "Takes a PRD and builds a fully deployed product"},
389
+ {"id": "code-review", "name": "Code Review", "description": "Multi-reviewer parallel code review with anti-sycophancy"},
390
+ {"id": "testing", "name": "Testing", "description": "Comprehensive test generation and execution"},
391
+ {"id": "deployment", "name": "Deployment", "description": "Production deployment with verification"},
392
+ ],
393
+ "protocols": {
394
+ "a2a": "0.1",
395
+ "mcp": "1.0",
396
+ },
397
+ "endpoints": {
398
+ "health": "/health",
399
+ "status": "/api/status",
400
+ "openapi": "/openapi.json",
401
+ "metrics": "/metrics",
402
+ "websocket": "/ws",
403
+ },
404
+ "enterprise": {
405
+ "multi_tenant": True,
406
+ "rbac": True,
407
+ "audit_log": True,
408
+ "sso": False,
409
+ },
410
+ "authentication": {
411
+ "schemes": ["bearer", "api-key"],
412
+ },
413
+ "defaultInputModes": ["text/plain", "application/json"],
414
+ "defaultOutputModes": ["text/plain", "application/json"],
415
+ }
416
+
417
+
369
418
  # Status endpoint - reads from .loki/ flat files (primary) + DB (fallback)
370
419
  @app.get("/api/status", response_model=StatusResponse)
371
420
  async def get_status() -> StatusResponse:
@@ -2,7 +2,7 @@
2
2
 
3
3
  The flagship product of [Autonomi](https://www.autonomi.dev/). Complete installation instructions for all platforms and use cases.
4
4
 
5
- **Version:** v5.52.1
5
+ **Version:** v5.52.3
6
6
 
7
7
  ---
8
8
 
@@ -52,12 +52,12 @@ The v1 API (`/api/`) continues to work unchanged. The v2 API adds tenant isolati
52
52
 
53
53
  Official SDKs for programmatic access to the Control Plane API.
54
54
 
55
- **Python SDK (`autonomi`):**
55
+ **Python SDK (`loki-mode-sdk`):**
56
56
  - Zero external dependencies (stdlib only)
57
57
  - Synchronous client using `urllib`
58
58
  - Type-safe dataclasses for all API resources
59
59
 
60
- **TypeScript SDK (`@autonomi/sdk`):**
60
+ **TypeScript SDK (`loki-mode-sdk`):**
61
61
  - Zero external dependencies (uses Node.js built-in `fetch`)
62
62
  - Async/await API
63
63
  - TypeScript interfaces for all resources
@@ -220,10 +220,10 @@ export LOKI_OIDC_ISSUER="https://..."
220
220
 
221
221
  ```bash
222
222
  # Python SDK
223
- pip install autonomi
223
+ pip install loki-mode-sdk
224
224
 
225
225
  # TypeScript SDK
226
- npm install @autonomi/sdk
226
+ npm install loki-mode-sdk
227
227
  ```
228
228
 
229
229
  #### 5. Test Enterprise Features
@@ -9,7 +9,7 @@ Official Python and TypeScript SDKs for the Autonomi Control Plane API. Both SDK
9
9
  ### Installation
10
10
 
11
11
  ```bash
12
- pip install autonomi
12
+ pip install loki-mode-sdk
13
13
  ```
14
14
 
15
15
  Or install from source:
@@ -24,7 +24,7 @@ pip install -e .
24
24
  ### Quick Start
25
25
 
26
26
  ```python
27
- from autonomi import AutonomiClient
27
+ from loki_mode_sdk import AutonomiClient
28
28
 
29
29
  # Create a client
30
30
  client = AutonomiClient(
@@ -115,7 +115,7 @@ client.query_audit(
115
115
  #### SessionManager
116
116
 
117
117
  ```python
118
- from autonomi import AutonomiClient, SessionManager
118
+ from loki_mode_sdk import AutonomiClient, SessionManager
119
119
 
120
120
  client = AutonomiClient(base_url="http://localhost:57374", token="loki_xxx")
121
121
  sessions = SessionManager(client)
@@ -130,7 +130,7 @@ session = sessions.get_session("session-id")
130
130
  #### TaskManager
131
131
 
132
132
  ```python
133
- from autonomi import AutonomiClient, TaskManager
133
+ from loki_mode_sdk import AutonomiClient, TaskManager
134
134
 
135
135
  client = AutonomiClient(base_url="http://localhost:57374", token="loki_xxx")
136
136
  tasks = TaskManager(client)
@@ -153,7 +153,7 @@ tasks.update_task(task.id, status="in_progress")
153
153
  #### EventStream
154
154
 
155
155
  ```python
156
- from autonomi import AutonomiClient, EventStream
156
+ from loki_mode_sdk import AutonomiClient, EventStream
157
157
  import time
158
158
 
159
159
  client = AutonomiClient(base_url="http://localhost:57374", token="loki_xxx")
@@ -172,7 +172,7 @@ while True:
172
172
  ### Error Handling
173
173
 
174
174
  ```python
175
- from autonomi import (
175
+ from loki_mode_sdk import (
176
176
  AutonomiClient,
177
177
  AutonomiError,
178
178
  AuthenticationError,
@@ -212,7 +212,7 @@ AutonomiError (base)
212
212
  ### Installation
213
213
 
214
214
  ```bash
215
- npm install @autonomi/sdk
215
+ npm install loki-mode-sdk
216
216
  ```
217
217
 
218
218
  Or use from source:
@@ -227,7 +227,7 @@ npm link
227
227
  ### Quick Start
228
228
 
229
229
  ```typescript
230
- import { AutonomiClient } from '@autonomi/sdk';
230
+ import { AutonomiClient } from 'loki-mode-sdk';
231
231
 
232
232
  const client = new AutonomiClient({
233
233
  baseUrl: 'http://localhost:57374',
@@ -400,7 +400,7 @@ import {
400
400
  AuthenticationError,
401
401
  ForbiddenError,
402
402
  NotFoundError,
403
- } from '@autonomi/sdk';
403
+ } from 'loki-mode-sdk';
404
404
 
405
405
  const client = new AutonomiClient({
406
406
  baseUrl: 'http://localhost:57374',
@@ -471,7 +471,7 @@ Process incoming webhooks and update the Control Plane:
471
471
  ```python
472
472
  # Python -- Flask webhook handler example
473
473
  from flask import Flask, request
474
- from autonomi import AutonomiClient
474
+ from loki_mode_sdk import AutonomiClient
475
475
 
476
476
  app = Flask(__name__)
477
477
  client = AutonomiClient(base_url="http://localhost:57374", token="loki_xxx")
@@ -483,7 +483,7 @@ def handle_webhook():
483
483
 
484
484
  if event_type == "task_completed":
485
485
  # Update task status in the Control Plane
486
- from autonomi import TaskManager
486
+ from loki_mode_sdk import TaskManager
487
487
  tasks = TaskManager(client)
488
488
  tasks.update_task(payload["task_id"], status="completed")
489
489
 
@@ -41,7 +41,7 @@ curl -X DELETE http://localhost:57374/api/keys/ci-pipeline \
41
41
 
42
42
  Python:
43
43
  ```python
44
- from autonomi import AutonomiClient
44
+ from loki_mode_sdk import AutonomiClient
45
45
 
46
46
  client = AutonomiClient(
47
47
  base_url="http://localhost:57374",
@@ -51,7 +51,7 @@ client = AutonomiClient(
51
51
 
52
52
  TypeScript:
53
53
  ```typescript
54
- import { AutonomiClient } from '@autonomi/sdk';
54
+ import { AutonomiClient } from 'loki-mode-sdk';
55
55
 
56
56
  const client = new AutonomiClient({
57
57
  baseUrl: 'http://localhost:57374',
@@ -0,0 +1,47 @@
1
+ # Show HN Post Draft
2
+
3
+ ## Title
4
+
5
+ Show HN: Loki Mode - PRD in, tested code out (41 agents, 9 quality gates, RARV self-verification)
6
+
7
+ ## Body
8
+
9
+ I built Loki Mode because I got tired of the copy-paste loop between AI coding assistants and my terminal. I wanted to hand over a PRD and get back a working, tested codebase -- not perfect, but a solid starting point.
10
+
11
+ **What it does:** You give it a Product Requirements Document. It breaks the work into tasks, dispatches them across 41 specialized agent types organized into 8 swarms (engineering, operations, business, data, product, growth, review, orchestration), and runs every iteration through a self-verification loop called RARV: Reason, Act, Reflect, Verify. The idea is that the system catches its own mistakes before you have to.
12
+
13
+ **Quality gates:** 9 automated gates including 3-reviewer blind review (agents review each other's work without seeing prior reviews), anti-sycophancy checks (a devil's advocate pass on unanimous approvals), and mock/mutation detection. These are not foolproof, but they catch a surprising number of issues that single-pass generation misses.
14
+
15
+ **Multi-provider:** Runs on Claude Code (full parallel agent support), OpenAI Codex CLI, or Google Gemini CLI. Codex and Gemini run in degraded sequential mode -- no parallel agents, no Task tool. Claude Code is the primary target.
16
+
17
+ **Memory:** 3-tier system (episodic, semantic, procedural) so the system can learn from previous runs. Optional vector search with sentence-transformers if you want similarity-based retrieval.
18
+
19
+ **Enterprise features:** TLS, OIDC/SSO, RBAC, OTEL tracing, policy engine, audit trails. All behind env vars. Certs are self-signed only. Dashboard runs on a single machine at port 57374.
20
+
21
+ **Research foundation:** The architecture draws from Anthropic's Constitutional AI (principles-based self-critique), DeepMind's Scalable Oversight via Debate, and OpenAI's Agents SDK patterns (guardrails, tripwires, handoffs). References to specific papers are in the repo.
22
+
23
+ **What it does NOT do:** It does not deploy anything. It generates deployment configs (Helm, Docker Compose, Terraform), but a human deploys. Complex domain logic will need human review. The system can and does make mistakes, especially on novel problems. Token costs scale with project complexity. Our SWE-bench numbers (299/300 patches generated) measure output, not resolution -- the official evaluator has not been run, so the actual fix rate is unknown and likely significantly lower than the generation rate. The HumanEval score is self-reported with max 3 retries per problem.
24
+
25
+ **Test suite:** 683 npm tests, 631 pytest tests, 16 shell tests. Self-reported HumanEval score of 162/164 (98.78%).
26
+
27
+ Built solo. MIT licensed.
28
+
29
+ ## Try it
30
+
31
+ ```bash
32
+ npm install -g loki-mode
33
+ claude --dangerously-skip-permissions
34
+ # Then say: "Loki Mode with PRD at path/to/your-prd.md"
35
+ ```
36
+
37
+ Python SDK: `pip install loki-mode-sdk`. TypeScript SDK: `npm install loki-mode-sdk` (available in the repo at `sdk/typescript/`).
38
+
39
+ Integrations: Jira, Slack, Teams, GitHub Actions.
40
+
41
+ ## Feedback wanted
42
+
43
+ - Is the 9-gate quality system overkill, or does it actually help for your use cases?
44
+ - How do you handle the tension between autonomous agent speed and code review thoroughness?
45
+ - What PRD complexity level breaks this approach? I have hit walls with highly coupled distributed systems.
46
+
47
+ GitHub: https://github.com/asklokesh/loki-mode
package/mcp/__init__.py CHANGED
@@ -1,5 +1,41 @@
1
- """Loki Mode MCP Server Package"""
2
- from .server import mcp
1
+ """
2
+ Loki Mode MCP Server Package
3
+
4
+ NAMESPACE NOTE:
5
+ This local 'mcp/' package provides the Loki Mode MCP server tools
6
+ (loki_memory_retrieve, loki_task_queue, etc.). It intentionally uses
7
+ the 'mcp' namespace, which shadows the pip-installed 'mcp' SDK
8
+ (FastMCP) when imported from the project root.
9
+
10
+ The server module (mcp/server.py) works around this by loading
11
+ FastMCP directly from site-packages via importlib.util, bypassing
12
+ Python's normal package resolution. This means:
13
+
14
+ - The pip 'mcp' SDK MUST be installed for the server to start.
15
+ Install with: pip install mcp
16
+ - Importing 'mcp' from the project root yields THIS package,
17
+ not the pip SDK. This is the intended behavior.
18
+ - The server runs correctly via 'python -m mcp.server' as long
19
+ as the pip SDK is installed in site-packages.
20
+
21
+ This is a known limitation documented in the integrity audit.
22
+ """
23
+
24
+ import logging as _logging
25
+
26
+ _logger = _logging.getLogger('loki-mcp')
27
+
28
+ # Gracefully handle server import -- requires pip 'mcp' SDK installed
29
+ try:
30
+ from .server import mcp
31
+ _SERVER_AVAILABLE = True
32
+ except SystemExit:
33
+ mcp = None
34
+ _SERVER_AVAILABLE = False
35
+ _logger.warning(
36
+ "MCP server not available: pip 'mcp' SDK not installed. "
37
+ "Install with: pip install mcp"
38
+ )
3
39
 
4
40
  # Import learning collector if available
5
41
  try:
@@ -21,4 +57,4 @@ try:
21
57
  except ImportError:
22
58
  __all__ = ['mcp']
23
59
 
24
- __version__ = '5.52.1'
60
+ __version__ = '5.52.3'
package/package.json CHANGED
@@ -1,17 +1,24 @@
1
1
  {
2
2
  "name": "loki-mode",
3
- "version": "5.52.1",
3
+ "version": "5.52.3",
4
4
  "description": "Loki Mode by Autonomi - Multi-agent autonomous startup system for Claude Code, Codex CLI, and Gemini CLI",
5
5
  "keywords": [
6
6
  "autonomi",
7
7
  "loki-mode",
8
8
  "claude",
9
9
  "claude-code",
10
+ "codex",
11
+ "gemini",
10
12
  "ai",
13
+ "ai-agent",
11
14
  "agent",
12
15
  "autonomous",
13
- "startup",
14
- "multi-agent"
16
+ "multi-agent",
17
+ "prd",
18
+ "code-generation",
19
+ "testing",
20
+ "mcp",
21
+ "llm"
15
22
  ],
16
23
  "homepage": "https://www.autonomi.dev/",
17
24
  "bugs": {
@@ -59,7 +66,7 @@
59
66
  "test:dashboard": "npm run test:visual && npm run test:parity"
60
67
  },
61
68
  "engines": {
62
- "node": ">=16.0.0"
69
+ "node": ">=18.0.0"
63
70
  },
64
71
  "os": [
65
72
  "darwin",
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+ var { LinearClient, LinearApiError, RateLimitError, LINEAR_API_URL } = require('./client');
4
+ var { LinearSync, PRIORITY_MAP, VALID_RARV_STATUSES } = require('./sync');
5
+ var { loadConfig, validateConfig, parseSimpleYaml, DEFAULT_STATUS_MAPPING } = require('./config');
6
+
7
+ /**
8
+ * Create a configured Linear sync manager.
9
+ * @param {object} config - Linear configuration object (apiKey, teamId, statusMapping, etc.)
10
+ * @param {object} [options] - Optional adapter options
11
+ * @returns {LinearSync}
12
+ */
13
+ function createSync(config, options) {
14
+ return new LinearSync(config, options);
15
+ }
16
+
17
+ module.exports = {
18
+ LinearClient: LinearClient,
19
+ LinearApiError: LinearApiError,
20
+ RateLimitError: RateLimitError,
21
+ LINEAR_API_URL: LINEAR_API_URL,
22
+ LinearSync: LinearSync,
23
+ PRIORITY_MAP: PRIORITY_MAP,
24
+ VALID_RARV_STATUSES: VALID_RARV_STATUSES,
25
+ DEFAULT_STATUS_MAPPING: DEFAULT_STATUS_MAPPING,
26
+ loadConfig: loadConfig,
27
+ validateConfig: validateConfig,
28
+ parseSimpleYaml: parseSimpleYaml,
29
+ createSync: createSync,
30
+ };