oh-my-second-brain 0.8.4 → 0.10.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 (319) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +2 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/CHANGELOG-assets.md +13 -1
  5. package/CHANGELOG-cli.md +20 -0
  6. package/CHANGELOG-kernel.md +16 -0
  7. package/CHANGELOG-mcp.md +14 -0
  8. package/CHANGELOG-vendors.md +8 -0
  9. package/CHANGELOG.md +27 -1
  10. package/README.ko.md +57 -100
  11. package/README.md +56 -101
  12. package/assets/claude/CLAUDE.md +16 -20
  13. package/assets/codex/AGENTS.md +14 -9
  14. package/assets/codex/rules/oms.md +11 -12
  15. package/assets/hermes/SOUL.md +11 -13
  16. package/assets/hermes-manifest.json +1 -1
  17. package/assets/skills/doctor/SKILL.md +10 -9
  18. package/assets/skills/search/SKILL.md +10 -20
  19. package/assets/skills/status/SKILL.md +3 -9
  20. package/assets/skills/template/SKILL.md +29 -0
  21. package/assets/skills/write/SKILL.md +20 -14
  22. package/core/AGENTS.md +41 -104
  23. package/dist/cli/args.d.ts +6 -6
  24. package/dist/cli/args.js +67 -32
  25. package/dist/cli/args.js.map +1 -1
  26. package/dist/cli/audit.d.ts +0 -1
  27. package/dist/cli/audit.js +45 -80
  28. package/dist/cli/audit.js.map +1 -1
  29. package/dist/cli/doc-command.d.ts +8 -0
  30. package/dist/cli/doc-command.js +51 -0
  31. package/dist/cli/doc-command.js.map +1 -0
  32. package/dist/cli/doctor-lint.d.ts +1 -1
  33. package/dist/cli/doctor-lint.js +23 -65
  34. package/dist/cli/doctor-lint.js.map +1 -1
  35. package/dist/cli/engine-session.d.ts +15 -0
  36. package/dist/cli/engine-session.js +45 -0
  37. package/dist/cli/engine-session.js.map +1 -0
  38. package/dist/cli/host-commands.d.ts +7 -7
  39. package/dist/cli/host-commands.js +102 -25
  40. package/dist/cli/host-commands.js.map +1 -1
  41. package/dist/cli/index-command.d.ts +8 -0
  42. package/dist/cli/index-command.js +60 -0
  43. package/dist/cli/index-command.js.map +1 -0
  44. package/dist/cli/linkify.d.ts +2 -3
  45. package/dist/cli/linkify.js +9 -9
  46. package/dist/cli/linkify.js.map +1 -1
  47. package/dist/cli/oms.d.ts +1 -1
  48. package/dist/cli/oms.js +53 -38
  49. package/dist/cli/oms.js.map +1 -1
  50. package/dist/cli/search-args.d.ts +13 -0
  51. package/dist/cli/{semantic-args.js → search-args.js} +48 -13
  52. package/dist/cli/search-args.js.map +1 -0
  53. package/dist/cli/search-usage.d.ts +1 -0
  54. package/dist/cli/search-usage.js +25 -0
  55. package/dist/cli/search-usage.js.map +1 -0
  56. package/dist/cli/search.d.ts +10 -0
  57. package/dist/cli/search.js +71 -0
  58. package/dist/cli/search.js.map +1 -0
  59. package/dist/cli/serve-http.d.ts +15 -0
  60. package/dist/cli/{semantic-http.js → serve-http.js} +69 -54
  61. package/dist/cli/serve-http.js.map +1 -0
  62. package/dist/cli/setup-command.d.ts +10 -15
  63. package/dist/cli/setup-command.js +51 -132
  64. package/dist/cli/setup-command.js.map +1 -1
  65. package/dist/cli/usage.js +41 -20
  66. package/dist/cli/usage.js.map +1 -1
  67. package/dist/kernel/capture/safe.d.ts +43 -97
  68. package/dist/kernel/capture/safe.js +288 -517
  69. package/dist/kernel/capture/safe.js.map +1 -1
  70. package/dist/kernel/contracts/index.d.ts +3 -138
  71. package/dist/kernel/contracts/index.js +22 -340
  72. package/dist/kernel/contracts/index.js.map +1 -1
  73. package/dist/kernel/conventions/frontmatter.js +5 -4
  74. package/dist/kernel/conventions/frontmatter.js.map +1 -1
  75. package/dist/kernel/conventions/lint.js +4 -1
  76. package/dist/kernel/conventions/lint.js.map +1 -1
  77. package/dist/kernel/conventions/note-exclude.d.ts +9 -2
  78. package/dist/kernel/conventions/note-exclude.js +105 -14
  79. package/dist/kernel/conventions/note-exclude.js.map +1 -1
  80. package/dist/kernel/conventions/report.d.ts +0 -51
  81. package/dist/kernel/conventions/report.js +36 -204
  82. package/dist/kernel/conventions/report.js.map +1 -1
  83. package/dist/kernel/conventions/write-contract.d.ts +11 -25
  84. package/dist/kernel/conventions/write-contract.js +42 -78
  85. package/dist/kernel/conventions/write-contract.js.map +1 -1
  86. package/dist/kernel/conventions/write-protocol.d.ts +1 -10
  87. package/dist/kernel/conventions/write-protocol.js +1 -1
  88. package/dist/kernel/conventions/write-protocol.js.map +1 -1
  89. package/dist/kernel/doctor/service.d.ts +2 -4
  90. package/dist/kernel/doctor/service.js +14 -13
  91. package/dist/kernel/doctor/service.js.map +1 -1
  92. package/dist/kernel/engine/assemble.d.ts +32 -3
  93. package/dist/kernel/engine/assemble.js +395 -102
  94. package/dist/kernel/engine/assemble.js.map +1 -1
  95. package/dist/kernel/engine/axes/store.js +3 -3
  96. package/dist/kernel/engine/axes/store.js.map +1 -1
  97. package/dist/kernel/engine/embed/config.d.ts +77 -0
  98. package/dist/kernel/engine/embed/config.js +308 -0
  99. package/dist/kernel/engine/embed/config.js.map +1 -0
  100. package/dist/kernel/engine/embed/deferred.d.ts +19 -14
  101. package/dist/kernel/engine/embed/deferred.js +27 -17
  102. package/dist/kernel/engine/embed/deferred.js.map +1 -1
  103. package/dist/kernel/engine/embed/identity.d.ts +14 -12
  104. package/dist/kernel/engine/embed/identity.js +36 -7
  105. package/dist/kernel/engine/embed/identity.js.map +1 -1
  106. package/dist/kernel/engine/embed/model.d.ts +107 -132
  107. package/dist/kernel/engine/embed/model.js +568 -289
  108. package/dist/kernel/engine/embed/model.js.map +1 -1
  109. package/dist/kernel/engine/embed/provider.d.ts +14 -21
  110. package/dist/kernel/engine/embed/provider.js +185 -221
  111. package/dist/kernel/engine/embed/provider.js.map +1 -1
  112. package/dist/kernel/engine/embed/store.d.ts +3 -1
  113. package/dist/kernel/engine/embed/store.js +111 -134
  114. package/dist/kernel/engine/embed/store.js.map +1 -1
  115. package/dist/kernel/engine/embed/sync.d.ts +17 -8
  116. package/dist/kernel/engine/embed/sync.js +167 -63
  117. package/dist/kernel/engine/embed/sync.js.map +1 -1
  118. package/dist/kernel/engine/graph/builder.d.ts +19 -64
  119. package/dist/kernel/engine/graph/builder.js +241 -461
  120. package/dist/kernel/engine/graph/builder.js.map +1 -1
  121. package/dist/kernel/engine/graph/explore.d.ts +4 -4
  122. package/dist/kernel/engine/graph/explore.js +0 -0
  123. package/dist/kernel/engine/graph/explore.js.map +1 -1
  124. package/dist/kernel/engine/graph/node.d.ts +29 -93
  125. package/dist/kernel/engine/graph/node.js +87 -234
  126. package/dist/kernel/engine/graph/node.js.map +1 -1
  127. package/dist/kernel/engine/linkify/suggest.d.ts +0 -9
  128. package/dist/kernel/engine/linkify/suggest.js +0 -11
  129. package/dist/kernel/engine/linkify/suggest.js.map +1 -1
  130. package/dist/kernel/engine/linkify/types.d.ts +1 -3
  131. package/dist/kernel/engine/mcp/facade.d.ts +12 -9
  132. package/dist/kernel/engine/mcp/facade.js +319 -350
  133. package/dist/kernel/engine/mcp/facade.js.map +1 -1
  134. package/dist/kernel/engine/mcp/query-mapper.d.ts +8 -2
  135. package/dist/kernel/engine/mcp/query-mapper.js +67 -9
  136. package/dist/kernel/engine/mcp/query-mapper.js.map +1 -1
  137. package/dist/kernel/engine/mcp/types.d.ts +44 -2
  138. package/dist/kernel/engine/paths.d.ts +2 -0
  139. package/dist/kernel/engine/paths.js +6 -0
  140. package/dist/kernel/engine/paths.js.map +1 -0
  141. package/dist/kernel/engine/retrieval/dispatcher.d.ts +27 -6
  142. package/dist/kernel/engine/retrieval/dispatcher.js +70 -6
  143. package/dist/kernel/engine/retrieval/dispatcher.js.map +1 -1
  144. package/dist/kernel/engine/retrieval/generator.d.ts +64 -0
  145. package/dist/kernel/engine/retrieval/generator.js +319 -0
  146. package/dist/kernel/engine/retrieval/generator.js.map +1 -0
  147. package/dist/kernel/engine/retrieval/index.d.ts +6 -4
  148. package/dist/kernel/engine/retrieval/index.js +3 -3
  149. package/dist/kernel/engine/retrieval/index.js.map +1 -1
  150. package/dist/kernel/engine/retrieval/passthrough.test-helper.d.ts +32 -0
  151. package/dist/kernel/engine/retrieval/passthrough.test-helper.js +35 -0
  152. package/dist/kernel/engine/retrieval/passthrough.test-helper.js.map +1 -0
  153. package/dist/kernel/engine/retrieval/reranker.d.ts +12 -17
  154. package/dist/kernel/engine/retrieval/reranker.js +116 -16
  155. package/dist/kernel/engine/retrieval/reranker.js.map +1 -1
  156. package/dist/kernel/engine/retrieval/taxonomy-context.d.ts +24 -0
  157. package/dist/kernel/engine/retrieval/taxonomy-context.js +96 -0
  158. package/dist/kernel/engine/retrieval/taxonomy-context.js.map +1 -0
  159. package/dist/kernel/engine/tracer.d.ts +1 -3
  160. package/dist/kernel/engine/tracer.js +46 -34
  161. package/dist/kernel/engine/tracer.js.map +1 -1
  162. package/dist/kernel/engine/types.d.ts +30 -6
  163. package/dist/kernel/engine/types.js.map +1 -1
  164. package/dist/kernel/graph/cache.d.ts +1 -84
  165. package/dist/kernel/graph/cache.js +5 -438
  166. package/dist/kernel/graph/cache.js.map +1 -1
  167. package/dist/kernel/graph/explore.d.ts +32 -24
  168. package/dist/kernel/graph/explore.js +32 -101
  169. package/dist/kernel/graph/explore.js.map +1 -1
  170. package/dist/kernel/harness/surface-registry.js +11 -12
  171. package/dist/kernel/harness/surface-registry.js.map +1 -1
  172. package/dist/kernel/index.d.ts +0 -4
  173. package/dist/kernel/index.js +0 -4
  174. package/dist/kernel/index.js.map +1 -1
  175. package/dist/kernel/install/hosts.d.ts +1 -0
  176. package/dist/kernel/install/hosts.js +1 -0
  177. package/dist/kernel/install/hosts.js.map +1 -1
  178. package/dist/kernel/install/pointer.d.ts +28 -0
  179. package/dist/kernel/install/pointer.js +232 -0
  180. package/dist/kernel/install/pointer.js.map +1 -0
  181. package/dist/kernel/link/convention-note.js +2 -2
  182. package/dist/kernel/link/convention-note.js.map +1 -1
  183. package/dist/kernel/link/link.d.ts +4 -2
  184. package/dist/kernel/link/link.js +6 -4
  185. package/dist/kernel/link/link.js.map +1 -1
  186. package/dist/kernel/link/workflow.d.ts +17 -7
  187. package/dist/kernel/link/workflow.js +66 -56
  188. package/dist/kernel/link/workflow.js.map +1 -1
  189. package/dist/kernel/measurement/no-default-contract.d.ts +1 -1
  190. package/dist/kernel/measurement/no-default-contract.js +2 -2
  191. package/dist/kernel/measurement/no-default-contract.js.map +1 -1
  192. package/dist/kernel/runtime/assets.d.ts +3 -14
  193. package/dist/kernel/runtime/assets.js +9 -37
  194. package/dist/kernel/runtime/assets.js.map +1 -1
  195. package/dist/kernel/search/morning-test-fixtures.js +22 -27
  196. package/dist/kernel/search/morning-test-fixtures.js.map +1 -1
  197. package/dist/kernel/searchbackend/engine-search-backend.d.ts +1 -0
  198. package/dist/kernel/searchbackend/engine-search-backend.js +48 -8
  199. package/dist/kernel/searchbackend/engine-search-backend.js.map +1 -1
  200. package/dist/kernel/searchbackend/search-backend.d.ts +3 -1
  201. package/dist/kernel/searchbackend/search-backend.js +45 -8
  202. package/dist/kernel/searchbackend/search-backend.js.map +1 -1
  203. package/dist/kernel/semantic/semantic-engine.d.ts +11 -12
  204. package/dist/kernel/semantic/semantic-engine.js +35 -50
  205. package/dist/kernel/semantic/semantic-engine.js.map +1 -1
  206. package/dist/kernel/semantic/semantic-retrieve-args.d.ts +2 -1
  207. package/dist/kernel/semantic/semantic-retrieve-args.js +27 -0
  208. package/dist/kernel/semantic/semantic-retrieve-args.js.map +1 -1
  209. package/dist/kernel/semantic/semantic-retrieve-schema.d.ts +4 -2
  210. package/dist/kernel/semantic/semantic-retrieve-schema.js +2 -2
  211. package/dist/kernel/semantic/semantic-retrieve-schema.js.map +1 -1
  212. package/dist/kernel/semantic/semantic-retrieve.js +2 -2
  213. package/dist/kernel/semantic/semantic-retrieve.js.map +1 -1
  214. package/dist/kernel/semantic/semantic-tool-schemas.js +13 -1
  215. package/dist/kernel/semantic/semantic-tool-schemas.js.map +1 -1
  216. package/dist/kernel/setup/documents.d.ts +25 -14
  217. package/dist/kernel/setup/documents.js +10 -111
  218. package/dist/kernel/setup/documents.js.map +1 -1
  219. package/dist/kernel/setup/service.d.ts +19 -35
  220. package/dist/kernel/setup/service.js +33 -86
  221. package/dist/kernel/setup/service.js.map +1 -1
  222. package/dist/kernel/templates/axes.d.ts +29 -0
  223. package/dist/kernel/templates/axes.js +45 -0
  224. package/dist/kernel/templates/axes.js.map +1 -0
  225. package/dist/kernel/templates/canonical.d.ts +8 -0
  226. package/dist/kernel/templates/canonical.js +193 -0
  227. package/dist/kernel/templates/canonical.js.map +1 -0
  228. package/dist/kernel/templates/defaults.d.ts +17 -0
  229. package/dist/kernel/templates/defaults.js +127 -0
  230. package/dist/kernel/templates/defaults.js.map +1 -0
  231. package/dist/kernel/templates/doctor.d.ts +40 -0
  232. package/dist/kernel/templates/doctor.js +226 -0
  233. package/dist/kernel/templates/doctor.js.map +1 -0
  234. package/dist/kernel/templates/extract.d.ts +31 -0
  235. package/dist/kernel/templates/extract.js +136 -0
  236. package/dist/kernel/templates/extract.js.map +1 -0
  237. package/dist/kernel/templates/index.d.ts +19 -0
  238. package/dist/kernel/templates/index.js +11 -0
  239. package/dist/kernel/templates/index.js.map +1 -0
  240. package/dist/kernel/templates/migration.d.ts +63 -0
  241. package/dist/kernel/templates/migration.js +733 -0
  242. package/dist/kernel/templates/migration.js.map +1 -0
  243. package/dist/kernel/templates/naming.d.ts +10 -0
  244. package/dist/kernel/templates/naming.js +47 -0
  245. package/dist/kernel/templates/naming.js.map +1 -0
  246. package/dist/kernel/templates/note-index.d.ts +33 -0
  247. package/dist/kernel/templates/note-index.js +125 -0
  248. package/dist/kernel/templates/note-index.js.map +1 -0
  249. package/dist/kernel/templates/paths.d.ts +29 -0
  250. package/dist/kernel/templates/paths.js +132 -0
  251. package/dist/kernel/templates/paths.js.map +1 -0
  252. package/dist/kernel/templates/policy.d.ts +59 -0
  253. package/dist/kernel/templates/policy.js +308 -0
  254. package/dist/kernel/templates/policy.js.map +1 -0
  255. package/dist/kernel/templates/resolver.d.ts +23 -0
  256. package/dist/kernel/templates/resolver.js +627 -0
  257. package/dist/kernel/templates/resolver.js.map +1 -0
  258. package/dist/kernel/templates/transaction.d.ts +8 -0
  259. package/dist/kernel/templates/transaction.js +452 -0
  260. package/dist/kernel/templates/transaction.js.map +1 -0
  261. package/dist/kernel/templates/types.d.ts +368 -0
  262. package/dist/kernel/{ontology → templates}/types.js.map +1 -1
  263. package/dist/kernel/update/update.js +1 -1
  264. package/dist/kernel/update/update.js.map +1 -1
  265. package/dist/mcp/link-tools.d.ts +3 -4
  266. package/dist/mcp/link-tools.js +3 -18
  267. package/dist/mcp/link-tools.js.map +1 -1
  268. package/dist/mcp/server.js +397 -234
  269. package/dist/mcp/server.js.map +1 -1
  270. package/dist/vendors/claude/claude-hooks.js +24 -6
  271. package/dist/vendors/claude/claude-hooks.js.map +1 -1
  272. package/dist/vendors/claude/hook/post-tool-use.d.ts +2 -11
  273. package/dist/vendors/claude/hook/post-tool-use.js +48 -81
  274. package/dist/vendors/claude/hook/post-tool-use.js.map +1 -1
  275. package/docs/architecture.md +45 -0
  276. package/docs/conventions.md +77 -0
  277. package/docs/install.md +63 -134
  278. package/docs/verified-target.md +51 -0
  279. package/package.json +5 -3
  280. package/core/ontology/concepts/inbox.yaml +0 -4
  281. package/core/ontology/concepts/literature.yaml +0 -27
  282. package/core/ontology/concepts/term.yaml +0 -12
  283. package/core/ontology/schemas/README.md +0 -55
  284. package/core/ontology/schemas/concept.schema.yaml +0 -70
  285. package/core/ontology/schemas/note.schema.yaml +0 -40
  286. package/core/ontology/taxonomy.yaml +0 -14
  287. package/dist/cli/semantic-args.d.ts +0 -13
  288. package/dist/cli/semantic-args.js.map +0 -1
  289. package/dist/cli/semantic-http.d.ts +0 -11
  290. package/dist/cli/semantic-http.js.map +0 -1
  291. package/dist/cli/semantic-usage.d.ts +0 -1
  292. package/dist/cli/semantic-usage.js +0 -20
  293. package/dist/cli/semantic-usage.js.map +0 -1
  294. package/dist/cli/semantic.d.ts +0 -9
  295. package/dist/cli/semantic.js +0 -189
  296. package/dist/cli/semantic.js.map +0 -1
  297. package/dist/kernel/conventions/validate.d.ts +0 -24
  298. package/dist/kernel/conventions/validate.js +0 -88
  299. package/dist/kernel/conventions/validate.js.map +0 -1
  300. package/dist/kernel/engine/conventions/vault-lint.d.ts +0 -112
  301. package/dist/kernel/engine/conventions/vault-lint.js +0 -213
  302. package/dist/kernel/engine/conventions/vault-lint.js.map +0 -1
  303. package/dist/kernel/engine/linkify/apply.d.ts +0 -56
  304. package/dist/kernel/engine/linkify/apply.js +0 -65
  305. package/dist/kernel/engine/linkify/apply.js.map +0 -1
  306. package/dist/kernel/ontology/active.d.ts +0 -7
  307. package/dist/kernel/ontology/active.js +0 -41
  308. package/dist/kernel/ontology/active.js.map +0 -1
  309. package/dist/kernel/ontology/loader.d.ts +0 -2
  310. package/dist/kernel/ontology/loader.js +0 -54
  311. package/dist/kernel/ontology/loader.js.map +0 -1
  312. package/dist/kernel/ontology/resolver.d.ts +0 -2
  313. package/dist/kernel/ontology/resolver.js +0 -23
  314. package/dist/kernel/ontology/resolver.js.map +0 -1
  315. package/dist/kernel/ontology/types.d.ts +0 -47
  316. package/dist/kernel/setup/axis.d.ts +0 -36
  317. package/dist/kernel/setup/axis.js +0 -232
  318. package/dist/kernel/setup/axis.js.map +0 -1
  319. /package/dist/kernel/{ontology → templates}/types.js +0 -0
