@jayjiang/byoao 1.1.2 → 2.0.1

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 (156) hide show
  1. package/dist/__tests__/plugin-config.test.js +7 -10
  2. package/dist/__tests__/plugin-config.test.js.map +1 -1
  3. package/dist/assets/obsidian-skills/byoao-conventions.md +30 -54
  4. package/dist/assets/obsidian-skills/vault-thinking.md +6 -5
  5. package/dist/assets/presets/common/AGENTS.md.hbs +29 -46
  6. package/dist/assets/presets/common/SCHEMA.md.hbs +57 -0
  7. package/dist/assets/presets/common/Start Here.md.hbs +29 -40
  8. package/dist/assets/presets/minimal/preset.json +3 -3
  9. package/dist/assets/presets/pm-tpm/preset.json +2 -2
  10. package/{src/skills/ask.md → dist/assets/skills/ask/SKILL.md} +30 -27
  11. package/dist/assets/skills/ask.md +28 -27
  12. package/dist/assets/skills/challenge/SKILL.md +134 -0
  13. package/dist/assets/skills/challenge.md +79 -121
  14. package/dist/assets/skills/connect/SKILL.md +126 -0
  15. package/dist/assets/skills/connect.md +75 -163
  16. package/dist/assets/skills/cook/SKILL.md +170 -0
  17. package/dist/assets/skills/cook.md +167 -0
  18. package/dist/assets/skills/diagnose/SKILL.md +134 -0
  19. package/dist/assets/skills/diagnose.md +102 -43
  20. package/dist/assets/skills/drift/SKILL.md +123 -0
  21. package/dist/assets/skills/drift.md +64 -165
  22. package/dist/assets/skills/health/SKILL.md +65 -0
  23. package/dist/assets/skills/health.md +63 -0
  24. package/{src/skills/ideas.md → dist/assets/skills/ideas/SKILL.md} +11 -10
  25. package/dist/assets/skills/ideas.md +11 -10
  26. package/dist/assets/skills/organize/SKILL.md +109 -0
  27. package/dist/assets/skills/organize.md +56 -155
  28. package/dist/assets/skills/prep/SKILL.md +65 -0
  29. package/dist/assets/skills/prep.md +63 -0
  30. package/dist/assets/skills/trace/SKILL.md +143 -0
  31. package/dist/assets/skills/trace.md +75 -90
  32. package/dist/assets/skills/wiki/SKILL.md +127 -0
  33. package/dist/assets/skills/wiki.md +77 -178
  34. package/dist/cli/cli-program.js +18 -15
  35. package/dist/cli/cli-program.js.map +1 -1
  36. package/dist/cli/installer.js +54 -29
  37. package/dist/cli/installer.js.map +1 -1
  38. package/dist/hooks/idle-suggestions.js +4 -4
  39. package/dist/hooks/idle-suggestions.js.map +1 -1
  40. package/dist/hooks/system-transform.js +35 -1
  41. package/dist/hooks/system-transform.js.map +1 -1
  42. package/dist/index.js +455 -636
  43. package/dist/index.js.map +1 -1
  44. package/dist/plugin-config.js +6 -32
  45. package/dist/plugin-config.js.map +1 -1
  46. package/dist/tools/init-vault.js +8 -38
  47. package/dist/tools/init-vault.js.map +1 -1
  48. package/dist/tools/vault-doctor.js +1 -1
  49. package/dist/tools/vault-doctor.js.map +1 -1
  50. package/dist/tools/vault-status.js +1 -1
  51. package/dist/tools/vault-status.js.map +1 -1
  52. package/dist/vault/__tests__/create.test.js +48 -116
  53. package/dist/vault/__tests__/create.test.js.map +1 -1
  54. package/dist/vault/__tests__/doctor.test.js +14 -2
  55. package/dist/vault/__tests__/doctor.test.js.map +1 -1
  56. package/dist/vault/__tests__/manifest.test.js +2 -2
  57. package/dist/vault/__tests__/manifest.test.js.map +1 -1
  58. package/dist/vault/__tests__/status.test.js +12 -0
  59. package/dist/vault/__tests__/status.test.js.map +1 -1
  60. package/dist/vault/__tests__/upgrade.test.js +3 -3
  61. package/dist/vault/__tests__/upgrade.test.js.map +1 -1
  62. package/dist/vault/create.js +86 -196
  63. package/dist/vault/create.js.map +1 -1
  64. package/dist/vault/doctor.js +49 -0
  65. package/dist/vault/doctor.js.map +1 -1
  66. package/dist/vault/manifest.js +2 -2
  67. package/dist/vault/manifest.js.map +1 -1
  68. package/dist/vault/preset.js +10 -4
  69. package/dist/vault/preset.js.map +1 -1
  70. package/dist/vault/self-update.js +1 -1
  71. package/dist/vault/status.js +24 -0
  72. package/dist/vault/status.js.map +1 -1
  73. package/dist/vault/upgrade.js +165 -23
  74. package/dist/vault/upgrade.js.map +1 -1
  75. package/package.json +1 -1
  76. package/src/assets/obsidian-skills/byoao-conventions.md +9 -6
  77. package/src/assets/obsidian-skills/vault-thinking.md +6 -5
  78. package/src/assets/presets/common/AGENTS.md.hbs +23 -19
  79. package/src/assets/presets/common/SCHEMA.md.hbs +57 -0
  80. package/src/assets/presets/common/Start Here.md.hbs +29 -40
  81. package/src/assets/presets/minimal/preset.json +3 -3
  82. package/src/assets/presets/pm-tpm/preset.json +2 -2
  83. package/src/skills/ask/SKILL.md +135 -0
  84. package/src/skills/challenge/SKILL.md +134 -0
  85. package/src/skills/connect/SKILL.md +126 -0
  86. package/src/skills/cook/SKILL.md +170 -0
  87. package/src/skills/diagnose/SKILL.md +134 -0
  88. package/src/skills/drift/SKILL.md +123 -0
  89. package/src/skills/health/SKILL.md +65 -0
  90. package/src/skills/ideas/SKILL.md +173 -0
  91. package/src/skills/organize/SKILL.md +109 -0
  92. package/src/skills/prep/SKILL.md +65 -0
  93. package/src/skills/trace/SKILL.md +143 -0
  94. package/src/skills/wiki/SKILL.md +127 -0
  95. package/dist/assets/presets/common/Glossary.md.hbs +0 -16
  96. package/dist/assets/presets/common/obsidian/daily-notes.json +0 -5
  97. package/dist/assets/presets/common/obsidian/templates.json +0 -3
  98. package/dist/assets/presets/common/templates/Daily Note.md +0 -19
  99. package/dist/assets/presets/common/templates/Decision Record.md +0 -32
  100. package/dist/assets/presets/common/templates/Investigation.md +0 -34
  101. package/dist/assets/presets/common/templates/Meeting Notes.md +0 -25
  102. package/dist/assets/skills/emerge.md +0 -168
  103. package/dist/assets/skills/weave.md +0 -287
  104. package/dist/tools/add-glossary-term.js +0 -21
  105. package/dist/tools/add-glossary-term.js.map +0 -1
  106. package/dist/tools/add-person.js +0 -21
  107. package/dist/tools/add-person.js.map +0 -1
  108. package/dist/tools/add-project.js +0 -24
  109. package/dist/tools/add-project.js.map +0 -1
  110. package/dist/tools/graph-health.js +0 -25
  111. package/dist/tools/graph-health.js.map +0 -1
  112. package/dist/tools/note-read.js +0 -19
  113. package/dist/tools/note-read.js.map +0 -1
  114. package/dist/tools/search-vault.js +0 -22
  115. package/dist/tools/search-vault.js.map +0 -1
  116. package/dist/vault/__tests__/glossary.test.js +0 -68
  117. package/dist/vault/__tests__/glossary.test.js.map +0 -1
  118. package/dist/vault/__tests__/graph-health.test.js +0 -102
  119. package/dist/vault/__tests__/graph-health.test.js.map +0 -1
  120. package/dist/vault/__tests__/member.test.js +0 -85
  121. package/dist/vault/__tests__/member.test.js.map +0 -1
  122. package/dist/vault/__tests__/note-read.test.js +0 -71
  123. package/dist/vault/__tests__/note-read.test.js.map +0 -1
  124. package/dist/vault/__tests__/obsidian-cli.test.js +0 -108
  125. package/dist/vault/__tests__/obsidian-cli.test.js.map +0 -1
  126. package/dist/vault/__tests__/search-vault.test.js +0 -93
  127. package/dist/vault/__tests__/search-vault.test.js.map +0 -1
  128. package/dist/vault/glossary.js +0 -27
  129. package/dist/vault/glossary.js.map +0 -1
  130. package/dist/vault/graph-health.js +0 -83
  131. package/dist/vault/graph-health.js.map +0 -1
  132. package/dist/vault/member.js +0 -67
  133. package/dist/vault/member.js.map +0 -1
  134. package/dist/vault/note-read.js +0 -70
  135. package/dist/vault/note-read.js.map +0 -1
  136. package/dist/vault/project.js +0 -68
  137. package/dist/vault/project.js.map +0 -1
  138. package/dist/vault/retrieval-types.js +0 -5
  139. package/dist/vault/retrieval-types.js.map +0 -1
  140. package/dist/vault/search-vault.js +0 -87
  141. package/dist/vault/search-vault.js.map +0 -1
  142. package/src/assets/presets/common/obsidian/daily-notes.json +0 -5
  143. package/src/assets/presets/common/obsidian/templates.json +0 -3
  144. package/src/assets/presets/common/templates/Daily Note.md +0 -19
  145. package/src/assets/presets/common/templates/Decision Record.md +0 -32
  146. package/src/assets/presets/common/templates/Investigation.md +0 -34
  147. package/src/assets/presets/common/templates/Meeting Notes.md +0 -25
  148. package/src/skills/challenge.md +0 -174
  149. package/src/skills/connect.md +0 -213
  150. package/src/skills/diagnose.md +0 -72
  151. package/src/skills/drift.md +0 -223
  152. package/src/skills/emerge.md +0 -168
  153. package/src/skills/organize.md +0 -206
  154. package/src/skills/trace.md +0 -156
  155. package/src/skills/weave.md +0 -287
  156. package/src/skills/wiki.md +0 -227
