oh-my-second-brain 0.12.2 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/.codex-plugin/plugin.json +2 -2
  4. package/.mcp.codex.json +1 -0
  5. package/.mcp.json +1 -1
  6. package/CHANGELOG-assets.md +10 -0
  7. package/CHANGELOG-cli.md +15 -0
  8. package/CHANGELOG-kernel.md +24 -0
  9. package/CHANGELOG-mcp.md +24 -0
  10. package/CHANGELOG-vendors.md +15 -0
  11. package/CHANGELOG.md +9 -0
  12. package/README.ko.md +48 -23
  13. package/README.md +40 -22
  14. package/assets/claude/hooks/oms-guard.mjs +3 -3
  15. package/assets/claude/hooks/oms-post-guard.mjs +5 -5
  16. package/assets/codex/AGENTS.md +1 -1
  17. package/assets/codex/rules/oms.md +2 -2
  18. package/assets/hermes/README.md +3 -3
  19. package/assets/hermes-manifest.json +2 -2
  20. package/assets/skills/distill/SKILL.md +8 -2
  21. package/assets/skills/doctor/SKILL.md +5 -3
  22. package/assets/skills/link/SKILL.md +13 -4
  23. package/assets/skills/search/SKILL.md +12 -6
  24. package/assets/skills/status/SKILL.md +6 -2
  25. package/assets/skills/template/SKILL.md +20 -7
  26. package/assets/skills/write/SKILL.md +32 -7
  27. package/dist/cli/args.d.ts +2 -12
  28. package/dist/cli/args.js +55 -126
  29. package/dist/cli/args.js.map +1 -1
  30. package/dist/cli/audit.d.ts +1 -0
  31. package/dist/cli/audit.js +21 -2
  32. package/dist/cli/audit.js.map +1 -1
  33. package/dist/cli/doc-command.d.ts +16 -0
  34. package/dist/cli/doc-command.js +54 -24
  35. package/dist/cli/doc-command.js.map +1 -1
  36. package/dist/cli/graph-command.d.ts +1 -0
  37. package/dist/cli/graph-command.js +92 -0
  38. package/dist/cli/graph-command.js.map +1 -0
  39. package/dist/cli/host-commands.d.ts +12 -14
  40. package/dist/cli/host-commands.js +143 -60
  41. package/dist/cli/host-commands.js.map +1 -1
  42. package/dist/cli/host-probe.d.ts +5 -0
  43. package/dist/cli/host-probe.js +129 -0
  44. package/dist/cli/host-probe.js.map +1 -0
  45. package/dist/cli/index-command.d.ts +8 -0
  46. package/dist/cli/index-command.js +149 -27
  47. package/dist/cli/index-command.js.map +1 -1
  48. package/dist/cli/link-check.d.ts +5 -0
  49. package/dist/cli/link-check.js +19 -0
  50. package/dist/cli/link-check.js.map +1 -0
  51. package/dist/cli/link-command.d.ts +2 -0
  52. package/dist/cli/link-command.js +257 -1
  53. package/dist/cli/link-command.js.map +1 -1
  54. package/dist/cli/linkify.d.ts +2 -2
  55. package/dist/cli/linkify.js +2 -2
  56. package/dist/cli/model-command.d.ts +2 -0
  57. package/dist/cli/model-command.js +178 -0
  58. package/dist/cli/model-command.js.map +1 -0
  59. package/dist/cli/note-command.d.ts +2 -0
  60. package/dist/cli/note-command.js +277 -0
  61. package/dist/cli/note-command.js.map +1 -0
  62. package/dist/cli/oms.d.ts +0 -4
  63. package/dist/cli/oms.js +177 -124
  64. package/dist/cli/oms.js.map +1 -1
  65. package/dist/cli/package-command.d.ts +1 -0
  66. package/dist/cli/package-command.js +82 -0
  67. package/dist/cli/package-command.js.map +1 -0
  68. package/dist/cli/search-usage.js +6 -11
  69. package/dist/cli/search-usage.js.map +1 -1
  70. package/dist/cli/search.d.ts +2 -9
  71. package/dist/cli/search.js +164 -53
  72. package/dist/cli/search.js.map +1 -1
  73. package/dist/cli/serve-http.d.ts +3 -0
  74. package/dist/cli/serve-http.js +150 -30
  75. package/dist/cli/serve-http.js.map +1 -1
  76. package/dist/cli/setup-command.d.ts +1 -1
  77. package/dist/cli/setup-command.js +70 -4
  78. package/dist/cli/setup-command.js.map +1 -1
  79. package/dist/cli/status-command.d.ts +1 -0
  80. package/dist/cli/status-command.js +124 -0
  81. package/dist/cli/status-command.js.map +1 -0
  82. package/dist/cli/template-command.d.ts +2 -0
  83. package/dist/cli/template-command.js +301 -0
  84. package/dist/cli/template-command.js.map +1 -0
  85. package/dist/cli/usage.js +45 -69
  86. package/dist/cli/usage.js.map +1 -1
  87. package/dist/kernel/capture/safe.d.ts +4 -0
  88. package/dist/kernel/capture/safe.js +163 -15
  89. package/dist/kernel/capture/safe.js.map +1 -1
  90. package/dist/kernel/conventions/note-exclude.js +11 -58
  91. package/dist/kernel/conventions/note-exclude.js.map +1 -1
  92. package/dist/kernel/conventions/report.js +1 -1
  93. package/dist/kernel/conventions/report.js.map +1 -1
  94. package/dist/kernel/conventions/write-contract.d.ts +3 -3
  95. package/dist/kernel/conventions/write-contract.js +8 -1
  96. package/dist/kernel/conventions/write-contract.js.map +1 -1
  97. package/dist/kernel/conventions/write-protocol.js.map +1 -1
  98. package/dist/kernel/doctor/service.d.ts +23 -1
  99. package/dist/kernel/doctor/service.js +105 -0
  100. package/dist/kernel/doctor/service.js.map +1 -1
  101. package/dist/kernel/engine/embed/model.d.ts +27 -0
  102. package/dist/kernel/engine/embed/model.js +119 -7
  103. package/dist/kernel/engine/embed/model.js.map +1 -1
  104. package/dist/kernel/engine/embed/read-snapshot.d.ts +16 -0
  105. package/dist/kernel/engine/embed/read-snapshot.js +116 -0
  106. package/dist/kernel/engine/embed/read-snapshot.js.map +1 -0
  107. package/dist/kernel/engine/embed/repair.js +19 -7
  108. package/dist/kernel/engine/embed/repair.js.map +1 -1
  109. package/dist/kernel/engine/embed/store.js +118 -103
  110. package/dist/kernel/engine/embed/store.js.map +1 -1
  111. package/dist/kernel/engine/graph/builder.js +1 -1
  112. package/dist/kernel/engine/graph/builder.js.map +1 -1
  113. package/dist/kernel/engine/graph/explore.d.ts +1 -1
  114. package/dist/kernel/engine/graph/explore.js +7 -4
  115. package/dist/kernel/engine/graph/explore.js.map +1 -1
  116. package/dist/kernel/engine/graph/node.js +13 -5
  117. package/dist/kernel/engine/graph/node.js.map +1 -1
  118. package/dist/kernel/engine/mcp/facade.js +36 -30
  119. package/dist/kernel/engine/mcp/facade.js.map +1 -1
  120. package/dist/kernel/engine/mcp/query-mapper.d.ts +1 -1
  121. package/dist/kernel/engine/mcp/query-mapper.js +2 -2
  122. package/dist/kernel/engine/mcp/query-mapper.js.map +1 -1
  123. package/dist/kernel/engine/mcp/types.d.ts +1 -1
  124. package/dist/kernel/engine/retrieval/taxonomy-context.js +1 -1
  125. package/dist/kernel/engine/retrieval/taxonomy-context.js.map +1 -1
  126. package/dist/kernel/harness/surface-registry.js +24 -18
  127. package/dist/kernel/harness/surface-registry.js.map +1 -1
  128. package/dist/kernel/harness/validation.js +4 -1
  129. package/dist/kernel/harness/validation.js.map +1 -1
  130. package/dist/kernel/install/asset-health.d.ts +47 -0
  131. package/dist/kernel/install/asset-health.js +90 -0
  132. package/dist/kernel/install/asset-health.js.map +1 -0
  133. package/dist/kernel/install/common.js +1 -1
  134. package/dist/kernel/install/common.js.map +1 -1
  135. package/dist/kernel/link/convention-note.js +4 -4
  136. package/dist/kernel/link/convention-note.js.map +1 -1
  137. package/dist/kernel/runtime/event-journal.d.ts +12 -0
  138. package/dist/kernel/runtime/event-journal.js +311 -0
  139. package/dist/kernel/runtime/event-journal.js.map +1 -0
  140. package/dist/kernel/runtime/event-read.d.ts +3 -0
  141. package/dist/kernel/runtime/event-read.js +80 -0
  142. package/dist/kernel/runtime/event-read.js.map +1 -0
  143. package/dist/kernel/runtime/event-summary.d.ts +20 -0
  144. package/dist/kernel/runtime/event-summary.js +49 -0
  145. package/dist/kernel/runtime/event-summary.js.map +1 -0
  146. package/dist/kernel/runtime/event-types.d.ts +91 -0
  147. package/dist/kernel/runtime/event-types.js +10 -0
  148. package/dist/kernel/runtime/event-types.js.map +1 -0
  149. package/dist/kernel/search/morning-test-fixtures.js +3 -3
  150. package/dist/kernel/search/morning-test-fixtures.js.map +1 -1
  151. package/dist/kernel/searchbackend/engine-search-backend.js +4 -4
  152. package/dist/kernel/searchbackend/engine-search-backend.js.map +1 -1
  153. package/dist/kernel/setup/documents.d.ts +17 -8
  154. package/dist/kernel/setup/documents.js +13 -4
  155. package/dist/kernel/setup/documents.js.map +1 -1
  156. package/dist/kernel/setup/service.d.ts +11 -2
  157. package/dist/kernel/setup/service.js +27 -6
  158. package/dist/kernel/setup/service.js.map +1 -1
  159. package/dist/kernel/templates/canonical.d.ts +9 -5
  160. package/dist/kernel/templates/canonical.js +53 -3
  161. package/dist/kernel/templates/canonical.js.map +1 -1
  162. package/dist/kernel/templates/compose-add.d.ts +27 -0
  163. package/dist/kernel/templates/compose-add.js +29 -0
  164. package/dist/kernel/templates/compose-add.js.map +1 -0
  165. package/dist/kernel/templates/contract-from-notes.d.ts +32 -0
  166. package/dist/kernel/templates/contract-from-notes.js +285 -0
  167. package/dist/kernel/templates/contract-from-notes.js.map +1 -0
  168. package/dist/kernel/templates/doctor.d.ts +7 -2
  169. package/dist/kernel/templates/doctor.js +148 -28
  170. package/dist/kernel/templates/doctor.js.map +1 -1
  171. package/dist/kernel/templates/extract.d.ts +7 -8
  172. package/dist/kernel/templates/extract.js +27 -20
  173. package/dist/kernel/templates/extract.js.map +1 -1
  174. package/dist/kernel/templates/hints.d.ts +36 -0
  175. package/dist/kernel/templates/hints.js +279 -0
  176. package/dist/kernel/templates/hints.js.map +1 -0
  177. package/dist/kernel/templates/index.d.ts +3 -1
  178. package/dist/kernel/templates/index.js +1 -0
  179. package/dist/kernel/templates/index.js.map +1 -1
  180. package/dist/kernel/templates/migration.d.ts +34 -28
  181. package/dist/kernel/templates/migration.js +461 -710
  182. package/dist/kernel/templates/migration.js.map +1 -1
  183. package/dist/kernel/templates/obsidian-core-time.d.ts +19 -0
  184. package/dist/kernel/templates/obsidian-core-time.js +82 -0
  185. package/dist/kernel/templates/obsidian-core-time.js.map +1 -0
  186. package/dist/kernel/templates/operations.d.ts +8 -0
  187. package/dist/kernel/templates/operations.js +106 -0
  188. package/dist/kernel/templates/operations.js.map +1 -0
  189. package/dist/kernel/templates/paths.d.ts +5 -2
  190. package/dist/kernel/templates/paths.js +17 -2
  191. package/dist/kernel/templates/paths.js.map +1 -1
  192. package/dist/kernel/templates/policy.d.ts +59 -4
  193. package/dist/kernel/templates/policy.js +147 -38
  194. package/dist/kernel/templates/policy.js.map +1 -1
  195. package/dist/kernel/templates/register.d.ts +12 -0
  196. package/dist/kernel/templates/register.js +138 -0
  197. package/dist/kernel/templates/register.js.map +1 -0
  198. package/dist/kernel/templates/renderer.d.ts +11 -0
  199. package/dist/kernel/templates/renderer.js +67 -0
  200. package/dist/kernel/templates/renderer.js.map +1 -0
  201. package/dist/kernel/templates/resolver.d.ts +24 -1
  202. package/dist/kernel/templates/resolver.js +200 -53
  203. package/dist/kernel/templates/resolver.js.map +1 -1
  204. package/dist/kernel/templates/transaction.d.ts +17 -3
  205. package/dist/kernel/templates/transaction.js +199 -21
  206. package/dist/kernel/templates/transaction.js.map +1 -1
  207. package/dist/kernel/templates/types.d.ts +42 -17
  208. package/dist/kernel/update/update.d.ts +1 -7
  209. package/dist/kernel/update/update.js +36 -102
  210. package/dist/kernel/update/update.js.map +1 -1
  211. package/dist/mcp/server.d.ts +2 -1
  212. package/dist/mcp/server.js +731 -597
  213. package/dist/mcp/server.js.map +1 -1
  214. package/dist/mcp/update-notice.js +1 -1
  215. package/dist/mcp/update-notice.js.map +1 -1
  216. package/dist/vendors/claude/claude.d.ts +2 -0
  217. package/dist/vendors/claude/claude.js +2 -1
  218. package/dist/vendors/claude/claude.js.map +1 -1
  219. package/dist/vendors/claude/hook/post-tool-use.js +1 -1
  220. package/dist/vendors/claude/hook/post-tool-use.js.map +1 -1
  221. package/dist/vendors/codex/codex.d.ts +2 -0
  222. package/dist/vendors/codex/codex.js +28 -33
  223. package/dist/vendors/codex/codex.js.map +1 -1
  224. package/dist/vendors/hermes/hermes.d.ts +2 -0
  225. package/dist/vendors/hermes/hermes.js +34 -13
  226. package/dist/vendors/hermes/hermes.js.map +1 -1
  227. package/docs/adapters.md +36 -1
  228. package/docs/architecture.md +27 -3
  229. package/docs/cli-map.md +88 -0
  230. package/docs/conventions.md +71 -8
  231. package/docs/install.md +75 -32
  232. package/docs/verified-target.md +3 -3
  233. package/package.json +7 -3
  234. package/skills/distill/SKILL.md +26 -0
  235. package/skills/doctor/SKILL.md +26 -0
  236. package/skills/link/SKILL.md +33 -0
  237. package/skills/search/SKILL.md +37 -0
  238. package/skills/status/SKILL.md +20 -0
  239. package/skills/template/SKILL.md +42 -0
  240. package/skills/write/SKILL.md +61 -0
  241. package/dist/cli/doctor-lint.d.ts +0 -17
  242. package/dist/cli/doctor-lint.js +0 -87
  243. package/dist/cli/doctor-lint.js.map +0 -1