@@ -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.8.4",
13
+ "version": "0.10.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.8.4"
40
+ "version": "0.10.0"
41
41
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oms",
3
- "version": "0.8.4",
3
+ "version": "0.10.0",
4
4
  "description": "Oh My Second Brain convention layer for Obsidian vaults — capture, retrieve, and validate knowledge under a declared semantic convention.",
5
5
  "author": {
6
6
  "name": "gobeumsu"
@@ -20,6 +20,7 @@
20
20
  "./assets/skills/link/",
21
21
  "./assets/skills/search/",
22
22
  "./assets/skills/status/",
23
+ "./assets/skills/template/",
23
24
  "./assets/skills/write/"
24
25
  ]
25
26
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oms",
3
- "version": "0.8.4",
3
+ "version": "0.10.0",
4
4
  "description": "Oh My Second Brain convention layer for Obsidian vaults — Codex native rules, skills, and MCP adapter.",
5
5
  "_note": "oms install writes Codex MCP config, installs ~/.codex/rules/oms.md, and installs ~/.codex/skills/oms-*.",
6
6
  "skills": "./assets/skills/",
@@ -1,9 +1,21 @@
1
1
  # Assets Changelog
2
2
 
3
- Skills, agents, and ontology data changes belong here.
3
+ Skills, agents, templates, and host guidance changes belong here.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.10.0] - 2026-09-01
8
+
9
+ ### Changed
10
+
11
+ - **The `/search` skill now documents an explicit `strategy` in `oms_search` calls with `op: "query"`.** Its frontmatter is unchanged.
12
+
13
+ ## [0.9.0] - 2026-08-31
14
+
15
+ ### Changed
16
+
17
+ - **The seven shared skills, including the tool-less template authoring workflow, now teach stable template IDs, derived axes, explicit repair approval, and template/ontology coexistence.** Claude, Codex, and Hermes guidance separates template-owned shape from user-owned note/field/folder/link meaning. It no longer describes `concept` identity, personas, retrieval lenses, hand-edited projection state, or bundled note-type defaults.
18
+
7
19
  ## [0.8.4] - 2026-08-30