@@ -0,0 +1,126 @@
1
+ ---
2
+ name: connect
3
+ description: >
4
+ Bridges two topics using the link graph, shared people, tags, domains, and conceptual
5
+ overlap. Use when the user asks "what's the relationship between X and Y", "connect A
6
+ to B", "how are these related", "find connections between", "what do X and Y have in
7
+ common", or wants to understand how two topics, people, or concepts relate across notes.
8
+ ---
9
+
10
+ # /connect — Bridge Two Topics
11
+
12
+ You are a connector. Your job is to find and explain the relationship between two topics using the vault's knowledge graph — shared entities, overlapping concepts, common sources, and structural connections.
13
+
14
+ ## Prerequisites Check
15
+
16
+ ```bash
17
+ obsidian --version
18
+ ```
19
+
20
+ If this fails, STOP and display the Obsidian CLI availability message (see /prep).
21
+
22
+ ## Parameters
23
+
24
+ - **from** (required): First topic or page name.
25
+ - **to** (required): Second topic or page name.
26
+ - **depth** (optional): `direct` (only direct connections) or `expanded` (include indirect paths via intermediate pages). Default: `expanded`.
27
+
28
+ ## Process
29
+
30
+ ### Step 1: Locate Both Topics
31
+
32
+ ```bash
33
+ obsidian search "<from>"
34
+ obsidian search "<to>"
35
+ ```
36
+
37
+ If `INDEX.base` exists, read it to spot compiled pages for either topic.
38
+
39
+ Read any existing agent pages in `entities/`, `concepts/`, `comparisons/`, and `queries/`:
40
+
41
+ ```bash
42
+ obsidian read file="entities/<from>.md" # if exists
43
+ obsidian read file="concepts/<from>.md" # if exists
44
+ obsidian read file="comparisons/<from>.md" # if exists
45
+ obsidian read file="queries/<from>.md" # if exists
46
+ obsidian read file="entities/<to>.md" # if exists
47
+ obsidian read file="concepts/<to>.md" # if exists
48
+ obsidian read file="comparisons/<to>.md" # if exists
49
+ obsidian read file="queries/<to>.md" # if exists
50
+ ```
51
+
52
+ ### Step 2: Map Each Topic's Connections
53
+
54
+ For each topic:
55
+
56
+ ```bash
57
+ obsidian backlinks "<from>"
58
+ obsidian backlinks "<to>"
59
+ ```
60
+
61
+ Read the pages that link to each topic. Build a connection map:
62
+ - Direct wikilinks (both topics link to the same page, or the same page links to both)
63
+ - Shared tags (use `SCHEMA.md` for taxonomy context when classifying)
64
+ - Shared domain
65
+ - Shared source notes (both topics were extracted from the same user note)
66
+ - Shared people/entities mentioned in both topics' pages
67
+
68
+ ### Step 3: Find Direct Connections
69
+
70
+ Check if there's already a direct relationship:
71
+ - Does the `from` page wikilink to `to` (or vice versa)?
72
+ - Is there a `comparisons/` page that covers both?
73
+ - Do they share a `sources` entry in frontmatter?
74
+
75
+ ### Step 4: Find Indirect Paths (Expanded Mode)
76
+
77
+ If no direct connection exists, search for intermediate pages:
78
+
79
+ 1. Find all pages that link to `from`
80
+ 2. For each of those, check if they link to `to`
81
+ 3. If yes: `from` → `intermediate` → `to` is a connection path
82
+ 4. Report the shortest path(s) and explain the relationship
83
+
84
+ Also check:
85
+ - Shared tag clusters (both topics use tags that co-occur frequently)
86
+ - Shared domain context (both are about the same domain but different aspects)
87
+ - Temporal overlap (both topics emerged around the same time)
88
+
89
+ ### Step 5: Present the Connection
90
+
91
+ ```markdown
92
+ # Connection: [[{from}]] ↔ [[{to}]]
93
+
94
+ ## Direct Relationship
95
+ {Yes/No} — {explain the direct connection if it exists}
96
+
97
+ ## Connection Paths
98
+ {If indirect paths exist, show them:}
99
+
100
+ 1. [[{from}]] → [[{intermediate}]] → [[{to}]]
101
+ - Path explanation: {how they connect through this intermediate}
102
+
103
+ ## Shared Context
104
+ - **Shared tags**: {tag1}, {tag2}
105
+ - **Shared domain**: {domain}
106
+ - **Shared sources**: [[source-note-1]], [[source-note-2]]
107
+ - **Shared entities**: [[entity-1]], [[entity-2]]
108
+
109
+ ## Relationship Type
110
+ {Classify the relationship:}
111
+ - **Dependency**: {from} depends on {to} (or vice versa)
112
+ - **Sibling**: Both are aspects of a larger concept
113
+ - **Contrast**: They represent opposing approaches
114
+ - **Evolution**: {to} evolved from {from} over time
115
+ - **Parallel**: Independent topics that happen to share context
116
+
117
+ ## Why This Connection Matters
118
+ {2-3 sentences on what this relationship reveals and why it's worth knowing}
119
+ ```
120
+
121
+ ## Key Principles
122
+
123
+ - **Graph over guesswork.** Base connections on actual wikilinks, shared tags, and shared sources — not inferred relationships.
124
+ - **Multiple paths.** There may be several ways two topics connect — show the most meaningful ones, not just the shortest.
125
+ - **Explain, don't just list.** The value is in the *explanation* of why the connection matters, not just the path itself.
126
+ - **Obsidian is first workbench.** All note operations go through Obsidian CLI.
@@ -1,11 +1,14 @@
1
1
  ---
