@jayjiang/byoao 1.1.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) 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/dist/assets/skills/ask.md +28 -27
  11. package/dist/assets/skills/challenge.md +79 -121
  12. package/dist/assets/skills/connect.md +75 -163
  13. package/dist/assets/skills/cook.md +167 -0
  14. package/dist/assets/skills/diagnose.md +102 -43
  15. package/dist/assets/skills/drift.md +64 -165
  16. package/dist/assets/skills/health.md +63 -0
  17. package/dist/assets/skills/ideas.md +11 -10
  18. package/dist/assets/skills/organize.md +56 -155
  19. package/dist/assets/skills/prep.md +63 -0
  20. package/dist/assets/skills/trace.md +75 -90
  21. package/dist/assets/skills/wiki.md +77 -178
  22. package/dist/cli/cli-program.js +17 -14
  23. package/dist/cli/cli-program.js.map +1 -1
  24. package/dist/cli/installer.js +10 -4
  25. package/dist/cli/installer.js.map +1 -1
  26. package/dist/hooks/idle-suggestions.js +4 -4
  27. package/dist/hooks/idle-suggestions.js.map +1 -1
  28. package/dist/hooks/system-transform.js +35 -1
  29. package/dist/hooks/system-transform.js.map +1 -1
  30. package/dist/index.js +395 -623
  31. package/dist/index.js.map +1 -1
  32. package/dist/plugin-config.js +6 -32
  33. package/dist/plugin-config.js.map +1 -1
  34. package/dist/tools/init-vault.js +8 -38
  35. package/dist/tools/init-vault.js.map +1 -1
  36. package/dist/tools/vault-doctor.js +1 -1
  37. package/dist/tools/vault-doctor.js.map +1 -1
  38. package/dist/tools/vault-status.js +1 -1
  39. package/dist/tools/vault-status.js.map +1 -1
  40. package/dist/vault/__tests__/create.test.js +47 -115
  41. package/dist/vault/__tests__/create.test.js.map +1 -1
  42. package/dist/vault/__tests__/doctor.test.js +14 -2
  43. package/dist/vault/__tests__/doctor.test.js.map +1 -1
  44. package/dist/vault/__tests__/manifest.test.js +2 -2
  45. package/dist/vault/__tests__/manifest.test.js.map +1 -1
  46. package/dist/vault/__tests__/status.test.js +12 -0
  47. package/dist/vault/__tests__/status.test.js.map +1 -1
  48. package/dist/vault/__tests__/upgrade.test.js +3 -3
  49. package/dist/vault/__tests__/upgrade.test.js.map +1 -1
  50. package/dist/vault/create.js +75 -188
  51. package/dist/vault/create.js.map +1 -1
  52. package/dist/vault/doctor.js +49 -0
  53. package/dist/vault/doctor.js.map +1 -1
  54. package/dist/vault/manifest.js +1 -1
  55. package/dist/vault/preset.js +10 -4
  56. package/dist/vault/preset.js.map +1 -1
  57. package/dist/vault/self-update.js +1 -1
  58. package/dist/vault/status.js +24 -0
  59. package/dist/vault/status.js.map +1 -1
  60. package/dist/vault/upgrade.js +120 -16
  61. package/dist/vault/upgrade.js.map +1 -1
  62. package/package.json +1 -1
  63. package/src/assets/obsidian-skills/byoao-conventions.md +9 -6
  64. package/src/assets/obsidian-skills/vault-thinking.md +6 -5
  65. package/src/assets/presets/common/AGENTS.md.hbs +23 -19
  66. package/src/assets/presets/common/SCHEMA.md.hbs +57 -0
  67. package/src/assets/presets/common/Start Here.md.hbs +29 -40
  68. package/src/assets/presets/minimal/preset.json +3 -3
  69. package/src/assets/presets/pm-tpm/preset.json +2 -2
  70. package/src/skills/ask.md +28 -27
  71. package/src/skills/challenge.md +79 -121
  72. package/src/skills/connect.md +75 -163
  73. package/src/skills/cook.md +167 -0
  74. package/src/skills/diagnose.md +102 -43
  75. package/src/skills/drift.md +64 -165
  76. package/src/skills/health.md +63 -0
  77. package/src/skills/ideas.md +11 -10
  78. package/src/skills/organize.md +56 -155
  79. package/src/skills/prep.md +63 -0
  80. package/src/skills/trace.md +75 -90
  81. package/src/skills/wiki.md +77 -178
  82. package/dist/assets/presets/common/Glossary.md.hbs +0 -16
  83. package/dist/assets/presets/common/obsidian/daily-notes.json +0 -5
  84. package/dist/assets/presets/common/obsidian/templates.json +0 -3
  85. package/dist/assets/presets/common/templates/Daily Note.md +0 -19
  86. package/dist/assets/presets/common/templates/Decision Record.md +0 -32
  87. package/dist/assets/presets/common/templates/Investigation.md +0 -34
  88. package/dist/assets/presets/common/templates/Meeting Notes.md +0 -25
  89. package/dist/assets/skills/emerge.md +0 -168
  90. package/dist/assets/skills/weave.md +0 -287
  91. package/dist/tools/add-glossary-term.js +0 -21
  92. package/dist/tools/add-glossary-term.js.map +0 -1
  93. package/dist/tools/add-person.js +0 -21
  94. package/dist/tools/add-person.js.map +0 -1
  95. package/dist/tools/add-project.js +0 -24
  96. package/dist/tools/add-project.js.map +0 -1
  97. package/dist/tools/graph-health.js +0 -25
  98. package/dist/tools/graph-health.js.map +0 -1
  99. package/dist/tools/note-read.js +0 -19
  100. package/dist/tools/note-read.js.map +0 -1
  101. package/dist/tools/search-vault.js +0 -22
  102. package/dist/tools/search-vault.js.map +0 -1
  103. package/dist/vault/__tests__/glossary.test.js +0 -68
  104. package/dist/vault/__tests__/glossary.test.js.map +0 -1
  105. package/dist/vault/__tests__/graph-health.test.js +0 -102
  106. package/dist/vault/__tests__/graph-health.test.js.map +0 -1
  107. package/dist/vault/__tests__/member.test.js +0 -85
  108. package/dist/vault/__tests__/member.test.js.map +0 -1
  109. package/dist/vault/__tests__/note-read.test.js +0 -71
  110. package/dist/vault/__tests__/note-read.test.js.map +0 -1
  111. package/dist/vault/__tests__/obsidian-cli.test.js +0 -108
  112. package/dist/vault/__tests__/obsidian-cli.test.js.map +0 -1
  113. package/dist/vault/__tests__/search-vault.test.js +0 -93
  114. package/dist/vault/__tests__/search-vault.test.js.map +0 -1
  115. package/dist/vault/glossary.js +0 -27
  116. package/dist/vault/glossary.js.map +0 -1
  117. package/dist/vault/graph-health.js +0 -83
  118. package/dist/vault/graph-health.js.map +0 -1
  119. package/dist/vault/member.js +0 -67
  120. package/dist/vault/member.js.map +0 -1
  121. package/dist/vault/note-read.js +0 -70
  122. package/dist/vault/note-read.js.map +0 -1
  123. package/dist/vault/project.js +0 -68
  124. package/dist/vault/project.js.map +0 -1
  125. package/dist/vault/retrieval-types.js +0 -5
  126. package/dist/vault/retrieval-types.js.map +0 -1
  127. package/dist/vault/search-vault.js +0 -87
  128. package/dist/vault/search-vault.js.map +0 -1
  129. package/src/assets/presets/common/obsidian/daily-notes.json +0 -5
  130. package/src/assets/presets/common/obsidian/templates.json +0 -3
  131. package/src/assets/presets/common/templates/Daily Note.md +0 -19
  132. package/src/assets/presets/common/templates/Decision Record.md +0 -32
  133. package/src/assets/presets/common/templates/Investigation.md +0 -34
  134. package/src/assets/presets/common/templates/Meeting Notes.md +0 -25
  135. package/src/skills/emerge.md +0 -168
  136. package/src/skills/weave.md +0 -287
