oh-my-second-brain 0.18.3 → 0.20.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 (339) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +3 -4
  3. package/.codex-plugin/plugin.json +2 -2
  4. package/CHANGELOG-assets.md +14 -0
  5. package/CHANGELOG-cli.md +34 -0
  6. package/CHANGELOG-kernel.md +53 -0
  7. package/CHANGELOG-mcp.md +25 -0
  8. package/CHANGELOG-vendors.md +12 -0
  9. package/CHANGELOG.md +10 -0
  10. package/README.ko.md +235 -54
  11. package/README.md +235 -54
  12. package/assets/claude/CLAUDE.md +11 -6
  13. package/assets/claude/hooks/oms-guard.mjs +23 -8
  14. package/assets/codex/AGENTS.md +5 -4
  15. package/assets/codex/rules/oms.md +6 -6
  16. package/assets/hermes/README.md +6 -6
  17. package/assets/hermes/SOUL.md +8 -7
  18. package/assets/hermes-manifest.json +2 -2
  19. package/assets/readme/hero.svg +23 -0
  20. package/assets/skills/distill/SKILL.md +1 -1
  21. package/assets/skills/doctor/SKILL.md +13 -6
  22. package/assets/skills/interview/SKILL.md +38 -0
  23. package/assets/skills/search/SKILL.md +7 -4
  24. package/assets/skills/setup/SKILL.md +14 -12
  25. package/assets/skills/write/SKILL.md +10 -6
  26. package/dist/cli/audit.js +2 -2
  27. package/dist/cli/contract-command.d.ts +18 -0
  28. package/dist/cli/contract-command.js +175 -55
  29. package/dist/cli/contract-command.js.map +1 -1
  30. package/dist/cli/doctor-command.d.ts +7 -0
  31. package/dist/cli/doctor-command.js +158 -0
  32. package/dist/cli/doctor-command.js.map +1 -0
  33. package/dist/cli/engine-session.js +1 -1
  34. package/dist/cli/engine-session.js.map +1 -1
  35. package/dist/cli/evolution-approve.d.ts +64 -0
  36. package/dist/cli/evolution-approve.js +138 -0
  37. package/dist/cli/evolution-approve.js.map +1 -0
  38. package/dist/cli/graph-command.js +5 -12
  39. package/dist/cli/graph-command.js.map +1 -1
  40. package/dist/cli/host-commands.d.ts +1 -1
  41. package/dist/cli/host-commands.js +7 -7
  42. package/dist/cli/host-commands.js.map +1 -1
  43. package/dist/cli/index-command.js +9 -9
  44. package/dist/cli/index-command.js.map +1 -1
  45. package/dist/cli/interview-command.d.ts +10 -0
  46. package/dist/cli/interview-command.js +72 -0
  47. package/dist/cli/interview-command.js.map +1 -0
  48. package/dist/cli/lineage-command.d.ts +16 -0
  49. package/dist/cli/lineage-command.js +113 -0
  50. package/dist/cli/lineage-command.js.map +1 -0
  51. package/dist/cli/model-command.js +1 -1
  52. package/dist/cli/model-command.js.map +1 -1
  53. package/dist/cli/note-command.js +1 -3
  54. package/dist/cli/note-command.js.map +1 -1
  55. package/dist/cli/oms.d.ts +0 -3
  56. package/dist/cli/oms.js +61 -95
  57. package/dist/cli/oms.js.map +1 -1
  58. package/dist/cli/package-command.js +7 -7
  59. package/dist/cli/package-command.js.map +1 -1
  60. package/dist/cli/removed-families.d.ts +6 -0
  61. package/dist/cli/removed-families.js +39 -0
  62. package/dist/cli/removed-families.js.map +1 -0
  63. package/dist/cli/search-usage.js +18 -9
  64. package/dist/cli/search-usage.js.map +1 -1
  65. package/dist/cli/search.d.ts +9 -1
  66. package/dist/cli/search.js +103 -50
  67. package/dist/cli/search.js.map +1 -1
  68. package/dist/cli/setup-command.d.ts +1 -1
  69. package/dist/cli/setup-command.js +48 -15
  70. package/dist/cli/setup-command.js.map +1 -1
  71. package/dist/cli/status-command.d.ts +5 -0
  72. package/dist/cli/status-command.js +72 -59
  73. package/dist/cli/status-command.js.map +1 -1
  74. package/dist/cli/usage.js +30 -33
  75. package/dist/cli/usage.js.map +1 -1
  76. package/dist/cli/write-command.d.ts +14 -0
  77. package/dist/cli/write-command.js +120 -0
  78. package/dist/cli/write-command.js.map +1 -0
  79. package/dist/kernel/contract/audit.d.ts +1 -1
  80. package/dist/kernel/contract/audit.js +8 -4
  81. package/dist/kernel/contract/audit.js.map +1 -1
  82. package/dist/kernel/contract/contradiction.d.ts +26 -0
  83. package/dist/kernel/contract/contradiction.js +40 -0
  84. package/dist/kernel/contract/contradiction.js.map +1 -0
  85. package/dist/kernel/contract/digest.d.ts +15 -0
  86. package/dist/kernel/contract/digest.js +24 -0
  87. package/dist/kernel/contract/digest.js.map +1 -0
  88. package/dist/kernel/contract/gap-ledger.d.ts +132 -0
  89. package/dist/kernel/contract/gap-ledger.js +398 -0
  90. package/dist/kernel/contract/gap-ledger.js.map +1 -0
  91. package/dist/kernel/contract/gaps-report.d.ts +44 -0
  92. package/dist/kernel/contract/gaps-report.js +49 -0
  93. package/dist/kernel/contract/gaps-report.js.map +1 -0
  94. package/dist/kernel/contract/generation-snapshot.d.ts +56 -0
  95. package/dist/kernel/contract/generation-snapshot.js +245 -0
  96. package/dist/kernel/contract/generation-snapshot.js.map +1 -0
  97. package/dist/kernel/contract/guard-events.d.ts +4 -0
  98. package/dist/kernel/contract/guard-events.js +3 -1
  99. package/dist/kernel/contract/guard-events.js.map +1 -1
  100. package/dist/kernel/contract/interview-log.d.ts +69 -0
  101. package/dist/kernel/contract/interview-log.js +223 -0
  102. package/dist/kernel/contract/interview-log.js.map +1 -0
  103. package/dist/kernel/contract/interview-resume.d.ts +74 -0
  104. package/dist/kernel/contract/interview-resume.js +177 -0
  105. package/dist/kernel/contract/interview-resume.js.map +1 -0
  106. package/dist/kernel/contract/interview.d.ts +58 -15
  107. package/dist/kernel/contract/interview.js +111 -179
  108. package/dist/kernel/contract/interview.js.map +1 -1
  109. package/dist/kernel/contract/judge-write.d.ts +54 -14
  110. package/dist/kernel/contract/judge-write.js +65 -33
  111. package/dist/kernel/contract/judge-write.js.map +1 -1
  112. package/dist/kernel/contract/judge.d.ts +14 -2
  113. package/dist/kernel/contract/judge.js +39 -104
  114. package/dist/kernel/contract/judge.js.map +1 -1
  115. package/dist/kernel/contract/legacy.d.ts +15 -0
  116. package/dist/kernel/contract/legacy.js +9 -0
  117. package/dist/kernel/contract/legacy.js.map +1 -0
  118. package/dist/kernel/contract/lineage-health.d.ts +20 -0
  119. package/dist/kernel/contract/lineage-health.js +71 -0
  120. package/dist/kernel/contract/lineage-health.js.map +1 -0
  121. package/dist/kernel/contract/lineage.d.ts +164 -0
  122. package/dist/kernel/contract/lineage.js +304 -0
  123. package/dist/kernel/contract/lineage.js.map +1 -0
  124. package/dist/kernel/contract/loosening.d.ts +15 -11
  125. package/dist/kernel/contract/loosening.js +13 -102
  126. package/dist/kernel/contract/loosening.js.map +1 -1
  127. package/dist/kernel/contract/mutation.d.ts +56 -0
  128. package/dist/kernel/contract/mutation.js +83 -0
  129. package/dist/kernel/contract/mutation.js.map +1 -0
  130. package/dist/kernel/contract/redact.js +0 -9
  131. package/dist/kernel/contract/redact.js.map +1 -1
  132. package/dist/kernel/contract/revision.d.ts +10 -0
  133. package/dist/kernel/contract/revision.js +14 -0
  134. package/dist/kernel/contract/revision.js.map +1 -0
  135. package/dist/kernel/contract/scripted-interview.d.ts +29 -2
  136. package/dist/kernel/contract/scripted-interview.js +72 -5
  137. package/dist/kernel/contract/scripted-interview.js.map +1 -1
  138. package/dist/kernel/contract/state-dir.d.ts +50 -0
  139. package/dist/kernel/contract/state-dir.js +234 -0
  140. package/dist/kernel/contract/state-dir.js.map +1 -0
  141. package/dist/kernel/contract/status.d.ts +32 -8
  142. package/dist/kernel/contract/status.js +62 -14
  143. package/dist/kernel/contract/status.js.map +1 -1
  144. package/dist/kernel/contract/store.d.ts +133 -9
  145. package/dist/kernel/contract/store.js +240 -47
  146. package/dist/kernel/contract/store.js.map +1 -1
  147. package/dist/kernel/contract/types.d.ts +69 -18
  148. package/dist/kernel/contract/types.js +71 -30
  149. package/dist/kernel/contract/types.js.map +1 -1
  150. package/dist/kernel/contract/vault-id.d.ts +5 -1
  151. package/dist/kernel/contract/vault-id.js +10 -3
  152. package/dist/kernel/contract/vault-id.js.map +1 -1
  153. package/dist/kernel/conventions/frontmatter.js +25 -0
  154. package/dist/kernel/conventions/frontmatter.js.map +1 -1
  155. package/dist/kernel/conventions/note-exclude.d.ts +6 -9
  156. package/dist/kernel/conventions/note-exclude.js +29 -117
  157. package/dist/kernel/conventions/note-exclude.js.map +1 -1
  158. package/dist/kernel/conventions/report.js +1 -1
  159. package/dist/kernel/conventions/report.js.map +1 -1
  160. package/dist/kernel/doctor/evolution-ops.d.ts +48 -0
  161. package/dist/kernel/doctor/evolution-ops.js +173 -0
  162. package/dist/kernel/doctor/evolution-ops.js.map +1 -0
  163. package/dist/kernel/doctor/evolution-status.d.ts +31 -0
  164. package/dist/kernel/doctor/evolution-status.js +38 -0
  165. package/dist/kernel/doctor/evolution-status.js.map +1 -0
  166. package/dist/kernel/doctor/service.d.ts +23 -3
  167. package/dist/kernel/doctor/service.js +158 -4
  168. package/dist/kernel/doctor/service.js.map +1 -1
  169. package/dist/kernel/engine/embed/config.js +3 -3
  170. package/dist/kernel/engine/embed/config.js.map +1 -1
  171. package/dist/kernel/engine/index-update.d.ts +41 -0
  172. package/dist/kernel/engine/index-update.js +133 -0
  173. package/dist/kernel/engine/index-update.js.map +1 -0
  174. package/dist/kernel/engine/retrieval/folder-context.js +1 -1
  175. package/dist/kernel/engine/retrieval/template-source.js +24 -19
  176. package/dist/kernel/engine/retrieval/template-source.js.map +1 -1
  177. package/dist/kernel/evolution/convergence.d.ts +28 -0
  178. package/dist/kernel/evolution/convergence.js +82 -0
  179. package/dist/kernel/evolution/convergence.js.map +1 -0
  180. package/dist/kernel/evolution/decision.d.ts +14 -0
  181. package/dist/kernel/evolution/decision.js +2 -0
  182. package/dist/kernel/evolution/decision.js.map +1 -0
  183. package/dist/kernel/evolution/evaluator.d.ts +47 -0
  184. package/dist/kernel/evolution/evaluator.js +34 -0
  185. package/dist/kernel/evolution/evaluator.js.map +1 -0
  186. package/dist/kernel/evolution/events.d.ts +28 -0
  187. package/dist/kernel/evolution/events.js +108 -0
  188. package/dist/kernel/evolution/events.js.map +1 -0
  189. package/dist/kernel/evolution/evolution-lock.d.ts +48 -0
  190. package/dist/kernel/evolution/evolution-lock.js +133 -0
  191. package/dist/kernel/evolution/evolution-lock.js.map +1 -0
  192. package/dist/kernel/evolution/evolve.d.ts +34 -0
  193. package/dist/kernel/evolution/evolve.js +80 -0
  194. package/dist/kernel/evolution/evolve.js.map +1 -0
  195. package/dist/kernel/evolution/human-approval.d.ts +37 -0
  196. package/dist/kernel/evolution/human-approval.js +37 -0
  197. package/dist/kernel/evolution/human-approval.js.map +1 -0
  198. package/dist/kernel/evolution/maker.d.ts +42 -0
  199. package/dist/kernel/evolution/maker.js +116 -0
  200. package/dist/kernel/evolution/maker.js.map +1 -0
  201. package/dist/kernel/evolution/mutation-direction.d.ts +31 -0
  202. package/dist/kernel/evolution/mutation-direction.js +113 -0
  203. package/dist/kernel/evolution/mutation-direction.js.map +1 -0
  204. package/dist/kernel/evolution/policy.d.ts +51 -0
  205. package/dist/kernel/evolution/policy.js +92 -0
  206. package/dist/kernel/evolution/policy.js.map +1 -0
  207. package/dist/kernel/evolution/rate-limit.d.ts +36 -0
  208. package/dist/kernel/evolution/rate-limit.js +59 -0
  209. package/dist/kernel/evolution/rate-limit.js.map +1 -0
  210. package/dist/kernel/evolution/request-state.d.ts +149 -0
  211. package/dist/kernel/evolution/request-state.js +374 -0
  212. package/dist/kernel/evolution/request-state.js.map +1 -0
  213. package/dist/kernel/evolution/revert.d.ts +30 -0
  214. package/dist/kernel/evolution/revert.js +98 -0
  215. package/dist/kernel/evolution/revert.js.map +1 -0
  216. package/dist/kernel/evolution/seal-gate-human.d.ts +29 -0
  217. package/dist/kernel/evolution/seal-gate-human.js +71 -0
  218. package/dist/kernel/evolution/seal-gate-human.js.map +1 -0
  219. package/dist/kernel/evolution/seal-gate.d.ts +70 -0
  220. package/dist/kernel/evolution/seal-gate.js +248 -0
  221. package/dist/kernel/evolution/seal-gate.js.map +1 -0
  222. package/dist/kernel/evolution/snapshot-contract.d.ts +20 -0
  223. package/dist/kernel/evolution/snapshot-contract.js +21 -0
  224. package/dist/kernel/evolution/snapshot-contract.js.map +1 -0
  225. package/dist/kernel/evolution/stage-consensus.d.ts +104 -0
  226. package/dist/kernel/evolution/stage-consensus.js +185 -0
  227. package/dist/kernel/evolution/stage-consensus.js.map +1 -0
  228. package/dist/kernel/evolution/stage-mechanical.d.ts +23 -0
  229. package/dist/kernel/evolution/stage-mechanical.js +84 -0
  230. package/dist/kernel/evolution/stage-mechanical.js.map +1 -0
  231. package/dist/kernel/evolution/stage-semantic.d.ts +35 -0
  232. package/dist/kernel/evolution/stage-semantic.js +80 -0
  233. package/dist/kernel/evolution/stage-semantic.js.map +1 -0
  234. package/dist/kernel/harness/surface-registry.d.ts +2 -0
  235. package/dist/kernel/harness/surface-registry.js +11 -19
  236. package/dist/kernel/harness/surface-registry.js.map +1 -1
  237. package/dist/kernel/install/asset-health.js +1 -1
  238. package/dist/kernel/install/asset-health.js.map +1 -1
  239. package/dist/kernel/link/convention-note.js +3 -3
  240. package/dist/kernel/link/convention-note.js.map +1 -1
  241. package/dist/kernel/search/read-exact.d.ts +45 -0
  242. package/dist/kernel/search/read-exact.js +175 -0
  243. package/dist/kernel/search/read-exact.js.map +1 -0
  244. package/dist/kernel/text/nfc.d.ts +11 -0
  245. package/dist/kernel/text/nfc.js +16 -0
  246. package/dist/kernel/text/nfc.js.map +1 -0
  247. package/dist/kernel/update/update.js +8 -8
  248. package/dist/kernel/update/update.js.map +1 -1
  249. package/dist/kernel/write/ambiguity.d.ts +91 -0
  250. package/dist/kernel/write/ambiguity.js +147 -0
  251. package/dist/kernel/write/ambiguity.js.map +1 -0
  252. package/dist/kernel/write/coerce.d.ts +42 -0
  253. package/dist/kernel/write/coerce.js +254 -0
  254. package/dist/kernel/write/coerce.js.map +1 -0
  255. package/dist/kernel/write/conform.d.ts +26 -0
  256. package/dist/kernel/write/conform.js +190 -0
  257. package/dist/kernel/write/conform.js.map +1 -0
  258. package/dist/kernel/write/frame.d.ts +44 -0
  259. package/dist/kernel/write/frame.js +66 -0
  260. package/dist/kernel/write/frame.js.map +1 -0
  261. package/dist/kernel/write/live-templates.d.ts +63 -0
  262. package/dist/kernel/write/live-templates.js +104 -0
  263. package/dist/kernel/write/live-templates.js.map +1 -0
  264. package/dist/{mcp → kernel/write}/note-write.js +1 -1
  265. package/dist/kernel/write/note-write.js.map +1 -0
  266. package/dist/kernel/write/payload.d.ts +53 -0
  267. package/dist/kernel/write/payload.js +51 -0
  268. package/dist/kernel/write/payload.js.map +1 -0
  269. package/dist/kernel/write/pipeline.d.ts +110 -0
  270. package/dist/kernel/write/pipeline.js +203 -0
  271. package/dist/kernel/write/pipeline.js.map +1 -0
  272. package/dist/kernel/write/receipt.d.ts +76 -0
  273. package/dist/kernel/write/receipt.js +26 -0
  274. package/dist/kernel/write/receipt.js.map +1 -0
  275. package/dist/mcp/server.d.ts +3 -0
  276. package/dist/mcp/server.js +72 -443
  277. package/dist/mcp/server.js.map +1 -1
  278. package/dist/mcp/tools/doctor.d.ts +4 -0
  279. package/dist/mcp/tools/doctor.js +89 -0
  280. package/dist/mcp/tools/doctor.js.map +1 -0
  281. package/dist/mcp/tools/interview.d.ts +27 -0
  282. package/dist/mcp/tools/interview.js +264 -0
  283. package/dist/mcp/tools/interview.js.map +1 -0
  284. package/dist/mcp/tools/link.d.ts +4 -0
  285. package/dist/mcp/tools/link.js +24 -0
  286. package/dist/mcp/tools/link.js.map +1 -0
  287. package/dist/mcp/tools/search.d.ts +14 -0
  288. package/dist/mcp/tools/search.js +259 -0
  289. package/dist/mcp/tools/search.js.map +1 -0
  290. package/dist/mcp/tools/shared.d.ts +28 -0
  291. package/dist/mcp/tools/shared.js +34 -0
  292. package/dist/mcp/tools/shared.js.map +1 -0
  293. package/dist/mcp/tools/status.d.ts +9 -0
  294. package/dist/mcp/tools/status.js +50 -0
  295. package/dist/mcp/tools/status.js.map +1 -0
  296. package/dist/mcp/tools/write.d.ts +9 -0
  297. package/dist/mcp/tools/write.js +41 -0
  298. package/dist/mcp/tools/write.js.map +1 -0
  299. package/dist/mcp/update-notice.js +1 -1
  300. package/dist/mcp/update-notice.js.map +1 -1
  301. package/dist/vendors/claude/hook/pre-tool-use.d.ts +19 -2
  302. package/dist/vendors/claude/hook/pre-tool-use.js +69 -18
  303. package/dist/vendors/claude/hook/pre-tool-use.js.map +1 -1
  304. package/dist/vendors/codex/codex.js +2 -2
  305. package/dist/vendors/codex/codex.js.map +1 -1
  306. package/dist/vendors/hermes/hermes.js +18 -9
  307. package/dist/vendors/hermes/hermes.js.map +1 -1
  308. package/docs/adapters.md +4 -4
  309. package/docs/architecture.md +14 -14
  310. package/docs/cli-map.md +66 -48
  311. package/docs/conventions.md +12 -13
  312. package/docs/install.md +27 -28
  313. package/docs/migration-0.19.md +48 -0
  314. package/docs/verified-target.md +5 -5
  315. package/package.json +6 -3
  316. package/skills/distill/SKILL.md +1 -1
  317. package/skills/doctor/SKILL.md +13 -6
  318. package/skills/interview/SKILL.md +38 -0
  319. package/skills/search/SKILL.md +7 -4
  320. package/skills/setup/SKILL.md +14 -12
  321. package/skills/write/SKILL.md +10 -6
  322. package/assets/skills/link/SKILL.md +0 -30
  323. package/assets/skills/status/SKILL.md +0 -34
  324. package/dist/kernel/contract/contract-vault-fixture.d.ts +0 -45
  325. package/dist/kernel/contract/contract-vault-fixture.js +0 -53
  326. package/dist/kernel/contract/contract-vault-fixture.js.map +0 -1
  327. package/dist/kernel/contract/drift.d.ts +0 -6
  328. package/dist/kernel/contract/drift.js +0 -27
  329. package/dist/kernel/contract/drift.js.map +0 -1
  330. package/dist/kernel/contract/extract.d.ts +0 -37
  331. package/dist/kernel/contract/extract.js +0 -101
  332. package/dist/kernel/contract/extract.js.map +0 -1
  333. package/dist/kernel/search/morning-test-fixtures.d.ts +0 -7
  334. package/dist/kernel/search/morning-test-fixtures.js +0 -41
  335. package/dist/kernel/search/morning-test-fixtures.js.map +0 -1
  336. package/dist/mcp/note-write.js.map +0 -1
  337. package/skills/link/SKILL.md +0 -30
  338. package/skills/status/SKILL.md +0 -34
  339. /package/dist/{mcp → kernel/write}/note-write.d.ts +0 -0