2
2
  name: connect
3
- description: Bridge two seemingly unrelated topics or domains using the vault's link graph. Discovers hidden paths and shared contexts. Use when the user asks "how are X and Y related", "is there a connection between", "bridge these topics", or wants to find overlap between two areas of their knowledge.
3
+ description: >
4
+ Bridges two topics using the link graph, shared people, tags, domains, and conceptual
5
+ overlap. Use when the user asks "what's the relationship between X and Y", "connect A to B",
6
+ or wants to understand how two topics relate.
4
7
  ---
5
8
 
6
- # /connect — Bridge Two Domains
9
+ # /connect — Bridge Two Topics
7
10
 
8
- You are a knowledge connector. Your job is to find the hidden relationship between two topics the user thinks are unrelated — using their own vault's link graph, shared references, and overlapping contexts to build a bridge.
11
+ You are a connector. Your job is to find and explain the relationship between two topics using the vault's knowledge graph shared entities, overlapping concepts, common sources, and structural connections.
9
12
 
10
13
  ## Prerequisites Check
11
14
 
@@ -13,201 +16,110 @@ You are a knowledge connector. Your job is to find the hidden relationship betwe
13
16
  obsidian --version
14
17
  ```
15
18
 
16
- If this fails, STOP and display the Obsidian CLI availability message (see /weave for the full error text).
17
-
18
- ## Tool Selection
19
-
20
- Use `obsidian` CLI for content operations (read, search, backlinks, properties, tags). Use BYOAO tools (`byoao_search_vault`, `byoao_graph_health`) when Obsidian CLI is unavailable or for graph-level structural queries.
19
+ If this fails, STOP and display the Obsidian CLI availability message (see /prep).
21
20
 
22
21
  ## Parameters
23
22
 
24
- - **from** (required): The first topic, concept, domain, or note.
25
- - **to** (required): The second topic, concept, domain, or note.
26
- - **output** (optional): If set, save the connection map as a note at this path.
23
+ - **from** (required): First topic or page name.
24
+ - **to** (required): Second topic or page name.
25
+ - **depth** (optional): `direct` (only direct connections) or `expanded` (include indirect paths via intermediate pages). Default: `expanded`.
27
26
 
28
27
  ## Process
29
28
 
30
- ### Step 1: Map Both Endpoints
31
-
32
- For each of the two topics (`from` and `to`):
33
-
34
- 1. **Find the anchor note** — does a vault note exist for this topic?
29
+ ### Step 1: Locate Both Topics
35
30
 
36
31
  ```bash