@@ -1,227 +1,126 @@
1
1
  ---
2
2
  name: wiki
3
- description: Generate INDEX.base knowledge graph at vault root and update AGENTS.md with current stats. Use when the user says "generate index", "build wiki", "update INDEX", "create knowledge map", or wants a visual overview of their vault.
3
+ description: >
4
+ Generate and maintain INDEX.base — the dynamic knowledge map for v2 agent pages (`type`:
5
+ entity | concept | comparison | query). Uses Obsidian Base queries to list agent-maintained
6
+ pages; SCHEMA.md defines tag taxonomy. Use when the user runs /wiki or wants to see the current
7
+ state of the knowledge base.
4
8
  ---
5
9
 
6
- # /wiki — Generate Knowledge Index
10
+ # /wiki — Knowledge Map
7
11
 
8
- You are a knowledge cartographer. Your job is to generate an `INDEX.base` file at the vault root that serves as the knowledge graph entry point, and update `AGENTS.md` with current vault statistics.
12
+ **Metaphor:** The menu board shows what's been prepared and what's on offer.
9
13
 
10
- ## Prerequisites Check
14
+ ## Purpose
11
15
 
12
- **Before doing anything else**, verify Obsidian CLI is available:
13
-
14
- ```bash
15
- obsidian --version
16
- ```
17
-
18
- If this fails, STOP and display:
19
-
20
- ```
21
- Obsidian CLI is not available. Please ensure:
22
- 1. Obsidian is running
23
- 2. This vault is open in Obsidian
24
- 3. CLI is enabled: Settings → General → Advanced → Command-line interface
25
- ```
16
+ Generate and maintain `INDEX.base`, the dynamic knowledge map that lists all agent-maintained pages grouped by v2 `type` (`entity`, `concept`, `comparison`, `query`). Unlike static index files, INDEX.base uses Obsidian Base queries to stay current automatically. Use `SCHEMA.md` for tag taxonomy when summarizing or grouping entries.
26
17
 