package/README.ko.md CHANGED
@@ -1,90 +1,271 @@
1
- # Oh My Second Brain
1
+ <p align="center">
2
+ <img src="./assets/readme/hero.svg" alt="Oh My Second Brain. 흩어진 생각이 연결되는 별자리." width="100%" />
3
+ </p>
4
+
5
+ <h1 align="center">Oh My Second Brain</h1>
6
+
7
+ <p align="center">
8
+ <strong>흩어진 지식이, 다시 하나의 별자리로.</strong><br />
9
+ Obsidian, Markdown, AI 에이전트를 잇는 사용자 소유의 지식·컨벤션 레이어.
10
+ </p>
11
+
12
+ <p align="center">
13
+ <a href="https://www.npmjs.com/package/oh-my-second-brain"><img src="https://img.shields.io/npm/v/oh-my-second-brain?style=flat-square&amp;color=8b9daa&amp;label=npm" alt="npm 버전" /></a>
14
+ <a href="https://nodejs.org/"><img src="https://img.shields.io/badge/Node.js-%E2%89%A520-80b89b?style=flat-square" alt="Node.js 20 이상" /></a>
15
+ <a href="#mcp-도구와-에이전트-연결"><img src="https://img.shields.io/badge/MCP-4_tools-97a8b1?style=flat-square" alt="MCP 도구 4개" /></a>
16
+ <a href="https://github.com/GoBeromsu/oh-my-second-brain/blob/main/package.json"><img src="https://img.shields.io/badge/license-MIT-d7c7a8?style=flat-square" alt="패키지 라이선스 MIT" /></a>
17
+ </p>
18
+
19
+ <p align="center">
20
+ <a href="#빠른-시작"><strong>빠른 시작</strong></a> ·
21
+ <a href="#동작-방식">동작 방식</a> ·
22
+ <a href="#문서">문서</a> ·
23
+ <a href="https://github.com/GoBeromsu/oh-my-second-brain/releases">릴리스</a> ·
24
+ <a href="./README.md">English</a>
25
+ </p>
26
+
27
+ ---
28
+
29
+ 볼트에는 이미 아이디어, 결정, 배운 것들이 쌓여 있다. **OMS는 에이전트가 그 지식을 되찾고, 내가 정한 규칙 안에서 노트를 쓰도록 돕는다.** 새 노트 형식도, 정해진 폴더 체계도, 특정 호스트로의 지식 이전도 필요 없다.
30
+
31
+ Obsidian은 사령탑으로 남는다. OMS가 꺼져 있어도 노트는 사람이 읽고 고칠 수 있는 Markdown 파일이다. Claude Code, Codex, Hermes를 각 호스트의 통합 기능으로 같은 볼트에 연결할 수 있다.
32
+
33
+ ## 왜 OMS인가?
34
+
35
+ <table>
36
+ <tr>
37
+ <td width="50%" valign="top">
38
+ <h3>이미 아는 것을 다시 찾기</h3>
39
+ 기존 노트를 lexical 검색으로 찾는다. 필요할 때 vector, HyDE, 질의 확장, reranking을 명시적으로 선택한다.
40
+ </td>
41
+ <td width="50%" valign="top">
42
+ <h3>내 볼트의 언어 그대로</h3>
43
+ 폴더와 속성의 의미는 내가 정한다. OMS가 제시하는 체계를 따르는 대신, 내 컨벤션을 기록한다.
44
+ </td>
45
+ </tr>
46
+ <tr>
47
+ <td width="50%" valign="top">
48
+ <h3>에이전트가 공유하는 계약</h3>
49
+ setup으로 볼트 규약을 봉인한다. 지원되는 쓰기 경로는 저장 전에 노트 전체가 그 계약에 맞는지 확인한다.
50
+ </td>
51
+ <td width="50%" valign="top">
52
+ <h3>파일의 소유권은 그대로</h3>
53
+ 기존 Markdown 노트와 템플릿을 계속 쓴다. setup은 이 파일들을 다시 쓰지 않으며, 봉인된 계약은 볼트 밖에 둔다.
54
+ </td>
55
+ </tr>
56
+ <tr>
57
+ <td width="50%" valign="top">
58
+ <h3>호스트를 넘어 연결하기</h3>
59
+ Claude Code, Codex, Hermes의 네이티브 통합을 사용한다. MCP 도구 4개와 공통 워크플로 스킬 6개를 제공한다.
60
+ </td>
61
+ <td width="50%" valign="top">
62
+ <h3>추측 대신 상태 확인</h3>
63
+ 계약 상태, 노트 규약 준수, 색인, wikilink 제안을 확인한다. 검색과 상태 조회는 읽기 전용이다.
64
+ </td>
65
+ </tr>
66
+ </table>
67
+
68
+ ## 빠른 시작
69
+
70
+ **Node.js 20 이상과 기존 Obsidian 또는 Markdown 볼트가 필요하다.** `/path/to/vault`를 볼트의 절대 경로로 바꾼다.
71
+
72
+ ### 1. 설치
2
73
 
