@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.
Files changed (201) hide show
  1. package/README.md +201 -73
  2. package/dist/cli/config-cmd.d.ts.map +1 -1
  3. package/dist/cli/config-cmd.js +3 -3
  4. package/dist/cli/config-cmd.js.map +1 -1
  5. package/dist/cli/graph-check.d.ts +15 -0
  6. package/dist/cli/graph-check.d.ts.map +1 -0
  7. package/dist/cli/graph-check.js +36 -0
  8. package/dist/cli/graph-check.js.map +1 -0
  9. package/dist/cli/graph-db.d.ts +4 -0
  10. package/dist/cli/graph-db.d.ts.map +1 -0
  11. package/dist/cli/graph-db.js +14 -0
  12. package/dist/cli/graph-db.js.map +1 -0
  13. package/dist/cli/graph-entity.d.ts +11 -0
  14. package/dist/cli/graph-entity.d.ts.map +1 -0
  15. package/dist/cli/graph-entity.js +18 -0
  16. package/dist/cli/graph-entity.js.map +1 -0
  17. package/dist/cli/graph-health.d.ts +19 -0
  18. package/dist/cli/graph-health.d.ts.map +1 -0
  19. package/dist/cli/graph-health.js +59 -0
  20. package/dist/cli/graph-health.js.map +1 -0
  21. package/dist/cli/graph-overlap.d.ts +12 -0
  22. package/dist/cli/graph-overlap.d.ts.map +1 -0
  23. package/dist/cli/graph-overlap.js +21 -0
  24. package/dist/cli/graph-overlap.js.map +1 -0
  25. package/dist/cli/graph-reindex.d.ts +14 -0
  26. package/dist/cli/graph-reindex.d.ts.map +1 -0
  27. package/dist/cli/graph-reindex.js +49 -0
  28. package/dist/cli/graph-reindex.js.map +1 -0
  29. package/dist/cli/graph-search.d.ts +15 -0
  30. package/dist/cli/graph-search.d.ts.map +1 -0
  31. package/dist/cli/graph-search.js +37 -0
  32. package/dist/cli/graph-search.js.map +1 -0
  33. package/dist/cli/graph-suggest.d.ts +12 -0
  34. package/dist/cli/graph-suggest.d.ts.map +1 -0
  35. package/dist/cli/graph-suggest.js +35 -0
  36. package/dist/cli/graph-suggest.js.map +1 -0
  37. package/dist/cli/graph-trace.d.ts +17 -0
  38. package/dist/cli/graph-trace.d.ts.map +1 -0
  39. package/dist/cli/graph-trace.js +30 -0
  40. package/dist/cli/graph-trace.js.map +1 -0
  41. package/dist/cli/graph-watch.d.ts +10 -0
  42. package/dist/cli/graph-watch.d.ts.map +1 -0
  43. package/dist/cli/graph-watch.js +18 -0
  44. package/dist/cli/graph-watch.js.map +1 -0
  45. package/dist/cli/mcp-client-adapter.d.ts +14 -5
  46. package/dist/cli/mcp-client-adapter.d.ts.map +1 -1
  47. package/dist/cli/mcp-client-adapter.js +14 -3
  48. package/dist/cli/mcp-client-adapter.js.map +1 -1
  49. package/dist/cli/mcp-clients.d.ts +2 -2
  50. package/dist/cli/mcp-clients.d.ts.map +1 -1
  51. package/dist/cli/mcp-clients.js +15 -0
  52. package/dist/cli/mcp-clients.js.map +1 -1
  53. package/dist/cli/plan-repair.d.ts +26 -0
  54. package/dist/cli/plan-repair.d.ts.map +1 -1
  55. package/dist/cli/plan-repair.js +84 -0
  56. package/dist/cli/plan-repair.js.map +1 -1
  57. package/dist/commands/config/sync-mcp.d.ts +1 -0
  58. package/dist/commands/config/sync-mcp.d.ts.map +1 -1
  59. package/dist/commands/config/sync-mcp.js +2 -2
  60. package/dist/commands/config/sync-mcp.js.map +1 -1
  61. package/dist/commands/graph/check.d.ts +16 -0
  62. package/dist/commands/graph/check.d.ts.map +1 -0
  63. package/dist/commands/graph/check.js +88 -0
  64. package/dist/commands/graph/check.js.map +1 -0
  65. package/dist/commands/graph/entity.d.ts +16 -0
  66. package/dist/commands/graph/entity.d.ts.map +1 -0
  67. package/dist/commands/graph/entity.js +83 -0
  68. package/dist/commands/graph/entity.js.map +1 -0
  69. package/dist/commands/graph/health.d.ts +16 -0
  70. package/dist/commands/graph/health.d.ts.map +1 -0
  71. package/dist/commands/graph/health.js +78 -0
  72. package/dist/commands/graph/health.js.map +1 -0
  73. package/dist/commands/graph/index.d.ts +3 -0
  74. package/dist/commands/graph/index.d.ts.map +1 -0
  75. package/dist/commands/graph/index.js +33 -0
  76. package/dist/commands/graph/index.js.map +1 -0
  77. package/dist/commands/graph/overlap.d.ts +18 -0
  78. package/dist/commands/graph/overlap.d.ts.map +1 -0
  79. package/dist/commands/graph/overlap.js +88 -0
  80. package/dist/commands/graph/overlap.js.map +1 -0
  81. package/dist/commands/graph/reindex.d.ts +18 -0
  82. package/dist/commands/graph/reindex.d.ts.map +1 -0
  83. package/dist/commands/graph/reindex.js +92 -0
  84. package/dist/commands/graph/reindex.js.map +1 -0
  85. package/dist/commands/graph/search.d.ts +18 -0
  86. package/dist/commands/graph/search.d.ts.map +1 -0
  87. package/dist/commands/graph/search.js +105 -0
  88. package/dist/commands/graph/search.js.map +1 -0
  89. package/dist/commands/graph/suggest.d.ts +16 -0
  90. package/dist/commands/graph/suggest.d.ts.map +1 -0
  91. package/dist/commands/graph/suggest.js +88 -0
  92. package/dist/commands/graph/suggest.js.map +1 -0
  93. package/dist/commands/graph/trace.d.ts +22 -0
  94. package/dist/commands/graph/trace.d.ts.map +1 -0
  95. package/dist/commands/graph/trace.js +97 -0
  96. package/dist/commands/graph/trace.js.map +1 -0
  97. package/dist/commands/graph/watch.d.ts +17 -0
  98. package/dist/commands/graph/watch.d.ts.map +1 -0
  99. package/dist/commands/graph/watch.js +48 -0
  100. package/dist/commands/graph/watch.js.map +1 -0
  101. package/dist/commands/index.d.ts.map +1 -1
  102. package/dist/commands/index.js +1 -1
  103. package/dist/commands/index.js.map +1 -1
  104. package/dist/commands/repair-plans.d.ts.map +1 -1
  105. package/dist/commands/repair-plans.js +74 -10
  106. package/dist/commands/repair-plans.js.map +1 -1
  107. package/dist/config.d.ts +24 -1
  108. package/dist/config.d.ts.map +1 -1
  109. package/dist/config.js +57 -13
  110. package/dist/config.js.map +1 -1
  111. package/dist/graph/conflict-detector.d.ts +27 -0
  112. package/dist/graph/conflict-detector.d.ts.map +1 -0
  113. package/dist/graph/conflict-detector.js +168 -0
  114. package/dist/graph/conflict-detector.js.map +1 -0
  115. package/dist/graph/extractor.d.ts +10 -0
  116. package/dist/graph/extractor.d.ts.map +1 -0
  117. package/dist/graph/extractor.js +266 -0
  118. package/dist/graph/extractor.js.map +1 -0
  119. package/dist/graph/notifier.d.ts +16 -0
  120. package/dist/graph/notifier.d.ts.map +1 -0
  121. package/dist/graph/notifier.js +61 -0
  122. package/dist/graph/notifier.js.map +1 -0
  123. package/dist/graph/parser.d.ts +10 -0
  124. package/dist/graph/parser.d.ts.map +1 -0
  125. package/dist/graph/parser.js +54 -0
  126. package/dist/graph/parser.js.map +1 -0
  127. package/dist/graph/patterns.d.ts +16 -0
  128. package/dist/graph/patterns.d.ts.map +1 -0
  129. package/dist/graph/patterns.js +23 -0
  130. package/dist/graph/patterns.js.map +1 -0
  131. package/dist/graph/resolver.d.ts +23 -0
  132. package/dist/graph/resolver.d.ts.map +1 -0
  133. package/dist/graph/resolver.js +98 -0
  134. package/dist/graph/resolver.js.map +1 -0
  135. package/dist/graph/similarity.d.ts +38 -0
  136. package/dist/graph/similarity.d.ts.map +1 -0
  137. package/dist/graph/similarity.js +74 -0
  138. package/dist/graph/similarity.js.map +1 -0
  139. package/dist/graph/storage.js +2 -2
  140. package/dist/graph/watcher.d.ts +23 -0
  141. package/dist/graph/watcher.d.ts.map +1 -0
  142. package/dist/graph/watcher.js +94 -0
  143. package/dist/graph/watcher.js.map +1 -0
  144. package/dist/indexer.d.ts.map +1 -1
  145. package/dist/indexer.js +9 -0
  146. package/dist/indexer.js.map +1 -1
  147. package/dist/resources/plans-summary.d.ts.map +1 -1
  148. package/dist/resources/plans-summary.js +7 -5
  149. package/dist/resources/plans-summary.js.map +1 -1
  150. package/dist/retrieval/bfs.d.ts +27 -0
  151. package/dist/retrieval/bfs.d.ts.map +1 -0
  152. package/dist/retrieval/bfs.js +77 -0
  153. package/dist/retrieval/bfs.js.map +1 -0
  154. package/dist/retrieval/hybrid.d.ts +25 -0
  155. package/dist/retrieval/hybrid.d.ts.map +1 -0
  156. package/dist/retrieval/hybrid.js +84 -0
  157. package/dist/retrieval/hybrid.js.map +1 -0
  158. package/dist/retrieval/recipes.d.ts +20 -0
  159. package/dist/retrieval/recipes.d.ts.map +1 -0
  160. package/dist/retrieval/recipes.js +123 -0
  161. package/dist/retrieval/recipes.js.map +1 -0
  162. package/dist/retrieval/router.d.ts +7 -0
  163. package/dist/retrieval/router.d.ts.map +1 -0
  164. package/dist/retrieval/router.js +51 -0
  165. package/dist/retrieval/router.js.map +1 -0
  166. package/dist/retrieval/rrf.d.ts +21 -0
  167. package/dist/retrieval/rrf.d.ts.map +1 -0
  168. package/dist/retrieval/rrf.js +27 -0
  169. package/dist/retrieval/rrf.js.map +1 -0
  170. package/dist/retrieval/types.d.ts +60 -0
  171. package/dist/retrieval/types.d.ts.map +1 -0
  172. package/dist/retrieval/types.js +18 -0
  173. package/dist/retrieval/types.js.map +1 -0
  174. package/dist/rlm/sandbox.d.ts.map +1 -1
  175. package/dist/rlm/sandbox.js +8 -1
  176. package/dist/rlm/sandbox.js.map +1 -1
  177. package/dist/server-main.d.ts.map +1 -1
  178. package/dist/server-main.js +31 -13
  179. package/dist/server-main.js.map +1 -1
  180. package/dist/tools/configure-scoring.d.ts.map +1 -1
  181. package/dist/tools/configure-scoring.js +3 -0
  182. package/dist/tools/configure-scoring.js.map +1 -1
  183. package/dist/tools/graph.d.ts +32 -0
  184. package/dist/tools/graph.d.ts.map +1 -0
  185. package/dist/tools/graph.js +105 -0
  186. package/dist/tools/graph.js.map +1 -0
  187. package/dist/tools/index.d.ts +1 -1
  188. package/dist/tools/index.d.ts.map +1 -1
  189. package/dist/tools/index.js +21 -0
  190. package/dist/tools/index.js.map +1 -1
  191. package/dist/tools/process-doc.d.ts.map +1 -1
  192. package/dist/tools/process-doc.js +14 -0
  193. package/dist/tools/process-doc.js.map +1 -1
  194. package/dist/tools/process-docs.d.ts.map +1 -1
  195. package/dist/tools/process-docs.js +14 -0
  196. package/dist/tools/process-docs.js.map +1 -1
  197. package/dist/utils/config-resolver.d.ts +3 -1
  198. package/dist/utils/config-resolver.d.ts.map +1 -1
  199. package/dist/utils/config-resolver.js +5 -4
  200. package/dist/utils/config-resolver.js.map +1 -1
  201. package/package.json +2 -1
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  [![npm](https://img.shields.io/npm/v/@sudosandwich/limps)](https://www.npmjs.com/package/@sudosandwich/limps)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
- ![Tests](https://img.shields.io/badge/Tests-899%20passing-brightgreen)
7
+ ![Tests](https://img.shields.io/badge/Tests-1488%20passing-brightgreen)
8
8
  ![Coverage](https://img.shields.io/badge/Coverage-%3E70%25-brightgreen)
9
9
  [![MCP Badge](https://lobehub.com/badge/mcp/paulbreuler-limps)](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 | Config Location | Command |
115
- |--------|----------------|---------|
116
- | **Cursor** | `.cursor/mcp.json` (local) | `limps config sync-mcp --client cursor` |
117
- | **Claude Code** | `.mcp.json` (local) | `limps config sync-mcp --client claude-code` |
118
- | **Claude Desktop** | Global config | `limps config sync-mcp --client claude --global` |
119
- | **OpenAI Codex** | `~/.codex/config.toml` | `limps config sync-mcp --client codex --global` |
120
- | **ChatGPT** | Manual setup | `limps config sync-mcp --client chatgpt --print` |
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": ["-y", "@sudosandwich/limps", "serve", "--config", "/path/to/config.json"]
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": ["/c", "npx", "-y", "@sudosandwich/limps", "serve", "--config", "C:\\path\\to\\config.json"]
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 | Path |
320
- |----|------|
321
- | macOS | `~/Library/Application Support/limps/config.json` |
322
- | Linux | `~/.config/limps/config.json` |
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 | Description |
345
- |--------|-------------|
346
- | `plansPath` | Directory for structured plans (`NNNN-name/` with agents) |
347
- | `docsPaths` | Additional directories to index |
348
- | `fileExtensions` | File types to index (default: `.md`) |
349
- | `dataPath` | SQLite database location |
350
- | `tools` | Tool allowlist/denylist filtering |
351
- | `extensions` | Extension packages to load |
352
- | `scoring` | Task prioritization weights and biases |
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 | Description | Example |
357
- |---|---|---|
358
- | `LIMPS_PROJECT` | Select active project for CLI commands | `LIMPS_PROJECT=project-b limps list-plans` |
359
- | `LIMPS_ALLOWED_TOOLS` | Comma-separated allowlist; only these tools are registered | `LIMPS_ALLOWED_TOOLS="list_docs,search_docs"` |
360
- | `LIMPS_DISABLED_TOOLS` | Comma-separated denylist; tools to hide | `LIMPS_DISABLED_TOOLS="process_doc,process_docs"` |
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 15 MCP tools for AI assistants:
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
- | Category | Tools |
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
- ## Skills
449
+ # Detect conflicts (file contention, circular deps, stale WIP)
450
+ limps graph check --json
375
451
 
376
- This repo includes a limps planning skill for AI IDEs in `skills/limps-planning`.
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
- Install from GitHub:
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
- npx skills add paulbreuler/limps/skills/limps-planning
468
+ limps health check --json # Run all checks
469
+ limps proposals apply-safe # Auto-apply safe fixes
382
470
  ```
383
471
 
384
- The skill focuses on selecting the right limps tools for common planning workflows.
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
- This flow is used by the **create-feature-plan** command you can find in [claude/commands](/.claude/commands/) along with other useful commands and skills. These can be followed manually with MCP tools. The docs path is whatever folder limps is pointed at (any directory, not necessarily a repo).
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. **Gather context** — Project name and scope, work type (`refactor` | `overhaul` | `features`), tech stack, prototype/reference docs, known gotchas.
445
- 2. **Create planning docs** Use MCP:
446
- - `list_docs` on `plans/` to get the next plan number (max existing + 1).
447
- - `create_plan` with name `NNNN-descriptive-name` and a short description.
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
- Resulting layout:
583
+ Plans follow this layout:
454
584
 
455
585
  ```
456
586
  NNNN-descriptive-name/
457
587
  ├── README.md
458
- ├── {plan-name}-plan.md
588
+ ├── NNNN-descriptive-name-plan.md
459
589
  ├── interfaces.md
460
- ├── gotchas.md
461
590
  └── agents/
462
591
  ├── 000_agent_infrastructure.agent.md
463
- ├── 001_agent_....agent.md
592
+ ├── 001_agent_feature-a.agent.md
464
593
  └── ...
465
594
  ```
466
595
 
467
- ### Why the prefixes?
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 | Max Points | Description |
510
- |-----------|------------|-------------|
511
- | Dependency | 40 | All dependencies satisfied = 40, else 0 |
512
- | Priority | 30 | Based on agent number (lower = higher priority) |
513
- | Workload | 30 | Based on file count (fewer = higher score) |
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: 'plans/0001-feature/plan.md',
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: 'plans/0001/plan.md',
559
- code: 'extractFeatures(doc.content)',
560
- sub_query: 'Summarize each feature',
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: 'force' // or 'auto' (skips small results)
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 | Description |
574
- |----------|-------------|
575
- | `plans://index` | List of all plans (minimal) |
700
+ | Resource | Description |
701
+ | ----------------- | ---------------------------- |
702
+ | `plans://index` | List of all plans (minimal) |
576
703
  | `plans://summary` | Plan summaries with key info |
577
- | `plans://full` | Full plan documents |
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":"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"}
1
+ {"version":3,"file":"config-cmd.d.ts","sourceRoot":"","sources":["../../src/cli/config-cmd.ts"],"names":[],"mappings":"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"}
@@ -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')