27
18
  ## Process
28
19
 
29
- ### Step 1: Build Vault Map
30
-
31
- ```bash
32
- obsidian list
33
- ```
20
+ ### Step 1: Prerequisites Check
34
21
 
35
22
  ```bash
36
- obsidian properties sort=count counts
23
+ obsidian --version
37
24
  ```
38
25
 
39
- This gives you the full list of notes and their frontmatter distribution.
26
+ If this fails, STOP and display the Obsidian CLI availability message (see /prep).
40
27
 
41
- ### Step 2: Read Existing INDEX.base (if any)
42
-
43
- If `INDEX.base` already exists, read it to understand the current structure:
28
+ ### Step 2: Read SCHEMA.md
44
29
 
45
30
  ```bash
46
- obsidian read "INDEX"
31
+ obsidian read file="SCHEMA.md"
47
32
  ```
48
33
 
49
- ### Step 3: Analyze Knowledge Structure
50
-
51
- Group notes by their `domain` frontmatter field. For notes without `domain`, infer it from content. Count:
52
- - Total notes
53
- - Notes by `domain` (topics)
54
- - Notes by `note_type` (fleeting, literature, permanent)
55
- - Most frequently referenced concepts
34
+ Understand the current tag taxonomy, domain definitions, and page conventions.
56
35
 
57
- ### Step 4: Generate INDEX.base
36
+ ### Step 3: Generate INDEX.base Content
58
37
 
59
- Create or overwrite `INDEX.base` at the vault root. Use Obsidian CLI to create the file:
38
+ Query all agent-maintained pages by v2 frontmatter `type` (`entity`, `concept`, `comparison`, `query`) so each page is listed under the correct section:
60
39
 