3
- Oh My Second Brain(`oms`)은 기존 Obsidian·Markdown 볼트를 AI 호스트와 연결하되 노트의 소유권은 가져가지 않는다. 볼트는 계속 평문 Markdown이고, Obsidian이 사령탑으로 남는다. OMS가 꺼져 있어도 노트는 사람이 읽고 고칠 수 있는 파일이다. OMS는 속성·폴더·heading의 의미를 스스로 만들어내지 않는다.
4
-
5
- ## 볼트 계약
74
+ ```bash
75
+ npm install -g oh-my-second-brain
76
+ oms --help
77
+ ```
6
78
 
7
- 의미는 사용자에게 남는다. 사용자는 터미널에서 대화형 `oms setup`을 한 번 실행해 볼트 계약을 봉인한다. 인터뷰는 세 부분을 함께 다룬다. 폴더(각 폴더의 의미와 배치 가능 대상), 속성 pool(각 속성의 type과 intent), 템플릿(템플릿 폴더의 각 템플릿이 선언하는 것)이다. 제품은 속성 이름·폴더·페르소나를 하드코딩하지 않고 Inbox fallback도 없다.
79
+ ### 2. 볼트 규약 정의
8
80
 
9
- 봉인된 계약은 볼트 밖 `~/.oms/vaults/<vault-id>/`에 있다. 볼트 안의 OMS 파일은 `.oms/settings.json` 하나이며 `version`, `vaultId`, `templateFolder`, `embedding`, `agentRepair`를 담는다. `.oms/`의 다른 항목은 `oms contract doctor`가 예상하지 않은 제어 파일로 보고하고, 그 밖에는 무시한다. `.obsidian/types.json`은 읽기 전용 관측값이며 봉인을 덮어쓰지 않는다.
81
+ 터미널에서 setup을 실행한다. 폴더와 속성을 인터뷰한 뒤 계약을 봉인한다. 기존 노트는 수정하지 않는다.
10
82
 