37
- obsidian search "<topic>"
32
+ obsidian search "<from>"
33
+ obsidian search "<to>"
38
34
  ```
39
35
 
40
- 2. **Gather the neighborhood** all notes that mention or link to this topic:
41
-
42
- ```bash
43
- obsidian backlinks "<topic>"
44
- ```
36
+ If `INDEX.base` exists, read it to spot compiled pages for either topic.
45
37
 
46
- 3. **Extract properties** what domains, tags, and references are associated?
38
+ Read any existing agent pages in `entities/`, `concepts/`, `comparisons/`, and `queries/`:
47
39
 
48
40
  ```bash
49
- obsidian read "<topic note>"
41
+ obsidian read file="entities/<from>.md" # if exists
42
+ obsidian read file="concepts/<from>.md" # if exists
43
+ obsidian read file="comparisons/<from>.md" # if exists
44
+ obsidian read file="queries/<from>.md" # if exists
45
+ obsidian read file="entities/<to>.md" # if exists
46
+ obsidian read file="concepts/<to>.md" # if exists
47
+ obsidian read file="comparisons/<to>.md" # if exists
48
+ obsidian read file="queries/<to>.md" # if exists
50
49
  ```
51
50
 
52
- Build a set for each endpoint: `{notes, tags, domains, people, concepts}`.
53
-
54
- ### Step 2: Find Intersection
55
-
56
- Compare the two neighborhoods to find overlap:
57
-
58
- **Shared notes**: Notes that mention both topics.
59
- > "[[Meeting 2026-03-15]] discusses both 'rate limiting' and 'user onboarding'."
60
-
61
- **Shared people**: People connected to both topics.
62
- > "[[Alice]] appears in notes about both domains."
63
-
64
- **Shared tags**: Tags that appear in both neighborhoods.
65
- > "Both clusters use #scalability."
66
-
67
- **Shared domains**: Notes from both topics that share a `domain` field value.
68
-
69
- **Shared references**: Notes in one neighborhood that reference notes in the other.
70
-
71
- ### Step 3: Find Graph Paths
72
-
73
- If direct overlap is sparse, look for indirect paths:
74
-
75
- 1. For each note in the `from` neighborhood, check its outgoing links
76
- 2. Do any of those linked notes appear in the `to` neighborhood?
77
- 3. If not, go one hop further — check the links of those linked notes
78
-
79
- This finds paths like:
80
- > `from` → [[Note A]] → [[Note B]] → `to`
81
-
82
- Report the shortest path(s) found, up to 3 hops.
83
-
84
- ### Step 4: Analyze the Bridge
85
-
86
- For each connection found (shared note, person, tag, or path):
87
-
88
- 1. **Read the bridging notes** to understand the context
89
- 2. **Explain why the connection matters** — what does the bridge reveal?
90
- 3. **Assess strength** — is this a strong thematic link or a coincidental mention?
91
-
92
- Classify connections:
93
- - **Strong**: Shared context, both topics discussed substantively in the same note
94
- - **Moderate**: Shared person/tag, indirect but meaningful relationship
95
- - **Weak**: Coincidental co-occurrence, shared only through generic tags
96
-
97
- ### Step 5: Synthesize
98
-
99
- Build a narrative that explains how the two topics connect:
51
+ ### Step 2: Map Each Topic's Connections
100
52
 
101
- ```markdown
102
- # Connect: {From} ↔ {To}
103
-
104
- ## The Bridge
105
-
106
- {1-2 paragraph narrative explaining the connection in plain language}
107
-
108
- ## Connection Map
109
-
110
- ### Direct Links ({N} found)
111
-
112
- - **[[Shared Note]]** — {how it connects both topics}
113
- > "{quote showing from-topic}" ... "{quote showing to-topic}"
114
-
115
- ### Through People
53
+ For each topic:
116
54
 