8
20
 
9
21
  ## [0.8.3] - 2026-08-29
package/CHANGELOG-cli.md CHANGED
@@ -4,6 +4,26 @@ Changes to the `oms` command surface belong here.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.10.0] - 2026-09-01
8
+
9
+ ### Breaking
10
+
11
+ - **OMS now has one search taxonomy.** `oms semantic` and the old top-level collection, context, cleanup, and HTTP aliases are removed; use `oms search`, `oms doc get|multi-get`, `oms embed`, and `oms serve`. `oms index` contains exactly `sync|status|cleanup|collections|contexts`; embedding remains the compact top-level `oms embed` command.
12
+ - **Setup model options have changed.** `--embedding-*` is replaced by `--models-default`, `--models-descriptor`, and `--models-no-default`.
13
+ - **The embedding runtime is local-only.** The former Upstage provider path is removed; configured model identities must resolve to verified local GGUF artifacts.
14
+
15
+ ### Added
16
+
17
+ - **Search now uses an explicit closed qmd-v2.8.3 expansion strategy.** `--max-queries` is strict, reranking is opt-in, and local model-set descriptors are supported.
18
+ - **`oms serve` exposes only the canonical HTTP endpoints.** `/health`, `/search`, `/get`, and `/multi-get` remain; no query alias or second MCP tool surface is advertised.
19
+
20
+ ## [0.9.0] - 2026-08-31
21
+
22
+ ### Changed
23
+
24
+ - **`setup`, `doctor`, `audit`, and `linkify` now expose the template contract directly.** Setup uses dry-run plus `--approved-digest`, doctor reports template/projection health and renames the report cap to `--max-per-template`, audit fails closed against resolved template identities, and linkify uses the same stable identities as write/search. Retired Concept authoring and `--suggest-fields` are no longer accepted.
25
+ - **Host lifecycle commands now maintain a strict signed XDG vault pointer.** `install`, `update`, public `reconcile`, and `uninstall` compare-and-swap host stamps without affecting runtime vault resolution; `--template-folder` is also bound into setup discovery and its approval digest.
26
+
7
27
  ## [0.8.4] - 2026-08-30