11
- 템플릿은 `templateFolder` 안의 사용자 Markdown 파일 그대로 남는다. 봉인은 템플릿이 선언한 것을 기록할 뿐이며, OMS는 템플릿을 다시 쓰거나 복사하거나 노트에 적용하지 않는다. `oms contract status`는 봉인된 각 템플릿을 live 파일과 비교해 `active`, `drift`, `missing`으로 보고한다. drift는 보고만 하고 조용히 재봉인하지 않는다. 재봉인은 사용자가 `oms setup`으로 한다. OMS는 Templater, JavaScript, 전용 token 언어를 해석하거나 실행하지 않는다.
83
+ ```bash
84
+ oms setup --vault /path/to/vault
85
+ oms setup status --vault /path/to/vault
86
+ ```
12
87
 
13
- 노트를 쓰는 주체는 에이전트다. 하나의 판정자가 모든 쓰기를 봉인에 비추어 판정한다. 거부된 쓰기는 파일을 바꾸지 않고 `{field, kind}` 위반과 안내 명령 하나만 돌려주며, 규칙 값·저장소 경로·계약 본문은 돌려주지 않는다. 이 기기에 봉인이 없는 볼트는 판정하지 않는다. 이 기기의 봉인 증거가 볼트와 맞지 않으면 사용자가 `oms setup`을 다시 실행할 때까지 쓰기를 `contract-unreadable`로 거부한다. OMS에는 완료 호출도 리뷰어 대화도 없다. 허용된 쓰기는 노트가 봉인된 구조에 맞는다는 뜻이지 보존할 가치가 있다는 뜻이 아니다.
88
+ ### 3. 에이전트 연결
14
89
 
