akm-cli 0.9.0-beta.5 → 0.9.0-beta.51

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 (221) hide show
  1. package/CHANGELOG.md +711 -0
  2. package/README.md +12 -4
  3. package/dist/akm +38 -0
  4. package/dist/akm-migrate-storage +38 -0
  5. package/dist/assets/profiles/default.json +9 -4
  6. package/dist/assets/profiles/frequent.json +1 -1
  7. package/dist/assets/profiles/memory-focus.json +1 -1
  8. package/dist/assets/profiles/quick.json +1 -1
  9. package/dist/assets/profiles/synthesize.json +15 -0
  10. package/dist/assets/profiles/thorough.json +1 -1
  11. package/dist/assets/prompts/consolidate-system.md +23 -0
  12. package/dist/assets/prompts/contradiction-judge.md +33 -0
  13. package/dist/assets/prompts/distill-knowledge-system.md +22 -0
  14. package/dist/assets/prompts/distill-lesson-system.md +36 -0
  15. package/dist/assets/prompts/extract-session.md +6 -2
  16. package/dist/assets/prompts/graph-extract-system.md +1 -0
  17. package/dist/assets/prompts/graph-extract-user-prompt.md +1 -1
  18. package/dist/assets/prompts/memory-infer-system.md +1 -0
  19. package/dist/assets/prompts/memory-infer-user.md +5 -0
  20. package/dist/assets/prompts/metadata-enhance-system.md +1 -0
  21. package/dist/assets/prompts/procedural-system.md +44 -0
  22. package/dist/assets/prompts/recombine-system.md +40 -0
  23. package/dist/assets/prompts/staleness-detect-system.md +6 -0
  24. package/dist/assets/prompts/validate-summary-judge.md +1 -0
  25. package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +38 -0
  26. package/dist/assets/stash-skeleton/facts/conventions/assets/command.md +38 -0
  27. package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +39 -0
  28. package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +40 -0
  29. package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +43 -0
  30. package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +38 -0
  31. package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +43 -0
  32. package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +40 -0
  33. package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +43 -0
  34. package/dist/assets/templates/html/health.html +281 -111
  35. package/dist/assets/wiki/ingest-workflow-template.md +38 -10
  36. package/dist/cli/parse-args.js +46 -1
  37. package/dist/cli/shared.js +28 -0
  38. package/dist/cli.js +27 -11
  39. package/dist/commands/agent/agent-dispatch.js +2 -2
  40. package/dist/commands/agent/agent-support.js +0 -7
  41. package/dist/commands/agent/contribute-cli.js +17 -4
  42. package/dist/commands/config-cli.js +18 -2
  43. package/dist/commands/env/child-env.js +47 -0
  44. package/dist/commands/env/env-cli.js +33 -26
  45. package/dist/commands/env/secret-cli.js +36 -22
  46. package/dist/commands/feedback-cli.js +15 -6
  47. package/dist/commands/graph/graph-cli.js +5 -13
  48. package/dist/commands/graph/graph.js +76 -72
  49. package/dist/commands/health/checks.js +49 -1
  50. package/dist/commands/health/html-report.js +422 -80
  51. package/dist/commands/health.js +386 -9
  52. package/dist/commands/improve/calibration.js +161 -0
  53. package/dist/commands/improve/consolidate/chunking.js +141 -0
  54. package/dist/commands/improve/consolidate/eligibility.js +81 -0
  55. package/dist/commands/improve/consolidate/merge.js +145 -0
  56. package/dist/commands/improve/consolidate/sanitize.js +231 -0
  57. package/dist/commands/{lint.js → improve/consolidate/types.js} +1 -1
  58. package/dist/commands/improve/consolidate.js +635 -660
  59. package/dist/commands/improve/dedup.js +482 -0
  60. package/dist/commands/improve/distill.js +159 -69
  61. package/dist/commands/improve/eligibility.js +434 -0
  62. package/dist/commands/improve/encoding-salience.js +205 -0
  63. package/dist/commands/improve/extract-cli.js +124 -2
  64. package/dist/commands/improve/extract-prompt.js +39 -2
  65. package/dist/commands/improve/extract-watch.js +140 -0
  66. package/dist/commands/improve/extract.js +389 -40
  67. package/dist/commands/improve/feedback-valence.js +54 -0
  68. package/dist/commands/improve/homeostatic.js +467 -0
  69. package/dist/commands/improve/improve-auto-accept.js +138 -7
  70. package/dist/commands/improve/improve-cli.js +36 -61
  71. package/dist/commands/improve/improve-profiles.js +14 -0
  72. package/dist/commands/improve/improve-result-file.js +14 -25
  73. package/dist/commands/improve/improve-session.js +58 -0
  74. package/dist/commands/improve/improve.js +485 -2498
  75. package/dist/commands/improve/locks.js +154 -0
  76. package/dist/commands/improve/loop-stages.js +1083 -0
  77. package/dist/commands/improve/memory/memory-contradiction-detect.js +23 -28
  78. package/dist/commands/improve/outcome-loop.js +256 -0
  79. package/dist/commands/improve/preparation.js +1966 -0
  80. package/dist/commands/improve/proactive-maintenance.js +115 -0
  81. package/dist/commands/improve/procedural.js +418 -0
  82. package/dist/commands/improve/recombine.js +850 -0
  83. package/dist/commands/improve/reflect-noise.js +0 -0
  84. package/dist/commands/improve/reflect.js +183 -40
  85. package/dist/commands/improve/salience.js +438 -0
  86. package/dist/commands/improve/triage.js +93 -0
  87. package/dist/commands/lint/agent-linter.js +19 -24
  88. package/dist/commands/lint/base-linter.js +173 -60
  89. package/dist/commands/lint/command-linter.js +19 -24
  90. package/dist/commands/lint/env-key-rules.js +38 -1
  91. package/dist/commands/lint/fact-linter.js +39 -0
  92. package/dist/commands/lint/index.js +31 -13
  93. package/dist/commands/lint/memory-linter.js +1 -1
  94. package/dist/commands/lint/registry.js +7 -2
  95. package/dist/commands/lint/task-linter.js +3 -3
  96. package/dist/commands/lint/workflow-linter.js +26 -1
  97. package/dist/commands/proposal/drain-policies.js +5 -0
  98. package/dist/commands/proposal/drain.js +43 -50
  99. package/dist/commands/proposal/proposal-cli.js +21 -31
  100. package/dist/commands/proposal/proposal.js +5 -0
  101. package/dist/commands/proposal/propose.js +7 -2
  102. package/dist/commands/proposal/validators/proposal-quality-validators.js +9 -8
  103. package/dist/commands/proposal/validators/proposals.js +189 -63
  104. package/dist/commands/read/curate.js +414 -94
  105. package/dist/commands/read/knowledge.js +6 -3
  106. package/dist/commands/read/search-cli.js +9 -4
  107. package/dist/commands/read/search.js +10 -6
  108. package/dist/commands/read/show.js +86 -7
  109. package/dist/commands/sources/init.js +49 -17
  110. package/dist/commands/sources/installed-stashes.js +11 -3
  111. package/dist/commands/sources/schema-repair.js +43 -45
  112. package/dist/commands/sources/self-update.js +2 -2
  113. package/dist/commands/sources/source-add.js +7 -3
  114. package/dist/commands/sources/stash-cli.js +28 -40
  115. package/dist/commands/sources/stash-skeleton.js +23 -8
  116. package/dist/commands/tasks/tasks-cli.js +19 -27
  117. package/dist/commands/tasks/tasks.js +39 -11
  118. package/dist/commands/wiki-cli.js +21 -35
  119. package/dist/core/asset/asset-registry.js +3 -1
  120. package/dist/core/asset/asset-spec.js +18 -2
  121. package/dist/core/asset/frontmatter.js +166 -167
  122. package/dist/core/asset/markdown.js +8 -0
  123. package/dist/core/authoring-rules.js +92 -0
  124. package/dist/core/common.js +0 -5
  125. package/dist/core/config/config-migration.js +12 -11
  126. package/dist/core/config/config-schema.js +340 -56
  127. package/dist/core/config/config-types.js +3 -3
  128. package/dist/core/config/config.js +28 -7
  129. package/dist/core/events.js +3 -7
  130. package/dist/core/improve-types.js +11 -8
  131. package/dist/core/logs-db.js +10 -66
  132. package/dist/core/parse.js +36 -16
  133. package/dist/core/paths.js +3 -0
  134. package/dist/core/standards/resolve-standards-context.js +87 -0
  135. package/dist/core/standards/resolve-stash-standards.js +99 -0
  136. package/dist/core/standards/resolve-type-conventions.js +66 -0
  137. package/dist/core/state/migrations.js +714 -0
  138. package/dist/core/state-db.js +525 -474
  139. package/dist/indexer/db/db.js +439 -247
  140. package/dist/indexer/db/graph-db.js +129 -86
  141. package/dist/indexer/ensure-index.js +152 -17
  142. package/dist/indexer/graph/graph-boost.js +51 -41
  143. package/dist/indexer/graph/graph-extraction.js +218 -4
  144. package/dist/indexer/index-writer-lock.js +99 -0
  145. package/dist/indexer/indexer.js +123 -221
  146. package/dist/indexer/passes/dir-staleness.js +114 -0
  147. package/dist/indexer/passes/memory-inference.js +13 -5
  148. package/dist/indexer/passes/staleness-detect.js +2 -5
  149. package/dist/indexer/search/db-search.js +19 -6
  150. package/dist/indexer/search/ranking-contributors.js +22 -0
  151. package/dist/indexer/search/ranking.js +4 -0
  152. package/dist/indexer/search/search-source.js +17 -18
  153. package/dist/indexer/search/semantic-status.js +4 -0
  154. package/dist/indexer/walk/matchers.js +9 -0
  155. package/dist/integrations/agent/config.js +6 -53
  156. package/dist/integrations/agent/index.js +2 -18
  157. package/dist/integrations/agent/prompts.js +75 -9
  158. package/dist/integrations/agent/runner-dispatch.js +59 -0
  159. package/dist/integrations/harnesses/claude/session-log.js +11 -1
  160. package/dist/integrations/harnesses/index.js +2 -3
  161. package/dist/integrations/harnesses/opencode/session-log.js +173 -3
  162. package/dist/integrations/harnesses/opencode-sdk/index.js +2 -2
  163. package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +0 -2
  164. package/dist/integrations/session-logs/index.js +16 -0
  165. package/dist/llm/client.js +45 -15
  166. package/dist/llm/embedder.js +42 -3
  167. package/dist/llm/embedders/deterministic.js +66 -0
  168. package/dist/llm/embedders/local.js +66 -2
  169. package/dist/llm/feature-gate.js +8 -4
  170. package/dist/llm/graph-extract.js +67 -44
  171. package/dist/llm/memory-infer-impl.js +138 -0
  172. package/dist/llm/memory-infer.js +1 -127
  173. package/dist/llm/metadata-enhance.js +44 -31
  174. package/dist/llm/structured-call.js +49 -0
  175. package/dist/migrate-storage-node.mjs +8 -0
  176. package/dist/output/context.js +5 -5
  177. package/dist/output/renderers.js +74 -2
  178. package/dist/output/shapes/curate.js +14 -2
  179. package/dist/output/shapes/passthrough.js +0 -1
  180. package/dist/output/text/helpers.js +16 -1
  181. package/dist/registry/providers/skills-sh.js +21 -147
  182. package/dist/registry/providers/static-index.js +15 -157
  183. package/dist/registry/resolve.js +22 -9
  184. package/dist/runtime.js +25 -1
  185. package/dist/scripts/migrate-storage.js +2617 -1961
  186. package/dist/scripts/migrations/import-fs-improve-runs-to-db.js +759 -510
  187. package/dist/setup/setup.js +29 -8
  188. package/dist/sources/include.js +6 -2
  189. package/dist/sources/providers/filesystem.js +0 -1
  190. package/dist/sources/providers/git-install.js +210 -0
  191. package/dist/sources/providers/git-provider.js +234 -0
  192. package/dist/sources/providers/git-stash.js +248 -0
  193. package/dist/sources/providers/git.js +10 -661
  194. package/dist/sources/providers/npm.js +2 -6
  195. package/dist/sources/providers/provider-utils.js +13 -7
  196. package/dist/sources/providers/sync-from-ref.js +9 -1
  197. package/dist/sources/providers/tar-utils.js +16 -8
  198. package/dist/sources/providers/website.js +9 -5
  199. package/dist/sources/website-ingest.js +187 -29
  200. package/dist/sources/wiki-fetchers/registry.js +53 -0
  201. package/dist/sources/wiki-fetchers/youtube.js +239 -0
  202. package/dist/storage/database.js +45 -10
  203. package/dist/storage/managed-db.js +82 -0
  204. package/dist/storage/repositories/registry-cache.js +92 -0
  205. package/dist/storage/sqlite-pragmas.js +146 -0
  206. package/dist/tasks/backends/cron.js +1 -1
  207. package/dist/tasks/backends/launchd.js +1 -1
  208. package/dist/tasks/backends/schtasks.js +1 -1
  209. package/dist/tasks/{resolveAkmBin.js → resolve-akm-bin.js} +2 -2
  210. package/dist/tasks/runner.js +5 -13
  211. package/dist/text-import-hook.mjs +0 -0
  212. package/dist/wiki/wiki.js +37 -0
  213. package/dist/workflows/db.js +3 -4
  214. package/dist/workflows/runtime/runs.js +1 -117
  215. package/dist/workflows/runtime/workflow-asset-loader.js +125 -0
  216. package/dist/workflows/validate-summary.js +2 -7
  217. package/docs/data-and-telemetry.md +3 -2
  218. package/docs/migration/release-notes/0.9.0.md +39 -0
  219. package/package.json +13 -11
  220. package/dist/commands/db-cli.js +0 -23
  221. package/dist/indexer/db/db-backup.js +0 -376