117
- - **[[Person]]** — involved in both {from} and {to}
118
- - {from} context: {brief description}
119
- - {to} context: {brief description}
120
-
121
- ### Through Concepts
122
-
123
- - **[[Concept]]** — shared foundation
124
- - Links to {from} via: [[note1]], [[note2]]
125
- - Links to {to} via: [[note3]], [[note4]]
126
-
127
- ### Graph Path
128
-
129
- ```
130
- [[from-note]] → [[intermediate]] → [[to-note]]
55
+ ```bash
56
+ obsidian backlinks "<from>"
57
+ obsidian backlinks "<to>"
131
58
  ```
132
59
 
133
- {Explain what this path reveals}
60
+ Read the pages that link to each topic. Build a connection map:
61
+ - Direct wikilinks (both topics link to the same page, or the same page links to both)
62
+ - Shared tags (use `SCHEMA.md` for taxonomy context when classifying)
63
+ - Shared domain
64
+ - Shared source notes (both topics were extracted from the same user note)
65
+ - Shared people/entities mentioned in both topics' pages
134
66
 
135
- ## Strength Assessment
67
+ ### Step 3: Find Direct Connections
136
68
 
137
- - **Overall**: {Strong / Moderate / Weak}
138
- - **Evidence**: {N} shared notes, {N} shared people, {N} graph paths
139
- - **Confidence**: {High solid thematic overlap / Medium — circumstantial / Low — tenuous}
69
+ Check if there's already a direct relationship:
70
+ - Does the `from` page wikilink to `to` (or vice versa)?
71
+ - Is there a `comparisons/` page that covers both?
72
+ - Do they share a `sources` entry in frontmatter?
140
73
 
141
- ## Potential Insights
74
+ ### Step 4: Find Indirect Paths (Expanded Mode)
142
75
 
143
- 1. {What the user might learn from this connection}
144
- 2. {How this could inform decisions in either domain}
145
- 3. {A question this connection raises}
76
+ If no direct connection exists, search for intermediate pages:
146
77
 
147
- ## Suggested Actions
78
+ 1. Find all pages that link to `from`
79
+ 2. For each of those, check if they link to `to`
80
+ 3. If yes: `from` → `intermediate` → `to` is a connection path
81
+ 4. Report the shortest path(s) and explain the relationship
148
82
 
149
- - Link [[Note A]] to [[Note B]] — they discuss the same problem from different angles
150
- - Add "{from}" as a reference in [[relevant to-note]]
151
- - Consider creating a hub note for the bridging concept
152
- ```
153
-
154
- ### Step 6: Handle No Connection
83
+ Also check:
84
+ - Shared tag clusters (both topics use tags that co-occur frequently)
85
+ - Shared domain context (both are about the same domain but different aspects)
86
+ - Temporal overlap (both topics emerged around the same time)
155
87
 
