@sudosandwich/limps 2.12.0 → 2.13.1
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 +201 -73
- package/dist/cli/config-cmd.d.ts.map +1 -1
- package/dist/cli/config-cmd.js +3 -3
- package/dist/cli/config-cmd.js.map +1 -1
- package/dist/cli/graph-check.d.ts +15 -0
- package/dist/cli/graph-check.d.ts.map +1 -0
- package/dist/cli/graph-check.js +36 -0
- package/dist/cli/graph-check.js.map +1 -0
- package/dist/cli/graph-db.d.ts +4 -0
- package/dist/cli/graph-db.d.ts.map +1 -0
- package/dist/cli/graph-db.js +14 -0
- package/dist/cli/graph-db.js.map +1 -0
- package/dist/cli/graph-entity.d.ts +11 -0
- package/dist/cli/graph-entity.d.ts.map +1 -0
- package/dist/cli/graph-entity.js +18 -0
- package/dist/cli/graph-entity.js.map +1 -0
- package/dist/cli/graph-health.d.ts +19 -0
- package/dist/cli/graph-health.d.ts.map +1 -0
- package/dist/cli/graph-health.js +59 -0
- package/dist/cli/graph-health.js.map +1 -0
- package/dist/cli/graph-overlap.d.ts +12 -0
- package/dist/cli/graph-overlap.d.ts.map +1 -0
- package/dist/cli/graph-overlap.js +21 -0
- package/dist/cli/graph-overlap.js.map +1 -0
- package/dist/cli/graph-reindex.d.ts +14 -0
- package/dist/cli/graph-reindex.d.ts.map +1 -0
- package/dist/cli/graph-reindex.js +49 -0
- package/dist/cli/graph-reindex.js.map +1 -0
- package/dist/cli/graph-search.d.ts +15 -0
- package/dist/cli/graph-search.d.ts.map +1 -0
- package/dist/cli/graph-search.js +37 -0
- package/dist/cli/graph-search.js.map +1 -0
- package/dist/cli/graph-suggest.d.ts +12 -0
- package/dist/cli/graph-suggest.d.ts.map +1 -0
- package/dist/cli/graph-suggest.js +35 -0
- package/dist/cli/graph-suggest.js.map +1 -0
- package/dist/cli/graph-trace.d.ts +17 -0
- package/dist/cli/graph-trace.d.ts.map +1 -0
- package/dist/cli/graph-trace.js +30 -0
- package/dist/cli/graph-trace.js.map +1 -0
- package/dist/cli/graph-watch.d.ts +10 -0
- package/dist/cli/graph-watch.d.ts.map +1 -0
- package/dist/cli/graph-watch.js +18 -0
- package/dist/cli/graph-watch.js.map +1 -0
- package/dist/cli/mcp-client-adapter.d.ts +14 -5
- package/dist/cli/mcp-client-adapter.d.ts.map +1 -1
- package/dist/cli/mcp-client-adapter.js +14 -3
- package/dist/cli/mcp-client-adapter.js.map +1 -1
- package/dist/cli/mcp-clients.d.ts +2 -2
- package/dist/cli/mcp-clients.d.ts.map +1 -1
- package/dist/cli/mcp-clients.js +15 -0
- package/dist/cli/mcp-clients.js.map +1 -1
- package/dist/cli/plan-repair.d.ts +26 -0
- package/dist/cli/plan-repair.d.ts.map +1 -1
- package/dist/cli/plan-repair.js +84 -0
- package/dist/cli/plan-repair.js.map +1 -1
- package/dist/commands/config/sync-mcp.d.ts +1 -0
- package/dist/commands/config/sync-mcp.d.ts.map +1 -1
- package/dist/commands/config/sync-mcp.js +2 -2
- package/dist/commands/config/sync-mcp.js.map +1 -1
- package/dist/commands/graph/check.d.ts +16 -0
- package/dist/commands/graph/check.d.ts.map +1 -0
- package/dist/commands/graph/check.js +88 -0
- package/dist/commands/graph/check.js.map +1 -0
- package/dist/commands/graph/entity.d.ts +16 -0
- package/dist/commands/graph/entity.d.ts.map +1 -0
- package/dist/commands/graph/entity.js +83 -0
- package/dist/commands/graph/entity.js.map +1 -0
- package/dist/commands/graph/health.d.ts +16 -0
- package/dist/commands/graph/health.d.ts.map +1 -0
- package/dist/commands/graph/health.js +78 -0
- package/dist/commands/graph/health.js.map +1 -0
- package/dist/commands/graph/index.d.ts +3 -0
- package/dist/commands/graph/index.d.ts.map +1 -0
- package/dist/commands/graph/index.js +33 -0
- package/dist/commands/graph/index.js.map +1 -0
- package/dist/commands/graph/overlap.d.ts +18 -0
- package/dist/commands/graph/overlap.d.ts.map +1 -0
- package/dist/commands/graph/overlap.js +88 -0
- package/dist/commands/graph/overlap.js.map +1 -0
- package/dist/commands/graph/reindex.d.ts +18 -0
- package/dist/commands/graph/reindex.d.ts.map +1 -0
- package/dist/commands/graph/reindex.js +92 -0
- package/dist/commands/graph/reindex.js.map +1 -0
- package/dist/commands/graph/search.d.ts +18 -0
- package/dist/commands/graph/search.d.ts.map +1 -0
- package/dist/commands/graph/search.js +105 -0
- package/dist/commands/graph/search.js.map +1 -0
- package/dist/commands/graph/suggest.d.ts +16 -0
- package/dist/commands/graph/suggest.d.ts.map +1 -0
- package/dist/commands/graph/suggest.js +88 -0
- package/dist/commands/graph/suggest.js.map +1 -0
- package/dist/commands/graph/trace.d.ts +22 -0
- package/dist/commands/graph/trace.d.ts.map +1 -0
- package/dist/commands/graph/trace.js +97 -0
- package/dist/commands/graph/trace.js.map +1 -0
- package/dist/commands/graph/watch.d.ts +17 -0
- package/dist/commands/graph/watch.d.ts.map +1 -0
- package/dist/commands/graph/watch.js +48 -0
- package/dist/commands/graph/watch.js.map +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/repair-plans.d.ts.map +1 -1
- package/dist/commands/repair-plans.js +74 -10
- package/dist/commands/repair-plans.js.map +1 -1
- package/dist/config.d.ts +24 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +57 -13
- package/dist/config.js.map +1 -1
- package/dist/graph/conflict-detector.d.ts +27 -0
- package/dist/graph/conflict-detector.d.ts.map +1 -0
- package/dist/graph/conflict-detector.js +168 -0
- package/dist/graph/conflict-detector.js.map +1 -0
- package/dist/graph/extractor.d.ts +10 -0
- package/dist/graph/extractor.d.ts.map +1 -0
- package/dist/graph/extractor.js +266 -0
- package/dist/graph/extractor.js.map +1 -0
- package/dist/graph/notifier.d.ts +16 -0
- package/dist/graph/notifier.d.ts.map +1 -0
- package/dist/graph/notifier.js +61 -0
- package/dist/graph/notifier.js.map +1 -0
- package/dist/graph/parser.d.ts +10 -0
- package/dist/graph/parser.d.ts.map +1 -0
- package/dist/graph/parser.js +54 -0
- package/dist/graph/parser.js.map +1 -0
- package/dist/graph/patterns.d.ts +16 -0
- package/dist/graph/patterns.d.ts.map +1 -0
- package/dist/graph/patterns.js +23 -0
- package/dist/graph/patterns.js.map +1 -0
- package/dist/graph/resolver.d.ts +23 -0
- package/dist/graph/resolver.d.ts.map +1 -0
- package/dist/graph/resolver.js +98 -0
- package/dist/graph/resolver.js.map +1 -0
- package/dist/graph/similarity.d.ts +38 -0
- package/dist/graph/similarity.d.ts.map +1 -0
- package/dist/graph/similarity.js +74 -0
- package/dist/graph/similarity.js.map +1 -0
- package/dist/graph/storage.js +2 -2
- package/dist/graph/watcher.d.ts +23 -0
- package/dist/graph/watcher.d.ts.map +1 -0
- package/dist/graph/watcher.js +94 -0
- package/dist/graph/watcher.js.map +1 -0
- package/dist/indexer.d.ts.map +1 -1
- package/dist/indexer.js +9 -0
- package/dist/indexer.js.map +1 -1
- package/dist/resources/plans-summary.d.ts.map +1 -1
- package/dist/resources/plans-summary.js +7 -5
- package/dist/resources/plans-summary.js.map +1 -1
- package/dist/retrieval/bfs.d.ts +27 -0
- package/dist/retrieval/bfs.d.ts.map +1 -0
- package/dist/retrieval/bfs.js +77 -0
- package/dist/retrieval/bfs.js.map +1 -0
- package/dist/retrieval/hybrid.d.ts +25 -0
- package/dist/retrieval/hybrid.d.ts.map +1 -0
- package/dist/retrieval/hybrid.js +84 -0
- package/dist/retrieval/hybrid.js.map +1 -0
- package/dist/retrieval/recipes.d.ts +20 -0
- package/dist/retrieval/recipes.d.ts.map +1 -0
- package/dist/retrieval/recipes.js +123 -0
- package/dist/retrieval/recipes.js.map +1 -0
- package/dist/retrieval/router.d.ts +7 -0
- package/dist/retrieval/router.d.ts.map +1 -0
- package/dist/retrieval/router.js +51 -0
- package/dist/retrieval/router.js.map +1 -0
- package/dist/retrieval/rrf.d.ts +21 -0
- package/dist/retrieval/rrf.d.ts.map +1 -0
- package/dist/retrieval/rrf.js +27 -0
- package/dist/retrieval/rrf.js.map +1 -0
- package/dist/retrieval/types.d.ts +60 -0
- package/dist/retrieval/types.d.ts.map +1 -0
- package/dist/retrieval/types.js +18 -0
- package/dist/retrieval/types.js.map +1 -0
- package/dist/rlm/sandbox.d.ts.map +1 -1
- package/dist/rlm/sandbox.js +8 -1
- package/dist/rlm/sandbox.js.map +1 -1
- package/dist/server-main.d.ts.map +1 -1
- package/dist/server-main.js +31 -13
- package/dist/server-main.js.map +1 -1
- package/dist/tools/configure-scoring.d.ts.map +1 -1
- package/dist/tools/configure-scoring.js +3 -0
- package/dist/tools/configure-scoring.js.map +1 -1
- package/dist/tools/graph.d.ts +32 -0
- package/dist/tools/graph.d.ts.map +1 -0
- package/dist/tools/graph.js +105 -0
- package/dist/tools/graph.js.map +1 -0
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +21 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/process-doc.d.ts.map +1 -1
- package/dist/tools/process-doc.js +14 -0
- package/dist/tools/process-doc.js.map +1 -1
- package/dist/tools/process-docs.d.ts.map +1 -1
- package/dist/tools/process-docs.js +14 -0
- package/dist/tools/process-docs.js.map +1 -1
- package/dist/utils/config-resolver.d.ts +3 -1
- package/dist/utils/config-resolver.d.ts.map +1 -1
- package/dist/utils/config-resolver.js +5 -4
- package/dist/utils/config-resolver.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@sudosandwich/limps)
|
|
6
6
|
[](https://opensource.org/licenses/MIT)
|
|
7
|
-

|
|
8
8
|

|
|
9
9
|
[](https://lobehub.com/mcp/paulbreuler-limps)
|
|
10
10
|
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
- [Quick Start](#quick-start)
|
|
16
16
|
- [Features](#features)
|
|
17
17
|
- [How I Use limps](#how-i-use-limps)
|
|
18
|
+
- [Health & Automation](#health--automation)
|
|
18
19
|
- [How You Can Use It](#how-you-can-use-it)
|
|
19
20
|
- [Why limps?](#why-limps)
|
|
20
21
|
- [Installation](#installation)
|
|
@@ -25,7 +26,7 @@
|
|
|
25
26
|
- [Configuration](#configuration)
|
|
26
27
|
- [Environment Variables](#environment-variables)
|
|
27
28
|
- [MCP Tools](#mcp-tools)
|
|
28
|
-
- [Skills](#skills)
|
|
29
|
+
- [Skills & Commands](#skills--commands)
|
|
29
30
|
- [Extensions](#extensions)
|
|
30
31
|
- [Obsidian Compatibility](#obsidian-compatibility)
|
|
31
32
|
- [Development](#development)
|
|
@@ -60,6 +61,10 @@ Run this in the folder where you want to keep the docs and that's it. Your AI as
|
|
|
60
61
|
- **Sandboxed document processing** via `process_doc(s)` helpers
|
|
61
62
|
- **Multi-client sync** for Cursor, Claude, Codex, and more
|
|
62
63
|
- **Extensions** for domain-specific tooling (e.g., limps-headless)
|
|
64
|
+
- **Knowledge graph** — Entity extraction, hybrid retrieval, conflict detection, and graph-based suggestions
|
|
65
|
+
- **Health automation** — Staleness detection, code drift checks, status inference, and auto-fix proposals
|
|
66
|
+
- **Advanced task scoring** — Dependency-aware prioritization with per-plan/agent weight overrides
|
|
67
|
+
- **MCP Registry** — Published to the official MCP Registry (`registry.modelcontextprotocol.io`)
|
|
63
68
|
|
|
64
69
|
### What to know before you start
|
|
65
70
|
|
|
@@ -84,6 +89,7 @@ Commands and tools I use most often:
|
|
|
84
89
|
- **Read**: `list_plans`, `list_agents`, `list_docs`, `search_docs`, `get_plan_status`
|
|
85
90
|
- **Update**: `update_doc`, `update_task_status`, `manage_tags`
|
|
86
91
|
- **Close**: `update_task_status` (e.g., `PASS`), `delete_doc` if needed
|
|
92
|
+
- **Analyze**: `graph health`, `graph search`, `graph check`, `health check`
|
|
87
93
|
|
|
88
94
|
Full lists are below in "CLI Commands" and "MCP Tools."
|
|
89
95
|
|
|
@@ -111,13 +117,13 @@ Key ideas:
|
|
|
111
117
|
|
|
112
118
|
### Supported Clients
|
|
113
119
|
|
|
114
|
-
| Client
|
|
115
|
-
|
|
116
|
-
| **Cursor**
|
|
117
|
-
| **Claude Code**
|
|
118
|
-
| **Claude Desktop** | Global config
|
|
119
|
-
| **OpenAI Codex**
|
|
120
|
-
| **ChatGPT**
|
|
120
|
+
| Client | Config Location | Command |
|
|
121
|
+
| ------------------ | -------------------------- | ------------------------------------------------ |
|
|
122
|
+
| **Cursor** | `.cursor/mcp.json` (local) | `limps config sync-mcp --client cursor` |
|
|
123
|
+
| **Claude Code** | `.mcp.json` (local) | `limps config sync-mcp --client claude-code` |
|
|
124
|
+
| **Claude Desktop** | Global config | `limps config sync-mcp --client claude --global` |
|
|
125
|
+
| **OpenAI Codex** | `~/.codex/config.toml` | `limps config sync-mcp --client codex --global` |
|
|
126
|
+
| **ChatGPT** | Manual setup | `limps config sync-mcp --client chatgpt --print` |
|
|
121
127
|
|
|
122
128
|
> **Note:** By default, `sync-mcp` writes to local/project configs. Use `--global` for user-level configs.
|
|
123
129
|
|
|
@@ -227,7 +233,13 @@ Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
|
227
233
|
"mcpServers": {
|
|
228
234
|
"limps": {
|
|
229
235
|
"command": "npx",
|
|
230
|
-
"args": [
|
|
236
|
+
"args": [
|
|
237
|
+
"-y",
|
|
238
|
+
"@sudosandwich/limps",
|
|
239
|
+
"serve",
|
|
240
|
+
"--config",
|
|
241
|
+
"/path/to/config.json"
|
|
242
|
+
]
|
|
231
243
|
}
|
|
232
244
|
}
|
|
233
245
|
}
|
|
@@ -245,7 +257,15 @@ On Windows, use `cmd /c` to run `npx`:
|
|
|
245
257
|
"mcpServers": {
|
|
246
258
|
"limps": {
|
|
247
259
|
"command": "cmd",
|
|
248
|
-
"args": [
|
|
260
|
+
"args": [
|
|
261
|
+
"/c",
|
|
262
|
+
"npx",
|
|
263
|
+
"-y",
|
|
264
|
+
"@sudosandwich/limps",
|
|
265
|
+
"serve",
|
|
266
|
+
"--config",
|
|
267
|
+
"C:\\path\\to\\config.json"
|
|
268
|
+
]
|
|
249
269
|
}
|
|
250
270
|
}
|
|
251
271
|
}
|
|
@@ -312,15 +332,49 @@ limps config show # Display current config
|
|
|
312
332
|
limps config sync-mcp # Add projects to MCP clients
|
|
313
333
|
```
|
|
314
334
|
|
|
335
|
+
### Health & Automation
|
|
336
|
+
|
|
337
|
+
```bash
|
|
338
|
+
limps health check # Aggregate all health signals
|
|
339
|
+
limps health staleness [plan] # Find stale plans/agents
|
|
340
|
+
limps health drift [plan] # Detect file reference drift
|
|
341
|
+
limps health inference [plan] # Suggest status updates
|
|
342
|
+
limps proposals list # List auto-fix proposals
|
|
343
|
+
limps proposals apply <id> # Apply a proposal
|
|
344
|
+
limps proposals apply-safe # Apply all safe proposals
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### Knowledge Graph
|
|
348
|
+
|
|
349
|
+
```bash
|
|
350
|
+
limps graph reindex # Build/rebuild graph
|
|
351
|
+
limps graph health # Graph stats and conflicts
|
|
352
|
+
limps graph search <query> # Search entities
|
|
353
|
+
limps graph trace <entity> # Trace relationships
|
|
354
|
+
limps graph entity <id> # Entity details
|
|
355
|
+
limps graph overlap # Find overlapping features
|
|
356
|
+
limps graph check [type] # Run conflict detection
|
|
357
|
+
limps graph suggest <type> # Graph-based suggestions
|
|
358
|
+
limps graph watch # Watch and update incrementally
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
### Scoring & Repair
|
|
362
|
+
|
|
363
|
+
```bash
|
|
364
|
+
limps score-all <plan> # Score all agents in a plan
|
|
365
|
+
limps score-task <task-id> # Score a single task
|
|
366
|
+
limps repair-plans [--fix] # Check/fix agent frontmatter
|
|
367
|
+
```
|
|
368
|
+
|
|
315
369
|
## Configuration
|
|
316
370
|
|
|
317
371
|
Config location varies by OS:
|
|
318
372
|
|
|
319
|
-
| OS
|
|
320
|
-
|
|
321
|
-
| macOS
|
|
322
|
-
| Linux
|
|
323
|
-
| Windows | `%APPDATA%\limps\config.json`
|
|
373
|
+
| OS | Path |
|
|
374
|
+
| ------- | ------------------------------------------------- |
|
|
375
|
+
| macOS | `~/Library/Application Support/limps/config.json` |
|
|
376
|
+
| Linux | `~/.config/limps/config.json` |
|
|
377
|
+
| Windows | `%APPDATA%\limps\config.json` |
|
|
324
378
|
|
|
325
379
|
### Config Options
|
|
326
380
|
|
|
@@ -341,47 +395,125 @@ Config location varies by OS:
|
|
|
341
395
|
}
|
|
342
396
|
```
|
|
343
397
|
|
|
344
|
-
| Option
|
|
345
|
-
|
|
346
|
-
| `plansPath`
|
|
347
|
-
| `docsPaths`
|
|
348
|
-
| `fileExtensions` | File types to index (default: `.md`)
|
|
349
|
-
| `dataPath`
|
|
350
|
-
| `tools`
|
|
351
|
-
| `extensions`
|
|
352
|
-
| `scoring`
|
|
398
|
+
| Option | Description |
|
|
399
|
+
| ---------------- | ---------------------------------------------------------- |
|
|
400
|
+
| `plansPath` | Directory for structured plans (`NNNN-name/` with agents) |
|
|
401
|
+
| `docsPaths` | Additional directories to index |
|
|
402
|
+
| `fileExtensions` | File types to index (default: `.md`) |
|
|
403
|
+
| `dataPath` | SQLite database location |
|
|
404
|
+
| `tools` | Tool allowlist/denylist filtering |
|
|
405
|
+
| `extensions` | Extension packages to load |
|
|
406
|
+
| `scoring` | Task prioritization weights and biases |
|
|
407
|
+
| `graph` | Knowledge graph settings (e.g., entity extraction options) |
|
|
408
|
+
| `retrieval` | Search recipe configuration for hybrid retrieval |
|
|
353
409
|
|
|
354
410
|
## Environment Variables
|
|
355
411
|
|
|
356
|
-
| Variable
|
|
357
|
-
|
|
358
|
-
| `LIMPS_PROJECT`
|
|
359
|
-
| `LIMPS_ALLOWED_TOOLS`
|
|
360
|
-
| `LIMPS_DISABLED_TOOLS` | Comma-separated denylist; tools to hide
|
|
412
|
+
| Variable | Description | Example |
|
|
413
|
+
| ---------------------- | ---------------------------------------------------------- | ------------------------------------------------- |
|
|
414
|
+
| `LIMPS_PROJECT` | Select active project for CLI commands | `LIMPS_PROJECT=project-b limps list-plans` |
|
|
415
|
+
| `LIMPS_ALLOWED_TOOLS` | Comma-separated allowlist; only these tools are registered | `LIMPS_ALLOWED_TOOLS="list_docs,search_docs"` |
|
|
416
|
+
| `LIMPS_DISABLED_TOOLS` | Comma-separated denylist; tools to hide | `LIMPS_DISABLED_TOOLS="process_doc,process_docs"` |
|
|
361
417
|
|
|
362
418
|
**Precedence:** `config.tools` overrides env vars. If allowlist is set, denylist is ignored.
|
|
363
419
|
|
|
364
420
|
## MCP Tools
|
|
365
421
|
|
|
366
|
-
limps exposes
|
|
422
|
+
limps exposes MCP tools for AI assistants:
|
|
423
|
+
|
|
424
|
+
| Category | Tools |
|
|
425
|
+
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
426
|
+
| **Documents** | `process_doc`, `process_docs`, `create_doc`, `update_doc`, `delete_doc`, `list_docs`, `search_docs`, `manage_tags`, `open_document_in_cursor` |
|
|
427
|
+
| **Plans** | `create_plan`, `list_plans`, `list_agents`, `get_plan_status` |
|
|
428
|
+
| **Tasks** | `get_next_task`, `update_task_status`, `configure_scoring` |
|
|
429
|
+
| **Health** | `check_staleness`, `check_drift`, `infer_status`, `get_proposals`, `apply_proposal` |
|
|
430
|
+
| **Knowledge Graph** | `graph` (unified: health, search, trace, entity, overlap, reindex, check, suggest) |
|
|
431
|
+
|
|
432
|
+
### Knowledge Graph
|
|
433
|
+
|
|
434
|
+
The knowledge graph builds a structured, queryable representation of your planning documents. It extracts 6 entity types (**plan**, **agent**, **feature**, **file**, **tag**, **concept**) and their relationships (ownership, dependency, modification, tagging, conceptual links). Use it to find conflicts, trace dependencies, and get graph-based suggestions.
|
|
435
|
+
|
|
436
|
+
```bash
|
|
437
|
+
# Build the graph from plan files
|
|
438
|
+
limps graph reindex
|
|
439
|
+
|
|
440
|
+
# Check graph health and conflicts
|
|
441
|
+
limps graph health --json
|
|
442
|
+
|
|
443
|
+
# Search entities
|
|
444
|
+
limps graph search "auth" --json
|
|
367
445
|
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
| **Documents** | `process_doc`, `process_docs`, `create_doc`, `update_doc`, `delete_doc`, `list_docs`, `search_docs`, `manage_tags`, `open_document_in_cursor` |
|
|
371
|
-
| **Plans** | `create_plan`, `list_plans`, `list_agents`, `get_plan_status` |
|
|
372
|
-
| **Tasks** | `get_next_task`, `update_task_status` |
|
|
446
|
+
# Trace relationships
|
|
447
|
+
limps graph trace plan:0042 --direction down
|
|
373
448
|
|
|
374
|
-
|
|
449
|
+
# Detect conflicts (file contention, circular deps, stale WIP)
|
|
450
|
+
limps graph check --json
|
|
375
451
|
|
|
376
|
-
|
|
452
|
+
# Get graph-based suggestions
|
|
453
|
+
limps graph suggest dependency-order
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
See [Knowledge Graph Architecture](docs/knowledge-graph.md) and [CLI Reference](docs/cli-reference.md) for details.
|
|
457
|
+
|
|
458
|
+
### Health & Automation
|
|
377
459
|
|
|
378
|
-
|
|
460
|
+
limps includes automated health checks that detect issues and suggest fixes:
|
|
461
|
+
|
|
462
|
+
- **Staleness** — Flags plans/agents not updated within configurable thresholds
|
|
463
|
+
- **Code drift** — Detects when agent frontmatter references files that no longer exist
|
|
464
|
+
- **Status inference** — Suggests status changes based on dependency completion and body content
|
|
465
|
+
- **Proposals** — Aggregates all suggestions into reviewable, apply-able fixes
|
|
379
466
|
|
|
380
467
|
```bash
|
|
381
|
-
|
|
468
|
+
limps health check --json # Run all checks
|
|
469
|
+
limps proposals apply-safe # Auto-apply safe fixes
|
|
382
470
|
```
|
|
383
471
|
|
|
384
|
-
|
|
472
|
+
## Skills & Commands
|
|
473
|
+
|
|
474
|
+
This repo ships Claude Code slash commands in [`.claude/commands/`](/.claude/commands/) and a [Vercel Skills](https://github.com/vercel-labs/skills) skill in `skills/limps-planning`.
|
|
475
|
+
|
|
476
|
+
**Claude Code commands** (available automatically when limps is your working directory):
|
|
477
|
+
|
|
478
|
+
| Command | Description |
|
|
479
|
+
| ---------------------- | ------------------------------------- |
|
|
480
|
+
| `/create-feature-plan` | Create a full TDD plan with agents |
|
|
481
|
+
| `/run-agent` | Pick up and execute the next agent |
|
|
482
|
+
| `/close-feature-agent` | Mark an agent PASS and clean up |
|
|
483
|
+
| `/update-feature-plan` | Revise an existing plan |
|
|
484
|
+
| `/audit-plan` | Audit a plan for completeness |
|
|
485
|
+
| `/list-feature-plans` | List all plans with status |
|
|
486
|
+
| `/plan-list-agents` | List agents in a plan |
|
|
487
|
+
| `/plan-check-status` | Check plan progress |
|
|
488
|
+
| `/pr-create` | Create a PR from the current branch |
|
|
489
|
+
| `/pr-check-and-fix` | Fix CI failures and update PR |
|
|
490
|
+
| `/pr-comments` | Review and respond to PR comments |
|
|
491
|
+
| `/review-branch` | General code review of current branch |
|
|
492
|
+
| `/review-mcp` | Review code for MCP/LLM safety |
|
|
493
|
+
| `/attack-cli-mcp` | Stress-test CLI + MCP for robustness |
|
|
494
|
+
|
|
495
|
+
**Vercel Skills** (for other AI IDEs):
|
|
496
|
+
|
|
497
|
+
Install the limps planning skill to get AI-powered guidance for plan creation, agent workflows, and task management:
|
|
498
|
+
|
|
499
|
+
```bash
|
|
500
|
+
# Install only the limps planning skill (recommended for consumers)
|
|
501
|
+
npx skills add https://github.com/sudosandwich/limps/tree/main/.claude/skills/limps-plan-operations
|
|
502
|
+
|
|
503
|
+
# Or install all available skills
|
|
504
|
+
npx skills add sudosandwich/limps
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
**Available Skills:**
|
|
508
|
+
|
|
509
|
+
| Skill | Description |
|
|
510
|
+
|-------|-------------|
|
|
511
|
+
| `limps-plan-operations` | Plan identification, artifact loading, distillation rules, and lifecycle guidance using limps MCP tools |
|
|
512
|
+
| `mcp-code-review` | Security-focused code review for MCP servers and LLM safety |
|
|
513
|
+
| `branch-code-review` | General code review for design, maintainability, and correctness |
|
|
514
|
+
| `git-commit-best-practices` | Conventional commits and repository best practices |
|
|
515
|
+
|
|
516
|
+
See [`skills.yaml`](./skills.yaml) for the complete manifest of the `.claude/skills` packages installed via `npx skills add` above; the separate `skills/limps-planning/` package in this repo is a legacy distribution and new consumers should prefer the `.claude/skills` method.
|
|
385
517
|
|
|
386
518
|
## Extensions
|
|
387
519
|
|
|
@@ -439,34 +571,29 @@ limps manages planning for [runi](https://github.com/paulbreuler/runi), using a
|
|
|
439
571
|
|
|
440
572
|
## Creating a feature plan
|
|
441
573
|
|
|
442
|
-
|
|
574
|
+
The fastest way is the `/create-feature-plan` slash command (Claude Code) — it handles numbering, doc creation, and agent distillation automatically via MCP tools. See [`.claude/commands/create-feature-plan.md`](/.claude/commands/create-feature-plan.md) for the full spec.
|
|
575
|
+
|
|
576
|
+
You can also run the same steps manually with MCP tools:
|
|
443
577
|
|
|
444
|
-
1.
|
|
445
|
-
2.
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
- `create_doc` for: `{plan-name}-plan.md` (full specs), `interfaces.md`, `README.md`, `gotchas.md` (template). Use template `none` for plan/interfaces/README, `addendum` for gotchas if available.
|
|
449
|
-
3. **Assign features to agents** — Group by file ownership and dependencies; 2–4 features per agent; minimize cross-agent conflicts.
|
|
450
|
-
4. **Distill agent files** — For each agent, `create_doc` at `plans/NNNN-name/agents/NNN_agent_descriptive-name.agent.md` (template `none`). Extract from the plan: feature IDs + TL;DRs, interface contracts, files to create/modify, test IDs, TDD one-liners, brief gotchas. Target ~200–400 lines per agent.
|
|
451
|
-
5. **Validate** — Agent files self-contained; interfaces consistent; dependency graph and file ownership correct; each agent file <500 lines.
|
|
578
|
+
1. `list_plans` → determine next plan number
|
|
579
|
+
2. `create_plan` → scaffold the plan directory
|
|
580
|
+
3. `create_doc` → add plan, interfaces, README, and agent files
|
|
581
|
+
4. `update_task_status` → track progress
|
|
452
582
|
|
|
453
|
-
|
|
583
|
+
Plans follow this layout:
|
|
454
584
|
|
|
455
585
|
```
|
|
456
586
|
NNNN-descriptive-name/
|
|
457
587
|
├── README.md
|
|
458
|
-
├──
|
|
588
|
+
├── NNNN-descriptive-name-plan.md
|
|
459
589
|
├── interfaces.md
|
|
460
|
-
├── gotchas.md
|
|
461
590
|
└── agents/
|
|
462
591
|
├── 000_agent_infrastructure.agent.md
|
|
463
|
-
├──
|
|
592
|
+
├── 001_agent_feature-a.agent.md
|
|
464
593
|
└── ...
|
|
465
594
|
```
|
|
466
595
|
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
I chose this to keep things lexicographically ordered and easier to reference in chat. "Show me the next agent or agents we can run now in plan NNNN-plan-name", and the MCP will run the tool to process the agents applying weights and biases to choose the next best task or tasks that can run in parallel.
|
|
596
|
+
Numbered prefixes keep plans and agents lexicographically ordered. `get_next_task` uses the agent number (plus dependency and workload scores) to suggest what to work on next.
|
|
470
597
|
|
|
471
598
|
## Deep Dive
|
|
472
599
|
|
|
@@ -506,11 +633,11 @@ files:
|
|
|
506
633
|
|
|
507
634
|
`get_next_task` returns tasks scored by:
|
|
508
635
|
|
|
509
|
-
| Component
|
|
510
|
-
|
|
511
|
-
| Dependency | 40
|
|
512
|
-
| Priority
|
|
513
|
-
| Workload
|
|
636
|
+
| Component | Max Points | Description |
|
|
637
|
+
| ---------- | ---------- | ----------------------------------------------- |
|
|
638
|
+
| Dependency | 40 | All dependencies satisfied = 40, else 0 |
|
|
639
|
+
| Priority | 30 | Based on agent number (lower = higher priority) |
|
|
640
|
+
| Workload | 30 | Based on file count (fewer = higher score) |
|
|
514
641
|
|
|
515
642
|
**Biases** adjust final scores:
|
|
516
643
|
|
|
@@ -535,11 +662,11 @@ files:
|
|
|
535
662
|
|
|
536
663
|
```typescript
|
|
537
664
|
await process_doc({
|
|
538
|
-
path:
|
|
665
|
+
path: "plans/0001-feature/plan.md",
|
|
539
666
|
code: `
|
|
540
667
|
const features = extractFeatures(doc.content);
|
|
541
668
|
return features.filter(f => f.status === 'GAP');
|
|
542
|
-
|
|
669
|
+
`,
|
|
543
670
|
});
|
|
544
671
|
```
|
|
545
672
|
|
|
@@ -555,11 +682,11 @@ await process_doc({
|
|
|
555
682
|
|
|
556
683
|
```typescript
|
|
557
684
|
await process_doc({
|
|
558
|
-
path:
|
|
559
|
-
code:
|
|
560
|
-
sub_query:
|
|
685
|
+
path: "plans/0001/plan.md",
|
|
686
|
+
code: "extractFeatures(doc.content)",
|
|
687
|
+
sub_query: "Summarize each feature",
|
|
561
688
|
allow_llm: true,
|
|
562
|
-
llm_policy:
|
|
689
|
+
llm_policy: "force", // or 'auto' (skips small results)
|
|
563
690
|
});
|
|
564
691
|
```
|
|
565
692
|
|
|
@@ -570,12 +697,12 @@ await process_doc({
|
|
|
570
697
|
|
|
571
698
|
Progressive disclosure via resources:
|
|
572
699
|
|
|
573
|
-
| Resource
|
|
574
|
-
|
|
575
|
-
| `plans://index`
|
|
700
|
+
| Resource | Description |
|
|
701
|
+
| ----------------- | ---------------------------- |
|
|
702
|
+
| `plans://index` | List of all plans (minimal) |
|
|
576
703
|
| `plans://summary` | Plan summaries with key info |
|
|
577
|
-
| `plans://full`
|
|
578
|
-
| `decisions://log` | Decision log entries
|
|
704
|
+
| `plans://full` | Full plan documents |
|
|
705
|
+
| `decisions://log` | Decision log entries |
|
|
579
706
|
|
|
580
707
|
</details>
|
|
581
708
|
|
|
@@ -598,6 +725,7 @@ Start work on the next available task.
|
|
|
598
725
|
```
|
|
599
726
|
|
|
600
727
|
This integrates with limps MCP tools for seamless task management.
|
|
728
|
+
|
|
601
729
|
</details>
|
|
602
730
|
|
|
603
731
|
---
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-cmd.d.ts","sourceRoot":"","sources":["../../src/cli/config-cmd.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsBH,OAAO,EAML,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,aAAa,EAEnB,MAAM,cAAc,CAAC;AAatB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,OAAO,CAAC;KACjB,EAAE,CAAC;IACJ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAgB9C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAyBnC;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA6B9C;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE;QACN,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,mBAAmB,EAAE,MAAM,MAAM,GAAG,UAAU,CAkB3E;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,mBAAmB,EAAE,MAAM,MAAM,GAAG,MAAM,CA8FpE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,mBAAmB,EAAE,MAAM,MAAM,EACjC,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9B,MAAM,CAuCR;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CACjC;AAED,wBAAgB,iBAAiB,CAAC,mBAAmB,EAAE,MAAM,MAAM,GAAG,MAAM,CA+C3E;AAED,wBAAgB,mBAAmB,CACjC,mBAAmB,EAAE,MAAM,MAAM,EACjC,OAAO,EAAE,0BAA0B,GAClC,MAAM,CAiGR;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,mBAAmB,EAAE,MAAM,MAAM,GAAG,MAAM,CAEpE;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAqF3E;AA+BD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA+FvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAmCxD;AAED,OAAO,EAEL,eAAe,EAEf,KAAK,gBAAgB,EAErB,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AAEjC;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAkDvC;
|
|
1
|
+
{"version":3,"file":"config-cmd.d.ts","sourceRoot":"","sources":["../../src/cli/config-cmd.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/config-cmd.js
CHANGED
|
@@ -698,11 +698,11 @@ function repairMcpConfigReferences(oldPath, newPath) {
|
|
|
698
698
|
continue;
|
|
699
699
|
let changed = false;
|
|
700
700
|
for (const server of Object.values(servers)) {
|
|
701
|
-
if (!server ||
|
|
702
|
-
typeof server !== 'object' ||
|
|
703
|
-
!Array.isArray(server.args))
|
|
701
|
+
if (!server || typeof server !== 'object')
|
|
704
702
|
continue;
|
|
705
703
|
const args = server.args;
|
|
704
|
+
if (!Array.isArray(args))
|
|
705
|
+
continue;
|
|
706
706
|
for (let i = 0; i < args.length; i++) {
|
|
707
707
|
const arg = args[i];
|
|
708
708
|
if (typeof arg !== 'string')
|