61
40
  ```bash
62
- obsidian create name="INDEX" content="<YAML content>" silent overwrite
41
+ obsidian properties type=entity
42
+ obsidian properties type=concept
43
+ obsidian properties type=comparison
44
+ obsidian properties type=query
63
45
  ```
64
46
 
65
- The content should be valid YAML for an Obsidian Base:
66
-
67
- ```yaml
68
- filters:
69
- not:
70
- - 'note_type == ""'
71
- formulas: {}
72
- properties:
73
- note_type:
74
- displayName: Type
75
- domain:
76
- displayName: Domain
77
- views:
78
- - type: table
79
- name: "All Notes"
80
- groupBy:
81
- property: domain
82
- direction: ASC
83
- order:
84
- - file.name
85
- - note_type
86
- - domain
87
- - tags
88
- - date
89
- - type: cards
90
- name: "Gallery"
91
- groupBy:
92
- property: note_type
93
- direction: ASC
94
- order:
95
- - file.name
96
- - note_type
97
- - domain
98
- - date
99
- ```
47
+ For each type, compile entries with:
48
+ - Page name (as wikilink)
49
+ - Title from frontmatter
50
+ - Brief summary (from content's first paragraph or definition section)
51
+ - Tags and domain
100
52
 
101
- **IMPORTANT:** The YAML must be properly formatted. Use single quotes for formulas containing special characters. Ensure proper indentation (2 spaces).
53
+ Format by section:
102
54
 
103
- ### Step 5: Generate AGENTS.md
55
+ ```markdown
56
+ # Knowledge Index
104
57
 
105
- Read the current `AGENTS.md` (if it exists):
58
+ ## Entities
59
+ - [[feature-a]] — Response time monitoring feature (tags: monitoring, backend)
60
+ - [[zhang-san]] — Senior engineer on Feature A team (tags: team, engineering)
106
61
 
107
- ```bash
108
- obsidian read "AGENTS"
109
- ```
62
+ ## Concepts
63
+ - [[response-time-metrics]] — Why median replaced avg for trigger calculation (tags: metrics, decisions)
64
+ - [[search-trigger-rules]] — Search trigger rule design principles (tags: search, configuration)
110
65
 
111
- Generate a complete `AGENTS.md` that serves as the agent's entry point for the vault. Use `obsidian create` with `overwrite`:
66
+ ## Comparisons
67
+ - [[avg-vs-median-for-trigger]] — Side-by-side analysis of avg vs median as trigger metrics (tags: metrics, decisions)
112
68
 
113
- ```bash
114
- obsidian create path="AGENTS.md" content="<content>" overwrite silent
69
+ ## Queries
70
+ - [[why-did-we-choose-median]] "Why did we choose median over avg?" detailed answer (tags: metrics, history)
115
71
  ```
116
72
 
117
- The AGENTS.md must contain these sections:
73
+ ### Step 4: Check Obsidian Base Configuration
118
74
 
119
- **Header**
120
- ```markdown
121
- # BYOAO — Build Your Own AI OS
75
+ INDEX.base relies on Obsidian Base (saved search) configuration. Verify:
122
76
 
123
- This knowledge base contains **M topics** and **N indexed notes**.
124
- ```
77
+ 1. The Base query covers all four agent directories
78
+ 2. The query filters by `type` frontmatter field
79
+ 3. Results are grouped by type
125
80
 
126
- **Usage**
127
- ```markdown
128
- ## Usage
81
+ If the Base doesn't exist or is misconfigured, guide the user to set it up:
82
+ - Open Obsidian → Bases → Create new base
83
+ - Name it "Knowledge Index"
84
+ - Query: `path:entities/ OR path:concepts/ OR path:comparisons/ OR path:queries/`
85
+ - Group by: `type`
129
86
 
130
- - `/weave` Scan notes, enrich with frontmatter and wikilinks, build the knowledge graph
131
- - `/wiki` — Regenerate the INDEX.base knowledge map
132
- - `/organize` — Suggest a directory structure based on frontmatter metadata
133
- ```
87
+ ### Step 5: Present the Index
134
88
 
135
- **Current Stats**
136
- ```markdown
137
- ## Current Stats
138
-
139
- - Total notes: {total}
140
- - Indexed notes (have note_type): {indexed}
141
- - Topics (domain): {domain1}, {domain2}, ...
142
- - Pending notes (need weave): {pending}
143
- ```
89
+ Show the current INDEX.base content to the user:
144
90
 
145
- **Interacting with the Vault** — This is critical. The agent must always prefer Obsidian CLI:
146
91
  ```markdown
147
- ## Working with this Vault
148
-
149
- When you need to interact with notes, always use Obsidian CLI first:
150
-
151
- | Task | Command |
152
- |------|---------|
153
- | Search notes | `obsidian search query="keyword"` |
154
- | Read a note | `obsidian read file="Note Name"` |
155
- | Create a new note | `obsidian create name="Note Title" content="# Content"` |
156
- | Create note in folder | `obsidian create path="Folder/Note.md" content="# Content"` |
157
- | Append to a note | `obsidian append file="Note" content="New content"` |
158
- | Add frontmatter | `obsidian prepend file="Note" content='---
159
- title: "Title"
160
- note_type: fleeting
161
- domain: Topic
162
- date: YYYY-MM-DD
163
- tags: [tag1]
164
- ---
92
+ # Knowledge Index
165
93
 
166
- '` |
167
- | Rename/move a note | `obsidian move path="Old.md" to="NewFolder/New.md"` |
168
- | List backlinks | `obsidian backlinks file="Note"` |
169
- | Check links | `obsidian links file="Note"` |
170
- | List all files | `obsidian files ext=md` |
171
- | Check unresolved links | `obsidian unresolved total` |
172
- | Open random note | `obsidian random` |
94
+ Generated on YYYY-MM-DD
173
95
 
174
- For multi-line content, use `\\n` for newlines in the `content=` parameter.
175
- ```
96
+ Total pages: N (X entities, Y concepts, Z comparisons, W queries)
176
97
 
177
- **Creating New Notes** — explicit guidance:
178
- ```markdown
179
- ## Creating New Notes
180
-
181
- When asked to write, research, or document something:
182
-
183
- 1. **Search first** — `obsidian search query="topic"` to check if a relevant note already exists
184
- 2. **Read existing notes** — `obsidian read file="Note"` to understand what's already captured
185
- 3. **Create with frontmatter** — always include proper YAML frontmatter when creating:
186
- ```
187
- obsidian create name="New Note" content='---
188
- title: "New Note"
189
- note_type: fleeting
190
- domain: YourDomain
191
- date: YYYY-MM-DD
192
- tags: [relevant-tags]
193
- ---
194
-
195
- # New Note
196
-
197
- Content here...
198
- '
199
- ```
200
- 4. **Link to existing notes** — use `[[wikilink]]` syntax to connect new notes to existing ones
201
- 5. **Use `/weave` after bulk creation** — to enrich and connect the new notes to the graph
202
- ```
98
+ ## By Domain
99
+ - backend: N pages
100
+ - frontend: M pages
101
+ - infrastructure: K pages
203
102
 
204
- **Footer**
205
- ```markdown
206
- ---
207
- *Generated by /wiki skill*
208
- ```
209
-
210
- ### Step 6: Report
103
+ ## Most Connected
104
+ - [[page-name]] — N inbound links
105
+ - [[page-name]] — M inbound links
211
106
 
107
+ ## Recently Updated
108
+ - [[page-name]] — updated YYYY-MM-DD
109
+ - [[page-name]] — updated YYYY-MM-DD
212
110
  ```
213
- Wiki index generated:
214
- - INDEX.base: created/updated at vault root
215
- - Notes indexed: N
216
- - Topics: M (by domain)
217
- - AGENTS.md: updated with new counts
218
- ```
219
111
 
220
- Suggest the user open `INDEX.base` in Obsidian to view the knowledge graph in table or card view.
112
+ ### Step 6: Suggest Gaps
113
+
114
+ Based on the index, identify knowledge gaps:
115
+ - Entity mentioned in multiple concepts but no entity page exists
116
+ - Concept referenced in entity pages but no concept page exists
117
+ - Domains with very few pages (under-represented areas)
118
+ - Tags used frequently but no corresponding concept page
221
119
 
222
- ## Important Guidelines
120
+ ## Key Principles
223
121
 
224
- - **INDEX.base is a query, not static content** it dynamically displays notes based on frontmatter. The file itself only contains the query configuration.
225
- - **Only index notes with `note_type`** notes without this field are not yet processed by `/weave` and should not appear in the index.
226
- - **Preserve custom views** if the user has added custom views to `INDEX.base`, merge new views rather than overwriting.
227
- - **Idempotent** running `/wiki` multiple times should produce the same result without duplication.
122
+ - **INDEX.base is dynamic.** The Obsidian Base query keeps it current no manual regeneration needed on every cook cycle.
123
+ - **Summary quality.** Each entry's one-line summary should be genuinely informative, not just the page title repeated.
124
+ - **Navigation first.** INDEX.base exists to help humans find knowledge quickly. Structure it for scanning, not completeness.
125
+ - **Obsidian is first workbench.** All note operations go through Obsidian CLI.
126
+ - **Agent pages only.** INDEX.base covers only `entities/`, `concepts/`, `comparisons/`, `queries/` — not user notes.
@@ -1,16 +0,0 @@
1
- ---
2
- title: Glossary
3
- type: reference
4
- status: active
5
- date: {{date}}
6
- tags: [glossary, reference]
7
- ---
8
-
9
- # Glossary
10
-
11
- Domain terms and key concepts in this knowledge base.
12
- Maintained by /weave — run it to discover and add new terms.
13
-
14
- | Term | Definition | Domain |
15
- |------|-----------|--------|
16
- {{GLOSSARY_ENTRIES}}
@@ -1,5 +0,0 @@
1
- {
2
- "folder": "Daily",
3
- "format": "YYYY-MM-DD",
4
- "template": "Knowledge/templates/Daily Note"
5
- }
@@ -1,3 +0,0 @@
1
- {
2
- "folder": "Knowledge/templates"
3
- }
@@ -1,19 +0,0 @@
1
- ---
2
- title: "{{date}}"
3
- type: daily
4
- status: active
5
- date: {{date}}
6
- tags: [daily]
7
- ---
8
-
9
- ## Focus
10
-
11
- -
12
-
13
- ## Notes
14
-
15
- -
16
-
17
- ## Action Items
18
-
19
- - [ ]
@@ -1,32 +0,0 @@
1
- ---
2
- title: ""
3
- type: decision
4
- status: draft
5
- date: {{date}}
6
- decision: ""
7
- decided-by: []
8
- alternatives-considered: []
9
- tags: [decision]
10
- ---
11
-
12
- ## Context
13
-
14
- What is the situation that requires a decision?
15
-
16
- ## Decision
17
-
18
- What was decided.
19
-
20
- ## Alternatives Considered
21
-
22
- | Option | Pros | Cons |
23
- |--------|------|------|
24
- | | | |
25
-
26
- ## Rationale
27
-
28
- Why this option was chosen over alternatives.
29
-
30
- ## Consequences
31
-
32
- What changes as a result of this decision.
@@ -1,34 +0,0 @@
1
- ---
2
- title: ""
3
- type: investigation
4
- status: draft
5
- date: {{date}}
6
- jira: ""
7
- hypothesis: ""
8
- conclusion: ""
9
- tags: [investigation, spike]
10
- ---
11
-
12
- ## Question
13
-
14
- What are we trying to find out?
15
-
16
- ## Hypothesis
17
-
18
- What we expect to find and why.
19
-
20
- ## Method
21
-
22
- How we investigated (queries, tools, data sources).
23
-
24
- ## Findings
25
-
26
- -
27
-
28
- ## Conclusion
29
-
30
- Summary of what we learned. Does it confirm or refute the hypothesis?
31
-
32
- ## Next Steps
33
-
34
- -
@@ -1,25 +0,0 @@
1
- ---
2
- title: ""
3
- type: meeting
4
- status: active
5
- date: {{date}}
6
- participants: []
7
- meeting-type: ""
8
- tags: [meeting]
9
- ---
10
-
11
- ## Agenda
12
-
13
- 1.
14
-
15
- ## Notes
16
-
17
- -
18
-
19
- ## Decisions
20
-
21
- -
22
-
23
- ## Action Items
24
-
25
- - [ ] @person — task — due date
@@ -1,168 +0,0 @@
1
- ---
2
- name: emerge
3
- description: Surface conclusions, patterns, and insights the vault implies but never explicitly states. Analyzes clusters, orphans, and cross-domain connections. Use when the user asks "what patterns do you see", "what am I missing", "analyze my vault", "find hidden connections", or wants a big-picture review of their knowledge base.
4
- ---
5
-
6
- # /emerge — Surface Hidden Patterns
7
-
8
- You are a pattern recognition analyst. Your job is to read across the user's vault and surface insights that the notes collectively imply but never explicitly state — hidden conclusions, recurring themes, unnoticed contradictions, and latent connections.
9
-
10
- ## Prerequisites Check
11
-
12
- ```bash
13
- obsidian --version
14
- ```
15
-
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.
21
-
22
- ## Parameters
23
-
24
- - **scope** (optional): Limit analysis to a folder, domain, or tag. Default: entire vault.
25
- - **depth** (optional): "quick" (top-level scan) or "deep" (read every note in scope). Default: "quick".
26
- - **output** (optional): If set, save findings as a note at this path.
27
-
28
- ## Process
29
-
30
- ### Sampling Strategy
31
-
32
- If a domain or search returns more than 30 notes, prioritize: (1) most recent 10, (2) most-linked 10 (highest backlink count), (3) notes with `status: active`. Read these first, then scan remaining titles and frontmatter to check for outliers before synthesizing.
33
-
34
- ### Step 1: Map the Vault
35
-
36
- Build a structural picture:
37
-
38
- ```bash
39
- obsidian list
40
- obsidian properties sort=count counts
41
- obsidian tags
42
- ```
43
-
44
- Identify:
45
- - Total notes and their distribution across folders/domains
46
- - Most-used tags and properties
47
- - Cluster density (which areas have many interconnected notes vs sparse ones)
48
-
49
- ### Step 2: Find Structural Signals
50
-
51
- Use graph-level queries to identify interesting patterns:
52
-
53
- **Orphan notes** — notes with no links in or out:
54
- Use `byoao_graph_health` or scan notes checking for those with zero wikilinks (no `[[` in content) and zero backlinks.
55
- Orphans may contain ideas the user hasn't connected yet.
56
-
57
- **Dead-end notes** — notes that link out but nobody links to them:
58
- Scan for notes with outgoing wikilinks but no backlinks.
59
-
60
- **Hub notes** — notes with unusually many backlinks:
61
- ```bash
62
- obsidian backlinks "<note>"
63
- ```
64
- Hubs reveal what the user's thinking centers around.
65
-
66
- **Tag clusters** — tags that always co-occur:
67
- If `#migration` and `#payments` always appear together, there's an implicit connection.
68
-
69
- ### Step 3: Cross-Domain Analysis
70
-
71
- For each domain (from frontmatter `domain` field or folder grouping):
72
-
73
- 1. **Read a sample of notes** (5-10 per domain, prioritizing recent and highly-linked)
74
- 2. **Extract key themes** — what topics recur within the domain?
75
- 3. **Look for cross-domain bridges** — concepts mentioned in multiple domains
76
- 4. **Identify tension** — contradictory statements across domains or time periods
77
-
78
- ### Step 4: Pattern Detection
79
-
80
- Look for these specific pattern types:
81
-
82
- **Recurring questions**: The same question asked in multiple notes but never answered.
83
- > "You've asked 'what's our rollback strategy?' in 4 different meeting notes but no note contains an answer."
84
-
85
- **Implicit decisions**: A direction was taken without a documented decision.
86
- > "Notes shifted from Option A to Option B around April, but no decision record exists."
87
-
88
- **Convergent threads**: Separate lines of thinking that are heading toward the same conclusion.
89
- > "Your notes on 'API rate limiting' and 'user quotas' both point toward a tiered access model, but neither note references the other."
90
-
91
- **Forgotten threads**: Topics that received attention then went silent.
92
- > "'Data mesh' appears in 6 notes between Jan-Mar but hasn't been mentioned since."
93
-
94
- **Expertise gaps**: The vault references a topic repeatedly but always superficially.
95
- > "'Kubernetes networking' appears in 12 notes but always as a dependency, never deeply explored."
96
-
97
- **Contradictions**: Conflicting statements across notes.
98
- > "In [[Note A]] you wrote 'we should avoid microservices' but [[Note B]] proposes splitting the monolith."
99
-
100
- ### Step 5: Synthesize Insights
101
-
102
- For each pattern found, formulate an insight:
103
-
104
- ```markdown
105
- ## Insight: {title}
106
-
107
- **Pattern**: {what you observed}
108
- **Evidence**: {list of notes with brief quotes}
109
- **Implication**: {what this might mean — phrased as a question, not a conclusion}
110
- **Suggested action**: {what the user could do — write a note, make a decision, connect notes}
111
- ```
112
-
113
- ### Step 6: Present Findings
114
-
115
- ```markdown
116
- # Emerge: Vault Patterns
117
-
118
- Analyzed {N} notes across {M} domains.
119
-
120
- ## Key Findings
121
-
122
- ### 1. {Insight title}
123
- {Pattern, evidence, implication, action}
124
-
125
- ### 2. {Insight title}
126
- ...
127
-
128
- ## Structural Observations
129
-
130
- - **Most connected**: [[Note]] ({N} backlinks) — your thinking hub
131
- - **Most isolated**: {N} orphan notes that may contain undeveloped ideas
132
- - **Busiest domain**: {domain} ({N} notes)
133
- - **Thinnest domain**: {domain} ({N} notes) — possible blind spot
134
-
135
- ## Suggested Next Steps
136
-
137
- 1. {Actionable suggestion — e.g. "Connect [[A]] and [[B]] — they discuss the same problem"}
138
- 2. {Actionable suggestion — e.g. "Write a decision record for the implicit choice between X and Y"}
139
- 3. {Actionable suggestion — e.g. "Run /trace on 'data mesh' to understand why it was abandoned"}
140
- ```
141
-
142
- ### Step 7: Save (Optional)
143
-
144
- At the end of your findings, ask:
145
-
146
- > "Would you like me to save this as a note?"
147
-
148
- If the user confirms, save with frontmatter:
149
-
150
- ```yaml
151
- ---
152
- title: "Emerge: Vault Patterns"
153
- note_type: literature
154
- type: analysis
155
- date: <today>
156
- tags: [emerge, patterns]
157
- ---
158
- ```
159
-
160
- Use `obsidian create` to save. Ask the user where they'd like it saved.
161
-
162
- ## Key Principles
163
-
164
- - **Show, don't tell**: Always cite specific notes and quotes. Never claim a pattern exists without evidence.
165
- - **Questions over conclusions**: Frame implications as questions the user should consider, not answers you've decided.
166
- - **Respect user judgment**: The user may be aware of patterns and have chosen not to act. Present findings neutrally.
167
- - **Prioritize actionable insights**: "These two notes should link to each other" is more useful than "your vault has 12 orphans."
168
- - **Deep mode means thorough**: In "deep" mode, read every note in scope. In "quick" mode, use structural signals and sampling.