15
- 볼트 계약은 ADR-007(소스 저장소의 `docs/decisions/`)에 기록되며, 구 ADR-013–016을 대체한다. [ACKNOWLEDGMENTS](./ACKNOWLEDGMENTS.md)는 Ouroboros와 Gajae Code의 deep-interview를 설계 아이디어로 밝힌다. 이는 runtime 복제도 연구 결과도 아니다. 저장소의 도식은 설명용 스케치다. 이 문서들은 승인된 아키텍처 기록이지 host smoke 결과나 제품 gate 통과가 아니다.
90
+ 사용하는 호스트의 통합 기능을 설치한다.
16
91
 
17
- 권위 모델은 [아키텍처](./docs/architecture.md), 볼트 파일은 [컨벤션](./docs/conventions.md), leaf 목록은 [CLI 맵](./docs/cli-map.md)에 있다.
92
+ ```bash
93
+ oms setup host install --runtime claude --vault /path/to/vault --yes
94
+ ```
18
95
 
19
- ## 설정
96
+ `claude` 대신 `codex` 또는 `hermes`를 쓸 수 있다. 세 호스트를 모두 설치하려면 `all`을 쓴다. CLI만 사용한다면 호스트 설치는 선택 사항이다. Hermes 프로필, 모델 설정, 제거 방법은 [설치 가이드](./docs/install.md)를 참고한다.
20
97
 
21
- `oms setup`은 `oms contract setup`과 같은 명령이다. 볼트 전체를 인터뷰해 계약을 봉인한다. 볼트 안에는 `.oms/settings.json`만 쓰고 노트는 수정하지 않는다. 대화형 인터뷰는 터미널이 없거나 `OMS_NON_INTERACTIVE=1`이면 실행을 거부한다. 에이전트는 `setup` 스킬로만 봉인한다: `oms setup --questions`로 질문을 받아 소유자에게 하나씩 묻고, `oms setup --answers <file|->`로 첫 봉인이나 더 엄격한 재봉인만 한다. 계약을 느슨하게 하는 재봉인은 거부되고 소유자의 터미널 몫이다. 언제든 다시 실행해 재봉인할 수 있다.
98
+ ### 4. 지식 꺼내 쓰기
22
99
 
23
100
  ```bash
24
- oms setup --vault /path/to/vault
25
- oms contract status --vault /path/to/vault
101
+ # 파생 검색 색인을 명시적으로 만든다.
102
+ oms doctor sync-embeddings --mode sync --vault /path/to/vault
103
+
104
+ # vector 모델 없이 lexical 검색부터 시작한다.
105
+ oms search "프로젝트 결정" --vault /path/to/vault
26
106
  ```
27
107
 
28
- `oms contract extract --template <path>`는 템플릿 하나가 선언하는 것을 값 없이 보여준다. `oms contract doctor`는 봉인, 오래된 lock, 고아 generation, 예상하지 않은 제어 파일, hook 전송 실패를 진단한다. `--fix`는 이동했거나 색인되지 않은 볼트를 다시 색인할 뿐이다. 그 밖의 깨진 봉인은 `oms setup`을 다시 실행해 복구한다. 모델 수명주기는 `oms model install|select|waive|status`로 따로 존재한다.
108
+ **연결한 에이전트에게 이렇게 요청할 수 있다.**
29
109
 
30
- ## CLI
110
+ > 이 프로젝트와 관련된 내 노트를 찾아서, 이전에 내린 결정을 보여줘.
31
111
 
32
- ```text
33
- oms bridge add|remove|status 저장소-볼트 target bridge 관리
34
- oms contract setup|extract|status|doctor 볼트 계약 봉인, 조회, 진단
35
- oms graph build|status 노트 그래프 생성 또는 조회
36
- oms hook pre Claude 쓰기를 vault 계약으로 판정
37
- oms host install|remove|sync|status 호스트 asset과 MCP 등록 관리
38
- oms index sync|embed|repair|status|clean 파생 검색 상태 관리
39
- oms link suggest|check 노트 wikilink 제안 또는 검사
40
- oms model install|select|waive|status 로컬 모델 선택 관리
41
- oms note audit|get 노트를 계약으로 감사하거나 읽기
42
- oms package check|update OMS 패키지 확인 또는 업데이트
43
- oms search query|context 명시적 질의 실행 또는 구조화 context 조회
44
- oms serve mcp|http stdio MCP 또는 로컬 HTTP 서버 시작
45
- oms setup 볼트를 인터뷰하고 계약 봉인
46
- oms status 읽기 전용 통합 상태 표시
47
- ```
112
+ > 이 노트가 내 볼트 계약에 맞는지 검사하고, 확인할 부분을 알려줘.
48
113
 
49
- `oh-my-second-brain`이 전체 명령이고 `oms`는 짧은 별칭이다. 이 14개 family, 7개 스킬, 5개 MCP 도구는 서로 다른 집합이다. leaf 목록은 [CLI 맵](./docs/cli-map.md)에 있다.
114
+ > 파일은 바꾸지 말고, 함께 연결하면 좋을 노트를 제안해줘.
50
115
 
51
- ### 도움말 계약
116
+ 실행 결과를 캡처한 것이 아니라 요청 예시다. 워크플로와 쓰기 검사 범위는 아래의 호스트별 설명을 따른다.
52
117
 
53
- 인식되는 모든 명령은 `--help`와 `-h`를 받으며, exit 0으로 끝나고 부작용이 없다. 알 수 없는 명령에 `--help`를 붙이면 exit 1이다.
118
+ ## 동작 방식
54
119
 