8
28
 
9
29
  ## [0.8.3] - 2026-08-29
@@ -4,6 +4,22 @@ Domain logic changes belong here.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.10.0] - 2026-09-01
8
+
9
+ ### Changed
10
+
11
+ - **The kernel now manages model lifecycle explicitly and carries active-template taxonomy context through the canonical engine search path.** It reports unavailable capabilities honestly instead of silently claiming support.
12
+ - **Local model execution now has one strict lifecycle.** Vault model selection outranks setup defaults, GGUF contexts wait for admitted work before disposal, cross-encoder reranking receives bounded note content rather than filenames, and the inconsistent Upstage branch is removed.
13
+
14
+ ## [0.9.0] - 2026-08-31
15
+
16
+ ### Changed
17
+
18
+ - **The domain kernel now keeps template shape and ontology meaning separate end to end.** Vault-resident Markdown templates own frontmatter/body shape; template policy carries note/field `intent`, naming, and defaults; taxonomy carries folder/link `intent` and placement; and Obsidian owns property types. They resolve into one signed projection shared by write, graph, link, search, setup, migration, diagnosis, and repair. Field intent is retained on search axes and folder intent is exposed through the derived `folder-ontology` axis. Legacy `concept` identity, bundled ontology runtime loaders, old capture APIs, writable projection contracts, graph cache, and fallback behavior were removed; managed template sources stay outside note indexes and embeddings.
19
+ - **Template migration and repair are guarded transactions.** Setup discovers existing templates and publishes only after an explicit approval digest; projection regeneration, template mutation, relocation/reclassification, and one-note identity backfill use verified targets, compare-and-swap expectations, and read-back postcondition receipts.
20
+ - **Migration now preserves legacy meaning while cutting over synchronously.** URL formats, enum/immutable field semantics, retrieval views, legacy type/allowed-value/axis contracts, unknown extensions, string/list/null taxonomy cardinality, raw source bytes, and provenance survive translation; one-to-many legacy routes materialize deterministic stable template clones. Unmarked managed-folder notes block activation. Durable checksummed plans can resume after interruption, invalid markers fail closed, taxonomy owns placement, and unbound templates route to the safe `Inbox/` fallback rather than their source folder.
21
+ - **Template rendering uses one exact source layout and instant.** `{{date}}` and `{{time}}` render as UTC `YYYY-MM-DD` and `HH:mm`, title-dependent templates require a non-empty title, only a standalone content-marker line is replaced, and BOM/EOL/final-newline semantics flow from the resolved source.
22
+
7
23
  ## [0.8.4] - 2026-08-30
8
24
 
9
25
  ## [0.8.3] - 2026-08-29
package/CHANGELOG-mcp.md CHANGED
@@ -4,6 +4,20 @@ MCP server tools and resources belong here.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.10.0] - 2026-09-01
8
+
9
+ ### Changed
10
+
11
+ - **`oms_search` query now accepts the closed `strategy`, `maxQueries`, `rerank`, and `candidateLimit` controls.** Query budgets are strict integers, expansion is not advertised on context retrieval, and these controls remain on the existing tool; no additional public search tool was added.
12
+
13
+ ## [0.9.0] - 2026-08-31
14
+
15
+ ### Changed
16
+
17
+ - **The five-tool MCP surface now uses stable templates for every note-shaped operation.** `oms_write` has strict create/append/update branches: create derives placement from `templateId`, while append/update resolve the persisted note identity; guarded template operations remain on the same tool. `oms_search` advertises template/field/folder/link axes; `oms_status` reports projection signatures; and `oms_doctor` adds template diagnosis, approved projection regeneration, and exact one-note backfill without adding public tools.
18
+ - **Graph, link, and search paths share one resolved convention.** Typed retrieval omits and reports unresolved note identities instead of failing the whole index, stale projections fail loudly, managed template sources are excluded, and every advertised search operation remains byte-identical read-only.
19
+ - **Doctor and template mutation use exact public operations and durable recovery.** Doctor exposes `validate`, `regenerate-types`, and `backfill-defaults`; interrupted template transactions resume by persisted transaction ID and the original approved digest instead of reconstructing mutable caller state.
20
+
7
21
  ## [0.8.4] - 2026-08-30
8
22
 
9
23
  ## [0.8.3] - 2026-08-29
@@ -4,6 +4,14 @@ Per-host adapter and installer changes belong here.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.10.0] - 2026-09-01
8
+
9
+ ## [0.9.0] - 2026-08-31
10
+
11
+ ### Changed
12
+
13
+ - **Claude, Codex, and Hermes host guidance and hooks now describe the template/ontology coexistence contract.** Templates own note shape, user-owned policy/taxonomy intent owns meaning, taxonomy owns placement, and Obsidian owns types. A signed XDG host-maintenance pointer lets install, update, public reconcile, and uninstall compare-and-swap every managed MCP/hook vault stamp while remaining completely outside runtime target resolution. Claude post-write checks resolve templates without rebuilding caches.
14
+
7
15
  ## [0.8.4] - 2026-08-30