@@ -10,7 +10,7 @@
10
10
  {
11
11
  "name": "oms",
12
12
  "description": "Oh My Second Brain convention layer for Obsidian vaults — capture, retrieve, and validate knowledge under a declared semantic convention.",
13
- "version": "0.12.2",
13
+ "version": "0.14.0",
14
14
  "author": {
15
15
  "name": "gobeumsu",
16
16
  "email": "gobeumsu@gmail.com"
@@ -37,5 +37,5 @@
37
37
  ]
38
38
  }
39
39
  ],
40
- "version": "0.12.2"
40
+ "version": "0.14.0"
41
41
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "oms",
3
- "version": "0.12.2",
4
- "description": "Oh My Second Brain convention layer for Obsidian vaults — capture, retrieve, and validate knowledge under a declared semantic convention.",
3
+ "version": "0.14.0",
4
+ "description": "Oh My Second Brain convention layer for Obsidian vaults — seven shared skills and five MCP tools under a declared semantic convention.",
5
5
  "author": {
6
6
  "name": "gobeumsu"
7
7
  },
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "oms",
3
- "version": "0.12.2",
3
+ "version": "0.14.0",
4
4
  "description": "Oh My Second Brain convention layer for Obsidian vaults — Codex native rules, skills, and MCP adapter.",