156
- If no meaningful connection is found after searching:
88
+ ### Step 5: Present the Connection
157
89
 
158
90
  ```markdown
159
- # Connect: {From} ↔ {To}
160
-
161
- No meaningful connection found in this vault.
162
-
163
- ## What I Checked
164
-
165
- - Searched {N} notes in the {from} neighborhood
166
- - Searched {N} notes in the {to} neighborhood
167
- - Checked up to 3-hop graph paths
168
- - Compared tags, domains, people, and references
169
-
170
- ## Possible Reasons
91
+ # Connection: [[{from}]][[{to}]]
171
92
 
172
- - These topics genuinely haven't intersected in your notes yet
173
- - The connection might exist in knowledge you haven't written down
174
- - Try narrowing the topics or running /emerge to find broader patterns
93
+ ## Direct Relationship
94
+ {Yes/No} {explain the direct connection if it exists}
175
95
 
176
- ## Want to Create a Connection?
96
+ ## Connection Paths
97
+ {If indirect paths exist, show them:}
177
98
 
178
- If you believe these topics are related, consider:
179
- 1. Writing a note that explicitly bridges them
180
- 2. Adding shared tags or domain fields
181
- 3. Running /weave after writing the bridge note
182
- ```
183
-
184
- ### Step 7: Save (Optional)
185
-
186
- At the end of your analysis, ask:
99
+ 1. [[{from}]] [[{intermediate}]] [[{to}]]
100
+ - Path explanation: {how they connect through this intermediate}
187
101
 
188
- > "Would you like me to save this as a note?"
102
+ ## Shared Context
103
+ - **Shared tags**: {tag1}, {tag2}
104
+ - **Shared domain**: {domain}
105
+ - **Shared sources**: [[source-note-1]], [[source-note-2]]
106
+ - **Shared entities**: [[entity-1]], [[entity-2]]
189
107
 
