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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +3 -4
- package/.codex-plugin/plugin.json +2 -2
- package/CHANGELOG-assets.md +14 -0
- package/CHANGELOG-cli.md +34 -0
- package/CHANGELOG-kernel.md +53 -0
- package/CHANGELOG-mcp.md +25 -0
- package/CHANGELOG-vendors.md +12 -0
- package/CHANGELOG.md +10 -0
- package/README.ko.md +235 -54
- package/README.md +235 -54
- package/assets/claude/CLAUDE.md +11 -6
- package/assets/claude/hooks/oms-guard.mjs +23 -8
- package/assets/codex/AGENTS.md +5 -4
- package/assets/codex/rules/oms.md +6 -6
- package/assets/hermes/README.md +6 -6
- package/assets/hermes/SOUL.md +8 -7
- package/assets/hermes-manifest.json +2 -2
- package/assets/readme/hero.svg +23 -0
- package/assets/skills/distill/SKILL.md +1 -1
- package/assets/skills/doctor/SKILL.md +13 -6
- package/assets/skills/interview/SKILL.md +38 -0
- package/assets/skills/search/SKILL.md +7 -4
- package/assets/skills/setup/SKILL.md +14 -12
- package/assets/skills/write/SKILL.md +10 -6
- package/dist/cli/audit.js +2 -2
- package/dist/cli/contract-command.d.ts +18 -0
- package/dist/cli/contract-command.js +175 -55
- package/dist/cli/contract-command.js.map +1 -1
- package/dist/cli/doctor-command.d.ts +7 -0
- package/dist/cli/doctor-command.js +158 -0
- package/dist/cli/doctor-command.js.map +1 -0
- package/dist/cli/engine-session.js +1 -1
- package/dist/cli/engine-session.js.map +1 -1
- package/dist/cli/evolution-approve.d.ts +64 -0
- package/dist/cli/evolution-approve.js +138 -0
- package/dist/cli/evolution-approve.js.map +1 -0
- package/dist/cli/graph-command.js +5 -12
- package/dist/cli/graph-command.js.map +1 -1
- package/dist/cli/host-commands.d.ts +1 -1
- package/dist/cli/host-commands.js +7 -7
- package/dist/cli/host-commands.js.map +1 -1
- package/dist/cli/index-command.js +9 -9
- package/dist/cli/index-command.js.map +1 -1
- package/dist/cli/interview-command.d.ts +10 -0
- package/dist/cli/interview-command.js +72 -0
- package/dist/cli/interview-command.js.map +1 -0
- package/dist/cli/lineage-command.d.ts +16 -0
- package/dist/cli/lineage-command.js +113 -0
- package/dist/cli/lineage-command.js.map +1 -0
- package/dist/cli/model-command.js +1 -1
- package/dist/cli/model-command.js.map +1 -1
- package/dist/cli/note-command.js +1 -3
- package/dist/cli/note-command.js.map +1 -1
- package/dist/cli/oms.d.ts +0 -3
- package/dist/cli/oms.js +61 -95
- package/dist/cli/oms.js.map +1 -1
- package/dist/cli/package-command.js +7 -7
- package/dist/cli/package-command.js.map +1 -1
- package/dist/cli/removed-families.d.ts +6 -0
- package/dist/cli/removed-families.js +39 -0
- package/dist/cli/removed-families.js.map +1 -0
- package/dist/cli/search-usage.js +18 -9
- package/dist/cli/search-usage.js.map +1 -1
- package/dist/cli/search.d.ts +9 -1
- package/dist/cli/search.js +103 -50
- package/dist/cli/search.js.map +1 -1
- package/dist/cli/setup-command.d.ts +1 -1
- package/dist/cli/setup-command.js +48 -15
- package/dist/cli/setup-command.js.map +1 -1
- package/dist/cli/status-command.d.ts +5 -0
- package/dist/cli/status-command.js +72 -59
- package/dist/cli/status-command.js.map +1 -1
- package/dist/cli/usage.js +30 -33
- package/dist/cli/usage.js.map +1 -1
- package/dist/cli/write-command.d.ts +14 -0
- package/dist/cli/write-command.js +120 -0
- package/dist/cli/write-command.js.map +1 -0
- package/dist/kernel/contract/audit.d.ts +1 -1
- package/dist/kernel/contract/audit.js +8 -4
- package/dist/kernel/contract/audit.js.map +1 -1
- package/dist/kernel/contract/contradiction.d.ts +26 -0
- package/dist/kernel/contract/contradiction.js +40 -0
- package/dist/kernel/contract/contradiction.js.map +1 -0
- package/dist/kernel/contract/digest.d.ts +15 -0
- package/dist/kernel/contract/digest.js +24 -0
- package/dist/kernel/contract/digest.js.map +1 -0
- package/dist/kernel/contract/gap-ledger.d.ts +132 -0
- package/dist/kernel/contract/gap-ledger.js +398 -0
- package/dist/kernel/contract/gap-ledger.js.map +1 -0
- package/dist/kernel/contract/gaps-report.d.ts +44 -0
- package/dist/kernel/contract/gaps-report.js +49 -0
- package/dist/kernel/contract/gaps-report.js.map +1 -0
- package/dist/kernel/contract/generation-snapshot.d.ts +56 -0
- package/dist/kernel/contract/generation-snapshot.js +245 -0
- package/dist/kernel/contract/generation-snapshot.js.map +1 -0
- package/dist/kernel/contract/guard-events.d.ts +4 -0
- package/dist/kernel/contract/guard-events.js +3 -1
- package/dist/kernel/contract/guard-events.js.map +1 -1
- package/dist/kernel/contract/interview-log.d.ts +69 -0
- package/dist/kernel/contract/interview-log.js +223 -0
- package/dist/kernel/contract/interview-log.js.map +1 -0
- package/dist/kernel/contract/interview-resume.d.ts +74 -0
- package/dist/kernel/contract/interview-resume.js +177 -0
- package/dist/kernel/contract/interview-resume.js.map +1 -0
- package/dist/kernel/contract/interview.d.ts +58 -15
- package/dist/kernel/contract/interview.js +111 -179
- package/dist/kernel/contract/interview.js.map +1 -1
- package/dist/kernel/contract/judge-write.d.ts +54 -14
- package/dist/kernel/contract/judge-write.js +65 -33
- package/dist/kernel/contract/judge-write.js.map +1 -1
- package/dist/kernel/contract/judge.d.ts +14 -2
- package/dist/kernel/contract/judge.js +39 -104
- package/dist/kernel/contract/judge.js.map +1 -1
- package/dist/kernel/contract/legacy.d.ts +15 -0
- package/dist/kernel/contract/legacy.js +9 -0
- package/dist/kernel/contract/legacy.js.map +1 -0
- package/dist/kernel/contract/lineage-health.d.ts +20 -0
- package/dist/kernel/contract/lineage-health.js +71 -0
- package/dist/kernel/contract/lineage-health.js.map +1 -0
- package/dist/kernel/contract/lineage.d.ts +164 -0
- package/dist/kernel/contract/lineage.js +304 -0
- package/dist/kernel/contract/lineage.js.map +1 -0
- package/dist/kernel/contract/loosening.d.ts +15 -11
- package/dist/kernel/contract/loosening.js +13 -102
- package/dist/kernel/contract/loosening.js.map +1 -1
- package/dist/kernel/contract/mutation.d.ts +56 -0
- package/dist/kernel/contract/mutation.js +83 -0
- package/dist/kernel/contract/mutation.js.map +1 -0
- package/dist/kernel/contract/redact.js +0 -9
- package/dist/kernel/contract/redact.js.map +1 -1
- package/dist/kernel/contract/revision.d.ts +10 -0
- package/dist/kernel/contract/revision.js +14 -0
- package/dist/kernel/contract/revision.js.map +1 -0
- package/dist/kernel/contract/scripted-interview.d.ts +29 -2
- package/dist/kernel/contract/scripted-interview.js +72 -5
- package/dist/kernel/contract/scripted-interview.js.map +1 -1
- package/dist/kernel/contract/state-dir.d.ts +50 -0
- package/dist/kernel/contract/state-dir.js +234 -0
- package/dist/kernel/contract/state-dir.js.map +1 -0
- package/dist/kernel/contract/status.d.ts +32 -8
- package/dist/kernel/contract/status.js +62 -14
- package/dist/kernel/contract/status.js.map +1 -1
- package/dist/kernel/contract/store.d.ts +133 -9
- package/dist/kernel/contract/store.js +240 -47
- package/dist/kernel/contract/store.js.map +1 -1
- package/dist/kernel/contract/types.d.ts +69 -18
- package/dist/kernel/contract/types.js +71 -30
- package/dist/kernel/contract/types.js.map +1 -1
- package/dist/kernel/contract/vault-id.d.ts +5 -1
- package/dist/kernel/contract/vault-id.js +10 -3
- package/dist/kernel/contract/vault-id.js.map +1 -1
- package/dist/kernel/conventions/frontmatter.js +25 -0
- package/dist/kernel/conventions/frontmatter.js.map +1 -1
- package/dist/kernel/conventions/note-exclude.d.ts +6 -9
- package/dist/kernel/conventions/note-exclude.js +29 -117
- package/dist/kernel/conventions/note-exclude.js.map +1 -1
- package/dist/kernel/conventions/report.js +1 -1
- package/dist/kernel/conventions/report.js.map +1 -1
- package/dist/kernel/doctor/evolution-ops.d.ts +48 -0
- package/dist/kernel/doctor/evolution-ops.js +173 -0
- package/dist/kernel/doctor/evolution-ops.js.map +1 -0
- package/dist/kernel/doctor/evolution-status.d.ts +31 -0
- package/dist/kernel/doctor/evolution-status.js +38 -0
- package/dist/kernel/doctor/evolution-status.js.map +1 -0
- package/dist/kernel/doctor/service.d.ts +23 -3
- package/dist/kernel/doctor/service.js +158 -4
- package/dist/kernel/doctor/service.js.map +1 -1
- package/dist/kernel/engine/embed/config.js +3 -3
- package/dist/kernel/engine/embed/config.js.map +1 -1
- package/dist/kernel/engine/index-update.d.ts +41 -0
- package/dist/kernel/engine/index-update.js +133 -0
- package/dist/kernel/engine/index-update.js.map +1 -0
- package/dist/kernel/engine/retrieval/folder-context.js +1 -1
- package/dist/kernel/engine/retrieval/template-source.js +24 -19
- package/dist/kernel/engine/retrieval/template-source.js.map +1 -1
- package/dist/kernel/evolution/convergence.d.ts +28 -0
- package/dist/kernel/evolution/convergence.js +82 -0
- package/dist/kernel/evolution/convergence.js.map +1 -0
- package/dist/kernel/evolution/decision.d.ts +14 -0
- package/dist/kernel/evolution/decision.js +2 -0
- package/dist/kernel/evolution/decision.js.map +1 -0
- package/dist/kernel/evolution/evaluator.d.ts +47 -0
- package/dist/kernel/evolution/evaluator.js +34 -0
- package/dist/kernel/evolution/evaluator.js.map +1 -0
- package/dist/kernel/evolution/events.d.ts +28 -0
- package/dist/kernel/evolution/events.js +108 -0
- package/dist/kernel/evolution/events.js.map +1 -0
- package/dist/kernel/evolution/evolution-lock.d.ts +48 -0
- package/dist/kernel/evolution/evolution-lock.js +133 -0
- package/dist/kernel/evolution/evolution-lock.js.map +1 -0
- package/dist/kernel/evolution/evolve.d.ts +34 -0
- package/dist/kernel/evolution/evolve.js +80 -0
- package/dist/kernel/evolution/evolve.js.map +1 -0
- package/dist/kernel/evolution/human-approval.d.ts +37 -0
- package/dist/kernel/evolution/human-approval.js +37 -0
- package/dist/kernel/evolution/human-approval.js.map +1 -0
- package/dist/kernel/evolution/maker.d.ts +42 -0
- package/dist/kernel/evolution/maker.js +116 -0
- package/dist/kernel/evolution/maker.js.map +1 -0
- package/dist/kernel/evolution/mutation-direction.d.ts +31 -0
- package/dist/kernel/evolution/mutation-direction.js +113 -0
- package/dist/kernel/evolution/mutation-direction.js.map +1 -0
- package/dist/kernel/evolution/policy.d.ts +51 -0
- package/dist/kernel/evolution/policy.js +92 -0
- package/dist/kernel/evolution/policy.js.map +1 -0
- package/dist/kernel/evolution/rate-limit.d.ts +36 -0
- package/dist/kernel/evolution/rate-limit.js +59 -0
- package/dist/kernel/evolution/rate-limit.js.map +1 -0
- package/dist/kernel/evolution/request-state.d.ts +149 -0
- package/dist/kernel/evolution/request-state.js +374 -0
- package/dist/kernel/evolution/request-state.js.map +1 -0
- package/dist/kernel/evolution/revert.d.ts +30 -0
- package/dist/kernel/evolution/revert.js +98 -0
- package/dist/kernel/evolution/revert.js.map +1 -0
- package/dist/kernel/evolution/seal-gate-human.d.ts +29 -0
- package/dist/kernel/evolution/seal-gate-human.js +71 -0
- package/dist/kernel/evolution/seal-gate-human.js.map +1 -0
- package/dist/kernel/evolution/seal-gate.d.ts +70 -0
- package/dist/kernel/evolution/seal-gate.js +248 -0
- package/dist/kernel/evolution/seal-gate.js.map +1 -0
- package/dist/kernel/evolution/snapshot-contract.d.ts +20 -0
- package/dist/kernel/evolution/snapshot-contract.js +21 -0
- package/dist/kernel/evolution/snapshot-contract.js.map +1 -0
- package/dist/kernel/evolution/stage-consensus.d.ts +104 -0
- package/dist/kernel/evolution/stage-consensus.js +185 -0
- package/dist/kernel/evolution/stage-consensus.js.map +1 -0
- package/dist/kernel/evolution/stage-mechanical.d.ts +23 -0
- package/dist/kernel/evolution/stage-mechanical.js +84 -0
- package/dist/kernel/evolution/stage-mechanical.js.map +1 -0
- package/dist/kernel/evolution/stage-semantic.d.ts +35 -0
- package/dist/kernel/evolution/stage-semantic.js +80 -0
- package/dist/kernel/evolution/stage-semantic.js.map +1 -0
- package/dist/kernel/harness/surface-registry.d.ts +2 -0
- package/dist/kernel/harness/surface-registry.js +11 -19
- package/dist/kernel/harness/surface-registry.js.map +1 -1
- package/dist/kernel/install/asset-health.js +1 -1
- package/dist/kernel/install/asset-health.js.map +1 -1
- package/dist/kernel/link/convention-note.js +3 -3
- package/dist/kernel/link/convention-note.js.map +1 -1
- package/dist/kernel/search/read-exact.d.ts +45 -0
- package/dist/kernel/search/read-exact.js +175 -0
- package/dist/kernel/search/read-exact.js.map +1 -0
- package/dist/kernel/text/nfc.d.ts +11 -0
- package/dist/kernel/text/nfc.js +16 -0
- package/dist/kernel/text/nfc.js.map +1 -0
- package/dist/kernel/update/update.js +8 -8
- package/dist/kernel/update/update.js.map +1 -1
- package/dist/kernel/write/ambiguity.d.ts +91 -0
- package/dist/kernel/write/ambiguity.js +147 -0
- package/dist/kernel/write/ambiguity.js.map +1 -0
- package/dist/kernel/write/coerce.d.ts +42 -0
- package/dist/kernel/write/coerce.js +254 -0
- package/dist/kernel/write/coerce.js.map +1 -0
- package/dist/kernel/write/conform.d.ts +26 -0
- package/dist/kernel/write/conform.js +190 -0
- package/dist/kernel/write/conform.js.map +1 -0
- package/dist/kernel/write/frame.d.ts +44 -0
- package/dist/kernel/write/frame.js +66 -0
- package/dist/kernel/write/frame.js.map +1 -0
- package/dist/kernel/write/live-templates.d.ts +63 -0
- package/dist/kernel/write/live-templates.js +104 -0
- package/dist/kernel/write/live-templates.js.map +1 -0
- package/dist/{mcp → kernel/write}/note-write.js +1 -1
- package/dist/kernel/write/note-write.js.map +1 -0
- package/dist/kernel/write/payload.d.ts +53 -0
- package/dist/kernel/write/payload.js +51 -0
- package/dist/kernel/write/payload.js.map +1 -0
- package/dist/kernel/write/pipeline.d.ts +110 -0
- package/dist/kernel/write/pipeline.js +203 -0
- package/dist/kernel/write/pipeline.js.map +1 -0
- package/dist/kernel/write/receipt.d.ts +76 -0
- package/dist/kernel/write/receipt.js +26 -0
- package/dist/kernel/write/receipt.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.js +72 -443
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/doctor.d.ts +4 -0
- package/dist/mcp/tools/doctor.js +89 -0
- package/dist/mcp/tools/doctor.js.map +1 -0
- package/dist/mcp/tools/interview.d.ts +27 -0
- package/dist/mcp/tools/interview.js +264 -0
- package/dist/mcp/tools/interview.js.map +1 -0
- package/dist/mcp/tools/link.d.ts +4 -0
- package/dist/mcp/tools/link.js +24 -0
- package/dist/mcp/tools/link.js.map +1 -0
- package/dist/mcp/tools/search.d.ts +14 -0
- package/dist/mcp/tools/search.js +259 -0
- package/dist/mcp/tools/search.js.map +1 -0
- package/dist/mcp/tools/shared.d.ts +28 -0
- package/dist/mcp/tools/shared.js +34 -0
- package/dist/mcp/tools/shared.js.map +1 -0
- package/dist/mcp/tools/status.d.ts +9 -0
- package/dist/mcp/tools/status.js +50 -0
- package/dist/mcp/tools/status.js.map +1 -0
- package/dist/mcp/tools/write.d.ts +9 -0
- package/dist/mcp/tools/write.js +41 -0
- package/dist/mcp/tools/write.js.map +1 -0
- package/dist/mcp/update-notice.js +1 -1
- package/dist/mcp/update-notice.js.map +1 -1
- package/dist/vendors/claude/hook/pre-tool-use.d.ts +19 -2
- package/dist/vendors/claude/hook/pre-tool-use.js +69 -18
- package/dist/vendors/claude/hook/pre-tool-use.js.map +1 -1
- package/dist/vendors/codex/codex.js +2 -2
- package/dist/vendors/codex/codex.js.map +1 -1
- package/dist/vendors/hermes/hermes.js +18 -9
- package/dist/vendors/hermes/hermes.js.map +1 -1
- package/docs/adapters.md +4 -4
- package/docs/architecture.md +14 -14
- package/docs/cli-map.md +66 -48
- package/docs/conventions.md +12 -13
- package/docs/install.md +27 -28
- package/docs/migration-0.19.md +48 -0
- package/docs/verified-target.md +5 -5
- package/package.json +6 -3
- package/skills/distill/SKILL.md +1 -1
- package/skills/doctor/SKILL.md +13 -6
- package/skills/interview/SKILL.md +38 -0
- package/skills/search/SKILL.md +7 -4
- package/skills/setup/SKILL.md +14 -12
- package/skills/write/SKILL.md +10 -6
- package/assets/skills/link/SKILL.md +0 -30
- package/assets/skills/status/SKILL.md +0 -34
- package/dist/kernel/contract/contract-vault-fixture.d.ts +0 -45
- package/dist/kernel/contract/contract-vault-fixture.js +0 -53
- package/dist/kernel/contract/contract-vault-fixture.js.map +0 -1
- package/dist/kernel/contract/drift.d.ts +0 -6
- package/dist/kernel/contract/drift.js +0 -27
- package/dist/kernel/contract/drift.js.map +0 -1
- package/dist/kernel/contract/extract.d.ts +0 -37
- package/dist/kernel/contract/extract.js +0 -101
- package/dist/kernel/contract/extract.js.map +0 -1
- package/dist/kernel/search/morning-test-fixtures.d.ts +0 -7
- package/dist/kernel/search/morning-test-fixtures.js +0 -41
- package/dist/kernel/search/morning-test-fixtures.js.map +0 -1
- package/dist/mcp/note-write.js.map +0 -1
- package/skills/link/SKILL.md +0 -30
- package/skills/status/SKILL.md +0 -34
- /package/dist/{mcp → kernel/write}/note-write.d.ts +0 -0
package/README.ko.md
CHANGED
|
@@ -1,90 +1,271 @@
|
|
|
1
|
-
|
|
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&color=8b9daa&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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
74
|
+
```bash
|
|
75
|
+
npm install -g oh-my-second-brain
|
|
76
|
+
oms --help
|
|
77
|
+
```
|
|
6
78
|
|
|
7
|
-
|
|
79
|
+
### 2. 볼트 규약 정의
|
|
8
80
|
|
|
9
|
-
|
|
81
|
+
터미널에서 setup을 실행한다. 폴더와 속성을 인터뷰한 뒤 계약을 봉인한다. 기존 노트는 수정하지 않는다.
|
|
10
82
|
|
|
11
|
-
|
|
83
|
+
```bash
|
|
84
|
+
oms setup --vault /path/to/vault
|
|
85
|
+
oms setup status --vault /path/to/vault
|
|
86
|
+
```
|
|
12
87
|
|
|
13
|
-
|
|
88
|
+
### 3. 에이전트 연결
|
|
14
89
|
|
|
15
|
-
|
|
90
|
+
사용하는 호스트의 통합 기능을 설치한다.
|
|
16
91
|
|
|
17
|
-
|
|
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
|
-
|
|
98
|
+
### 4. 지식 꺼내 쓰기
|
|
22
99
|
|
|
23
100
|
```bash
|
|
24
|
-
|
|
25
|
-
oms
|
|
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
|
-
|
|
108
|
+
**연결한 에이전트에게 이렇게 요청할 수 있다.**
|
|
29
109
|
|
|
30
|
-
|
|
110
|
+
> 이 프로젝트와 관련된 내 노트를 찾아서, 이전에 내린 결정을 보여줘.
|
|
31
111
|
|
|
32
|
-
|
|
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
|
-
|
|
114
|
+
> 파일은 바꾸지 말고, 함께 연결하면 좋을 노트를 제안해줘.
|
|
50
115
|
|
|
51
|
-
|
|
116
|
+
실행 결과를 캡처한 것이 아니라 요청 예시다. 워크플로와 쓰기 검사 범위는 아래의 호스트별 설명을 따른다.
|
|
52
117
|
|
|
53
|
-
|
|
118
|
+
## 동작 방식
|
|
54
119
|
|
|
55
|
-
|
|
120
|
+
**의미는 사용자가 정한다. 내용은 에이전트가 쓴다. 구조는 OMS가 검사한다.**
|
|
56
121
|
|
|
57
|
-
|
|
122
|
+
| 레이어 | 맡는 것 |
|
|
123
|
+
| :--- | :--- |
|
|
124
|
+
| **나의 볼트** | Markdown 노트, 폴더, 속성, 원본 템플릿. Obsidian이 사령탑으로 남는다. |
|
|
125
|
+
| **나의 계약** | `oms setup`에서 확인한 규약. 볼트 밖 `~/.oms/vaults/<vault-id>/`에 봉인한다. |
|
|
126
|
+
| **OMS** | 검색, 지원되는 쓰기의 계약 판정, 링크 검사, 명시적인 색인 유지보수. |
|
|
127
|
+
| **에이전트** | 맥락을 읽고 노트를 작성하며 호스트에 맞는 워크플로를 쓴다. 보존할 가치는 사용자와 에이전트가 판단한다. |
|
|
58
128
|
|
|
59
|
-
|
|
129
|
+
> [!IMPORTANT]
|
|
130
|
+
> **쓰기 검사를 신뢰하기 전에 계약부터 설정한다.** 이 기기에 봉인이 없는 볼트는 계약 판정을 하지 않는다. 일반적인 경로·입력 보호는 그대로 적용된다. 계약을 위반하는 쓰기는 파일을 바꾸지 않는다. 쓰기 허용은 구조 준수를 뜻하며, 사실의 정확성이나 품질 승인이 아니다.
|
|
60
131
|
|
|
61
|
-
|
|
132
|
+
<details>
|
|
133
|
+
<summary><strong>볼트 계약 자세히 보기</strong></summary>
|
|
62
134
|
|
|
63
|
-
|
|
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
|
-
|
|
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
|
-
|
|
144
|
+
</details>
|
|
68
145
|
|
|
69
|
-
|
|
146
|
+
<details>
|
|
147
|
+
<summary><strong>설정, 템플릿 뼈대, 복구</strong></summary>
|
|
70
148
|
|
|
71
|
-
|
|
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
|
-
|
|
153
|
+
setup과 인터뷰는 폴더와 속성만 묻는다. `oms setup extract --template <name>`은 `templateFolder`의 템플릿이 채울 뼈대(원본 경로, `folder:` 선택자, 속성 이름, heading)를 미리 보여 준다. 템플릿을 고치면 재봉인 없이 다음 쓰기부터 반영된다.
|
|
76
154
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
264
|
+
[ACKNOWLEDGMENTS](./ACKNOWLEDGMENTS.md)는 Ouroboros, Gajae Code의 deep-interview 등 설계에 영향을 준 아이디어를 기록한다. runtime 복제나 연구 결과를 뜻하지 않는다. 별자리 배너는 [beomsukoh.com](https://beomsukoh.com/)의 연결된 노트 풍경에서 착안한 자체 제작 일러스트다. 이미지는 개념을 설명하는 도식이며 제품 화면, host smoke 증거, 제품 gate 통과 결과가 아니다.
|
|
87
265
|
|
|
88
|
-
|
|
266
|
+
---
|
|
89
267
|
|
|
90
|
-
|
|
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>
|