oh-my-second-brain 0.18.3 → 0.19.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 +8 -0
- package/CHANGELOG-cli.md +18 -0
- package/CHANGELOG-kernel.md +15 -0
- package/CHANGELOG-mcp.md +10 -0
- package/CHANGELOG-vendors.md +5 -0
- package/CHANGELOG.md +6 -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 +6 -6
- 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 +7 -5
- package/assets/skills/interview/SKILL.md +39 -0
- package/assets/skills/search/SKILL.md +5 -2
- package/assets/skills/setup/SKILL.md +18 -11
- package/assets/skills/write/SKILL.md +10 -6
- package/dist/cli/audit.js +2 -2
- package/dist/cli/contract-command.d.ts +9 -0
- package/dist/cli/contract-command.js +117 -41
- package/dist/cli/contract-command.js.map +1 -1
- package/dist/cli/doctor-command.d.ts +7 -0
- package/dist/cli/doctor-command.js +125 -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/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/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 +92 -50
- package/dist/cli/search.js.map +1 -1
- package/dist/cli/setup-command.d.ts +1 -1
- package/dist/cli/setup-command.js +46 -13
- package/dist/cli/setup-command.js.map +1 -1
- package/dist/cli/status-command.d.ts +5 -0
- package/dist/cli/status-command.js +63 -59
- package/dist/cli/status-command.js.map +1 -1
- package/dist/cli/usage.js +29 -35
- package/dist/cli/usage.js.map +1 -1
- package/dist/cli/write-command.d.ts +14 -0
- package/dist/cli/write-command.js +105 -0
- package/dist/cli/write-command.js.map +1 -0
- package/dist/kernel/contract/interpretation-fixture.d.ts +5 -0
- package/dist/kernel/contract/interpretation-fixture.js +97 -0
- package/dist/kernel/contract/interpretation-fixture.js.map +1 -0
- package/dist/kernel/contract/interpretation.d.ts +102 -0
- package/dist/kernel/contract/interpretation.js +211 -0
- package/dist/kernel/contract/interpretation.js.map +1 -0
- package/dist/kernel/contract/interview-log.d.ts +50 -0
- package/dist/kernel/contract/interview-log.js +194 -0
- package/dist/kernel/contract/interview-log.js.map +1 -0
- package/dist/kernel/contract/interview-resume.d.ts +65 -0
- package/dist/kernel/contract/interview-resume.js +163 -0
- package/dist/kernel/contract/interview-resume.js.map +1 -0
- package/dist/kernel/contract/interview.d.ts +71 -1
- package/dist/kernel/contract/interview.js +163 -61
- package/dist/kernel/contract/interview.js.map +1 -1
- package/dist/kernel/contract/scripted-interview.d.ts +28 -1
- package/dist/kernel/contract/scripted-interview.js +71 -4
- 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 +12 -1
- package/dist/kernel/contract/status.js +19 -7
- package/dist/kernel/contract/status.js.map +1 -1
- package/dist/kernel/contract/store.d.ts +7 -0
- package/dist/kernel/contract/store.js +13 -4
- package/dist/kernel/contract/store.js.map +1 -1
- package/dist/kernel/contract/types.d.ts +3 -1
- package/dist/kernel/contract/types.js +23 -23
- package/dist/kernel/contract/types.js.map +1 -1
- package/dist/kernel/conventions/note-exclude.js +2 -2
- package/dist/kernel/conventions/report.js +1 -1
- package/dist/kernel/conventions/report.js.map +1 -1
- package/dist/kernel/doctor/service.js +12 -2
- 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 +3 -3
- 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 +43 -0
- package/dist/kernel/search/read-exact.js +135 -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/conform.d.ts +23 -0
- package/dist/kernel/write/conform.js +155 -0
- package/dist/kernel/write/conform.js.map +1 -0
- package/dist/kernel/write/frame.d.ts +40 -0
- package/dist/kernel/write/frame.js +67 -0
- package/dist/kernel/write/frame.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 +40 -0
- package/dist/kernel/write/payload.js +39 -0
- package/dist/kernel/write/payload.js.map +1 -0
- package/dist/kernel/write/pipeline.d.ts +59 -0
- package/dist/kernel/write/pipeline.js +84 -0
- package/dist/kernel/write/pipeline.js.map +1 -0
- package/dist/kernel/write/receipt.d.ts +42 -0
- package/dist/kernel/write/receipt.js +21 -0
- package/dist/kernel/write/receipt.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.js +68 -443
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/doctor.d.ts +4 -0
- package/dist/mcp/tools/doctor.js +71 -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 +261 -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 +11 -0
- package/dist/mcp/tools/search.js +254 -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 +39 -0
- package/dist/mcp/tools/status.js.map +1 -0
- package/dist/mcp/tools/write.d.ts +8 -0
- package/dist/mcp/tools/write.js +40 -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/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 +9 -9
- package/docs/cli-map.md +56 -46
- package/docs/conventions.md +7 -7
- package/docs/install.md +27 -28
- package/docs/migration-0.19.md +48 -0
- package/docs/verified-target.md +5 -5
- package/package.json +4 -2
- package/skills/distill/SKILL.md +1 -1
- package/skills/doctor/SKILL.md +7 -5
- package/skills/interview/SKILL.md +39 -0
- package/skills/search/SKILL.md +5 -2
- package/skills/setup/SKILL.md +18 -11
- 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/extract.d.ts +0 -37
- package/dist/kernel/contract/extract.js +0 -101
- package/dist/kernel/contract/extract.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.md
CHANGED
|
@@ -1,90 +1,271 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="./assets/readme/hero.svg" alt="Oh My Second Brain. A quiet constellation of connected thoughts." width="100%" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">Oh My Second Brain</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>A constellation of knowledge, still yours.</strong><br />
|
|
9
|
+
A user-owned knowledge and convention layer for Obsidian, Markdown, and AI agents.
|
|
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 version" /></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 or later" /></a>
|
|
15
|
+
<a href="#mcp-tools--integrations"><img src="https://img.shields.io/badge/MCP-4_tools-97a8b1?style=flat-square" alt="4 MCP tools" /></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="Package license: MIT" /></a>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
<p align="center">
|
|
20
|
+
<a href="#quick-start"><strong>Quick start</strong></a> ·
|
|
21
|
+
<a href="#how-it-works">How it works</a> ·
|
|
22
|
+
<a href="#documentation">Documentation</a> ·
|
|
23
|
+
<a href="https://github.com/GoBeromsu/oh-my-second-brain/releases">Releases</a> ·
|
|
24
|
+
<a href="https://github.com/GoBeromsu/oh-my-second-brain/blob/main/README.ko.md">한국어</a>
|
|
25
|
+
</p>
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
Your vault already holds ideas, decisions, and things you learned. **OMS helps your agents find that knowledge and write within the conventions you defined.** No new note format. No prescribed folder system. No handover of your knowledge to a single host.
|
|
30
|
+
|
|
31
|
+
Obsidian stays the command center. Your notes stay plain Markdown, readable and editable even when OMS is not running. Connect Claude Code, Codex, or Hermes to the same vault through their host integrations.
|
|
32
|
+
|
|
33
|
+
## Why OMS?
|
|
34
|
+
|
|
35
|
+
<table>
|
|
36
|
+
<tr>
|
|
37
|
+
<td width="50%" valign="top">
|
|
38
|
+
<h3>Recall what you already know</h3>
|
|
39
|
+
Search your existing notes with lexical retrieval. Choose vector, HyDE, query expansion, or reranking explicitly when you need them.
|
|
40
|
+
</td>
|
|
41
|
+
<td width="50%" valign="top">
|
|
42
|
+
<h3>Your vault, your vocabulary</h3>
|
|
43
|
+
Define the meaning of folders, properties, and templates. OMS records your conventions instead of shipping a system you have to adopt.
|
|
44
|
+
</td>
|
|
45
|
+
</tr>
|
|
46
|
+
<tr>
|
|
47
|
+
<td width="50%" valign="top">
|
|
48
|
+
<h3>Give agents a shared contract</h3>
|
|
49
|
+
Seal your vault conventions through setup. Supported write paths check the whole note against that contract before saving it.
|
|
50
|
+
</td>
|
|
51
|
+
<td width="50%" valign="top">
|
|
52
|
+
<h3>Keep the files you own</h3>
|
|
53
|
+
Keep using your Markdown notes and templates. Setup does not rewrite them, and the sealed contract lives outside the vault.
|
|
54
|
+
</td>
|
|
55
|
+
</tr>
|
|
56
|
+
<tr>
|
|
57
|
+
<td width="50%" valign="top">
|
|
58
|
+
<h3>Connect across hosts</h3>
|
|
59
|
+
Use native integrations for Claude Code, Codex, and Hermes, with four MCP tools and six shared workflow skills.
|
|
60
|
+
</td>
|
|
61
|
+
<td width="50%" valign="top">
|
|
62
|
+
<h3>Inspect, don't guess</h3>
|
|
63
|
+
Check contract state, audit notes, inspect indexes, and review wikilink suggestions. Search and `doctor status` stay read-only.
|
|
64
|
+
</td>
|
|
65
|
+
</tr>
|
|
66
|
+
</table>
|
|
67
|
+
|
|
68
|
+
## Quick start
|
|
69
|
+
|
|
70
|
+
**Requires Node.js 20 or later and an existing Obsidian or Markdown vault.** Replace `/path/to/vault` with your vault's absolute path.
|
|
71
|
+
|
|
72
|
+
### 1. Install
|
|
2
73
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
74
|
+
```bash
|
|
75
|
+
npm install -g oh-my-second-brain
|
|
76
|
+
oms --help
|
|
77
|
+
```
|
|
6
78
|
|
|
7
|
-
|
|
79
|
+
### 2. Define your vault's conventions
|
|
8
80
|
|
|
9
|
-
|
|
81
|
+
Run setup in your terminal. The interview covers folders, properties, and templates, then seals the contract. Existing notes are not modified.
|
|
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. Connect your agent
|
|
14
89
|
|
|
15
|
-
|
|
90
|
+
Install the integration for the host you use:
|
|
16
91
|
|
|
17
|
-
|
|
92
|
+
```bash
|
|
93
|
+
oms setup host install --runtime claude --vault /path/to/vault --yes
|
|
94
|
+
```
|
|
18
95
|
|
|
19
|
-
|
|
96
|
+
Replace `claude` with `codex` or `hermes`; use `all` to install all three. Host integration is optional if you only need the CLI. See the [installation guide](./docs/install.md) for Hermes profiles, model setup, and removal.
|
|
20
97
|
|
|
21
|
-
|
|
98
|
+
### 4. Put your knowledge to work
|
|
22
99
|
|
|
23
100
|
```bash
|
|
24
|
-
|
|
25
|
-
oms
|
|
101
|
+
# Build the derived search index explicitly.
|
|
102
|
+
oms doctor sync-embeddings --mode sync --vault /path/to/vault
|
|
103
|
+
|
|
104
|
+
# Start with lexical search. No vector model required.
|
|
105
|
+
oms search "project decisions" --vault /path/to/vault
|
|
26
106
|
```
|
|
27
107
|
|
|
28
|
-
|
|
108
|
+
**Try asking your connected agent:**
|
|
29
109
|
|
|
30
|
-
|
|
110
|
+
> Find my notes about this project and surface the decisions I have already made.
|
|
31
111
|
|
|
32
|
-
|
|
33
|
-
oms bridge add|remove|status Manage repository-to-vault target bridges
|
|
34
|
-
oms contract setup|extract|status|doctor Seal the vault contract, or inspect and diagnose it
|
|
35
|
-
oms graph build|status Build or inspect the note graph
|
|
36
|
-
oms hook pre Judge a Claude write against the vault contract
|
|
37
|
-
oms host install|remove|sync|status Manage host assets and MCP registrations
|
|
38
|
-
oms index sync|embed|repair|status|clean Manage derived search state
|
|
39
|
-
oms link suggest|check Suggest or check note wikilinks
|
|
40
|
-
oms model install|select|waive|status Manage local model selection
|
|
41
|
-
oms note audit|get Audit notes against the contract, or read them
|
|
42
|
-
oms package check|update Check or update the OMS package
|
|
43
|
-
oms search query|context Run an explicit query or retrieve structured context
|
|
44
|
-
oms serve mcp|http Start the stdio MCP or local HTTP server
|
|
45
|
-
oms setup Interview the vault and seal its contract
|
|
46
|
-
oms status Show the read-only aggregate status
|
|
47
|
-
```
|
|
112
|
+
> Check this note against my vault contract and show me what needs attention.
|
|
48
113
|
|
|
49
|
-
|
|
114
|
+
> Suggest related notes I could link to, without changing any files.
|
|
50
115
|
|
|
51
|
-
|
|
116
|
+
These are example requests, not captured run results. Available workflows and write enforcement differ by host as described below.
|
|
52
117
|
|
|
53
|
-
|
|
118
|
+
## How it works
|
|
54
119
|
|
|
55
|
-
|
|
120
|
+
**You define the meaning. Your agent writes the content. OMS checks the structure.**
|
|
56
121
|
|
|
57
|
-
|
|
122
|
+
| Layer | What belongs there |
|
|
123
|
+
| :--- | :--- |
|
|
124
|
+
| **Your vault** | Your Markdown notes, folders, properties, and original templates. Obsidian remains the command center. |
|
|
125
|
+
| **Your contract** | The conventions confirmed through `oms setup`, sealed outside the vault under `~/.oms/vaults/<vault-id>/`. |
|
|
126
|
+
| **OMS** | Retrieval, contract judgment on supported writes, link inspection, and explicit index maintenance. |
|
|
127
|
+
| **Your agent** | Reads context, composes notes, and uses the appropriate host workflow. You and the agent decide what is worth keeping. |
|
|
58
128
|
|
|
59
|
-
|
|
129
|
+
> [!IMPORTANT]
|
|
130
|
+
> **Set up the contract before relying on write checks.** A vault with no seal on this machine is not contract-judged; general path and input safeguards still apply. A contract violation leaves the file unchanged. An allowed write means structural compliance, not factual accuracy or quality approval.
|
|
60
131
|
|
|
61
|
-
|
|
132
|
+
<details>
|
|
133
|
+
<summary><strong>The vault contract, in detail</strong></summary>
|
|
62
134
|
|
|
63
|
-
|
|
135
|
+
- **Meaning is user-owned.** The interview covers folders, the property pool, and templates together. OMS hardcodes no property names, folders, or personas and has no Inbox fallback.
|
|
136
|
+
- **One control file inside the vault.** `.oms/settings.json` holds `version`, `vaultId`, `templateFolder`, `embedding`, and `agentRepair`. Other `.oms/` entries are ignored and reported as unexpected control files by `oms doctor contract`. `.obsidian/types.json` is a read-only observation, not an override of the seal.
|
|
137
|
+
- **Templates stay yours.** OMS records what each template declares. It never rewrites or copies a template file, and does not parse or execute Templater, JavaScript, or a private token language. A write only fills what is mechanical in the note being written: `{{title}}`, `{{date}}` and `{{time}}` variables, date and datetime defaults on a new note, and the chosen template's missing headings. It never supplies a required value.
|
|
138
|
+
- **Drift is visible.** `oms setup status` reports templates as `active`, `drift`, or `missing`. It never silently re-seals a changed template.
|
|
139
|
+
- **One judge, bounded feedback.** Denied writes return `{field, kind}` violations and one guidance command, not rule values, store paths, or the contract body.
|
|
140
|
+
- **Mismatched seal evidence blocks writes.** When this machine's evidence no longer matches the vault, writes fail with `contract-unreadable` until the owner runs `oms setup` again. A machine with no seal is a different case: its vault is not contract-judged.
|
|
64
141
|
|
|
65
|
-
|
|
142
|
+
See [architecture](./docs/architecture.md), [conventions](./docs/conventions.md), and [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>Setup, template interpretation, and recovery</strong></summary>
|
|
70
148
|
|
|
71
|
-
`
|
|
149
|
+
`oms setup` in a terminal runs the interactive interview and seals the contract. `oms interview` is the same terminal interview on its own command; it requires a terminal and refuses to run under `OMS_NON_INTERACTIVE=1`.
|
|
72
150
|
|
|
73
|
-
|
|
151
|
+
The `setup` skill asks the owner each question via `oms setup --questions` and submits answers with `oms setup --answers <file|->`. This path can seal a first or stricter contract; a loosening reseal stays with the owner's terminal. The MCP `interview` tool continues the interview across calls: `op: questions` is read-only, and `answer`, `confirm`, and `seal` record to the interview log on a verified target. It seals only the proposal the owner confirmed and never reclaims a stale seal lock.
|
|
74
152
|
|
|
75
|
-
|
|
153
|
+
`oms setup extract --template <path>` returns a template source and its computed hash. The agent reads each template and submits its interpretation with `oms setup --interpretations <file>`. The owner confirms that interpretation before it drives the interview.
|
|
76
154
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
155
|
+
`oms doctor contract` diagnoses seal problems, stale locks, orphaned generations, unexpected control files, and hook transport failures. Its `--fix` only re-indexes a moved or unindexed vault. Other broken seals are recovered through `oms setup`.
|
|
156
|
+
|
|
157
|
+
Model lifecycle is separate: `oms setup model install|select|waive|status`.
|
|
158
|
+
|
|
159
|
+
</details>
|
|
160
|
+
|
|
161
|
+
## MCP tools & integrations
|
|
162
|
+
|
|
163
|
+
**One domain kernel, with host-native integrations.**
|
|
164
|
+
|
|
165
|
+
`write` · `search` · `interview` · `doctor`
|
|
166
|
+
|
|
167
|
+
| MCP tool | Purpose |
|
|
168
|
+
| :--- | :--- |
|
|
169
|
+
| `write` | Judge a whole note against the sealed contract and save an allowed write. |
|
|
170
|
+
| `search` | Retrieve notes, structured context, or wikilink suggestions without changing the vault. |
|
|
171
|
+
| `interview` | Continue the vault interview: list open questions, record answers, and seal only the proposal the owner confirmed. |
|
|
172
|
+
| `doctor` | Read-only `status`; diagnose the contract, audit notes, check links, and run explicit index maintenance. |
|
|
173
|
+
|
|
174
|
+
The six skills are `distill`, `doctor`, `interview`, `search`, `setup`, and `write`.
|
|
175
|
+
|
|
176
|
+
`distill` and `setup` are tool-less workflows; sealing has no MCP operation. Detail capabilities use `op` values under the four tools. Tool annotations are per tool: only `search` is marked read-only, because `write` and the `doctor` repairs mutate and `interview` is kept conservative.
|
|
177
|
+
|
|
178
|
+
| Host | Integration | Write checks |
|
|
179
|
+
| :--- | :--- | :--- |
|
|
180
|
+
| **Claude Code** | Native plugin assets, skills, and MCP | MCP `write` plus `oms hook pre` for native Write, Edit, MultiEdit, and NotebookEdit. |
|
|
181
|
+
| **Codex** | Native plugin assets, guidance, and MCP | MCP `write`; no native write hook. |
|
|
182
|
+
| **Hermes** | Profile-scoped skills, guidance, and MCP | MCP `write`; no native write hook. |
|
|
183
|
+
|
|
184
|
+
> [!NOTE]
|
|
185
|
+
> Claude's hook rejects a judged contract violation, but allows the write with a warning if the hook itself cannot run. Native file writes in Codex and Hermes do not pass through the OMS judge. This is not a filesystem-wide sandbox.
|
|
186
|
+
|
|
187
|
+
For Gajae-Code, install the marketplace plugin with `gjc plugin install oms@oms`; it discovers the six skills at the package-root `skills/` path. See [host assets](./docs/adapters.md) for integration details.
|
|
188
|
+
|
|
189
|
+
<details>
|
|
190
|
+
<summary><strong>Host maintenance and vault targeting</strong></summary>
|
|
191
|
+
|
|
192
|
+
Host installation stores a signed maintenance pointer at `${XDG_CONFIG_HOME:-~/.config}/oms/vault.json` and stamps `oms serve mcp --vault /path/to/vault` into managed host entries. Only `oms setup host install|remove|sync|status` use that pointer to maintain integrations.
|
|
193
|
+
|
|
194
|
+
Runtime target resolution does not read it. Precedence is **explicit target → local vault controls → bridge → `OMS_VAULT` → current directory**. The current-directory fallback is read-only: sealing, note writes, and derived-state repair cannot use it.
|
|
195
|
+
|
|
196
|
+
`oms setup package update` updates the package only. Run `oms setup host sync` separately to synchronize installed host assets. See [verified targets](./docs/verified-target.md).
|
|
197
|
+
|
|
198
|
+
</details>
|
|
199
|
+
|
|
200
|
+
## Search your way
|
|
201
|
+
|
|
202
|
+
**Lexical by default. Additional retrieval channels by choice.** Search includes notes that fail the contract; a missing or damaged contract does not stop retrieval.
|
|
203
|
+
|
|
204
|
+
| Capability | How to select it | Requirement |
|
|
205
|
+
| :--- | :--- | :--- |
|
|
206
|
+
| Lexical search | `oms search <text>` | No vector model required. |
|
|
207
|
+
| Vector search | `--vec <text>` | Complete `OMS_EMBEDDING_PROVIDER` / `OMS_EMBEDDING_MODEL` pair. |
|
|
208
|
+
| HyDE | `--hyde <text>` | Embedding pair plus `OMS_GENERATE_PROVIDER` / `OMS_GENERATE_MODEL`. |
|
|
209
|
+
| Query expansion | `--expand` | Explicit G004 expansion; `--max-queries` accepts 1–32. |
|
|
210
|
+
| Reranking | `--rerank` | Complete `OMS_RERANK_PROVIDER` / `OMS_RERANK_MODEL` pair. |
|
|
211
|
+
|
|
212
|
+
Missing, incomplete, or uninstalled model selections fail loudly rather than silently switching to another capability. These are available retrieval options, not a claim of parity or superiority over another engine.
|
|
213
|
+
|
|
214
|
+
Use `oms search --context` for structured context and `oms search --path <note>` to read one note exactly. Indexing is explicit: `oms doctor sync-embeddings --mode sync|embed|repair` selects one of three distinct modes. See [the CLI map](./docs/cli-map.md) for all operations.
|
|
215
|
+
|
|
216
|
+
## CLI reference
|
|
217
|
+
|
|
218
|
+
`oms` is the short alias of `oh-my-second-brain`, with seven CLI families. 0.19 replaced the 0.18 families; see the [0.19 migration guide](./docs/migration-0.19.md).
|
|
219
|
+
|
|
220
|
+
```text
|
|
221
|
+
oms search <text> Search notes; lexical by default
|
|
222
|
+
oms search --path|--context|--link Read one note, gather context, or suggest links
|
|
223
|
+
oms interview Interview the vault owner in a terminal and seal
|
|
224
|
+
oms write <path> Save a note from stdin when the contract allows it
|
|
225
|
+
oms setup Seal the contract (--questions/--answers for agents)
|
|
226
|
+
oms setup extract|status Show a template source or the contract posture
|
|
227
|
+
oms setup host install|remove|sync|status Manage host assets and MCP registrations
|
|
228
|
+
oms setup model install|select|waive|status Manage local model selection
|
|
229
|
+
oms setup package check|update Check or update the OMS package
|
|
230
|
+
oms setup bridge add|remove|status Manage repository-to-vault bridges
|
|
231
|
+
oms doctor status Show read-only vault health
|
|
232
|
+
oms doctor contract|audit|link-check Diagnose the contract, notes, or wikilinks
|
|
233
|
+
oms doctor sync-embeddings|cleanup|build-graph Maintain the derived index and graph
|
|
234
|
+
oms serve mcp|http Start the MCP or local HTTP server
|
|
235
|
+
oms hook pre Judge a Claude write against the contract
|
|
80
236
|
```
|
|
81
237
|
|
|
82
|
-
|
|
238
|
+
<details>
|
|
239
|
+
<summary><strong>Command behavior and removed commands</strong></summary>
|
|
240
|
+
|
|
241
|
+
Every recognized command accepts `--help` and `-h`, exits 0, and has no side effects. An unknown command combined with `--help` exits 1. A family removed in 0.19 exits 1 and names its replacement.
|
|
242
|
+
|
|
243
|
+
`oms doctor audit` reports `{path, field, kind}` entries without rewriting notes. Notes are written as whole content through `oms write <path> < note.md` or MCP `write {path, content, template?, ifMatch?, check?}`; both take the same write pipeline, and `template` optionally names the sealed template being followed. Overwriting an existing note needs `ifMatch` (`--if-match`) with its current `sha256:` revision; `check` (`--check`) judges without touching disk. An allowed write returns a receipt with the new revision and updates the keyword index of an existing engine store in the same call, so the note is searchable at once. There is no completion call or reviewer conversation.
|
|
244
|
+
|
|
245
|
+
`oms doctor cleanup` removes eligible derived state. `oms doctor build-graph` rebuilds the note graph.
|
|
246
|
+
|
|
247
|
+
Note `create`, `append`, `update`, and `backfill` are retired operations. There is no `link apply`, note renderer, or compatibility path for those retired operations.
|
|
248
|
+
|
|
249
|
+
</details>
|
|
250
|
+
|
|
251
|
+
## Documentation
|
|
252
|
+
|
|
253
|
+
| Start here | Go deeper |
|
|
254
|
+
| :--- | :--- |
|
|
255
|
+
| [Installation](./docs/install.md): install, setup, models, removal | [Architecture](./docs/architecture.md): authority and domain boundaries |
|
|
256
|
+
| [Vault conventions](./docs/conventions.md): settings and sealed contracts | [CLI map](./docs/cli-map.md): command and MCP operation mapping |
|
|
257
|
+
| [Host integrations](./docs/adapters.md): Claude Code, Codex, Hermes | [Verified targets](./docs/verified-target.md): safe vault resolution |
|
|
258
|
+
| [Releases](https://github.com/GoBeromsu/oh-my-second-brain/releases): published versions | [Changelog](./CHANGELOG.md): what changed and why |
|
|
259
|
+
|
|
260
|
+
## Contributing & credits
|
|
83
261
|
|
|
84
|
-
|
|
262
|
+
Contributions are welcome. Start with the [contributing guide](https://github.com/GoBeromsu/oh-my-second-brain/blob/main/CONTRIBUTING.md), or [open an issue](https://github.com/GoBeromsu/oh-my-second-brain/issues) with a reproducible problem or a focused proposal.
|
|
85
263
|
|
|
86
|
-
|
|
264
|
+
[ACKNOWLEDGMENTS](./ACKNOWLEDGMENTS.md) records design influences, including Ouroboros and Gajae Code's deep-interview. Those credits describe ideas, not a copied runtime or a research result. The original constellation illustration is inspired by the connected-note landscape at [beomsukoh.com](https://beomsukoh.com/). Illustrations explain concepts; they are not product screenshots, host-smoke evidence, or product-gate results.
|
|
87
265
|
|
|
88
|
-
|
|
266
|
+
---
|
|
89
267
|
|
|
90
|
-
|
|
268
|
+
<p align="center">
|
|
269
|
+
<strong>Your notes stay yours.</strong><br />
|
|
270
|
+
Built by <a href="https://github.com/GoBeromsu">Beomsu Koh</a> · Package licensed MIT
|
|
271
|
+
</p>
|
package/assets/claude/CLAUDE.md
CHANGED
|
@@ -9,7 +9,7 @@ outside the vault, and it is not yours to read.
|
|
|
9
9
|
|
|
10
10
|
## Writing
|
|
11
11
|
|
|
12
|
-
Write vault notes with MCP `write {path, content, template?}` (the `/write`
|
|
12
|
+
Write vault notes with MCP `write {path, content, template?, ifMatch?, check?}` (the `/write`
|
|
13
13
|
skill). A denial gives only `{field, kind}` and a guidance command. Never ask
|
|
14
14
|
about or guess the contract's location or values.
|
|
15
15
|
|
|
@@ -33,12 +33,17 @@ about or guess the contract's location or values.
|
|
|
33
33
|
- `/search` is read-only across lexical, vector, HyDE, and axis retrieval. It
|
|
34
34
|
also returns notes that would fail the contract. It never writes or repairs.
|
|
35
35
|
Unavailable backends fail loudly and are never replaced with a fake match.
|
|
36
|
-
- `/status` reads health
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
- `/doctor status` reads health, and `/doctor link-check` checks a note's
|
|
37
|
+
wikilinks; both are read-only. `oms doctor status`, `oms setup status`, and
|
|
38
|
+
`oms doctor contract` are for diagnosis. They report the seal's posture and
|
|
39
|
+
template drift without printing any value.
|
|
40
|
+
- `/search link` suggests wikilinks for a note; you apply only the ones the
|
|
41
|
+
user accepts.
|
|
42
|
+
- `/interview` continues the vault interview: it lists open questions, records
|
|
43
|
+
the user's answers, and seals only a proposal the user confirmed.
|
|
39
44
|
- `/doctor` runs explicit, supported index and control repairs. It never
|
|
40
45
|
backfills notes. A broken or missing seal is fixed by the user running
|
|
41
46
|
`oms setup`.
|
|
42
47
|
|
|
43
|
-
|
|
44
|
-
`setup`,
|
|
48
|
+
Six skills share four MCP tools: `write`, `search`, `interview`, `distill`,
|
|
49
|
+
`setup`, and `doctor`. `distill` and `setup` have no tool.
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*
|
|
15
15
|
* The judge's deny is forwarded as is. When the judge cannot be reached (spawn failure,
|
|
16
16
|
* non-zero exit, timeout, malformed output) the write is allowed with one stderr line and
|
|
17
|
-
* the failure kind is recorded in `~/.oms/guard-events.jsonl` for `oms contract
|
|
17
|
+
* the failure kind is recorded in `~/.oms/guard-events.jsonl` for `oms doctor contract`.
|
|
18
18
|
* A payload that cannot be parsed (or exceeds the stdin cap) is denied when its raw text
|
|
19
19
|
* names a configured vault or `~/.oms`, and otherwise allowed with one stderr line.
|
|
20
20
|
*
|
|
@@ -43,10 +43,10 @@ const WRITE_TOOLS = new Set(["write", "edit", "multiedit", "notebookedit"]);
|
|
|
43
43
|
const READ_TOOLS = new Set(["read", "grep", "glob"]);
|
|
44
44
|
|
|
45
45
|
const ALLOW = JSON.stringify({ continue: true, suppressOutput: true });
|
|
46
|
-
const CONTROL_PATH_REASON = `[oms] write denied: ${JSON.stringify([{ field: "path", kind: "control-path" }])} Run: oms status`;
|
|
47
|
-
const SEARCH_REASON = `[oms] write denied: ${JSON.stringify([{ field: "path", kind: "control-path" }])} Narrow the search path or glob so it cannot reach ~/.oms. Run: oms status`;
|
|
48
|
-
const UNSAFE_PATH_REASON = `[oms] write denied: ${JSON.stringify([{ field: "path", kind: "path-unsafe" }])} Run: oms status`;
|
|
49
|
-
const INPUT_REASON = `[oms] write denied: ${JSON.stringify([{ field: "input", kind: "unsupported-input" }])} Run: oms host sync`;
|
|
46
|
+
const CONTROL_PATH_REASON = `[oms] write denied: ${JSON.stringify([{ field: "path", kind: "control-path" }])} Run: oms doctor status`;
|
|
47
|
+
const SEARCH_REASON = `[oms] write denied: ${JSON.stringify([{ field: "path", kind: "control-path" }])} Narrow the search path or glob so it cannot reach ~/.oms. Run: oms doctor status`;
|
|
48
|
+
const UNSAFE_PATH_REASON = `[oms] write denied: ${JSON.stringify([{ field: "path", kind: "path-unsafe" }])} Run: oms doctor status`;
|
|
49
|
+
const INPUT_REASON = `[oms] write denied: ${JSON.stringify([{ field: "input", kind: "unsupported-input" }])} Run: oms setup host sync`;
|
|
50
50
|
|
|
51
51
|
/**
|
|
52
52
|
* Prefer the co-located dist entry via `node <dist>` so the guard does not depend on the
|
|
@@ -172,7 +172,7 @@ function recordGuardEvent(kind) {
|
|
|
172
172
|
function transportFailure(kind) {
|
|
173
173
|
recordGuardEvent(kind);
|
|
174
174
|
if (TRANSPORT_FAILURE_POLICY === "allow-warn") {
|
|
175
|
-
process.stderr.write("[oms] guard could not reach the judge; write allowed. Run: oms contract
|
|
175
|
+
process.stderr.write("[oms] guard could not reach the judge; write allowed. Run: oms doctor contract\n");
|
|
176
176
|
allow();
|
|
177
177
|
}
|
|
178
178
|
}
|
package/assets/codex/AGENTS.md
CHANGED
|
@@ -14,7 +14,7 @@ the only OMS file.
|
|
|
14
14
|
|
|
15
15
|
## Writing
|
|
16
16
|
|
|
17
|
-
Write vault notes with MCP `write {path, content, template?}` (`$oms-write`). A
|
|
17
|
+
Write vault notes with MCP `write {path, content, template?, ifMatch?, check?}` (`$oms-write`). A
|
|
18
18
|
denial gives only `{field, kind}` and a guidance command. Never ask about or
|
|
19
19
|
guess the contract's location or values.
|
|
20
20
|
|
|
@@ -35,12 +35,13 @@ guess the contract's location or values.
|
|
|
35
35
|
It also returns notes that would fail the contract. It never writes or
|
|
36
36
|
repairs. Unavailable backends fail loudly and are never replaced with a fake
|
|
37
37
|
match.
|
|
38
|
-
- `$oms-
|
|
38
|
+
- `$oms-doctor` reads health (`op: status`) and checks wikilinks
|
|
39
|
+
(`op: link-check`). `oms setup status` and `oms doctor contract`
|
|
39
40
|
are for diagnosis. They report the seal's posture and template drift without
|
|
40
41
|
printing any value.
|
|
41
42
|
- `$oms-doctor` runs explicit, supported index and control repairs. It never
|
|
42
43
|
backfills notes. A broken or missing seal is fixed by the user running
|
|
43
44
|
`oms setup`.
|
|
44
45
|
|
|
45
|
-
Codex installs
|
|
46
|
-
`setup`, `
|
|
46
|
+
Codex installs six shared skills (`write`, `search`, `interview`, `distill`,
|
|
47
|
+
`setup`, `doctor`) backed by the four public MCP tools.
|
|
@@ -8,16 +8,16 @@ sealed contract is not yours to read.
|
|
|
8
8
|
| User intent | Preferred surface |
|
|
9
9
|
|---|---|
|
|
10
10
|
| seal or change the vault contract | ask the user to run `oms setup` in a terminal |
|
|
11
|
-
| install host integration | `oms host install --runtime codex --vault <path> --yes`, only when authorized |
|
|
12
|
-
| write a note | `$oms-write`: MCP `write {path, content, template?}` |
|
|
11
|
+
| install host integration | `oms setup host install --runtime codex --vault <path> --yes`, only when authorized |
|
|
12
|
+
| write a note | `$oms-write`: MCP `write {path, content, template?, ifMatch?, check?}` |
|
|
13
13
|
| retrieve knowledge | `$oms-search`; read-only, with no validation or repair side effects |
|
|
14
|
-
| inspect health | `$oms-status
|
|
15
|
-
| diagnose the seal | `oms contract
|
|
14
|
+
| inspect health | `$oms-doctor` (`op: status`); `oms setup status` for the seal and template drift |
|
|
15
|
+
| diagnose the seal | `oms doctor contract` |
|
|
16
16
|
| explicit supported control/index repair | `$oms-doctor` |
|
|
17
17
|
|
|
18
18
|
## Boundaries
|
|
19
19
|
|
|
20
|
-
- Write vault notes with MCP `write {path, content, template?}`. A denial gives
|
|
20
|
+
- Write vault notes with MCP `write {path, content, template?, ifMatch?, check?}`. A denial gives
|
|
21
21
|
only `{field, kind}` and a guidance command. Never ask about or guess the
|
|
22
22
|
contract's location or values.
|
|
23
23
|
- A denied write leaves the file unchanged. Fix the content from what the user
|
|
@@ -25,7 +25,7 @@ sealed contract is not yours to read.
|
|
|
25
25
|
- Codex has no write hook. Notes written with host file tools are not judged.
|
|
26
26
|
- `~/.oms` is off-limits. Inside the vault, `.oms/settings.json` is the only
|
|
27
27
|
OMS file.
|
|
28
|
-
- Search and status stay read-only. Notes that would fail the contract remain
|
|
28
|
+
- Search, interview, and `doctor` status stay read-only. Notes that would fail the contract remain
|
|
29
29
|
searchable. Keep the requested backend's failure semantics, with no
|
|
30
30
|
substitutes.
|
|
31
31
|
- Uninstall removes only the integration assets OMS owns, never vault notes or
|
package/assets/hermes/README.md
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# Oh My Second Brain Hermes Adapter
|
|
2
2
|
|
|
3
|
-
Installed by `oms host install --runtime hermes` into:
|
|
3
|
+
Installed by `oms setup host install --runtime hermes` into:
|
|
4
4
|
|
|
5
5
|
- `~/.hermes/skills/knowledge-management/oms/`
|
|
6
6
|
- `~/.hermes/config.yaml` as `mcp_servers.oms`
|
|
7
7
|
|
|
8
|
-
The shared skill bundle contains
|
|
8
|
+
The shared skill bundle contains six skills. Hermes resolves skills by bare
|
|
9
9
|
name across every installed bundle, so the installer copies them with an `oms-`
|
|
10
10
|
prefix in both the directory and the frontmatter `name`: `oms-write`,
|
|
11
|
-
`oms-search`, `oms-
|
|
11
|
+
`oms-search`, `oms-interview`, `oms-distill`, `oms-setup`, and
|
|
12
12
|
`oms-doctor`. The shared sources and the other hosts keep the unprefixed names.
|
|
13
13
|
`SKILL_CAPABILITY_GUIDE.md` in the same directory maps each skill to its MCP
|
|
14
|
-
tool or marks it as an agent recipe. Runtime operations use the
|
|
14
|
+
tool or marks it as an agent recipe. Runtime operations use the four MCP tools
|
|
15
15
|
through `oms serve mcp`.
|
|
16
16
|
|
|
17
17
|
Hermes takes a skill's category from the first path segment only, so these
|
|
@@ -19,7 +19,7 @@ skills are listed under `knowledge-management`. Filter with
|
|
|
19
19
|
`skills_list(category="knowledge-management")`; the category
|
|
20
20
|
`knowledge-management/oms` matches nothing.
|
|
21
21
|
|
|
22
|
-
Agents write notes with MCP `write {path, content, template?}`. OMS judges each
|
|
22
|
+
Agents write notes with MCP `write {path, content, template?, ifMatch?, check?}`. OMS judges each
|
|
23
23
|
note against the contract the user sealed with `oms setup`. A denial returns
|
|
24
24
|
only `{field, kind}` and a guidance command. There is no completion operation
|
|
25
25
|
and no reviewer protocol, so deciding whether a note is worth keeping and
|
|
@@ -28,4 +28,4 @@ repairing it belong to the user and the agent. See the [Hermes role guidance](./
|
|
|
28
28
|
The adapter installs no model provider, no reviewer role, and no daemon.
|
|
29
29
|
Installing assets proves only their presence, not that the host loaded them.
|
|
30
30
|
|
|
31
|
-
Unlike Claude Code (`claude plugin install`), Hermes exposes no native marketplace or plugin-update command, so this adapter stays OMS-managed. `oms package update` updates OMS; `oms host sync --runtime hermes` separately refreshes registrations. Neither upgrades Hermes. `mcp_servers.oms` is edited surgically, leaving the rest of `~/.hermes/config.yaml` — including comments and key ordering — untouched. Existing profiles retain their own configuration and registration scope.
|
|
31
|
+
Unlike Claude Code (`claude plugin install`), Hermes exposes no native marketplace or plugin-update command, so this adapter stays OMS-managed. `oms setup package update` updates OMS; `oms setup host sync --runtime hermes` separately refreshes registrations. Neither upgrades Hermes. `mcp_servers.oms` is edited surgically, leaving the rest of `~/.hermes/config.yaml` — including comments and key ordering — untouched. Existing profiles retain their own configuration and registration scope.
|
package/assets/hermes/SOUL.md
CHANGED
|
@@ -10,7 +10,7 @@ the only OMS file.
|
|
|
10
10
|
|
|
11
11
|
## Writing
|
|
12
12
|
|
|
13
|
-
Write vault notes with MCP `write {path, content, template?}` (the `write`
|
|
13
|
+
Write vault notes with MCP `write {path, content, template?, ifMatch?, check?}` (the `write`
|
|
14
14
|
skill). A denial gives only `{field, kind}` and a guidance command. Never ask
|
|
15
15
|
about or guess the contract's location or values.
|
|
16
16
|
|
|
@@ -30,17 +30,18 @@ about or guess the contract's location or values.
|
|
|
30
30
|
- `search` is read-only across lexical, vector, HyDE, and axis retrieval. It
|
|
31
31
|
also returns notes that would fail the contract. It never writes or repairs.
|
|
32
32
|
Unavailable backends fail loudly.
|
|
33
|
-
- `
|
|
34
|
-
|
|
33
|
+
- `doctor` with `op: status` reads health and `op: link-check` checks a
|
|
34
|
+
note's wikilinks; both are read-only. `oms setup status` and
|
|
35
|
+
`oms doctor contract` are for diagnosis. They report the seal's posture and template drift without
|
|
35
36
|
printing any value.
|
|
36
37
|
- `doctor` runs only explicit, supported repairs. It never rewrites ordinary
|
|
37
38
|
notes or backfills guessed values. A broken or missing seal is fixed by the
|
|
38
39
|
user running `oms setup`.
|
|
39
40
|
|
|
40
|
-
Hermes uses the
|
|
41
|
-
`oms-search`, `oms-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
Hermes uses the six shared skills under an `oms-` prefix (`oms-write`,
|
|
42
|
+
`oms-search`, `oms-interview`, `oms-distill`, `oms-setup`, `oms-doctor`) so
|
|
43
|
+
their names never collide with another bundle's `setup` or `doctor`. Call them
|
|
44
|
+
by the prefixed name. They are backed by the four public
|
|
44
45
|
MCP tools; `SKILL_CAPABILITY_GUIDE.md` beside them maps each skill to its tool.
|
|
45
46
|
Their skill category is `knowledge-management`, so list them with
|
|
46
47
|
`skills_list(category="knowledge-management")`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oms",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.0",
|
|
4
4
|
"description": "Oh My Second Brain convention layer for Obsidian vaults — Hermes skill bundle and MCP adapter.",
|
|
5
|
-
"_note": "oms host install writes ~/.hermes/config.yaml mcp_servers.oms and installs the
|
|
5
|
+
"_note": "oms setup host install writes ~/.hermes/config.yaml mcp_servers.oms and installs the six shared skills, prefixed `oms-`, with provenance under ~/.hermes/skills/knowledge-management/oms/."
|
|
6
6
|
}
|