55
- 일반 `oms search query <text>`는 lexical 전용이다. `--vec`와 `--hyde`는 각 채널을 선택하고, `--expand`는 G004 확장을 명시적으로 켜며, `--max-queries`는 1부터 32까지의 정수를 받고, `--rerank`는 opt-in이다. `oms search context`는 별도의 구조화 context 표면이다. embedding은 `oms index embed`이고 sync와 repair는 서로 다른 index 모드다. `oms index status --view status|collections|contexts`는 세 가지 읽기 전용 view를 유지하고, `oms index clean`은 제거 가능한 파생 상태를 지운다.
120
+ **의미는 사용자가 정한다. 내용은 에이전트가 쓴다. 구조는 OMS가 검사한다.**
56
121
 
57
- lexical, vector, HyDE, typed-axis 질의는 계약을 통과하지 못할 노트도 계속 포함한다. 계약이 없거나 손상되어도 검색은 멈추지 않는다. vector 검색에는 완전한 `OMS_EMBEDDING_PROVIDER`/`OMS_EMBEDDING_MODEL` 쌍이 필요하다. HyDE에는 `OMS_GENERATE_PROVIDER`/`OMS_GENERATE_MODEL`도 필요하다. reranking에는 `OMS_RERANK_PROVIDER`/`OMS_RERANK_MODEL`이 필요하다. 없거나 불완전하거나 설치되지 않은 선택은 크게 실패한다. G004 확장은 명시적으로 쓸 수 있는 기능이며 대체·동등·우월을 주장하지 않는다.
122
+ | 레이어 | 맡는 것 |
123
+ | :--- | :--- |
124
+ | **나의 볼트** | Markdown 노트, 폴더, 속성, 원본 템플릿. Obsidian이 사령탑으로 남는다. |
125
+ | **나의 계약** | `oms setup`에서 확인한 규약. 볼트 밖 `~/.oms/vaults/<vault-id>/`에 봉인한다. |
126
+ | **OMS** | 검색, 지원되는 쓰기의 계약 판정, 링크 검사, 명시적인 색인 유지보수. |
127
+ | **에이전트** | 맥락을 읽고 노트를 작성하며 호스트에 맞는 워크플로를 쓴다. 보존할 가치는 사용자와 에이전트가 판단한다. |
58
128
 
59
- `oms note audit`는 기존 노트를 봉인에 비추어 판정하고 `{path, field, kind}` 항목을 보고한다. 노트를 다시 쓰지 않는다. create, append, update, backfill은 폐기된 노트 작업이다. link apply는 작업이 아니다. 폐기된 작업을 위한 노트 렌더러나 호환 경로는 없다.
129
+ > [!IMPORTANT]
130
+ > **쓰기 검사를 신뢰하기 전에 계약부터 설정한다.** 이 기기에 봉인이 없는 볼트는 계약 판정을 하지 않는다. 일반적인 경로·입력 보호는 그대로 적용된다. 계약을 위반하는 쓰기는 파일을 바꾸지 않는다. 쓰기 허용은 구조 준수를 뜻하며, 사실의 정확성이나 품질 승인이 아니다.
60
131
 
61
- ## MCP 도구
132
+ <details>
133
+ <summary><strong>볼트 계약 자세히 보기</strong></summary>
62
134
 
63
- `oms serve mcp`는 정확히 다섯 개의 공개 도구를 노출한다.
135
+ - **의미는 사용자 소유다.** 폴더와 속성 pool을 함께 인터뷰한다. 속성 이름·폴더·페르소나를 하드코딩하지 않고 Inbox fallback도 없다.
136
+ - **볼트 안의 제어 파일은 하나다.** `.oms/settings.json`에 `version`, `vaultId`, `templateFolder`, `embedding`, `agentRepair`를 둔다. 다른 `.oms/` 항목은 무시하고 `oms doctor contract`가 예상하지 않은 제어 파일로 보고한다. `.obsidian/types.json`은 읽기 전용 관측값이며 봉인을 덮어쓰지 않는다.
137
+ - **템플릿은 원본으로 남는다.** 템플릿은 `templateFolder`에 있으며 봉인하거나 판정하지 않는다. 새 노트는 살아 있는 템플릿으로 뼈대를 채운다. 쓰기가 이름을 준 템플릿, 없으면 basename이나 `folder:` 키가 대상 폴더와 맞는 유일한 템플릿이다. 템플릿 파일을 다시 쓰거나 복사하지 않으며, Templater·JavaScript·전용 token 언어를 해석하거나 실행하지 않는다. 쓰기는 작성 중인 노트의 기계적인 부분만 채운다. `{{title}}`·`{{date}}`·`{{time}}` 변수, 새 노트의 date·datetime 기본값, 선택한 템플릿의 frontmatter 기본값과 빠진 heading이다. 노트에 이미 있는 값이 우선한다. 필수 값을 대신 채우지는 않는다.
138
+ - **이전 봉인도 읽힌다.** 새 봉인은 폴더와 속성만 저장한다. 이전 릴리스가 만든 봉인도 그대로 읽히며, `oms setup status`는 그 템플릿 제약을 `legacyTemplates` 개수로 보고할 뿐 강제하지 않는다.
139
+ - **판정자는 하나다.** 거부 시 `{field, kind}` 위반과 안내 명령 하나만 반환한다. 규칙 값, 저장소 경로, 계약 본문은 반환하지 않는다.
140
+ - **봉인 증거가 맞지 않으면 쓰기를 거부한다.** 이 기기의 증거가 볼트와 어긋나면 `contract-unreadable`로 거부하고 소유자가 `oms setup`을 다시 실행해야 한다. 봉인이 아예 없는 기기에서는 판정하지 않는 것과 구별한다.
64
141
 