package/README.md CHANGED
@@ -7,8 +7,8 @@
7
7
  [![license](https://img.shields.io/github/license/itlackey/akm)](https://github.com/itlackey/akm/blob/main/LICENSE)
8
8
 
9
9
  `akm` is a package manager for AI agent capabilities -- scripts, skills, commands,
10
- agents, knowledge, memories, workflows, wikis, vaults, lessons, and scheduled
11
- tasks. It works with any AI coding assistant that can run shell commands,
10
+ agents, knowledge, memories, workflows, wikis, env files, secrets, lessons, and
11
+ scheduled tasks. It works with any AI coding assistant that can run shell commands,
12
12
  including [Claude Code](https://claude.ai/code),
13
13
  [OpenCode](https://opencode.ai), [Cursor](https://cursor.com), and more.
14
14
 
@@ -30,9 +30,17 @@ irm https://github.com/itlackey/akm/releases/latest/download/install.ps1 | iex
30
30
  bun install -g akm-cli
31
31
  ```
32
32
 
33
+ **Option 3 — Node.js (requires Node.js >= 20.12):**
34
+
35
+ ```sh
36
+ npm install -g akm-cli
37
+ ```
38
+
33
39
  Upgrade in place with `akm upgrade`.
34
40
 
35
- > **AKM 0.8 requires the prebuilt binary or the Bun runtime. Node.js / npm / pnpm are not supported in 0.8.0** running `npm install -g akm-cli` on a Node.js-only machine will print an error from the preinstall hook and exit without installing. Cross-runtime support (Node, npm, pnpm) is planned for 0.9.0.
41
+ > **AKM 0.9.0 supports three install paths:** prebuilt binary, Bun, or Node.js >= 20.12.
42
+ > The old `vault` asset type was removed in 0.9.0; use `env` for whole `.env`
43
+ > groups and `secret` for standalone sensitive values.
36
44
 
37
45
  ## Quick Start
38
46
 
@@ -59,7 +67,7 @@ Add this to your `AGENTS.md`, `CLAUDE.md`, or system prompt:
59
67
  ## Resources & Capabilities
60
68
 
61
69
  You have access to a searchable library of scripts, skills, commands, agents,
62
- knowledge, memories, workflows, wikis, vaults, lessons, and scheduled tasks
70
+ knowledge, memories, workflows, wikis, env files, secrets, lessons, and scheduled tasks
63
71
  via the `akm` CLI. Use `akm -h` for details.
64
72
  ```
65
73
 
package/dist/akm ADDED
@@ -0,0 +1,38 @@
1
+ #!/bin/sh
2
+ # This Source Code Form is subject to the terms of the Mozilla Public
3
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ # file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
+
6
+ case "$0" in
7
+ */*) SCRIPT_PATH=$0 ;;
8
+ *)
9
+ SCRIPT_PATH=$(command -v -- "$0" 2>/dev/null || true)
10
+ if [ -z "$SCRIPT_PATH" ]; then
11
+ echo "akm launcher could not resolve its own path." >&2
12
+ exit 127
13
+ fi
14
+ ;;
15
+ esac
16
+
17
+ if command -v readlink >/dev/null 2>&1; then
18
+ while [ -L "$SCRIPT_PATH" ]; do
19
+ LINK_TARGET=$(readlink "$SCRIPT_PATH")
20
+ case "$LINK_TARGET" in
21
+ /*) SCRIPT_PATH=$LINK_TARGET ;;
22
+ *) SCRIPT_PATH=${SCRIPT_PATH%/*}/$LINK_TARGET ;;
23
+ esac
24
+ done
25
+ fi
26
+
27
+ SCRIPT_DIR=$(CDPATH= cd -- "${SCRIPT_PATH%/*}" && pwd)
28
+
29
+ if command -v bun >/dev/null 2>&1; then
30
+ exec bun "$SCRIPT_DIR/cli.js" "$@"
31
+ fi
32
+
33
+ if command -v node >/dev/null 2>&1; then
34
+ exec node "$SCRIPT_DIR/cli-node.mjs" "$@"
35
+ fi
36
+
37
+ echo "akm requires Bun or Node.js >= 20.12.0 on PATH." >&2
38
+ exit 127
@@ -0,0 +1,38 @@
1
+ #!/bin/sh
2
+ # This Source Code Form is subject to the terms of the Mozilla Public
3
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ # file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
+
6
+ case "$0" in
7
+ */*) SCRIPT_PATH=$0 ;;
8
+ *)
9
+ SCRIPT_PATH=$(command -v -- "$0" 2>/dev/null || true)
10
+ if [ -z "$SCRIPT_PATH" ]; then
11
+ echo "akm-migrate-storage launcher could not resolve its own path." >&2
12
+ exit 127
13
+ fi
14
+ ;;
15
+ esac
16
+
17
+ if command -v readlink >/dev/null 2>&1; then
18
+ while [ -L "$SCRIPT_PATH" ]; do
19
+ LINK_TARGET=$(readlink "$SCRIPT_PATH")
20
+ case "$LINK_TARGET" in
21
+ /*) SCRIPT_PATH=$LINK_TARGET ;;
22
+ *) SCRIPT_PATH=${SCRIPT_PATH%/*}/$LINK_TARGET ;;
23
+ esac
24
+ done
25
+ fi
26
+
27
+ SCRIPT_DIR=$(CDPATH= cd -- "${SCRIPT_PATH%/*}" && pwd)
28
+
29
+ if command -v bun >/dev/null 2>&1; then
30
+ exec bun "$SCRIPT_DIR/scripts/migrate-storage.js" "$@"
31
+ fi
32
+
33
+ if command -v node >/dev/null 2>&1; then
34
+ exec node "$SCRIPT_DIR/migrate-storage-node.mjs" "$@"
35
+ fi
36
+
37
+ echo "akm-migrate-storage requires Bun or Node.js >= 20.12.0 on PATH." >&2
38
+ exit 127
@@ -1,15 +1,20 @@
1
1
  {
2
- "description": "Standard improve pass — all sub-processes, markdown asset types.",
2
+ "description": "Standard improve pass — all sub-processes + sustaining proactive lane.",
3
3
  "processes": {
4
4
  "reflect": {
5
5
  "enabled": true,
6
+ "limit": 25,
6
7
  "allowedTypes": ["agent", "command", "knowledge", "lesson", "memory", "skill", "wiki", "workflow"]
7
8
  },
8
- "distill": { "enabled": true, "allowedTypes": ["memory"] },
9
- "consolidate": { "enabled": true, "allowedTypes": ["memory"] },
9
+ "distill": { "enabled": true, "allowedTypes": ["memory"], "requirePlannedRefs": true },
10
+ "consolidate": { "enabled": true, "allowedTypes": ["memory"], "minPoolSize": 500 },
10
11
  "memoryInference": { "enabled": true },
11
12
  "graphExtraction": { "enabled": true },
12
- "triage": { "enabled": false, "applyMode": "queue", "policy": "personal-stash" }
13
+ "extract": { "enabled": true, "triage": { "enabled": true, "minScore": 2 } },
14
+ "proactiveMaintenance": { "enabled": true, "dueDays": 30, "maxPerRun": 15 },
15
+ "triage": { "enabled": false, "applyMode": "queue", "policy": "personal-stash" },
16
+ "recombine": { "enabled": false },
17
+ "procedural": { "enabled": false }
13
18
  },
14
19
  "sync": { "enabled": true, "push": true }
15
20
  }
@@ -6,7 +6,7 @@
6
6
  "consolidate": { "enabled": false },
7
7
  "memoryInference": { "enabled": true },
8
8
  "graphExtraction": { "enabled": true },
9
- "extract": { "enabled": true, "minNewSessions": 3 },
9
+ "extract": { "enabled": true, "minNewSessions": 3, "triage": { "enabled": true, "minScore": 2 } },
10
10
  "triage": { "enabled": false }
11
11
  },
12
12
  "sync": { "enabled": true, "push": true }
@@ -8,5 +8,5 @@
8
8
  "graphExtraction": { "enabled": false },
9
9
  "triage": { "enabled": false }
10
10
  },
11
- "sync": { "enabled": false }
11
+ "sync": { "enabled": true, "push": true }
12
12
  }
@@ -12,5 +12,5 @@
12
12
  "graphExtraction": { "enabled": false },
13
13
  "triage": { "enabled": false }
14
14
  },
15
- "sync": { "enabled": false }
15
+ "sync": { "enabled": true, "push": true }
16
16
  }
@@ -0,0 +1,15 @@
1
+ {
2
+ "description": "Synthesis-only — cross-episodic recombination (#609). Opt-in periodic pass; all generative/extract passes off. (Procedural compilation (#615) is held OFF until cross-project scoping lands — it over-fits one-off sequences, 0% accept.)",
3
+ "processes": {
4
+ "reflect": { "enabled": false },
5
+ "distill": { "enabled": false },
6
+ "consolidate": { "enabled": false },
7
+ "memoryInference": { "enabled": false },
8
+ "graphExtraction": { "enabled": false },
9
+ "extract": { "enabled": false },
10
+ "triage": { "enabled": false },
11
+ "recombine": { "enabled": true },
12
+ "procedural": { "enabled": false }
13
+ },
14
+ "sync": { "enabled": true, "push": true }
15
+ }
@@ -1,5 +1,5 @@
1
1
  {
2
- "description": "All sub-processes enabled (currently identical to default; reserved for future divergence).",
2
+ "description": "Like default, plus the triage process (drains the pending-proposal backlog).",
3
3
  "processes": {
4
4
  "reflect": {
5
5
  "enabled": true,
@@ -0,0 +1,23 @@
1
+ You are the akm consolidate assistant analyzing memory assets.
2
+
3
+ Rules:
4
+ 1. MERGE: Two or more memories are substantially duplicated or closely related → propose merging. Return the primary ref to keep and secondary refs to delete. Do NOT include mergedContent — the merge will be executed in a separate step.
5
+ 2. DELETE: Memory is clearly outdated, contradicted, or redundant → propose deletion. NEVER propose delete for memories annotated `(captureMode: hot)` — they are user-explicit and only the user can retire them. The downstream guard will refuse these regardless, so proposing them just wastes tokens.
6
+ 3. PROMOTE: Memory expresses a stable, reusable fact suitable as a `knowledge:` asset → propose promotion. Do NOT delete the source memory. NEVER propose promote / merge / contradict for memories annotated `(already queued)` — they have a pending proposal whose body matches; a duplicate will be deterministically dropped, so proposing them just wastes tokens.
7
+ 4. CONTRADICT: Two memories assert logically exclusive facts such that following BOTH simultaneously is impossible — not merely related or overlapping. You MUST cite the exact sentence from Memory A and the exact sentence from Memory B that are in direct conflict. If you cannot cite specific opposing sentences, use KEEP instead. Sharing a topic, tool, domain, or workflow stage is NOT sufficient. Only direct factual opposites qualify: opposing recommended commands, opposing boolean flags, opposing version numbers, or mutually exclusive instructions. Use confidence ≥ 0.92 only; omit the op entirely if below that threshold.
8
+ 5. KEEP: Memory is unique and current → omit from output.
9
+
10
+ Return ONLY JSON (no prose, no code fences):
11
+ {
12
+ "operations": [
13
+ { "op": "merge", "primary": "memory:<name>", "secondaries": ["memory:<name>", ...], "mergeStrategy": "synthesize", "confidence": 0.95 },
14
+ { "op": "delete", "ref": "memory:<name>", "reason": "<brief reason>", "confidence": 0.90 },
15
+ { "op": "promote", "ref": "memory:<name>", "knowledgeRef": "knowledge:<suggested-slug>", "reason": "<brief reason>", "description": "<one sentence describing the new knowledge asset>", "confidence": 0.92 },
16
+ { "op": "contradict", "ref": "memory:<name>", "contradictedByRef": "memory:<name>", "reason": "<brief reason>", "confidence": 0.88 }
17
+ ],
18
+ "warnings": ["<optional concerns>"]
19
+ }
20
+
21
+ For every operation, emit a `confidence` field in [0, 1] expressing your certainty that the operation is correct and safe. Use 0.95+ only when evidence is unambiguous. Omit the field rather than guessing if you are uncertain.
22
+
23
+ When the merged content includes an `updated` frontmatter field, the value MUST be a real ISO date string (e.g. `updated: 2026-05-20`). NEVER emit `updated: today`, `updated: {today}`, `updated: {today: null}`, `updated: now`, or any other literal placeholder/template-variable. If you do not have a real source-of-truth date, OMIT the `updated` field entirely — the post-processor will not invent one for you.
@@ -0,0 +1,33 @@
1
+ You are evaluating two derived memory entries to determine if they contain
2
+ directly contradictory factual claims about the same subject.
3
+
4
+ Memory A:
5
+ Ref: {{A_REF}}
6
+ Description: {{A_DESCRIPTION}}
7
+ Content:
8
+ ```
9
+ {{A_BODY}}
10
+ ```
11
+
12
+ Memory B:
13
+ Ref: {{B_REF}}
14
+ Description: {{B_DESCRIPTION}}
15
+ Content:
16
+ ```
17
+ {{B_BODY}}
18
+ ```
19
+
20
+ Answer ONLY with valid JSON — no prose, no code fences:
21
+ {"contradicts": true|false, "confidence": 0.0, "reason": "<cite the exact opposing sentence from each memory, or explain why not contradicted>"}
22
+
23
+ A contradiction means the memories make LOGICALLY EXCLUSIVE claims: a practitioner
24
+ cannot follow BOTH simultaneously. The test: cite the exact sentence from Memory A
25
+ and the exact sentence from Memory B that are in direct conflict. If you cannot cite
26
+ specific opposing sentences, return false.
27
+
28
+ Sharing a topic, tool, domain, or workflow stage is NOT a contradiction. Only direct
29
+ factual opposites qualify: opposing recommended commands, opposing boolean flags,
30
+ opposing version numbers, or mutually exclusive instructions.
31
+
32
+ Set confidence ≥ 0.92 only when evidence is unambiguous. Use lower values when
33
+ uncertain — the caller will skip edges below 0.92.
@@ -0,0 +1,22 @@
1
+ You are the akm `distill` distiller.
2
+ Given an asset and recent feedback events about it, produce a concise
3
+ *knowledge* markdown document capturing the durable, reusable facts.
4
+ Prefer stable guidance over narrative recap.
5
+
6
+ YOUR RESPONSE MUST START EXACTLY WITH `---` ON THE VERY FIRST LINE.
7
+ DO NOT output any prose, explanation, or code fences before or after.
8
+
9
+ Required output format:
10
+ ---
11
+ description: <one-line summary of the knowledge asset>
12
+ tags: [<tag1>, <tag2>]
13
+ ---
14
+
15
+ # <Title>
16
+
17
+ <body — structured markdown, durable facts only>
18
+
19
+ RULES:
20
+ - `description` MUST be a non-empty single-line string.
21
+ - Include a meaningful markdown body with a `# Title` heading.
22
+ - Output ONLY the knowledge file. No preamble, no code fences, no trailing prose.
@@ -0,0 +1,36 @@
1
+ You are the akm `distill` distiller.
2
+ Given an asset and recent feedback events about it, produce a single
3
+ concise *lesson* an agent should remember next time it works on this
4
+ asset's domain.
5
+
6
+ YOUR RESPONSE MUST START EXACTLY WITH `---` ON THE VERY FIRST LINE.
7
+ DO NOT output any prose, explanation, or code fences before or after.
8
+
9
+ Required output format — copy this structure exactly:
10
+ ---
11
+ description: <one complete sentence (ending with `.`) summarising what the lesson teaches>
12
+ when_to_use: <one complete sentence describing the concrete trigger condition>
13
+ ---
14
+
15
+ <lesson body — plain markdown, 1–3 short paragraphs of practical guidance>
16
+
17
+ ## description field (MANDATORY)
18
+ - A single complete sentence in present tense, 20–400 chars, NO markdown.
19
+ - Self-contained: a reviewer must understand the lesson from this field alone.
20
+ - DO NOT start with "When ", "If ", or a connector word — that belongs in when_to_use.
21
+ - DO NOT copy a section heading ("Key takeaways", "For example", "Key pitfalls").
22
+ - DO NOT begin with a numbered list marker, code fence, or markdown heading.
23
+
24
+ GOOD: "Always validate ref existence before promoting a memory to knowledge; missing refs surface as silent 404s during accept."
25
+ BAD: "Key pitfalls"
26
+ BAD: "When working with the akm CLI"
27
+ BAD: "For example, you might..."
28
+ BAD: "1. Check the file"
29
+
30
+ RULES:
31
+ - `when_to_use` MUST be a complete sentence describing a concrete trigger. Never write `When working with <asset-name>` — that is circular and useless.
32
+ - `description` and `when_to_use` MUST differ from each other.
33
+ - The lesson body MUST be non-empty markdown prose. Do NOT restate `description:` or `when_to_use:` inside the body (no `**description:** ...` or `**when_to_use:** ...` lines — the frontmatter is the only place those keys belong).
34
+ - Do NOT emit a second `---` fence after the opening frontmatter — there are exactly two `---` lines in the output, both belonging to the single frontmatter block at the top.
35
+ - Do NOT reproduce the source asset verbatim — distil what a caller needs to know.
36
+ - Output ONLY the lesson file. No preamble, no code fences, no trailing prose.
@@ -28,7 +28,7 @@ Things NOT to extract:
28
28
  - Started: {{STARTED_AT}}
29
29
  - Ended: {{ENDED_AT}}
30
30
  - Project hint: {{PROJECT_HINT}}
31
-
31
+ {{STANDARDS}}
32
32
  ## Filtered session transcript
33
33
 
34
34
  The transcript below has already had read-only `akm` meta-ops and platform boilerplate stripped. Only content that might carry signal remains.
@@ -49,13 +49,17 @@ Respond with EXACTLY one JSON object matching this shape:
49
49
  "when_to_use": "<one sentence 15-400 chars; REQUIRED only when type=lesson>",
50
50
  "body": "<markdown body, 200-3000 chars typical>",
51
51
  "confidence": <number 0.0-1.0>,
52
- "evidence": "<one-line pointer to the moment in the session>"
52
+ "evidence": "<one-line pointer to the moment in the session>",
53
+ "orderedActions": ["<action-1>", "<action-2>", ...],
54
+ "outcomeData": "<one sentence describing the outcome of the action sequence>"
53
55
  }
54
56
  ],
55
57
  "rationale_if_empty": "<one sentence; REQUIRED when candidates is empty>"
56
58
  }
57
59
  ```
58
60
 
61
+ `orderedActions` and `outcomeData` are **optional**. Include them only when the candidate represents a recurring action sequence (e.g. a recovery procedure, a build-fix recipe, a deployment checklist) where preserving the ordered steps adds future value. When present, `outcomeData` is required and must describe what happened when the sequence completed (success or failure). Omit both fields entirely for standalone facts, observations, or lessons that are not action-sequence-shaped.
62
+
59
63
  ## Rules
60
64
 
61
65
  1. **Zero candidates is a valid and frequent answer.** Most sessions yield no new durable insight. When that's the case, return `{"candidates": [], "rationale_if_empty": "..."}` explaining what you saw and why it didn't rise to durable-knowledge level. Do not fabricate.
@@ -0,0 +1 @@
1
+ You extract a knowledge graph from developer notes. Return ONLY valid JSON — no prose, no markdown fences, no preamble.
@@ -2,7 +2,7 @@ Extract entities and relations from the asset body below.
2
2
 
3
3
  Rules:
4
4
  - Output ONLY a JSON object: {"entities": ["Entity One", ...], "relations": [{"from": "A", "to": "B", "type": "uses"}, ...]}.
5
- - Entities are short, canonical noun phrases (project names, services, tools, people, file/dir names, technical concepts).
5
+ - Entities are short, canonical noun phrases (project names, services, tools, people, technical concepts). Do NOT emit file or directory paths (anything containing "/" or "\") — they are dropped downstream.
6
6
  - Relations connect two entities that both appear in the entities array.
7
7
  - "type" is a short verb phrase (e.g. "uses", "depends on", "owns", "documents"). Optional; omit when unsure.
8
8
  - Drop pleasantries, meta-commentary, and timestamps.
@@ -0,0 +1 @@
1
+ You compress a developer memory into one high-signal derived memory for later retrieval. Return only valid JSON. No prose outside the JSON object. No markdown fences.
@@ -0,0 +1,5 @@
1
+ Compress the memory below into one derived memory. Output ONLY JSON:
2
+ {"title":"short title string","description":"one sentence summary string","tags":["tag1","tag2"],"searchHints":["search phrase 1","search phrase 2"],"content":"2-3 sentence compressed body preserving key facts verbatim"}
3
+ Rules: be specific, no vague generalizations, preserve key facts (names/versions/paths/config keys verbatim), merge related points, 3-8 tags, 3-6 searchHints. The content field must be a plain string with 2-3 sentences.
4
+
5
+ Memory:
@@ -0,0 +1 @@
1
+ You are a metadata generator for a developer asset registry. Given a script/skill/command/agent entry, generate improved metadata. Respond with ONLY valid JSON, no markdown fencing.
@@ -0,0 +1,44 @@
1
+ You are the akm `procedural` compiler.
2
+
3
+ You are given a RECURRING ordered action sequence — the SAME ordered list of
4
+ steps that an agent has successfully performed across several independent
5
+ sessions. Your job is to turn that bare sequence into a clean, reusable
6
+ WORKFLOW: give the workflow a title and a one-sentence description, and turn each
7
+ ordered action into a named step with clear imperative instructions.
8
+
9
+ You MUST NOT invent new steps, drop steps, merge steps, or reorder them. The
10
+ ordered action list is the source of truth. Return EXACTLY one step per input
11
+ action, in the SAME order.
12
+
13
+ YOUR RESPONSE MUST BE A SINGLE JSON OBJECT AND NOTHING ELSE.
14
+ DO NOT output prose, explanation, or code fences before or after the JSON.
15
+
16
+ When the sequence is a coherent, reusable procedure, return:
17
+ {
18
+ "title": "<short imperative workflow title, no trailing period>",
19
+ "description": "<one complete sentence (ending with a period) stating what the workflow accomplishes>",
20
+ "steps": [
21
+ {
22
+ "title": "<short imperative step title>",
23
+ "instructions": "<one or more imperative sentences telling an agent exactly how to perform this step>",
24
+ "completionCriteria": ["<optional bullet: an observable signal the step is done>"]
25
+ }
26
+ ]
27
+ }
28
+
29
+ When the sequence is NOT a coherent reusable procedure (it is noise, the steps do
30
+ not form a meaningful workflow, or any reusable framing would be a stretch),
31
+ return an explicit null:
32
+ null
33
+
34
+ A justified null is a CORRECT and expected outcome. Do NOT fabricate a hollow
35
+ workflow to avoid returning null.
36
+
37
+ ## Rules
38
+ - `steps` MUST have EXACTLY as many entries as the input action list, in order.
39
+ - Every step MUST have a non-empty `title` and non-empty `instructions`.
40
+ - `completionCriteria` is OPTIONAL; omit it rather than inventing weak criteria.
41
+ - The `description` MUST be a single complete present-tense sentence with NO
42
+ markdown, self-contained enough for a reviewer to understand the workflow.
43
+ - Ground every step in the corresponding input action; do not introduce outside
44
+ facts or tools the action does not mention.
@@ -0,0 +1,40 @@
1
+ You are the akm `recombine` synthesizer.
2
+
3
+ You are given a CLUSTER of related memories — distinct episodes that share a
4
+ topic (a tag or a graph entity) but were recorded independently. Your job is to
5
+ induce ONE cross-episodic generalization: a single durable insight that none of
6
+ the input memories states on its own, but that the cluster as a whole supports.
7
+
8
+ This is hypothesis formation, not summarization. A good generalization explains
9
+ WHY the individual episodes are instances of the same underlying pattern and
10
+ gives an agent a reusable rule for the next, unseen episode.
11
+
12
+ YOUR RESPONSE MUST BE A SINGLE JSON OBJECT AND NOTHING ELSE.
13
+ DO NOT output prose, explanation, or code fences before or after the JSON.
14
+
15
+ When a defensible generalization exists, return:
16
+ {
17
+ "description": "<one complete sentence (ending with a period) stating the generalization>",
18
+ "when_to_use": "<one complete sentence describing the concrete trigger condition>",
19
+ "body": "<1-3 short paragraphs of practical guidance grounded in the cluster>"
20
+ }
21
+
22
+ When NO defensible generalization exists — the memories merely share a keyword,
23
+ or any unifying claim would be a stretch — return an explicit null:
24
+ null
25
+
26
+ A justified null is a CORRECT and expected outcome. Do NOT invent a weak or
27
+ generic generalization to avoid returning null. It is better to propose nothing
28
+ than to propose a hollow over-generalization.
29
+
30
+ ## description field (MANDATORY when not null)
31
+ - A single complete present-tense sentence, NO markdown.
32
+ - Self-contained: a reviewer must understand the hypothesis from this field alone.
33
+ - DO NOT start with "When " or "If " — that belongs in `when_to_use`.
34
+ - DO NOT merely restate one input memory; the value is the CROSS-episode pattern.
35
+
36
+ ## Guardrails
37
+ - Induce exactly ONE generalization for the whole cluster.
38
+ - Ground every claim in the supplied memories; do not introduce outside facts.
39
+ - This is a HYPOTHESIS — it will be re-confirmed across future runs before it is
40
+ ever promoted to a durable lesson. Frame it as a candidate rule, not a verdict.
@@ -0,0 +1,6 @@
1
+ You are a belief-state classifier for a memory store. Given a candidate memory and a list of more-recent similar memories from the same store, decide whether the candidate is still current or has been superseded.
2
+
3
+ Respond on the first line with exactly YES or NO.
4
+ If YES, the second line MUST be of the form `SUPERSEDED_BY: <ref>` where <ref> is the exact ref of the superseding memory from the list provided. Do NOT invent refs.
5
+ If NO, do not include any additional lines.
6
+ No prose, no preamble, no markdown.
@@ -0,0 +1 @@
1
+ You are a strict completion auditor for a software workflow engine. Given a step's completion criteria and a summary of the work an agent claims to have done, judge whether the summary provides concrete evidence that EVERY criterion is satisfied. Be skeptical: vague, hand-wavy, or unsubstantiated claims do NOT satisfy a criterion. Respond with ONLY a JSON object: {"complete": boolean, "missing": string[], "feedback": string}. "missing" lists the exact criteria that are not yet satisfied; "feedback" is a short directive telling the agent what to finish or fix. No prose, no markdown fences.
@@ -0,0 +1,38 @@
1
+ ---
2
+ category: convention
3
+ description: Soft authoring conventions for agent assets using scoped role, tool, and maintenance rules.
4
+ when_to_use: Surfaced to authoring agents when they write or revise an agent asset.
5
+ ---
6
+
7
+ <!--
8
+ SOFT guidance only — advice, not a contract. Nothing here is enforced by the
9
+ proposal gate; validator-rejecting HARD rules live in src/core/authoring-rules.ts
10
+ and remain the sole enforced source. Editing or deleting this file cannot weaken
11
+ the gate. Tune the guidance below to match how your stash wants this asset type
12
+ maintained.
13
+ -->
14
+
15
+ # Agent authoring conventions
16
+
17
+ An agent asset defines a reusable role. Treat it like a disciplined maintainer, not a generic personality. Its job is to know its scope, read the right rulebooks, use the right tools, and leave the stash in better shape.
18
+
19
+ ## Purpose
20
+
21
+ Use an agent when a recurring task benefits from a specialized role, bounded responsibilities, and explicit tool behavior.
22
+
23
+ ## Authoring strategy
24
+
25
+ - Write the description so a dispatcher knows exactly when to delegate to this agent.
26
+ - Define the agent’s domain, authority, boundaries, and expected output.
27
+ - Specify what the agent must read first: relevant stash standards, type conventions, reference docs, source files, or prior lessons.
28
+ - State tool expectations plainly: what tools it may use, what it should avoid, and when it must ask for human review.
29
+ - Give the agent maintenance duties when appropriate: update cross-references, append logs, preserve provenance, and surface contradictions.
30
+ - Prefer a narrow role that does one thing reliably over a broad do-everything persona.
31
+ - Include handoff behavior: what the agent should return when it cannot complete the task safely.
32
+
33
+ ## Maintenance strategy
34
+
35
+ - Refine the agent when repeated sessions show the same delegation failure.
36
+ - Add explicit negative guidance when the agent overreaches.
37
+ - Keep role instructions stable and concise; move large background material into knowledge assets.
38
+ - Use lessons to capture operational improvements, then promote stable ones into the agent when they become part of the role.
@@ -0,0 +1,38 @@
1
+ ---
2
+ category: convention
3
+ description: Soft authoring conventions for command assets using repeatable LLM operation patterns.
4
+ when_to_use: Surfaced to authoring agents when they write or revise a command asset.
5
+ ---
6
+
7
+ <!--
8
+ SOFT guidance only — advice, not a contract. Nothing here is enforced by the
9
+ proposal gate; validator-rejecting HARD rules live in src/core/authoring-rules.ts
10
+ and remain the sole enforced source. Editing or deleting this file cannot weaken
11
+ the gate. Tune the guidance below to match how your stash wants this asset type
12
+ maintained.
13
+ -->
14
+
15
+ # Command authoring conventions
16
+
17
+ A command is a reusable markdown prompt template invoked by name. Treat it like an operation in the stash: every vague instruction will compound into repeated vague output.
18
+
19
+ ## Purpose
20
+
21
+ Use a command when the user or agent needs to perform the same prompt-shaped task repeatedly with different arguments or context.
22
+
23
+ ## Authoring strategy
24
+
25
+ - Put the task, inputs, constraints, and expected output shape near the top.
26
+ - Make argument placeholders obvious and describe what each one should contain.
27
+ - Tell the model what to inspect before acting, especially relevant stash assets, facts, standards, or reference docs.
28
+ - State the decision boundary: what the command should do directly, what it should only propose, and what it should refuse or defer.
29
+ - Include output requirements that are stable across runs.
30
+ - Keep the prompt tight. A command should be easy to invoke and hard to misinterpret.
31
+ - Avoid embedding one-time project details unless the command is intentionally project-specific.
32
+
33
+ ## Maintenance strategy
34
+
35
+ - If users repeatedly clarify the same missing detail, add that detail to the command.
36
+ - If command output regularly becomes useful durable knowledge, instruct the agent to file the result into the right asset type.
37
+ - If the command starts handling multiple unrelated tasks, split it into smaller commands.
38
+ - Preserve a clear invocation contract so future agents can call the command safely.
@@ -0,0 +1,39 @@
1
+ ---
2
+ category: convention
3
+ description: Soft authoring conventions for fact assets using pinned-core and just-in-time context principles.
4
+ when_to_use: Surfaced to authoring agents when they write or revise a fact asset.
5
+ ---
6
+
7
+ <!--
8
+ SOFT guidance only — advice, not a contract. Nothing here is enforced by the
9
+ proposal gate; validator-rejecting HARD rules live in src/core/authoring-rules.ts
10
+ and remain the sole enforced source. Editing or deleting this file cannot weaken
11
+ the gate. Tune the guidance below to match how your stash wants this asset type
12
+ maintained.
13
+ -->
14
+
15
+ # Fact authoring conventions
16
+
17
+ A fact is durable stash-level context: personal, team, project, convention, or meta knowledge. Treat facts as the stash’s semantic layer — selectively loaded context that should guide future work without bloating every prompt.
18
+
19
+ ## Purpose
20
+
21
+ Use a fact for stable information that future agents should treat as true or normative: user preferences, project identity, team stack, architecture principles, naming conventions, tag vocabulary, or stash organization.
22
+
23
+ ## Authoring strategy
24
+
25
+ - Write each fact as a standing declaration that can survive across sessions.
26
+ - Keep it short, high-signal, and self-contained.
27
+ - Choose the narrowest useful category: personal, team, project, convention, or meta.
28
+ - Use `pinned: true` only for the small core that should be available constantly.
29
+ - Leave most facts unpinned so they can be retrieved just-in-time.
30
+ - Include scope and provenance when a fact is project-specific, inferred, or subject to change.
31
+ - Separate facts from memories: memories preserve observations; facts state durable truth or durable policy.
32
+ - Separate facts from knowledge: knowledge explains a topic; facts declare compact context.
33
+
34
+ ## Maintenance strategy
35
+
36
+ - Revise or supersede facts when the durable truth changes.
37
+ - Do not allow contradictory facts to remain equally active.
38
+ - Promote repeated memories or lessons into facts only when they become stable context.
39
+ - Keep convention and meta facts especially clear, because they steer future asset creation.
@@ -0,0 +1,40 @@
1
+ ---
2
+ category: convention
3
+ description: Soft authoring conventions for knowledge assets as compiled, on-demand reference documents.
4
+ when_to_use: Surfaced to authoring agents when they write or revise a knowledge asset.
5
+ ---
6
+
7
+ <!--
8
+ SOFT guidance only — advice, not a contract. Nothing here is enforced by the
9
+ proposal gate; validator-rejecting HARD rules live in src/core/authoring-rules.ts
10
+ and remain the sole enforced source. Editing or deleting this file cannot weaken
11
+ the gate. Tune the guidance below to match how your stash wants this asset type
12
+ maintained.
13
+ -->
14
+
15
+ # Knowledge authoring conventions
16
+
17
+ A knowledge asset is a compiled reference document meant to be read on demand. Treat it as the synthesized layer above raw material: not source files, not chat residue, but integrated, navigable understanding that saves future agents from rediscovering the same material.
18
+
19
+ ## Purpose
20
+
21
+ Use a knowledge asset for durable reference material, synthesized explanations, design notes, comparisons, and project context that is broader than a single memory but less procedural than a skill.
22
+
23
+ ## Authoring strategy
24
+
25
+ - Open with a plain top-level title that names the subject.
26
+ - Add a concise orientation paragraph: what this document covers and when it should be read.
27
+ - For a long reference, add a table of contents near the top so the full scope is visible even on a partial read.
28
+ - Organize by stable concepts, decisions, entities, or questions — roughly one page per concept.
29
+ - Cross-reference related assets instead of duplicating them, so a navigable graph forms over time.
30
+ - Preserve provenance where it matters: cite source files, raw notes, session logs, or issues by path/ref.
31
+ - Call out contradictions, uncertainty, stale claims, and open questions explicitly.
32
+ - Prefer accurate synthesis over exhaustive dumping. Raw material belongs elsewhere; this file is the compiled layer.
33
+ - Use tables or checklists when they make retrieval and comparison easier.
34
+
35
+ ## Maintenance strategy
36
+
37
+ - Update the existing page when new information changes the same topic; append a dated note rather than silently rewriting when provenance matters.
38
+ - Create a new page when the concept deserves its own durable entry.
39
+ - Add links both ways when a new relationship matters.
40
+ - Periodically scan for orphaned, stale, or overlapping knowledge docs and consolidate them.