5
- "_note": "oms install writes Codex MCP config, installs ~/.codex/rules/oms.md, and installs ~/.codex/skills/oms-*.",
5
+ "_note": "oms host install writes Codex MCP config and provenance, installs ~/.codex/rules/oms.md, and installs the seven shared skills under ~/.codex/skills/oms-*.",
6
6
  "skills": "./assets/skills/",
7
7
  "mcpServers": "./.mcp.codex.json"
8
8
  }
package/.mcp.codex.json CHANGED
@@ -3,6 +3,7 @@
3
3
  "oms": {
4
4
  "command": "oms",
5
5
  "args": [
6
+ "serve",
6
7
  "mcp",
7
8
  "--vault",
8
9
  "."
package/.mcp.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "mcpServers": {
3
3
  "oms": {
4
4
  "command": "oms",
5
- "args": ["mcp"]
5
+ "args": ["serve", "mcp"]
6
6
  }
7
7
  }
8
8
  }
@@ -4,6 +4,16 @@ Skills, agents, templates, and host guidance changes belong here.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.14.0] - 2026-09-05
8
+
9
+ - Shared skills and runtime guidance use the final command families and exclusive MCP operations, with no obsolete command aliases. Authored assets and the shipped root skill mirror remain byte-identical. (#125)
10
+ - Template and write guidance share the guarded CLI/MCP verbs and distinguish default note bindings from source-folder creation defaults. (#124)
11
+ - Status guidance distinguishes permanent external observation history from vault-owned convention files and avoids claiming inactivity from missing events. (#123)
12
+ - **Template and write skills distinguish external renderers from OMS note creation.** (#122) Hosts propose converted copies or observed contracts for user approval; the kernel validates them without executing scripts. Guidance explains missing Obsidian-filled values, external-body refusals, and unobserved contracts.
13
+ ## [0.13.0] - 2026-09-05
14
+
15
+ - **The npm package now ships a generated root `skills/` mirror of the single authored `assets/skills/` source for Gajae-Code, whose convention scan previously found zero OMS skills silently.**
16
+
7
17
  ## [0.12.2] - 2026-09-01
8
18
 
9
19
  ## [0.12.1] - 2026-09-01
package/CHANGELOG-cli.md CHANGED
@@ -4,6 +4,21 @@ Changes to the `oms` command surface belong here.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.14.0] - 2026-09-05
8
+
9
+ - HTTP routes reject malformed bodies and fields instead of coercing them into empty queries. Status retains unaffected component evidence when convention, history, engine, or graph health is unavailable. (#125)
10
+ - **CLI operations now have explicit, non-overlapping families.** (#125) `note`, `template`, `link`, `bridge`, `search`, `index`, `graph`, `host`, `package`, `model`, `serve`, `hook`, and `status` retain real capabilities without retired aliases. Package updates no longer force host synchronization; read-only health and server startup do not create a vault store.
11
+ - **The template command family exposes guarded convention management.** (#124) Inspect, scan, register, create, update, move, remove, check, and select default bindings through shared kernel operations. Mutations require a reviewed dry-run digest rather than direct vault edits.
12
+
13
+ - **Breaking: `oms setup --template-folder <path>` is repeatable and template folders are always selected explicitly.** (#120) Repeated paths are registered in `auto` scan/proposal mode, with the first explicit path becoming the template-creation default (separate from the note `defaultTemplate`). Without flags, setup reuses saved v3 folder registrations only; Obsidian and Templater settings are displayed as numbered dry-run candidates but are never selected automatically. An unresolved selection is blocked with `TEMPLATE_FOLDER_SELECTION_REQUIRED` and no approval digest.
14
+ - **Setup dry-runs now expose `diagnostics` and `starterTemplates` instead of failing at the first incompatible file.** (#121) Each excluded template names its error, path, field when applicable, and remediation, while compatible files remain reviewable; an all-incompatible selection is blocked with `TEMPLATE_CANDIDATE_INCOMPATIBLE`. When the selected default folder is empty, `starterTemplates` shows the proposed `note.md`, which is written only by an approved apply.
15
+ - **Doctor now reports template drift one file at a time.** (#121) Every `TEMPLATE_SOURCE_DRIFT` result includes the path, expected and actual SHA-256 signatures, remediation, and the registered template ID when available, making `regenerate-types` review specific rather than generic.
16
+
17
+ ## [0.13.0] - 2026-09-05
18
+
19
+ - **`oms doctor` now verifies Claude hook events plus the managed Codex and Hermes MCP registrations, preserving unreadable or syntactically malformed registration evidence as explicit inspection errors.**
20
+ - **`oms doctor` now reports structured and text install-asset health, naming dangling Claude hook symlinks with the reinstall command instead of allowing a silent command-not-found failure at tool time.**
21
+
7
22
  ## [0.12.2] - 2026-09-01
8
23
 
9
24
  ## [0.12.1] - 2026-09-01
@@ -4,6 +4,30 @@ Domain logic changes belong here.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.14.0] - 2026-09-05
8
+
9
+ - Read-only engine connections use stable vault-external SQLite snapshots, including committed WAL content, so source sidecars remain untouched even while the reader is open. Store rebuild/drop repairs share verified-target admission and server-checked postconditions across entrypoints. (#125)
10
+ - Package installation is independent of host registration synchronization, preserving a clear upgrade boundary instead of invoking a retired reconciliation command. Read-only entrypoints continue to resolve existing stores or ephemeral cores without creating vault state. (#125)
11
+ - **Folder registration, binding removal, and default selection share template transaction safeguards.** (#124) Server-derived current signatures, exact approval and readback protect every mode. Existing source files survive binding removal; only explicit deletion of managed sources is permitted. Note creation uses an explicitly declared default binding when no ID is supplied, never the first available template.
12
+ - **Runtime template and note observations are retained outside the vault.** (#123) A host-and-vault-scoped SQLite journal preserves individual invocation and mutation events without note bodies, keeps unknown external change times explicit, and never participates in approval digests. Authoritative contracts are reverified on use rather than trusted for a fixed number of days; logging failures remain visible without undoing successful writes. Completed transactions remove staging payloads while retaining replay evidence.
13
+ - **Template renderer contracts distinguish OMS-renderable sources from external Obsidian templates.** (#122) Templater fields require caller-supplied values instead of copying raw tags, and external bodies are rejected. Script-first sources can propose contracts from existing notes with sample counts and field coverage; missing observations are reported as unobserved. Source and sample limits fail visibly rather than silently truncating proposals; OMS never executes or transpiles Templater scripts.
14
+ - **Breaking: template policy v3 replaces singular `templateFolder` with structured `templateFolders` registrations.** (#120) Each folder records `path`, `auto|manual` mode, and at most one template-creation default; template bindings retain their source folder, while note placement remains explicit JSON taxonomy authority through the separate `defaultTemplate`. The runtime no longer invents an `Inbox` or template directory, and unsupported older policy versions stay protected and fail closed while setup produces an explicit v3 proposal.
15
+ - **Template discovery now reports incompatible files without hiding compatible siblings.** (#121) Setup emits per-file `TEMPLATE_EXPRESSION_UNSUPPORTED`, `TEMPLATE_SOURCE_INVALID`, and `TEMPLATE_ID_DUPLICATE` diagnostics with the affected path, field when applicable, and remediation; only the named file is excluded, while a selection with no compatible candidates is blocked as `TEMPLATE_CANDIDATE_INCOMPATIBLE`. Proposed IDs also remove `.template` and `.eta` suffixes before slugging, so common template filenames keep useful stable identities.
16
+ - **Obsidian core formatted date and time tags are validated instead of rejected as unknown expressions.** (#121) `{{date:FMT}}` and `{{time:FMT}}` accept the tokens `YYYY YY MM M DD D HH H hh h mm m ss s A a` with `-`, `/`, `.`, `:`, space, or `T` separators; bracket literals remain unsupported. Date and datetime properties containing these tags no longer produce false type-conflict diagnostics.
17
+ - **Template source drift is now actionable per changed file.** (#121) Doctor reports one `TEMPLATE_SOURCE_DRIFT` item per changed authority or registered template, including its template ID when available, path, projected and actual SHA-256 signatures, and regeneration remediation, so independent changes are no longer collapsed into one generic failure.
18
+ - **An empty selected default template folder now yields an explicit starter proposal.** (#121) Setup dry-runs include the starter `note.md` and diagnostics without writing the vault; the starter is created only after approval through the same guarded transaction as the rest of setup.
19
+
20
+ ## [0.13.0] - 2026-09-05
21
+
22
+ - **Replaying an identical completed template registration now returns a verified `already-complete` receipt instead of failing, while conflicting template IDs remain rejected.** Replay recomputes the canonical input and every current physical output, including every registered source, before accepting the completed marker; any drift requires a new dry-run. Template input authority construction is shared by registration, resolution, and repair to prevent digest drift.
23
+ - **Axis-query reranking now applies `minScore` once after reranking, so hit counts and facets are calculated from the same final ranked set.** Graph-neighbour priority is now expressed as reason-count then lexical-score ordering, rather than a unit-dependent weighted scalar.
24
+ - **Install asset health now classifies vendor-neutral host evidence injected by the CLI, including explicit inspection errors rather than mistaking unreadable or corrupt registration evidence for an absent installation.**
25
+ - **Axis-narrowed search now ranks with a continuous coverage score, using title, declared-axis, and term-specificity signals to resolve equal coverage instead of integer token-count ties and alphabetical paths.** Zero-score padding is refused, and `minScore` filters hits and facets identically. Scores are now fractional: a previously meaningful `minScore: 1` ("at least one token") effectively requires perfect coverage, so callers must re-tune thresholds.
26
+ - **Install asset health inspection now classifies missing, non-executable, and dangling hook symlinks explicitly, and validates generic skill-tree digests and recorded source versions against injected provenance evidence.**
27
+ - **Template policies can declare a user-owned writer registry in `.oms/template-policy.json`.** Agent writes with an unregistered writer identifier are refused at admission; vaults without a `writers` block are unaffected. Active registries require policy `version: 2`: migrate a v1 policy by setting `version` to `2` and retaining or adding its `writers` block.**
28
+ - **The exported template-policy JSON Schema now treats `writers` as a preserved extension for v1 policies and validates the managed writer registry only for v2 policies.**
29
+ - **An existing vault template can be registered in place and have its OMS contract derived from the file itself.** The kernel reads the Markdown template as the shape authority — frontmatter key order, literal and token defaults, body scaffold and body signature, supported template expressions — and composes it with `.obsidian/types.json`, the base contract, `.oms/template-policy.json`, and `.oms/taxonomy.json` into the generated `.oms/types.json`. Semantics stay where they belong: intent, requiredness, allowed values, formats, naming, and stable identity remain user-authored policy input and are never guessed from Markdown literals, so registering against a contract you have not authored fails with `TEMPLATE_CONTRACT_UNKNOWN` instead of inventing one. Registration runs through the existing guarded transaction, so a source that changes between dry-run and apply is rejected by CAS and the user's template is verified in place rather than published.
30
+
7
31
  ## [0.12.2] - 2026-09-01
8
32
 
9
33
  - **Setup preserves generated taxonomy template bindings and incrementally registers newly discovered templates.** (#104)
package/CHANGELOG-mcp.md CHANGED
@@ -4,6 +4,30 @@ MCP server tools and resources belong here.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.14.0] - 2026-09-05
8
+
9
+ ### Changed
10
+
11
+ - Conflicting index mutations are serialized within each MCP server through engine disposal, so repair cannot move a store still owned by another request. A failed close returns `ENGINE_LIFECYCLE_FAILED` and blocks further index mutations until server restart; read-only requests remain independent. (#125)
12
+ - `status { op: "graph" }` returns graph-only health, while omitted `op` retains aggregate health. Doctor `sync-embeddings` repair mode requires `repairMode: "rebuild"` or `"drop"`, matching CLI store repair rather than silently forcing embeddings. (#125)
13
+ - **MCP detail capabilities have exclusive operation and mode boundaries.** (#125) Document lookup, index views, template inspection and embedding synchronization no longer overlap through duplicate operations or booleans. All capabilities remain under the same five tools, with schema and dispatch validated together.
14
+ - Template operations include guarded `register-folder`, `remove`, and `default` modes, with current signatures derived by the server. Update move strategies are validated consistently; note creation may omit its ID only when a default binding is declared. No additional MCP tool is introduced. (#124)
15
+ - Status and template listings expose local runtime observation history separately from the vault contract. Missing observations are reported as gaps, not inactivity; reading history never creates a vault store. (#123)
16
+ - Template writes respect renderer and Obsidian-filled field contracts, rejecting external bodies and unresolved values without copying raw Templater tags. The five-tool surface and digest-approved transaction boundary are unchanged. (#122)
17
+ - The search receipt field `drift` was renamed to `indexDrift`; no compatibility alias is retained.
18
+ - **`write { op: "template", mode: "register-existing" }` now requires `sourceFolder` together with `sourcePath`.** The folder must be a registered v3 template source folder containing the existing Markdown file. This keeps template source identity distinct from taxonomy note placement while retaining the existing dry-run, approval-digest, and compare-and-swap flow. The MCP surface remains exactly five public tools.
19
+
20
+ ## [0.13.0] - 2026-09-05
21
+
22
+ ### Added
23
+
24
+ - **`write { op: "template", mode: "register-existing" }` registers a template that already lives in your vault.** Point it at a vault-relative Markdown path with an explicit stable `templateId`, the contract you authored, and a naming rule; the server reads the file as the shape authority and derives every control and source signature itself, so you no longer hand-assemble four expected digests and re-send the template's own bytes to register a file that is already on disk. The dry-run → `approvalDigest` → apply contract and its CAS checks are unchanged, and the source template is verified in place — never copied, rewritten, moved, or renamed. Re-registering an identical binding is refused as `TEMPLATE_ALREADY_REGISTERED` rather than a bare identity collision.
25
+
26
+ ### Changed
27
+
28
+ - **`status.writeTools` response values were renamed from `oms_write-*` to `write-*` with the capability-only tool surface.** Raw MCP clients that consume this diagnostic field must migrate those response strings alongside the five public tool names.
29
+ - **MCP local tool names are now capability-only.** The `oms` server advertises `write`, `search`, `link`, `status`, and `doctor`, so qualifying hosts display `oms_write`, `oms_search`, `oms_link`, `oms_status`, and `oms_doctor` rather than `oms_oms_*`. Raw MCP callers must migrate `oms_write` → `write`, `oms_search` → `search`, `oms_link` → `link`, `oms_status` → `status`, and `oms_doctor` → `doctor`.
30
+
7
31
  ## [0.12.2] - 2026-09-01
8
32
 
9
33
  ## [0.12.1] - 2026-09-01
@@ -4,6 +4,21 @@ Per-host adapter and installer changes belong here.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.14.0] - 2026-09-05
8
+
9
+ - Native host launch manifests use `oms serve mcp`; registrations retain seven shared skills and exactly five MCP tools. Host synchronization updates OMS assets independently of package installation and never upgrades the host application. (#125)
10
+ ## [0.13.0] - 2026-09-05
11
+
12
+ - **The shipped GJC skills mirror is now checked file-for-file against authored skills, with drift failures directing contributors to `npm run sync:skills`.**
13
+
14
+ ### Changed
15
+
16
+ - **Supported host guidance now names the single-qualified OMS tools.** Hermes, Claude, and Codex users see `oms_write`, `oms_search`, `oms_link`, `oms_status`, and `oms_doctor`, never `oms_oms_*`; raw MCP integrations must replace local calls `oms_write`/`oms_search`/`oms_link`/`oms_status`/`oms_doctor` with `write`/`search`/`link`/`status`/`doctor`.
17
+
18
+ ### Added
19
+
20
+ - **Gajae-Code now has a marketplace-plugin skill channel at the package-root `skills/` convention path; previously it installed OMS successfully while silently discovering zero skills.**
21
+
7
22
  ## [0.12.2] - 2026-09-01
8
23
 
9
24
  ## [0.12.1] - 2026-09-01
package/CHANGELOG.md CHANGED
@@ -10,6 +10,15 @@ This aggregate changelog contains changes that span multiple layers.
10
10
 
11
11
  ## [Unreleased]
12
12
 
13
+ ## [0.14.0] - 2026-09-05
14
+
15
+ - **Breaking: commands have one noun-and-verb home across CLI, MCP, skills, and host launchers.** (#125) Note, template, wikilink, bridge, index, graph, host, package, and model operations no longer overlap through legacy top-level aliases. The five MCP tools remain; exclusive operations retain the underlying capabilities. See `docs/cli-map.md` for the full map. Native MCP launch is `oms serve mcp`.
16
+ ## [0.13.0] - 2026-09-05
17
+
18
+ - **Breaking: the OMS namespace now renders exactly once. Tools appear as `oms_write`, not `oms_oms_write`.** The server was registered under the id `oms` while its tools were *also* named `oms_write`, `oms_search`, `oms_link`, `oms_status`, and `oms_doctor`, so every host that qualifies a tool as `<server>_<tool>` displayed the product namespace twice — Hermes showed `oms_oms_write`, internally `mcp__oms__oms_write`. The MCP-local names are now capability-only: `write`, `search`, `link`, `status`, `doctor`. Qualifying hosts render `oms_write` and its peers; Claude and Codex render `mcp__oms__write`. This spans layers deliberately — the tool surface, the bundled skills' `mcp_tool` values, the host manifests, and every piece of host guidance moved together, so there is one coherent five-capability surface and no aliases. **Raw MCP clients must migrate**: `oms_write` → `write`, `oms_search` → `search`, `oms_link` → `link`, `oms_status` → `status`, `oms_doctor` → `doctor`, and the `status.writeTools` response strings from `oms_write-*` → `write-*`. Hosts that qualify tool names need no change. The demoted operations behind `op` are untouched, and a parity gate now fails the build if any advertised tool name carries the `oms_` prefix or if a supported host would render a doubled namespace. (#107)
19
+
20
+ - **The shipped dependency tree no longer carries known advisories.** `npm run audit` had begun failing on every pull request for a reason none of them introduced: `fast-uri` picked up four host-confusion and SSRF advisories across its whole `3.x` range, and `qs` two more through Express. Both are pinned forward through the existing `overrides` block — `fast-uri` to `^4.1.4` and a new `qs` pin to `^6.16.0` — so the audit gate reports zero vulnerabilities and CI can tell a real regression from inherited noise again.
21
+
13
22
  ## [0.12.2] - 2026-09-01
14
23
 
15
24
  ### Fixed
package/README.ko.md CHANGED
@@ -27,34 +27,46 @@ oms setup --vault /path/to/vault --yes --approved-digest <표시된-digest>
27
27
  ## CLI
28
28
 
29
29
  ```text
30
- oms setup 기존 볼트 템플릿 탐색 및 채택
31
- oms install 호스트 어댑터와 관리형 MCP 등록 설치
32
- oms uninstall 호스트 어댑터와 관리형 MCP 등록 제거
33
- oms update 패키지 업데이트 확인/적용 후 어댑터 재조정
34
- oms reconcile 엄격한 전역 볼트 포인터로 호스트 재기록
35
- oms doctor 템플릿 권위와 파생 상태 진단
36
- oms lint 깨진 [[wikilink]]와 고아 노트 점검
37
- oms search <text> 일반 lexical 검색; --vec, --hyde, --expand, --max-queries 1..32, --rerank은 명시적 선택
38
- oms embed 색인된 노트의 임베딩 생성
39
- oms index sync|status|repair|cleanup|collections|contexts
40
- oms doc get|multi-get
41
- oms serve 로컬 검색 HTTP 서버 시작
42
- oms mcp stdio MCP 서버 시작
43
- oms hook Claude pre/post tool-use 볼트 가드 실행
30
+ oms setup 기존 볼트 템플릿 탐색 및 채택
31
+ oms template scan|list|show|add|update|move|remove|default|check|regenerate-types
32
+ oms note create|append|update|audit|backfill|get
33
+ oms link check|suggest|apply 노트 wikilink 점검·제안·적용
34
+ oms bridge add|remove|status 저장소-볼트 target bridge 관리
35
+ oms search query|context 명시적 query 실행 또는 구조화 context 조회
36
+ oms index sync|embed|repair|status|clean 파생 검색 상태 관리
37
+ oms graph build|status 노트 그래프 생성 또는 조회
38
+ oms host install|remove|sync|status 호스트 asset과 MCP 등록 관리
39
+ oms package check|update OMS 패키지 확인 또는 업데이트
40
+ oms model install|select|waive|status 로컬 모델 선택 관리
41
+ oms serve mcp|http stdio MCP 또는 로컬 HTTP 서버 시작
42
+ oms hook pre|post pre/post-tool-use 볼트 가드 실행
43
+ oms status 읽기 전용 종합 상태 표시
44
44
  ```
45
45
 
46
46
  `oh-my-second-brain`은 전체 명령이고 `oms`는 짧은 별칭이다.
47
47
 
48
+ `oms template add`에는 세 형태가 있다. 폴더를 넘기면 그 안의 템플릿을
49
+ 등록하고, 파일과 `--id`를 넘기면 기존 템플릿을 등록하며, `--id`와
50
+ `--from`을 함께 쓰면 새 템플릿을 만든다. `--from` 형태는 등록된
51
+ `templateFolders[].default` 위치에 쓰며, 이 템플릿 폴더는 노트 배치
52
+ 위치를 제한하지 않는다. `oms template default <id>`가 기본 바인딩을
53
+ 선언한다. 명시적 템플릿 없이 노트를 만들 때는 이 바인딩만 사용하며,
54
+ 없으면 첫 템플릿을 임의 선택하지 않고 `TEMPLATE_DEFAULT_UNDECLARED`로
55
+ 실패한다.
56
+
48
57
  ### 도움말 계약
49
58
 
50
59
  인식된 모든 명령은 `--help`와 `-h`를 받아들이며, exit 0으로 종료하고
51
60
  부작용을 수행하지 않는다. 알 수 없는 명령에 `--help`를 함께 주면 exit 1로 종료한다.
52
61
 
53
- `oms search <text>`는 lexical-only다. `--vec`, `--hyde`는 각각의 typed
54
- channel을 선택하고, `--expand`는 G004 expansion을 명시적으로 켜며,
55
- `--max-queries`는 1부터 32까지의 정수만 받는다. `--rerank`도 opt-in이다.
56
- `oms embed`가 유일한 embedding 명령이며 `oms index`에는 embedding
57
- subcommand가 없다.
62
+ `oms search query <text>`는 lexical-only다. `--vec`, `--hyde`는 각각의
63
+ typed channel을 선택하고, `--expand`는 G004 expansion을 명시적으로
64
+ 켜며, `--max-queries`는 1부터 32까지의 정수만 받는다. `--rerank`도
65
+ opt-in이다. `oms search context`는 별도의 구조화 context 표면이다.
66
+ Embedding은 명시적으로 `oms index embed`를 사용하며 sync와 repair는
67
+ 서로 다른 index mode다. `oms index status --view status|collections|contexts`는
68
+ 세 읽기 전용 view를 모두 보존하고, `oms index clean`은 제거 가능한 파생
69
+ 상태를 정리한다.
58
70
 
59
71
  Vector 검색에는 검증된 로컬 embedding capability가 필요하다. 선택 경로는
60
72
  완전한 `OMS_EMBEDDING_PROVIDER`/`OMS_EMBEDDING_MODEL` 쌍, vault의
@@ -71,9 +83,9 @@ Setup에서는 로컬 검증 acquisition 정책 하나를 선택한다:
71
83
 
72
84
  ## MCP 도구
73
85
 
74
- `oms mcp`는 정확히 다섯 개의 공개 도구를 노출한다:
86
+ `oms serve mcp`는 정확히 다섯 개의 공개 도구를 노출한다:
75
87
 
76
- `oms_write` · `oms_search` · `oms_link` · `oms_status` · `oms_doctor`
88
+ `write` · `search` · `link` · `status` · `doctor`
77
89
 
78
90
  일곱 스킬(`write`, `search`, `link`, `distill`, `status`, `doctor`, `template`)은 워크플로 안내이며 MCP 도구와 같은 집합이 아니다. 세부 기능은 다섯 도구의 `op` 값으로 제공한다.
79
91
 
@@ -87,10 +99,23 @@ Node.js 20 이상이 필요하다.
87
99
 
88
100
  ```bash
89
101
  npm install -g oh-my-second-brain
90
- oms install --runtime all --vault /path/to/vault --yes
102
+ oms host install --runtime all --vault /path/to/vault --yes
91
103
  ```
92
104
 
93
- 호스트 설치는 canonical 볼트를 `${XDG_CONFIG_HOME:-~/.config}/oms/vault.json`에 기록하고 각 관리형 등록에 `oms mcp --vault /path/to/vault`를 넣는다. `install`, `update`, `reconcile`, `uninstall`만 서명된 포인터를 호스트 stamp 관리에 사용한다. 런타임 쓰기·검색 target 해석은 포인터를 읽지 않으며 명시적 target, 로컬 볼트 control, bridge, `OMS_VAULT`, 읽기 전용 cwd fallback 순서를 유지한다.
105
+ Gajae-Code에서는 npm 패키지를 marketplace plugin으로 설치한다: `gjc plugin install oms@oms`. GJC는 패키지 루트의 `skills/` convention path에서 일곱 OMS skill을 발견한다.
106
+
107
+ 호스트 설치는 canonical 볼트를
108
+ `${XDG_CONFIG_HOME:-~/.config}/oms/vault.json`에 기록하고 각 관리형
109
+ 등록에 `oms serve mcp --vault /path/to/vault`를 넣는다.
110
+ `oms host install|remove|sync|status`만 이 서명된 포인터로 호스트 통합을
111
+ 관리한다.
112
+ `oms package update`는 패키지만 업데이트하고 호스트를 암묵적으로
113
+ 동기화하지 않는다. `oms host sync`는 별도로 실행한다.
114
+
115
+ 런타임 쓰기·검색 target 해석은 호스트 관리 포인터를 읽지 않는다.
116
+ 우선순위는 명시적 target, 로컬 볼트 control, bridge, `OMS_VAULT`, 그리고
117
+ 안전한 읽기 전용 fallback으로서의 cwd 순서다. 변경 작업은 cwd fallback을
118
+ 사용할 수 없다.
94
119
 
95
120
  `OMS_VAULT`는 명시적·로컬·bridge target이 없을 때 사용하는 지원 환경변수 fallback이다.
96
121
 
package/README.md CHANGED
@@ -27,33 +27,44 @@ Managed-template changes use the same dry-run, exact caller approval, compare-an
27
27
  ## CLI
28
28
 
29
29
  ```text
30
- oms setup Discover and adopt existing vault templates
31
- oms install Install host adapters and managed MCP registration
32
- oms uninstall Remove host adapters and managed MCP registration
33
- oms update Check/apply a package update and reconcile adapters
34
- oms reconcile Re-stamp hosts from the strict global vault pointer
35
- oms doctor Diagnose template authority and derived state
36
- oms lint Check broken [[wikilinks]] and orphan notes
37
- oms search <text> Plain lexical search; --vec, --hyde, --expand, --max-queries 1..32, and --rerank are explicit
38
- oms embed Generate embeddings for indexed notes
39
- oms index sync|status|repair|cleanup|collections|contexts
40
- oms doc get|multi-get
41
- oms serve Start the local search HTTP server
42
- oms mcp Start the stdio MCP server
43
- oms hook Run Claude pre/post tool-use vault guards
30
+ oms setup Discover and adopt existing vault templates
31
+ oms template scan|list|show|add|update|move|remove|default|check|regenerate-types
32
+ oms note create|append|update|audit|backfill|get
33
+ oms link check|suggest|apply Check, suggest, or apply note wikilinks
34
+ oms bridge add|remove|status Manage repository-to-vault target bridges
35
+ oms search query|context Run an explicit query or retrieve structured context
36
+ oms index sync|embed|repair|status|clean Manage derived search state
37
+ oms graph build|status Build or inspect the note graph
38
+ oms host install|remove|sync|status Manage host assets and MCP registrations
39
+ oms package check|update Check or update the OMS package
40
+ oms model install|select|waive|status Manage local model selection
41
+ oms serve mcp|http Start the stdio MCP or local HTTP server
42
+ oms hook pre|post Run pre- or post-tool-use vault guards
43
+ oms status Show the read-only aggregate status
44
44
  ```
45
45
 
46
46
  `oh-my-second-brain` is the full command; `oms` is its short alias.
47
47
 
48
+ `oms template add` has three forms: a folder registers its templates, a file
49
+ with `--id` registers that existing template, and `--id` with `--from` creates
50
+ one. The `--from` form writes to the registered `templateFolders[].default`
51
+ destination; that template folder does not constrain where notes are placed.
52
+ `oms template default <id>` declares the default binding. Creating a note
53
+ without an explicit template uses only that binding and otherwise fails with
54
+ `TEMPLATE_DEFAULT_UNDECLARED`; it never silently selects the first template.
55
+
48
56
  ### Help contract
49
57
 
50
58
  Every recognized command accepts `--help` and `-h`, exits 0, and performs no
51
59
  side effects. An unknown command combined with `--help` exits 1.
52
60
 
53
- `oms search <text>` is lexical-only. `--vec` and `--hyde` select their respective
54
- typed channels; `--expand` explicitly enables G004 expansion, `--max-queries`
55
- accepts an integer from 1 through 32, and `--rerank` is opt-in. `oms embed` is
56
- the sole embedding command; `oms index` has no embedding subcommand.
61
+ `oms search query <text>` is lexical-only. `--vec` and `--hyde` select their
62
+ respective typed channels; `--expand` explicitly enables G004 expansion,
63
+ `--max-queries` accepts an integer from 1 through 32, and `--rerank` is opt-in.
64
+ `oms search context` is the separate structured-context surface. Embedding is
65
+ explicitly `oms index embed`; sync and repair are distinct index modes.
66
+ `oms index status --view status|collections|contexts` preserves all three
67
+ read-only views, while `oms index clean` removes eligible derived state.
57
68
 
58
69
  Vector search requires a verified local embedding capability, selected by a
59
70
  complete `OMS_EMBEDDING_PROVIDER`/`OMS_EMBEDDING_MODEL` pair, the vault's
@@ -69,9 +80,9 @@ During setup, choose one local verified acquisition policy:
69
80
 
70
81
  ## MCP tools
71
82
 
72
- `oms mcp` exposes exactly five public tools:
83
+ `oms serve mcp` exposes exactly five public tools:
73
84
 
74
- `oms_write` · `oms_search` · `oms_link` · `oms_status` · `oms_doctor`
85
+ `write` · `search` · `link` · `status` · `doctor`
75
86
 
76
87
  The seven skills (`write`, `search`, `link`, `distill`, `status`, `doctor`, `template`) are workflow guidance, not a tool-equality list. Detail capabilities remain `op` values under the five tools.
77
88
 
@@ -85,10 +96,17 @@ Node.js 20 or later is required.
85
96
 
86
97
  ```bash
87
98
  npm install -g oh-my-second-brain
88
- oms install --runtime all --vault /path/to/vault --yes
99
+ oms host install --runtime all --vault /path/to/vault --yes
89
100
  ```
90
101
 
91
- Host installation records the canonical vault in `${XDG_CONFIG_HOME:-~/.config}/oms/vault.json` and stamps `oms mcp --vault /path/to/vault` into each managed host entry. `install`, `update`, `reconcile`, and `uninstall` use that signed pointer only to maintain host stamps. Runtime write/search target resolution never reads it and keeps this precedence: explicit target, local vault controls, bridge, `OMS_VAULT`, then read-only cwd fallback.
102
+ For Gajae-Code, install the npm package as a marketplace plugin: `gjc plugin install oms@oms`. GJC discovers the seven OMS skills at the package-root `skills/` convention path.
103
+
104
+ Host installation records the canonical vault in `${XDG_CONFIG_HOME:-~/.config}/oms/vault.json` and stamps `oms serve mcp --vault /path/to/vault` into each managed host entry. `oms host install|remove|sync|status` use that signed pointer only to maintain host integrations. `oms package update` updates the package but never syncs hosts implicitly; run `oms host sync` separately.
105
+
106
+ Runtime write/search target resolution never reads the host-maintenance pointer.
107
+ Its precedence is explicit target, local vault controls, bridge, `OMS_VAULT`,
108
+ then cwd only as a safe read-only fallback. Mutations cannot use the cwd
109
+ fallback.
92
110
 
93
111
  `OMS_VAULT` is the supported environment fallback when no explicit, local, or bridge target exists.
94
112
 
@@ -3,7 +3,7 @@
3
3
  * oms-guard — thin PreToolUse wrapper for Claude Code settings.json.
4
4
  *
5
5
  * Filters vault-relevant Write/Edit tool calls and delegates to
6
- * `oms hook pre-tool-use --vault <vault>` only when the target path is
6
+ * `oms hook pre --vault <vault>` only when the target path is
7
7
  * inside a configured vault. Vault 무관 호출은 spawn 없이 즉시 통과.
8
8
  *
9
9
  * Configuration (env vars set by the settings.json hook definition):
@@ -103,12 +103,12 @@ async function main() {
103
103
  );
104
104
  if (!targetVault) { allow(); return; }
105
105
 
106
- // Spawn `oms hook pre-tool-use --vault <vault>` with the raw stdin payload.
106
+ // Spawn `oms hook pre --vault <vault>` with the raw stdin payload.
107
107
  try {
108
108
  const { cmd, prefix } = resolveOmsCommand();
109
109
  const result = spawnSync(
110
110
  cmd,
111
- [...prefix, "hook", "pre-tool-use", "--vault", targetVault],
111
+ [...prefix, "hook", "pre", "--vault", targetVault],
112
112
  { input: rawInput, encoding: "utf-8", timeout: 10000 },
113
113
  );
114
114
  if (result.status === 0 && result.stdout && result.stdout.trim()) {
@@ -3,8 +3,8 @@
3
3
  * oms-post-guard — thin PostToolUse wrapper for Claude Code settings.json.
4
4
  *
5
5
  * Filters vault-relevant Write/Edit completions and delegates to
6
- * `oms hook post-tool-use --vault <vault>` for frontmatter audit and
7
- * graph cache debounce. Vault 무관 호출은 spawn 없이 즉시 통과.
6
+ * `oms hook post --vault <vault>` for advisory frontmatter audit.
7
+ * Vault 무관 호출은 spawn 없이 즉시 통과.
8
8
  *
9
9
  * Configuration (env vars set by the settings.json hook definition):
10
10
  * OMS_VAULT — primary vault path
@@ -92,16 +92,16 @@ async function main() {
92
92
  const { cmd, prefix } = resolveOmsCommand();
93
93
  const result = spawnSync(
94
94
  cmd,
95
- [...prefix, "hook", "post-tool-use", "--vault", targetVault],
95
+ [...prefix, "hook", "post", "--vault", targetVault],
96
96
  { input: rawInput, encoding: "utf-8", timeout: 30000 },
97
97
  );
98
- // Forward any additionalContext output from the post-tool-use hook.
98
+ // Forward any additionalContext output from the post hook.
99
99
  if (result.status === 0 && result.stdout && result.stdout.trim()) {
100
100
  process.stdout.write(result.stdout);
101
101
  }
102
102
  if (result.stderr) process.stderr.write("[oms-post-guard] " + result.stderr);
103
103
  } catch {
104
- // Fail silently — post-tool-use is advisory.
104
+ // Fail silently — the post hook is advisory.
105
105
  }
106
106
  }
107
107
 
@@ -18,4 +18,4 @@ The vault is governed by user-owned template conventions in `.oms/`.
18
18
 
19
19
  **Maintain:** `$oms-status` is read-only. `$oms-doctor` diagnoses and performs explicit repairs.
20
20
 
21
- `oms install --runtime codex` installs seven skills: `$oms-write`, `$oms-search`, `$oms-link`, `$oms-distill`, `$oms-status`, `$oms-doctor`, and tool-less `$oms-template`, plus managed MCP configuration.
21
+ `oms host install --runtime codex` installs seven skills: `$oms-write`, `$oms-search`, `$oms-link`, `$oms-distill`, `$oms-status`, `$oms-doctor`, and tool-less `$oms-template`, plus managed MCP configuration using `oms serve mcp`.
@@ -11,8 +11,8 @@ Actual Obsidian Markdown templates own note shape and body scaffolding. The user
11
11
  | User intent | Preferred surface |
12
12
  |---|---|
13
13
  | inspect and adopt templates | `oms setup --vault <path> --dry-run`, then `--yes --approved-digest <digest>` |
14
- | install host integration | `oms install --runtime codex --vault <path> --yes` |
15
- | diagnose or repair | `$oms-doctor` or `oms doctor --vault <path>` |
14
+ | install host integration | `oms host install --runtime codex --vault <path> --yes` |
15
+ | diagnose or repair | `$oms-doctor` or `oms template check --vault <path>`; repairs require an approved digest |
16
16
  | write a note | `$oms-write` / MCP `oms_write` with a stable `templateId` |
17
17
  | retrieve knowledge | `$oms-search` / MCP `oms_search`; discover IDs with `op: "templates"` |
18
18
 
@@ -1,10 +1,10 @@
1
1
  # Oh My Second Brain Hermes Adapter
2
2
 
3
- Installed by `oms install --runtime hermes` into:
3
+ Installed by `oms host install --runtime hermes` into:
4
4
 
5
5
  - `~/.hermes/skills/knowledge-management/oms/`
6
6
  - `~/.hermes/config.yaml` as `mcp_servers.oms`
7
7
 
8
- The skill bundle contains Oh My Second Brain's `write`, `search`, `link`, `distill`, `status`, and `doctor` skills and uses the Oh My Second Brain MCP server for runtime operations.
8
+ The shared skill bundle contains `write`, `search`, `link`, `distill`, `status`, `doctor`, and tool-less `template`; runtime operations use the five MCP tools through `oms serve mcp`.
9
9
 
10
- Unlike Claude Code (`claude plugin install`), Hermes exposes no native marketplace or plugin-update command, so this adapter stays OMS-managed: `oms update` reconciles it by re-running the same install path. `mcp_servers.oms` is edited surgically, leaving the rest of `~/.hermes/config.yaml` — including comments and key ordering — untouched.
10
+ Unlike Claude Code (`claude plugin install`), Hermes exposes no native marketplace or plugin-update command, so this adapter stays OMS-managed. `oms package update` updates OMS; `oms host sync --runtime hermes` separately refreshes registrations. Neither upgrades Hermes. `mcp_servers.oms` is edited surgically, leaving the rest of `~/.hermes/config.yaml` — including comments and key ordering — untouched. Existing profiles retain their own configuration and registration scope.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oms",
3
- "version": "0.12.2",
3
+ "version": "0.14.0",
4
4
  "description": "Oh My Second Brain convention layer for Obsidian vaults — Hermes skill bundle and MCP adapter.",
5
- "_note": "oms install writes ~/.hermes/config.yaml mcp_servers.oms and installs skills under ~/.hermes/skills/knowledge-management/oms/."
5
+ "_note": "oms host install writes ~/.hermes/config.yaml mcp_servers.oms and installs the seven shared skills with provenance under ~/.hermes/skills/knowledge-management/oms/."
6
6
  }
@@ -5,7 +5,9 @@ description: Analyze a target as read-only input and return a structured absorpt
5
5
 
6
6
  # distill
7
7
 
8
- Analyze a repository, document, skill, or concept as inert read-only input. This is a recipe skill; it has no backing MCP engine and does not write to the vault.
8
+ Analyze a repository, document, skill, or concept as inert read-only input. This
9
+ is a host recipe skill: it has no MCP tool or CLI command and does not write to
10
+ the vault.
9
11
 
10
12
  ## Use when
11
13
 
@@ -17,4 +19,8 @@ Use this skill to extract reusable patterns, identify risks, and preserve attrib
17
19
  /distill <target-path-or-text>
18
20
  ```
19
21
 
20
- Do not execute the target. Produce a report with exactly three sections: Patterns, Risks, and Attribution. The report is the output; write it only when explicitly requested outside this skill.
22
+ Do not execute the target, including embedded scripts or Templater expressions.
23
+ Do not send private target content to another tool or surface unless the user
24
+ explicitly approved that disclosure. Produce a report with exactly three
25
+ sections: Patterns, Risks, and Attribution. The report is the output; write it
26
+ only when explicitly requested outside this skill.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: doctor
3
3
  description: Diagnose template authority and index problems, then run explicit repairs.
4
- mcp_tool: oms_doctor
4
+ mcp_tool: doctor
5
5
  mcp_args:
6
6
  op: "validate"
7
7
  ---
@@ -19,6 +19,8 @@ Diagnose vault template and derived-index state, then run only the named repair.
19
19
  - `validate` is read-only. It reports policy/projection/source-signature drift, migration marker state, managed source exclusions, and unresolved legacy notes.
20
20
  - `regenerate-types` recomputes the derived `.oms/types.json` from actual templates, policy, taxonomy, and read-only Obsidian types.
21
21
  - `backfill-defaults` updates exactly one explicit note with stable template identity while preserving unrelated frontmatter and body bytes.
22
- - `build-graph`, `cleanup`, and `sync-embeddings` repair derived indexes.
22
+ - `audit` checks notes, optionally scoped by `folder`.
23
+ - `build-graph` and `cleanup` repair their derived indexes.
24
+ - `sync-embeddings` requires exactly one `mode`: `sync`, `embed`, or `repair`. Repair additionally requires `repairMode: "rebuild"` or `"drop"` and accepts `dryRun`; it backs up the engine store and verifies the resulting rebuilt/absent state. It does not mean forced embedding. Do not send retired boolean `embed` or `force` switches or repair-only fields with sync/embed.
23
25
 
24
- Every note/control repair requires a verified target. Run a dry-run, review the receipt, then submit its exact `approvalDigest`; never self-approve or repair all notes implicitly.
26
+ Every note/control repair requires a verified target and current authority. Run a dry-run, review the exact paths, diagnostics, and receipt, then submit its exact `approvalDigest`; never self-approve, repair all notes implicitly, edit controls directly, or treat an unobserved condition as healthy.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: link
3
- description: Suggest or apply safe wikilinks between vault notes.
4
- mcp_tool: oms_link
3
+ description: Check, suggest, or apply safe vault wikilinks without changing repository bridges.
4
+ mcp_tool: link
5
5
  mcp_args:
6
6
  op: "suggest"
7
7
  notePath: "$1"
@@ -9,11 +9,14 @@ mcp_args:
9
9
 
10
10
  # link
11
11
 
12
- Suggest or apply `[[wikilinks]]` between a note and the vault's term notes.
12
+ Check, suggest, or apply `[[wikilinks]]` between vault notes. Repository bridge
13
+ configuration is a separate CLI-only capability.
13
14
 
14
15
  ## Use when
15
16
 
16
- Use `suggest` before writing or revising a note, or use `apply` to add accepted links to an existing note.
17
+ Use CLI `oms link check` for read-only link validation. Use MCP `link` with
18
+ `op: "suggest"` before writing or revising a note, or `op: "apply"` to add only
19
+ accepted suggestions to an existing note.
17
20
 
18
21
  ## Usage
19
22
 
@@ -22,3 +25,9 @@ Use `suggest` before writing or revising a note, or use `apply` to add accepted
22
25
  ```
23
26
 
24
27
  Link targets are term notes only. Suggestions are surface-anchored, add at most one link per target in a body, and report ambiguous matches rather than resolving them. Applying suggestions writes through the vault write kernel and requires the suggestion's `baseContentHash` and accepted candidate IDs.
28
+
29
+ `oms bridge add|remove|status` manages repository bridges and has no MCP
30
+ operation. Do not route bridge work through `link`, and do not use retired
31
+ command aliases. Checking and suggesting are read-only. Apply only links the
32
+ user accepted; never infer consent from a suggestion and never expose private
33
+ note content.