65
- `write` · `search` · `link` · `status` · `doctor`
142
+ [아키텍처](./docs/architecture.md), [컨벤션](./docs/conventions.md), [ADR-007](https://github.com/GoBeromsu/oh-my-second-brain/blob/main/docs/decisions/ADR-007-vault-contract-ontology.md)을 참고한다.
66
143
 
67
- 7개 스킬(`distill`, `doctor`, `link`, `search`, `setup`, `status`, `write`)은 호스트 workflow다. `distill`과 `setup`은 도구가 없다. `setup`은 소유자에게 setup 질문을 하나씩 묻고 첫 봉인이나 더 엄격한 재봉인만 한다.
144
+ </details>
68
145
 
69
- 다섯 도구는 스킬의 부분집합이며, 두 집합 모두 14개 CLI family와 다르다. 세부 기능은 다섯 도구 아래의 `op` 값으로 남는다. 봉인에는 MCP 작업도 스킬도 없다.
146
+ <details>
147
+ <summary><strong>설정, 템플릿 뼈대, 복구</strong></summary>
70
148
 
71
- `write {path, content, template?}`는 노트 전체를 판정해 허용될 때만 저장한다. `template`은 선택 사항이며 노트가 따르는 봉인된 템플릿을 가리킨다. `status`와 모든 search 작업은 읽기 전용이다. `doctor` 도구는 봉인을 검증하고 노트를 감사하며 명시적인 index 유지보수를 실행한다. 노트를 backfill하지 않는다. 볼트 안에서 Claude의 기본 Write, Edit, MultiEdit, NotebookEdit는 `oms hook pre`를 통해 같은 판정자에 도달한다. Codex와 Hermes에는 쓰기 hook이 없으므로 MCP `write`로 쓴 노트만 판정된다.
149
+ 터미널에서 `oms setup`을 실행하면 대화형 인터뷰를 거쳐 계약을 봉인한다. `oms interview`는 같은 터미널 인터뷰를 독립 명령으로 제공하며, 터미널이 필요하고 `OMS_NON_INTERACTIVE=1`이면 실행을 거부한다.
72
150
 
73
- ## 설치
151
+ `setup` 스킬은 `oms setup --questions`로 질문을 받아 소유자에게 하나씩 묻고, `oms setup --answers <file|->`로 답을 제출한다. 이 경로는 첫 봉인이나 더 엄격한 계약만 봉인하며, 계약을 느슨하게 하는 재봉인은 소유자의 터미널에서 한다. MCP `interview` 도구는 여러 호출에 걸쳐 인터뷰를 이어 간다. `op: questions`는 읽기 전용이고, `answer`, `confirm`, `seal`은 검증된 대상의 인터뷰 로그에 기록한다. 소유자가 확인한 제안만 봉인하며 오래된 seal lock을 회수하지 않는다.
74
152
 
75
- Node.js 20 이상이 필요하다.
153
+ setup과 인터뷰는 폴더와 속성만 묻는다. `oms setup extract --template <name>`은 `templateFolder`의 템플릿이 채울 뼈대(원본 경로, `folder:` 선택자, 속성 이름, heading)를 미리 보여 준다. 템플릿을 고치면 재봉인 없이 다음 쓰기부터 반영된다.
76
154
 
77
- ```bash
78
- npm install -g oh-my-second-brain
79
- oms host install --runtime all --vault /path/to/vault --yes
155
+ `oms doctor contract`는 봉인, 오래된 lock, 고아 generation, 예상하지 않은 제어 파일, hook 전송 실패를 진단한다. `--fix`는 이동했거나 색인되지 않은 볼트를 다시 색인할 뿐이다. 다른 봉인 문제는 `oms setup`으로 복구한다.
156
+
157
+ 모델 수명주기는 별도다: `oms setup model install|select|waive|status`.
158
+
159
+ </details>
160
+
161
+ ## MCP 도구와 에이전트 연결
162
+
163
+ **하나의 도메인 커널, 호스트에 맞는 연결 방식.**
164
+
165
+ `write` · `search` · `interview` · `doctor`
166
+
167
+ | MCP 도구 | 역할 |
168
+ | :--- | :--- |
169
+ | `write` | 노트 전체를 봉인된 계약으로 판정하고 허용된 쓰기를 저장한다. |
170
+ | `search` | 볼트를 바꾸지 않고 노트, 구조화된 맥락, wikilink 제안을 찾는다. |
171
+ | `interview` | 볼트 인터뷰 질문과 봉인 상태를 보여 준다. 아무것도 봉인하지 않는다. |
172
+ | `doctor` | 읽기 전용 `status`, 계약 진단, 노트 감사, 링크 검사, 명시적인 색인 유지보수를 수행한다. |
173
+
174
+ 6개 스킬은 `distill`, `doctor`, `interview`, `search`, `setup`, `write`다.
175
+
176
+ `distill`과 `setup`은 대응 MCP 도구가 없는 워크플로다. 봉인에는 MCP 작업이 없고, 세부 기능은 네 도구 아래의 `op` 값으로 제공한다. 도구 annotation은 도구별로 정한다. `write`와 `doctor` 복구는 변경을 일으키고 `interview`는 보수적으로 두므로 읽기 전용으로 표시한 도구는 `search`뿐이다.
177
+
178
+ | 호스트 | 통합 방식 | 쓰기 검사 |
179
+ | :--- | :--- | :--- |
180
+ | **Claude Code** | 네이티브 plugin asset, 스킬, MCP | MCP `write`와 기본 Write·Edit·MultiEdit·NotebookEdit용 `oms hook pre`. |
181
+ | **Codex** | 네이티브 plugin asset, 가이드, MCP | MCP `write`만 검사. 기본 쓰기 hook은 없다. |
182
+ | **Hermes** | 프로필별 스킬, 가이드, MCP | MCP `write`만 검사. 기본 쓰기 hook은 없다. |
183
+
184
+ > [!NOTE]
185
+ > Claude hook은 판정된 계약 위반을 거부하지만, hook 자체를 실행할 수 없으면 경고와 함께 쓰기를 허용한다. Codex와 Hermes의 기본 파일 쓰기는 OMS 판정자를 거치지 않는다. 파일시스템 전체를 통제하는 sandbox가 아니다.
186
+
187
+ Gajae-Code에서는 `gjc plugin install oms@oms`로 marketplace plugin을 설치한다. 패키지 루트 `skills/` 경로에서 스킬 6개를 발견한다. 자세한 내용은 [호스트 asset](./docs/adapters.md)을 참고한다.
188
+
189
+ <details>
190
+ <summary><strong>호스트 유지보수와 볼트 선택</strong></summary>
191
+
192
+ 호스트 설치는 `${XDG_CONFIG_HOME:-~/.config}/oms/vault.json`에 서명된 유지보수 포인터를 기록하고, 관리하는 호스트 항목에 `oms serve mcp --vault /path/to/vault`를 설정한다. `oms setup host install|remove|sync|status`만 이 포인터로 통합을 유지보수한다.
193
+
194
+ 런타임은 이 포인터를 읽지 않는다. 우선순위는 **명시적 target → 로컬 볼트 제어 파일 → bridge → `OMS_VAULT` → 현재 디렉터리**다. 현재 디렉터리 fallback은 읽기 전용으로, 봉인·노트 쓰기·파생 상태 복구에는 쓸 수 없다.
195
+
196
+ `oms setup package update`는 패키지만 갱신한다. 설치된 호스트 asset은 `oms setup host sync`로 따로 동기화한다. [검증된 target](./docs/verified-target.md)을 참고한다.
197
+
198
+ </details>
199
+
200
+ ## 필요한 방식으로 검색
201
+
202
+ **기본은 lexical. 추가 검색 채널은 직접 선택한다.** 계약을 통과하지 못하는 노트도 검색에 포함한다. 계약이 없거나 손상되어도 검색은 멈추지 않는다.
203
+
204
+ | 기능 | 선택 방법 | 필요 조건 |
205
+ | :--- | :--- | :--- |
206
+ | Lexical 검색 | `oms search <text>` | vector 모델 불필요. |
207
+ | Vector 검색 | `--vec <text>` | 완전한 `OMS_EMBEDDING_PROVIDER` / `OMS_EMBEDDING_MODEL` 쌍. |
208
+ | HyDE | `--hyde <text>` | embedding 쌍과 `OMS_GENERATE_PROVIDER` / `OMS_GENERATE_MODEL`. |
209
+ | 질의 확장 | `--expand` | 명시적인 G004 확장. `--max-queries`는 1–32. |
210
+ | Reranking | `--rerank` | 완전한 `OMS_RERANK_PROVIDER` / `OMS_RERANK_MODEL` 쌍. |
211
+
212
+ 모델 선택이 없거나 불완전하거나 설치되지 않았다면 다른 기능으로 조용히 대체하지 않고 오류를 알린다. 사용 가능한 검색 선택지이며, 다른 엔진과의 동등성이나 우월성을 주장하지 않는다.
213
+
214
+ 구조화된 맥락은 `oms search --context`, 노트 하나를 정확히 읽을 때는 `oms search --path <note>`를 쓴다. 색인 작업은 명시적으로 실행하며 `oms doctor sync-embeddings --mode sync|embed|repair`는 서로 다른 세 모드 중 하나를 고른다. 전체 작업은 [CLI 맵](./docs/cli-map.md)을 참고한다.
215
+
216
+ ## CLI 레퍼런스
217
+
218
+ `oms`는 `oh-my-second-brain`의 짧은 별칭이며 CLI family는 7개다. 0.19에서 0.18 family를 교체했다. [0.19 마이그레이션 가이드](./docs/migration-0.19.md)를 참고한다.
219
+
220
+ ```text
221
+ oms search <text> 노트 검색. 기본은 lexical
222
+ oms search --path|--context|--link 노트 하나 읽기, 맥락 조회, 링크 제안
223
+ oms interview 터미널에서 볼트 소유자를 인터뷰하고 봉인
224
+ oms write <path> 계약이 허용하면 stdin의 노트를 저장
225
+ oms setup 계약 봉인 (에이전트는 --questions/--answers)
226
+ oms setup extract|status 템플릿 뼈대 미리보기 또는 계약 상태 표시
227
+ oms setup host install|remove|sync|status 호스트 asset과 MCP 등록 관리
228
+ oms setup model install|select|waive|status 로컬 모델 선택 관리
229
+ oms setup package check|update OMS 패키지 확인 또는 갱신
230
+ oms setup bridge add|remove|status 저장소-볼트 bridge 관리
231
+ oms doctor status 읽기 전용 볼트 상태 표시
232
+ oms doctor contract|audit|link-check 계약, 노트, wikilink 진단
233
+ oms doctor sync-embeddings|cleanup|build-graph 파생 색인과 그래프 유지보수
234
+ oms serve mcp|http MCP 또는 로컬 HTTP 서버 시작
235
+ oms hook pre Claude 쓰기를 계약으로 판정
80
236
  ```
81
237
 
82
- Gajae-Code에서는 npm 패키지를 marketplace plugin으로 설치한다: `gjc plugin install oms@oms`. GJC는 패키지 루트의 `skills/` 관례 경로에서 일곱 OMS 스킬을 찾는다.
238
+ <details>
239
+ <summary><strong>명령 동작과 폐기된 작업</strong></summary>
240
+
241
+ 인식되는 모든 명령은 `--help`와 `-h`를 받으며 exit 0, 부작용 없음으로 끝난다. 알 수 없는 명령과 `--help`를 함께 쓰면 exit 1이다. 0.19에서 제거된 family는 exit 1로 끝나며 대체 명령을 알려 준다.
242
+
243
+ `oms doctor audit`는 노트를 다시 쓰지 않고 `{path, field, kind}` 항목을 보고한다. 노트는 `oms write <path> < note.md` 또는 MCP `write {path, content, template?, ifMatch?, check?}`로 전체 내용을 쓴다. 둘 다 같은 쓰기 파이프라인을 거친다. 선택 사항인 `template`은 새 노트의 뼈대를 채울 `templateFolder`의 템플릿 이름이다. 기존 노트를 덮어쓰려면 현재 `sha256:` revision을 `ifMatch`(`--if-match`)로 넘겨야 하고, `check`(`--check`)는 디스크를 건드리지 않고 판정만 한다. 허용된 쓰기는 새 revision이 담긴 receipt를 돌려주고, 엔진 저장소가 있으면 같은 호출에서 키워드 인덱스를 갱신하므로 노트를 바로 검색할 수 있다. 완료 호출이나 리뷰어 대화는 없다.
244
+
245
+ `oms doctor cleanup`은 제거 가능한 파생 상태를 지운다. `oms doctor build-graph`는 노트 그래프를 다시 만든다.
246
+
247
+ 노트 `create`, `append`, `update`, `backfill`은 폐기된 작업이다. `link apply`, 노트 렌더러, 폐기된 작업을 위한 호환 경로는 없다.
248
+
249
+ </details>
250
+
251
+ ## 문서
252
+
253
+ | 시작하기 | 더 알아보기 |
254
+ | :--- | :--- |
255
+ | [설치](./docs/install.md): 설치, setup, 모델, 제거 | [아키텍처](./docs/architecture.md): 권위와 도메인 경계 |
256
+ | [볼트 컨벤션](./docs/conventions.md): 설정과 봉인된 계약 | [CLI 맵](./docs/cli-map.md): 명령과 MCP 작업 매핑 |
257
+ | [호스트 통합](./docs/adapters.md): Claude Code, Codex, Hermes | [검증된 target](./docs/verified-target.md): 안전한 볼트 선택 |
258
+ | [릴리스](https://github.com/GoBeromsu/oh-my-second-brain/releases): 배포 버전 | [변경 이력](./CHANGELOG.md): 무엇이 왜 달라졌는가 |
259
+
260
+ ## 기여와 크레딧
83
261
 
84
- 호스트 설치는 정식 볼트를 `${XDG_CONFIG_HOME:-~/.config}/oms/vault.json`에 기록하고, 관리하는 각 호스트 항목에 `oms serve mcp --vault /path/to/vault`를 새긴다. `oms host install|remove|sync|status`는 그 서명된 pointer를 호스트 통합 유지보수에만 쓴다. `oms package update`는 패키지를 업데이트하지만 호스트를 암묵적으로 sync하지 않는다. `oms host sync`를 따로 실행한다.
262
+ [기여 가이드](https://github.com/GoBeromsu/oh-my-second-brain/blob/main/CONTRIBUTING.md)를 읽거나, 재현 가능한 문제와 구체적인 제안을 [이슈](https://github.com/GoBeromsu/oh-my-second-brain/issues)로 남길 수 있다.
85
263
 
86
- runtime target 해석은 호스트 유지보수 pointer를 읽지 않는다. 우선순위는 명시적 target, 로컬 볼트 제어 파일, bridge, `OMS_VAULT`, 그리고 안전한 읽기 전용 fallback으로서의 현재 디렉터리다. 봉인, 노트 쓰기, 파생 상태 repair는 그 fallback을 쓸 수 없다.
264
+ [ACKNOWLEDGMENTS](./ACKNOWLEDGMENTS.md)는 Ouroboros, Gajae Code의 deep-interview 등 설계에 영향을 준 아이디어를 기록한다. runtime 복제나 연구 결과를 뜻하지 않는다. 별자리 배너는 [beomsukoh.com](https://beomsukoh.com/)의 연결된 노트 풍경에서 착안한 자체 제작 일러스트다. 이미지는 개념을 설명하는 도식이며 제품 화면, host smoke 증거, 제품 gate 통과 결과가 아니다.
87
265
 
88
- `OMS_VAULT`는 명시적·로컬·bridge target이 없을 때 지원되는 환경 변수 fallback이다.
266
+ ---
89
267
 
90
- [설치](./docs/install.md), [아키텍처](./docs/architecture.md), [컨벤션](./docs/conventions.md), [CLI 맵](./docs/cli-map.md), [호스트 asset](./docs/adapters.md), [검증 대상](./docs/verified-target.md)을 참고한다.
268
+ <p align="center">
269
+ <strong>노트의 주인은 계속 나다.</strong><br />
270
+ Built by <a href="https://github.com/GoBeromsu">Beomsu Koh</a> · Package licensed MIT
271
+ </p>