190
- If the user confirms, save with frontmatter:
108
+ ## Relationship Type
109
+ {Classify the relationship:}
110
+ - **Dependency**: {from} depends on {to} (or vice versa)
111
+ - **Sibling**: Both are aspects of a larger concept
112
+ - **Contrast**: They represent opposing approaches
113
+ - **Evolution**: {to} evolved from {from} over time
114
+ - **Parallel**: Independent topics that happen to share context
191
115
 
192
- ```yaml
193
- ---
194
- title: "Connect: {From} ↔ {To}"
195
- note_type: literature
196
- type: analysis
197
- date: <today>
198
- references:
199
- - "[[from-anchor]]"
200
- - "[[to-anchor]]"
201
- tags: [connect, bridge]
202
- ---
116
+ ## Why This Connection Matters
117
+ {2-3 sentences on what this relationship reveals and why it's worth knowing}
203
118
  ```
204
119
 
205
- Use `obsidian create` to save. Ask the user where they'd like it saved.
206
-
207
120
  ## Key Principles
208
121
 
209
- - **Evidence-based**: Every claimed connection must cite specific notes and quotes.
210
- - **Honest about weakness**: If the connection is tenuous, say so. A weak bridge honestly reported is more valuable than a fabricated strong one.
211
- - **User's vault only**: Don't bridge topics using your general knowledge. The connection must exist in the vault's own link graph and content.
212
- - **Actionable**: Always suggest concrete next steps notes to link, hub notes to create, follow-up traces to run.
213
- - **Respect the "no connection" result**: Not finding a connection is a valid and useful outcome.
122
+ - **Graph over guesswork.** Base connections on actual wikilinks, shared tags, and shared sources — not inferred relationships.
123
+ - **Multiple paths.** There may be several ways two topics connect show the most meaningful ones, not just the shortest.
124
+ - **Explain, don't just list.** The value is in the *explanation* of why the connection matters, not just the path itself.
125
+ - **Obsidian is first workbench.** All note operations go through Obsidian CLI.
@@ -0,0 +1,170 @@
1
+ ---
2
+ name: cook
3
+ description: >
4
+ The core knowledge compilation skill. Reads raw notes and external sources, then
5
+ distills them into structured, cross-referenced knowledge pages in entities/, concepts/,
6
+ comparisons/, and queries/. Use this skill whenever the user mentions compiling notes,
7
+ digesting material, updating the knowledge base, running a cook cycle, or says anything
8
+ like "process my notes", "compile this", "add this to the wiki", "what's new in my notes",
9
+ or "update knowledge pages". Also activate when the user pastes external content and wants
10
+ it integrated into the knowledge base.
11
+ ---
12
+
13
+ # /cook — Knowledge Compilation
14
+
15
+ You are a knowledge compiler. Your job is to read raw material (user notes, external sources)
16
+ and distill it into structured, cross-referenced knowledge pages.
17
+
18
+ ## Prerequisites Check
19
+
20
+ ```bash
21
+ obsidian --version
22
+ ```
23
+
24
+ If this fails, STOP and display the Obsidian CLI availability message (see /prep).
25
+
26
+ ## Parameters
27
+
28
+ - **target** (optional): What to cook. Default: incremental (new/modified notes since last cook).
29
+ - `--all` or `full`: Read all user notes in the vault
30
+ - `"Topic Name"`: Read notes matching this keyword
31
+ - `path/to/note.md`: Read a specific note
32
+ - `<URL>`: Fetch external article and digest it
33
+
34
+ ## Input Scope
35
+
36
+ ### Incremental Mode (default)
37
+
38
+ When user runs `/cook` with no arguments:
39
+ 1. Read `log.md` for last cook timestamp
40
+ 2. Scan for `.md` files outside agent directories with `modified` date after that timestamp
41
+ 3. Include any unprocessed files
42
+
43
+ ### Full Mode
44
+
45
+ When user runs `/cook --all`:
46
+ - Read all user notes in the vault (exclude `entities/`, `concepts/`, `comparisons/`, `queries/`)
47
+ - Re-evaluate all entities and concepts
48
+
49
+ ### Targeted Mode
50
+
51
+ When user runs `/cook "Feature A"` or `/cook path/to/note.md`:
52
+ - Read only the specified notes or notes matching the keyword
53
+
54
+ ### External URL
55
+
56
+ When user provides a URL:
57
+ 1. Fetch content using WebFetch or Obsidian Web Clipper
58
+ 2. Save as a user note in the vault (ask the user where to save, or use a sensible default like the vault root with a descriptive filename: `<slug>.md`)
59
+ 3. Add frontmatter: `title`, `source_url`, `fetched` date
60
+ 4. Process normally — the saved note becomes raw material for /cook
61
+
62
+ **Note:** No dedicated `raw/` directory. External material is saved as regular user notes, consistent with the brownfield principle.
63
+
64
+ ## Processing Pipeline
65
+
66
+ ### Step 1: Read & Parse
67
+ - Read all target notes
68
+ - Extract frontmatter, content, wikilinks
69
+ - Identify entities (named things), concepts (abstract ideas), decisions, contradictions
70
+
71
+ ### Step 2: Match Against Existing Pages
72
+ - Check `INDEX.base` or scan `entities/`, `concepts/` for existing pages
73
+ - Determine: create new vs. update existing
74
+
75
+ ### Step 3: Create/Update Pages
76
+ - **New entities:** Create in `entities/<name>.md`
77
+ - **New concepts:** Create in `concepts/<name>.md`
78
+ - **Updates:** Add new information, bump `updated` date
79
+ - **Contradictions:** Follow Update Policy
80
+
81
+ **Create page thresholds:**
82
+ - Appears in 2+ notes, OR is central subject of one note
83
+ - Do NOT create for: passing mentions, minor details, out-of-domain topics
84
+
85
+ ### Step 4: Cross-Reference
86
+ - Ensure every new/updated page has at least 2 outbound wikilinks
87
+ - Check existing pages link back where relevant
88
+
89
+ ### Step 5: Update Navigation
90
+ - `INDEX.base` auto-updates via Obsidian Base query
91
+ - Append entry to `log.md`
92
+
93
+ ### Step 6: Report
94
+ Present structured summary (see Output Report Format below).
95
+
96
+ ## Contradiction Handling
97
+
98
+ ### Detection
99
+ - Compare claims across notes about the same entity/concept
100
+ - Check dates — newer claims may supersede older
101
+ - Look for explicit contradictions (e.g., "we changed from X to Y")
102
+
103
+ ### Resolution Workflow
104
+ 1. Note both positions with dates and source references
105
+ 2. Mark in frontmatter: `contradictions: [page-name]`
106
+ 3. Report to user with specific sources
107
+ 4. Offer to create a comparison page
108
+ 5. User decides
109
+
110
+ ### Update Policy
111
+ - Newer sources generally supersede older
112
+ - If both positions still valid (e.g., A/B testing), note both
113
+ - Never silently overwrite — always flag for review
114
+
115
+ ## Output Report Format
116
+
117
+ ```
118
+ Cook complete. Here's what changed:
119
+
120
+ New knowledge:
121
+ • [[feature-a]] — Response time monitoring feature
122
+ • [[response-time-metrics]] — Why median replaced avg
123
+
124
+ Updated:
125
+ • [[zhang-san]] — Added Feature A assignment
126
+
127
+ Contradiction found:
128
+ ⚠ PRD says avg(response_time) > baseline, but experiment notes say median
129
+ Sources: Projects/Feature-A-PRD.md vs Daily/2026-04-05.md
130
+ Want me to create a comparison page?
131
+
132
+ Log: 1 entry added to log.md
133
+ ```
134
+
135
+ **Design principles:**
136
+ - Natural language, no technical jargon
137
+ - Structured for quick scanning
138
+ - Actionable (asks for decisions on contradictions)
139
+ - Wikilinks for easy navigation
140
+
141
+ ## Auto-Trigger Behavior
142
+
143
+ The Agent should automatically run `/cook` after:
144
+ - Writing a note (brief report: "Cooked 1 note. Updated [[x]], created [[y]].")
145
+ - User drops new files into the vault
146
+
147
+ **When NOT to auto-trigger:**
148
+ - Rapid-fire note creation (batch and cook once at the end)
149
+ - `/cook` was already run in the last 5 minutes
150
+
151
+ ## Agent Page Identification
152
+
153
+ Agent pages are identified by directory:
154
+ | Location | Ownership |
155
+ |----------|-----------|
156
+ | `entities/**/*.md` | Agent |
157
+ | `concepts/**/*.md` | Agent |
158
+ | `comparisons/**/*.md` | Agent |
159
+ | `queries/**/*.md` | Agent |
160
+ | All other `.md` | User (read-only during /cook) |
161
+
162
+ No `owner` frontmatter field needed.
163
+
164
+ ## Key Principles
165
+
166
+ - **Evidence-based**: Every knowledge page cites its sources
167
+ - **Never modify user notes**: User notes are read-only during /cook
168
+ - **Thresholds matter**: 2+ mentions or central subject to create a page
169
+ - **Split at 200 lines**: Break large pages into sub-topics
170
+ - **Flag contradictions**: Never silently overwrite