8
16
 
9
17
  ## [0.8.3] - 2026-08-29
package/CHANGELOG.md CHANGED
@@ -6,10 +6,36 @@ This aggregate changelog contains changes that span multiple layers.
6
6
  - [CLI changelog](./CHANGELOG-cli.md) — the `oms` command surface
7
7
  - [MCP changelog](./CHANGELOG-mcp.md) — MCP server tools and resources
8
8
  - [Vendors changelog](./CHANGELOG-vendors.md) — per-host adapters and installers
9
- - [Assets changelog](./CHANGELOG-assets.md) — skills, agents, and ontology data
9
+ - [Assets changelog](./CHANGELOG-assets.md) — skills, agents, templates, and host guidance
10
10
 
11
11
  ## [Unreleased]
12
12
 
13
+ ## [0.10.0] - 2026-09-01
14
+
15
+ ### Breaking
16
+
17
+ - **OMS now has one search taxonomy.** `oms semantic` and the old top-level collection, context, cleanup, and HTTP aliases are removed; use `oms search`, `oms doc get|multi-get`, `oms embed`, and `oms serve`. `oms index` contains exactly `sync|status|cleanup|collections|contexts`; embedding remains the compact top-level `oms embed` command.
18
+ - **Setup model options have changed.** `--embedding-*` is replaced by `--models-default`, `--models-descriptor`, and `--models-no-default`.
19
+ - **The embedding runtime is local-only.** The former Upstage provider path is removed; configured model identities must resolve to verified local GGUF artifacts.
20
+
21
+ ### Added
22
+
23
+ - **Search now uses an explicit closed qmd-v2.8.3 expansion strategy.** `--max-queries` is strict, reranking is opt-in, and local model-set descriptors are supported.
24
+ - **`oms serve` exposes only `/health`, `/search`, `/get`, and `/multi-get`.** It does not add a query alias or a second MCP tool surface.
25
+
26
+ ### Changed
27
+
28
+ - **The kernel makes model lifecycle and capability availability explicit.** The canonical engine path carries active-template taxonomy context into search rather than silently claiming unavailable capabilities.
29
+ - **Model-bearing work is lifecycle-safe and content-aware.** Vault selection outranks setup defaults, GGUF disposal waits for admitted work, and reranking scores bounded note content instead of filenames.
30
+ - **MCP search accepts `strategy`, `maxQueries`, `rerank`, and `candidateLimit` through the existing `oms_search` tool.** No additional public search tool was added.
31
+ - **The `/search` skill now calls `oms_search` with `op: "query"` and an explicit strategy.** Its frontmatter is unchanged.
32
+
33
+ ## [0.9.0] - 2026-08-31
34
+
35
+ ### Changed
36
+
37
+ - **Oh My Second Brain now derives one write/search contract from templates and a coexisting user-owned ontology.** Vault Markdown templates own frontmatter/body shape; template policy owns note/field meaning, naming, and defaults; taxonomy owns folder/link meaning and placement; and Obsidian owns property types. The synchronized kernel, CLI, MCP, host, skill, setup, migration, diagnosis, and documentation cutover removes only the former `concept` note identity and bundled runtime authority. Stable template identities, inherited base defaults, managed-source exclusion, verified repair transactions, and host pointer reconciliation now work consistently across all supported environments.
38
+
13
39
  ## [0.8.4] - 2026-08-30
14
40
 
15
41
  ### Documentation
package/README.ko.md CHANGED
@@ -1,87 +1,68 @@
1
1
  # Oh My Second Brain
2
2
 
3
- > Obsidian 일반 마크다운 지식 볼트를 위한, 호스트에 종속되지 않고 사용자가 소유하는 컨벤션 레이어.
3
+ Oh My Second Brain(`oms`)은 기존 Obsidian/Markdown 볼트를 노트 소유권을 빼앗지 않고 AI 호스트에 연결한다. 볼트는 계속 평범한 Markdown이다.
4
4
 
5
- [English](./README.md) · **한국어**
5
+ ## 템플릿·온톨로지 볼트 모델
6
6
 
7
- [![npm](https://img.shields.io/npm/v/oh-my-second-brain)](https://www.npmjs.com/package/oh-my-second-brain)
8
- ![license](https://img.shields.io/npm/l/oh-my-second-brain)
7
+ - 볼트에 실제로 존재하는 Obsidian `.md` 템플릿이 관리 노트의 frontmatter 형태와 본문 골격을 소유한다.
8
+ - 각 템플릿은 경로·digest와 독립적인 안정적 `templateId`를 가지며, 볼트 전체의 `BaseContract` 하나를 상속한다.
9
+ - `.obsidian/types.json`은 읽기 전용 타입 권위다.
10
+ - 사용자 소유 온톨로지는 계속 활성 상태다. `.oms/template-policy.json`은 노트·필드 의미와 필수값, 형식, 허용값, 기본값, 이름 규칙, 정체성, 바인딩을 기록한다.
11
+ - `.oms/taxonomy.yaml`은 폴더·링크 의미와 배치를 소유하며, 작성된 폴더 의미는 `folder-ontology` 검색 축으로 노출된다.
12
+ - `.oms/types.json`은 쓰기·검색용 검증된 파생 projection이다. 직접 편집하지 않는다.
9
13
 
10
- Oh My Second Brain(`oms`)은 기존 Obsidian/마크다운 볼트를 에이전트가 읽을 있는 지식 베이스로 만든다. 볼트가 가진 고유한 폴더/프론트매터 컨벤션을 로드하고, 그에 맞게 노트를 검증하고, 로컬 링크 그래프를 만들고, 이 모든 것을 단일 MCP 서버를 통해 AI 코딩 호스트(Claude Code, Codex, Hermes)에 노출한다. 특정 호스트에 종속되지 않으며 노트를 다른 곳으로 옮기지도 않는다.
14
+ 제거된 것은 노트 정체성으로서의 `concept`와 번들 runtime 기본값이지, 의미 계층으로서의 온톨로지가 아니다.
11
15
 
12
- **컨벤션 우선, 사용자 소유**가 원칙이다. 볼트는 그대로 일반 마크다운으로 남고, 온톨로지는 사용자가 통제하는 커밋된 `.oms/` 폴더에 살며, 어떤 것도 독점 저장소 뒤에 숨지 않는다.
16
+ ## 설정
13
17
 
14
- ## 동작 방식
15
-
16
- ```
17
- core (한 번만 작성) adapters (호스트마다 하나)
18
- 온톨로지 로딩 claude-code .claude-plugin + CLAUDE.md /sigil
19
- 컨벤션 검증 + codex .codex-plugin + AGENTS.md $sigil
20
- 그래프 + 시맨틱 런타임 hermes manifest.json + SOUL.md (MCP/tools)
21
- MCP 서버 (capture/retrieve/validate)
22
- ```
23
-
24
- - **core**는 호스트에 독립적이다: 온톨로지, 검증, 그래프/시맨틱 엔진, MCP 서버.
25
- - 각 **adapter**는 호스트 하나의 구조적 차이(매니페스트 스키마, 컨벤션 파일, 호출 sigil)만 흡수한다. 호스트를 추가한다는 건 core를 건드리는 게 아니라 adapter 디렉터리 하나를 더하는 일이다.
26
- - 호스트 간 연결 메커니즘은 모든 호스트가 함께 쓰는 단일 **MCP 서버**(`oms mcp`)다.
27
-
28
- ## 요구 사항
29
-
30
- - Node.js 20 이상
31
- - `PATH`에 `npm`
32
- - Obsidian 볼트 또는 마크다운 노트 폴더
33
- - (선택) 호스트 CLI: `claude`, `codex`, `hermes`
34
- - (선택) [시맨틱 검색](#시맨틱-검색-선택)용 임베딩 백엔드
35
-
36
- ## 설치
37
-
38
- 원라인 설치(게시된 npm 패키지 사용):
39
-
40
- ```bash
41
- curl -fsSL https://raw.githubusercontent.com/GoBeromsu/oh-my-second-brain/main/scripts/install.sh | bash
42
- ```
43
-
44
- 호스트를 선택하고 볼트를 지정:
45
-
46
- ```bash
47
- curl -fsSL https://raw.githubusercontent.com/GoBeromsu/oh-my-second-brain/main/scripts/install.sh | bash -s -- --runtime all --vault /path/to/vault
48
- ```
49
-
50
- 또는 npm으로:
18
+ Setup은 기존 템플릿을 재귀 탐색하고 migration을 제안한다. 노트 타입 기본값을 번들로 강요하지 않으며 노트를 수정하지 않는다.
51
19
 
52
20
  ```bash
53
- npm install -g oh-my-second-brain
54
- oms install --runtime all --vault /path/to/vault --dry-run # 미리보기
55
- oms install --runtime all --vault /path/to/vault --yes # 적용
21
+ oms setup --vault /path/to/vault --dry-run
22
+ oms setup --vault /path/to/vault --yes --approved-digest <표시된-digest>
56
23
  ```
57
24
 
58
- 전체 가이드: [docs/install.md](./docs/install.md).
59
-
60
- ## 호스트
61
-
62
- | 호스트 | 매니페스트 | 컨벤션 파일 | Sigil | 상태 |
63
- |------|----------|-----------|-------|--------|
64
- | **claude-code** | `.claude-plugin/plugin.json` | `CLAUDE.md` | `/` | 설치 가능 |
65
- | **codex** | `.codex-plugin/plugin.json` | `AGENTS.md` | `$` | 네이티브 스킬 + MCP |
66
- | **hermes** | `manifest.json` | `SOUL.md` | (MCP/tools) | 네이티브 스킬 + MCP |
67
-
68
- `oms install`은 호스트 네이티브 규칙/스킬과 관리형 `oms` MCP 등록을 작성하며, `oms uninstall`로 되돌릴 수 있다.
25
+ 관리 템플릿 변경도 dry-run, 호출자가 검토한 정확한 digest, CAS, transaction, 사후조건 receipt를 거친다.
69
26
 
70
27
  ## CLI
71
28
 
72
- ```
73
- oms setup 기존 볼트를 컨벤션으로 채택 (.oms/taxonomy.yaml 작성, 노트는 수정하지 않음)
74
- oms install 호스트 어댑터 + MCP 등록 설치
75
- oms uninstall 호스트 어댑터 + MCP 등록 제거
29
+ ```text
30
+ oms setup 기존 볼트 템플릿 탐색 채택
31
+ oms install 호스트 어댑터와 관리형 MCP 등록 설치
32
+ oms uninstall 호스트 어댑터와 관리형 MCP 등록 제거
76
33
  oms update 패키지 업데이트 확인/적용 후 어댑터 재조정
77
- oms doctor 온톨로지 기준으로 노트 frontmatter 검증 (필드/컨셉별 집계)
78
- oms lint 볼트 링크 건강도 점검: 깨진 [[wikilink]] + 고아 노트
79
- oms semantic 네이티브 마크다운 시맨틱 인덱스 / 검색 / 조회
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|cleanup|collections|contexts
40
+ oms doc get|multi-get
41
+ oms serve 로컬 검색 HTTP 서버 시작
80
42
  oms mcp stdio MCP 서버 시작
81
- oms hook 볼트 가드 훅 (Claude Code pre/post tool-use)
43
+ oms hook Claude pre/post tool-use 볼트 가드 실행
82
44
  ```
83
45
 
84
- `oh-my-second-brain`이 정식 명령이고, `oms`는 짧은 별칭이다.
46
+ `oh-my-second-brain`이 전체 명령이고 `oms`는 짧은 별칭이다.
47
+
48
+ `oms search <text>`는 lexical-only다. `--vec`, `--hyde`는 각각의 typed
49
+ channel을 선택하고, `--expand`는 G004 expansion을 명시적으로 켜며,
50
+ `--max-queries`는 1부터 32까지의 정수만 받는다. `--rerank`도 opt-in이다.
51
+ `oms embed`가 유일한 embedding 명령이며 `oms index`에는 embedding
52
+ subcommand가 없다.
53
+
54
+ Vector 검색에는 검증된 로컬 embedding capability가 필요하다. 선택 경로는
55
+ 완전한 `OMS_EMBEDDING_PROVIDER`/`OMS_EMBEDDING_MODEL` 쌍, vault의
56
+ `.oms/models.json`과 검증된 설치 receipt, 또는 setup-installed default다.
57
+ HyDE에는 resolved generate capability가, reranking에는 resolved rerank
58
+ capability가 필요하다. 각각의 완전한 환경변수 쌍은
59
+ `OMS_GENERATE_PROVIDER`/`OMS_GENERATE_MODEL`과
60
+ `OMS_RERANK_PROVIDER`/`OMS_RERANK_MODEL`이다. 누락되거나 불완전하거나
61
+ 설치되지 않은 선택은 크게 실패한다. G004
62
+ expansion은 명시적으로 사용할 수 있는 기능이며, 교체·parity·outperformance를
63
+ 주장하지 않는다.
64
+ Setup에서는 로컬 검증 acquisition 정책 하나를 선택한다:
65
+ `--models-default`, `--models-descriptor <path>`, `--models-no-default`.
85
66
 
86
67
  ## MCP 도구
87
68
 
@@ -89,47 +70,23 @@ oms hook 볼트 가드 훅 (Claude Code pre/post tool-use)
89
70
 
90
71
  `oms_write` · `oms_search` · `oms_link` · `oms_status` · `oms_doctor`
91
72
 
92
- `oms_write`는 경로 안전성, 볼트 격리, 커널이 소유한 컨셉 계약으로 게이트된다.
93
-
94
- ## 볼트 구조 (`.oms/`)
95
-
96
- `oms setup`은 볼트를 커밋된 `.oms/` 폴더로 채택하며, 두 개의 레이어를 둔다(ADR-006):
97
-
98
- - **Contract (기계 검증)** — `taxonomy.yaml`(폴더 → intent → concept)와 `concepts/*.yaml`(노트 타입별 프론트매터 선언). `vault-lint`와 `oms_validate_contract`가 강제한다.
99
- - **Governance (사람 의도)** — `governance/`의 ADR과 규칙. 기계가 파싱하지 않는다.
100
- - `.oms/cache/`(파생 그래프/임베딩 아티팩트)는 gitignore된다.
101
-
102
- `setup`은 `.oms/taxonomy.yaml`을 작성하고 기존 `.oms/concepts/`를 보존하며, 노트는 절대 수정하지 않는다.
73
+ 일곱 스킬(`write`, `search`, `link`, `distill`, `status`, `doctor`, `template`)은 워크플로 안내이며 MCP 도구와 같은 집합이 아니다. 세부 기능은 다섯 도구의 `op` 값으로 제공한다.
103
74
 
104
- ## 시맨틱 검색 (선택)
75
+ 쓰기는 하나의 `ResolvedTemplate`을 해석해 create, append, update를 수행한다. 템플릿 변경, projection 재생성, 한 노트 정체성 backfill은 검증된 target과 명시적 승인 digest가 필요하다. `status`와 모든 검색 동작은 읽기 전용이다.
105
76
 
106
- 시맨틱 검색에는 실제 임베딩 모델이 필요하다 프로덕션 경로에 가짜/해시 폴백은 없다(ADR-007). 가장 간단한 경로는 고정된 로컬 기본 모델이다:
77
+ 일반 lexical 검색은 projection과 독립적이다. 템플릿·선언 필드·폴더·링크 축은 쓰기와 같은 projection을 사용하며 누락·stale 상태를 크게 실패시킨다. 관리 템플릿 원본은 검색 대상에서 제외한다. Vector/HyDE는 provider와 model이 모두 설정되지 않으면 가짜 대체 없이 실패한다.
107
78
 
108
- ```bash
109
- oms setup --vault /path/to/vault --yes --embedding-default
110
- oms embed --vault /path/to/vault
111
- oms semantic vsearch "무엇을 찾아야 하나?" --vault /path/to/vault
112
- ```
113
-
114
- `--embedding-default`는 EmbeddingGemma-300M(약 318 MB)을 내려받아 핀 고정된 SHA-256으로 검증한 뒤, 볼트가 아니라 사용자 캐시 디렉터리에 설치한다. `node-llama-cpp`로 로컬 실행되므로 API 키가 필요 없고, 모델 원본 768차원을 폴딩 없이 그대로 사용한다. 이후 `oms embed`와 벡터 검색은 환경변수 없이 동작한다.
115
-
116
- 의존하기 전에 알아둘 점이 하나 있다. 이 모델과 프롬프트 형식은 [qmd](https://github.com/tobi/qmd)가 기본으로 쓰는 것과 동일하지만, 이 프로젝트의 자체 검색 하네스에서 측정된 적은 한 번도 없다. 여기서의 랭킹 품질은 대안과의 측정 비교가 아니라 그 동일성에 근거한다. 그 이유와, 해당 측정이 단순히 '보류 중'이 아닌 이유는 [결정 기록](https://github.com/GoBeromsu/oh-my-second-brain/blob/main/docs/measurements/model-default-deferral.md)에 적혀 있다.
117
-
118
- 직접 고른 모델을 쓰려면 `OMS_EMBEDDING_PROVIDER`와 `OMS_EMBEDDING_MODEL`을 함께 지정한다(`gguf`에 로컬 GGUF 경로, 또는 `upstage`에 모델 id와 `UPSTAGE_API_KEY`). 둘 중 하나만 지정하면 두 변수 이름을 모두 알려주며 실패한다. 조용한 폴백은 없다.
119
-
120
- 모델이 없어도 어휘 검색, 그래프 기반 검색, 컨벤션 검증은 그대로 동작한다. 벡터와 HyDE 요청만 거부되며, 그때 어떤 변수를 설정해야 하는지 알려준다.
79
+ ## 설치
121
80
 
122
- ## 개발
81
+ Node.js 20 이상이 필요하다.
123
82
 
124
83
  ```bash
125
- npm install
126
- npm run build
127
- npm test
128
- npm run release:check # lint + build + test + audit + pack + artifact-smoke + plugin 검증
84
+ npm install -g oh-my-second-brain
85
+ oms install --runtime all --vault /path/to/vault --yes
129
86
  ```
130
87
 
131
- 릴리스 절차: [docs/release.md](https://github.com/GoBeromsu/oh-my-second-brain/blob/main/docs/release.md).
88
+ 호스트 설치는 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 순서를 유지한다.
132
89
 
133
- ## 라이선스
90
+ `OMS_VAULT`는 명시적·로컬·bridge target이 없을 때 사용하는 지원 환경변수 fallback이다.
134
91
 
135
- MIT. 상위 출처 크레딧은 [ACKNOWLEDGMENTS.md](./ACKNOWLEDGMENTS.md) 참고.
92
+ 자세한 내용은 [설치](./docs/install.md), [아키텍처](./docs/architecture.md), [컨벤션](./docs/conventions.md), [검증된 target](./docs/verified-target.md) 참고한다.
package/README.md CHANGED
@@ -1,87 +1,66 @@
1
1
  # Oh My Second Brain
2
2
 
3
- > A host-agnostic, user-owned convention layer for Obsidian and plain-markdown knowledge vaults.
3
+ Oh My Second Brain (`oms`) connects an existing Obsidian or Markdown vault to AI hosts without taking ownership of its notes. The vault remains plain Markdown.
4
4
 
5
- **English** · [한국어](./README.ko.md)
5
+ ## Template and ontology vault model
6
6
 
7
- [![npm](https://img.shields.io/npm/v/oh-my-second-brain)](https://www.npmjs.com/package/oh-my-second-brain)
8
- ![license](https://img.shields.io/npm/l/oh-my-second-brain)
7
+ - Actual vault-resident Obsidian `.md` templates own managed frontmatter shape and body scaffolding.
8
+ - Each template has a stable `templateId`, independent of its path and digest, and inherits one vault-wide `BaseContract`.
9
+ - `.obsidian/types.json` is read-only type authority.
10
+ - The user-owned ontology remains active: `.oms/template-policy.json` records note/field meaning alongside requiredness, formats, allowed values, defaults, naming, identity, and bindings.
11
+ - `.oms/taxonomy.yaml` records folder/link meaning and owns placement; authored folder intents are exposed through the `folder-ontology` search axis.
12
+ - `.oms/types.json` is a validated derived write/search projection. Never hand-edit it.
9
13
 
10
- Oh My Second Brain (`oms`) turns an existing Obsidian/markdown vault into an agent-readable knowledge base. It loads your vault's own folder/frontmatter conventions, validates notes against them, builds a local link graph, and exposes all of it to AI coding hosts (Claude Code, Codex, Hermes) through a single MCP server without locking you into any one host or moving your notes.
14
+ The retired model is `concept` as note identity and bundled runtime defaultsnot ontology as semantic meaning.
11
15
 
12
- It is **convention-first and user-owned**: your vault stays plain markdown, the ontology lives in a committed `.oms/` folder you control, and nothing is hidden behind a proprietary store.
16
+ ## Setup
13
17
 
14
- ## How it works
15
-
16
- ```
17
- kernel (written once) root host surfaces
18
- ontology + convention logic .claude-plugin/ Claude plugin manifest
19
- graph + semantic runtime + .codex-plugin/ Codex plugin manifest
20
- gated note operations .mcp.json Claude MCP registration
21
- CLI and MCP entry points .mcp.codex.json Codex MCP registration
22
- ```
23
-
24
- - **kernel** is host-agnostic: ontology, validation, graph/semantic logic, and note operations.
25
- - host-specific assets live at the package root: Claude hooks are in `assets/claude/hooks/`, Codex rules are in `assets/codex/rules/`, and Hermes metadata is `assets/hermes-manifest.json`.
26
- - the cross-host mechanism is one **MCP server** (`oms mcp`) that every host talks to.
27
-
28
- ## Requirements
29
-
30
- - Node.js 20+
31
- - `npm` on `PATH`
32
- - An Obsidian vault, or any folder of markdown notes
33
- - Optional host CLIs: `claude`, `codex`, `hermes`
34
- - Optional embedding backend for [semantic search](#semantic-search-optional)
35
-
36
- ## Install
37
-
38
- One-line (uses the published npm package):
39
-
40
- ```bash
41
- curl -fsSL https://raw.githubusercontent.com/GoBeromsu/oh-my-second-brain/main/scripts/install.sh | bash
42
- ```
43
-
44
- Pick hosts and point at a vault:
45
-
46
- ```bash
47
- curl -fsSL https://raw.githubusercontent.com/GoBeromsu/oh-my-second-brain/main/scripts/install.sh | bash -s -- --runtime all --vault /path/to/vault
48
- ```
49
-
50
- Or via npm:
18
+ Setup recursively discovers existing templates and proposes migration. It ships no note-type defaults and never modifies notes.
51
19
 
52
20
  ```bash
53
- npm install -g oh-my-second-brain
54
- oms install --runtime all --vault /path/to/vault --dry-run # preview
55
- oms install --runtime all --vault /path/to/vault --yes # apply
21
+ oms setup --vault /path/to/vault --dry-run
22
+ oms setup --vault /path/to/vault --yes --approved-digest <shown-digest>
56
23
  ```
57
24
 
58
- Full guide: [docs/install.md](./docs/install.md).
59
-
60
- ## Hosts
61
-
62
- | Host | Manifest | Convention file | Sigil | Status |
63
- |------|----------|-----------------|-------|--------|
64
- | **claude-code** | `.claude-plugin/plugin.json` | `CLAUDE.md` | `/` | installable |
65
- | **codex** | `.codex-plugin/plugin.json` | `AGENTS.md` | `$` | native skills + MCP |
66
- | **hermes** | `assets/hermes-manifest.json` | `SOUL.md` | (MCP/tools) | native skills + MCP |
67
-
68
- `oms install` writes the host-native rules/skills and a managed `oms` MCP registration, and is reversible with `oms uninstall`. Per-host details: [docs/install.md](./docs/install.md).
25
+ Managed-template changes use the same dry-run, exact caller approval, compare-and-swap, transaction, and postcondition receipt boundary.
69
26
 
70
27
  ## CLI
71
28
 
72
- ```
73
- oms setup Adopt an existing vault into the convention (writes .oms/taxonomy.yaml; never edits notes)
74
- oms install Install host assets + MCP registration
75
- oms uninstall Remove host assets + MCP registration
76
- oms update Check/apply a package update, then reconcile host assets
77
- oms doctor Validate note frontmatter against the ontology (aggregated by field & concept)
78
- oms lint Check vault link health: broken [[wikilinks]] + orphan notes
79
- oms semantic Native markdown semantic index / search / get
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|cleanup|collections|contexts
40
+ oms doc get|multi-get
41
+ oms serve Start the local search HTTP server
80
42
  oms mcp Start the stdio MCP server
81
- oms hook Vault guard hooks (Claude Code pre/post tool-use)
43
+ oms hook Run Claude pre/post tool-use vault guards
82
44
  ```
83
45
 
84
- `oh-my-second-brain` is the canonical command; `oms` is the short alias.
46
+ `oh-my-second-brain` is the full command; `oms` is its short alias.
47
+
48
+ `oms search <text>` is lexical-only. `--vec` and `--hyde` select their respective
49
+ typed channels; `--expand` explicitly enables G004 expansion, `--max-queries`
50
+ accepts an integer from 1 through 32, and `--rerank` is opt-in. `oms embed` is
51
+ the sole embedding command; `oms index` has no embedding subcommand.
52
+
53
+ Vector search requires a verified local embedding capability, selected by a
54
+ complete `OMS_EMBEDDING_PROVIDER`/`OMS_EMBEDDING_MODEL` pair, the vault's
55
+ `.oms/models.json` plus its verified installed receipt, or a setup-installed
56
+ default. HyDE also requires a resolved generate capability; reranking requires
57
+ a resolved rerank capability. Their complete environment pairs are
58
+ `OMS_GENERATE_PROVIDER`/`OMS_GENERATE_MODEL` and
59
+ `OMS_RERANK_PROVIDER`/`OMS_RERANK_MODEL`. Missing, incomplete, or uninstalled
60
+ selections fail loudly. G004 expansion is an explicit
61
+ available capability; it makes no replacement, parity, or outperformance claim.
62
+ During setup, choose one local verified acquisition policy:
63
+ `--models-default`, `--models-descriptor <path>`, or `--models-no-default`.
85
64
 
86
65
  ## MCP tools
87
66
 
@@ -89,47 +68,23 @@ oms hook Vault guard hooks (Claude Code pre/post tool-use)
89
68
 
90
69
  `oms_write` · `oms_search` · `oms_link` · `oms_status` · `oms_doctor`
91
70
 
92
- `oms_write` is gated by path-safety, vault-confinement, and the kernel-owned concept contract.
93
-
94
- ## Vault layout (`.oms/`)
95
-
96
- `oms setup` adopts your vault into a committed `.oms/` folder with two layers (ADR-006):
97
-
98
- - **Contract (machine-validated)** — `taxonomy.yaml` (folder → intent → concept) and `concepts/*.yaml` (per-note-type frontmatter declarations). Enforced by `vault-lint` and `oms_validate_contract`.
99
- - **Governance (human intent)** — `governance/` ADRs and rules; never machine-parsed.
100
- - `.oms/cache/` (derived graph/embedding artifacts) is gitignored.
101
-
102
- `setup` writes `.oms/taxonomy.yaml`, preserves existing `.oms/concepts/`, and never modifies your notes.
71
+ 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.
103
72
 
104
- ## Semantic search (optional)
73
+ Writes resolve one `ResolvedTemplate` and support create, append, and update. Template mutation, projection regeneration, and one-note identity backfill require a verified target and explicit approval digest. `status` and every search operation are read-only.
105
74
 
106
- Semantic retrieval requires a real embedding model there is no fake/hash fallback (ADR-007). The quickest path is the pinned local default:
75
+ Plain lexical search is projection-independent. Typed template/declared-field/folder/link axes use the same projection as writes and fail loudly when it is missing or stale. Managed template sources are excluded. Vector and HyDE requests fail loudly unless both embedding provider and model are configured.
107
76
 
108
- ```bash
109
- oms setup --vault /path/to/vault --yes --embedding-default
110
- oms embed --vault /path/to/vault
111
- oms semantic vsearch "what should I retrieve?" --vault /path/to/vault
112
- ```
113
-
114
- `--embedding-default` downloads EmbeddingGemma-300M (~318 MB), verifies it against a pinned SHA-256, and installs it under your user cache — not in the vault. It runs locally through `node-llama-cpp`, needs no API key, and embeds at the model's full 768 dimensions with no folding. After that, `oms embed` and vector search need no environment variables.
115
-
116
- One thing to know before you rely on it: this is the same model and prompt format [qmd](https://github.com/tobi/qmd) resolves by default, but it has never been measured in this project's own retrieval harness. Its ranking quality here rests on that equivalence, not on a measured comparison against alternatives. [The decision record](https://github.com/GoBeromsu/oh-my-second-brain/blob/main/docs/measurements/model-default-deferral.md) explains why, and why the measurement is not merely pending.
117
-
118
- To choose your own model instead, set `OMS_EMBEDDING_PROVIDER` + `OMS_EMBEDDING_MODEL` (`gguf` with a local GGUF path, or `upstage` with a model id and `UPSTAGE_API_KEY`). Setting only one of the pair is an error naming both, never a silent fallback.
119
-
120
- Without any model, lexical search, graph-based retrieval, and convention validation all still work; only vector and HyDE requests are refused, and they say which variables to set.
77
+ ## Install
121
78
 
122
- ## Development
79
+ Node.js 20 or later is required.
123
80
 
124
81
  ```bash
125
- npm install
126
- npm run build
127
- npm test
128
- npm run release:check # lint + build + test + audit + pack + artifact-smoke + plugin validate
82
+ npm install -g oh-my-second-brain
83
+ oms install --runtime all --vault /path/to/vault --yes
129
84
  ```
130
85
 
131
- Release process: [docs/release.md](https://github.com/GoBeromsu/oh-my-second-brain/blob/main/docs/release.md).
86
+ 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.
132
87
 
133
- ## License
88
+ `OMS_VAULT` is the supported environment fallback when no explicit, local, or bridge target exists.
134
89
 
135
- MIT. See [ACKNOWLEDGMENTS.md](./ACKNOWLEDGMENTS.md) for upstream credits.
90
+ See [installation](./docs/install.md), [architecture](./docs/architecture.md), [conventions](./docs/conventions.md), and [verified targets](./docs/verified-target.md).