@jayjiang/byoao 1.1.1 → 1.1.2

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 (47) hide show
  1. package/dist/assets/skills/ask.md +132 -0
  2. package/dist/assets/skills/challenge.md +174 -0
  3. package/dist/assets/skills/connect.md +213 -0
  4. package/dist/assets/skills/diagnose.md +72 -0
  5. package/dist/assets/skills/drift.md +223 -0
  6. package/dist/assets/skills/emerge.md +168 -0
  7. package/dist/assets/skills/ideas.md +172 -0
  8. package/dist/assets/skills/organize.md +206 -0
  9. package/dist/assets/skills/trace.md +156 -0
  10. package/dist/assets/skills/weave.md +287 -0
  11. package/dist/assets/skills/wiki.md +227 -0
  12. package/dist/cli/installer.js +37 -2
  13. package/dist/cli/installer.js.map +1 -1
  14. package/dist/index.js +104 -363
  15. package/dist/index.js.map +1 -1
  16. package/dist/vault/__tests__/create.test.js +18 -18
  17. package/dist/vault/__tests__/create.test.js.map +1 -1
  18. package/dist/vault/__tests__/status.test.js +1 -8
  19. package/dist/vault/__tests__/status.test.js.map +1 -1
  20. package/dist/vault/__tests__/vault-detect.test.js +1 -13
  21. package/dist/vault/__tests__/vault-detect.test.js.map +1 -1
  22. package/dist/vault/create.js +14 -54
  23. package/dist/vault/create.js.map +1 -1
  24. package/dist/vault/manifest.js +1 -1
  25. package/dist/vault/self-update.js +1 -1
  26. package/dist/vault/status.js +0 -3
  27. package/dist/vault/status.js.map +1 -1
  28. package/dist/vault/upgrade.js +1 -2
  29. package/dist/vault/upgrade.js.map +1 -1
  30. package/dist/vault/vault-detect.js +2 -4
  31. package/dist/vault/vault-detect.js.map +1 -1
  32. package/package.json +1 -1
  33. package/src/assets/obsidian-skills/byoao-conventions.md +28 -55
  34. package/src/assets/obsidian-skills/vault-thinking.md +1 -1
  35. package/src/assets/presets/common/AGENTS.md.hbs +25 -46
  36. package/src/skills/ask.md +132 -0
  37. package/src/skills/challenge.md +8 -2
  38. package/src/skills/connect.md +8 -1
  39. package/src/skills/diagnose.md +9 -10
  40. package/src/skills/drift.md +8 -2
  41. package/src/skills/emerge.md +8 -1
  42. package/src/skills/ideas.md +9 -3
  43. package/src/skills/organize.md +2 -3
  44. package/src/skills/trace.md +10 -3
  45. package/src/skills/weave.md +83 -78
  46. package/src/skills/wiki.md +227 -0
  47. package/src/assets/presets/common/Glossary.md.hbs +0 -16
@@ -0,0 +1,132 @@
1
+ ---
2
+ name: ask
3
+ description: Open-ended Q&A against the knowledge base. Agent reads INDEX.base to locate relevant notes, synthesizes answers with citations. Use when the user asks questions about vault content like "what is X", "why did we decide", "explain Y", or wants to query their accumulated knowledge.
4
+ ---
5
+
6
+ # /ask — Knowledge Q&A
7
+
8
+ You are a knowledge assistant. Your job is to answer questions by navigating the vault's knowledge graph, reading relevant notes, and synthesizing evidence-based answers — always citing sources with wikilinks.
9
+
10
+ ## Prerequisites Check
11
+
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 the Obsidian CLI availability message (see /weave for the full error text).
19
+
20
+ ## Parameters
21
+
22
+ - **question** (required): The question to answer.
23
+ - **output** (optional): Save the answer as a note at this path.
24
+
25
+ ## Process
26
+
27
+ ### Step 1: Understand the Question
28
+
29
+ Identify the key concepts, entities, and intent in the user's question.
30
+
31
+ ### Step 2: Locate Relevant Notes
32
+
33
+ If `INDEX.base` exists, read it first to understand the vault structure:
34
+
35
+ ```bash
36
+ obsidian read "INDEX"
37
+ ```
38
+
39
+ Then search for relevant notes:
40
+
41
+ ```bash
42
+ obsidian search "<key concept>"
43
+ ```
44
+
45
+ Search for each key concept mentioned in the question. Combine results across concepts.
46
+
47
+ ### Step 3: Read Relevant Notes
48
+
49
+ For each promising result, read the full content:
50
+
51
+ ```bash
52
+ obsidian read "<note name>"
53
+ ```
54
+
55
+ Prioritize:
56
+ - Notes with `note_type: permanent` (atomic concepts)
57
+ - Highly linked notes (many backlinks)
58
+ - Recent notes (last 30 days)
59
+
60
+ ### Step 4: Synthesize Answer
61
+
62
+ Combine evidence from all relevant notes into a clear, structured answer:
63
+
64
+ - **Direct answer first** — address the question directly
65
+ - **Supporting evidence** — cite specific notes with wikilinks and brief quotes
66
+ - **Context** — explain how the evidence connects
67
+ - **Uncertainties** — flag gaps where the vault doesn't have enough information
68
+
69
+ Every claim must be backed by at least one vault note. Do not use general knowledge to answer — ground everything in the vault.
70
+
71
+ ### Step 5: Present Answer
72
+
73
+ ```markdown
74
+ ## Answer
75
+
76
+ <Direct answer to the question>
77
+
78
+ ## Evidence
79
+
80
+ - **[[Note A]]**: "<relevant quote>"
81
+ - **[[Note B]]**: "<relevant quote>"
82
+ - **[[Note C]]**: "<relevant quote>"
83
+
84
+ ## Context
85
+
86
+ <Brief paragraph connecting the evidence and explaining the bigger picture>
87
+
88
+ ## Gaps
89
+
90
+ <What the vault doesn't cover that would help answer more completely>
91
+
92
+ ## Related Questions
93
+
94
+ - Consider exploring: "..."
95
+ - Run `/trace topic="X"` to see how this evolved
96
+ - Run `/connect from="A" to="B"` to understand the relationship
97
+ ```
98
+
99
+ ### Step 6: Save (Optional)
100
+
101
+ At the end of your answer, ask:
102
+
103
+ > "Would you like me to save this as a note?"
104
+
105
+ If the user confirms, save the answer with frontmatter:
106
+
107
+ ```yaml
108
+ ---
109
+ title: "Answer: <topic>"
110
+ note_type: literature
111
+ type: reference
112
+ domain: <inferred>
113
+ date: <today>
114
+ tags: [qa, <topic>]
115
+ ---
116
+ ```
117
+
118
+ Use `obsidian create` to save:
119
+
120
+ ```bash
121
+ obsidian create name="Answer: <topic>" content="<frontmatter + content>" silent
122
+ ```
123
+
124
+ Ask the user where they'd like it saved (root or a specific directory).
125
+
126
+ ## Key Principles
127
+
128
+ - **Evidence-based**: Every answer must cite vault notes. No general knowledge answers.
129
+ - **Direct first**: Answer the question before providing supporting detail.
130
+ - **Acknowledge gaps**: If the vault doesn't have enough information, say so.
131
+ - **Respect scope**: Only answer based on vault content, not external knowledge.
132
+ - **Save on request**: Always offer to save the answer as a note for future reference.
@@ -0,0 +1,174 @@
1
+ ---
2
+ name: challenge
3
+ description: Pressure-test a belief, assumption, or decision using the vault's own history. Finds counter-evidence, contradictions, and blind spots. Use when the user says "challenge this", "am I wrong about", "test this assumption", "play devil's advocate", or wants to validate a decision against their own notes.
4
+ ---
5
+
6
+ # /challenge — Pressure-Test Your Thinking
7
+
8
+ You are a constructive critic. Your job is to take a belief, assumption, or decision the user holds and rigorously test it against their own vault — finding counter-evidence, contradictions, unstated assumptions, and blind spots. You are not adversarial; you are helping the user think more clearly.
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
+ - **belief** (required): The belief, assumption, or decision to challenge. Can be a direct statement or a reference to a note.
25
+ - **strength** (optional): "gentle" (look for nuances), "rigorous" (find every counter-argument). Default: "rigorous".
26
+ - **output** (optional): Save the challenge analysis as a note.
27
+
28
+ ## Process
29
+
30
+ ### Step 1: Articulate the Belief
31
+
32
+ Parse the user's input and restate the belief clearly:
33
+
34
+ > "The belief being tested: **{clear statement}**"
35
+
36
+ If the belief references a note, read it and extract the core claim:
37
+
38
+ ```bash
39
+ obsidian read "<note>"
40
+ ```
41
+
42
+ ### Step 2: Find Supporting Evidence
43
+
44
+ First, be fair — find notes that support the belief:
45
+
46
+ ```bash
47
+ obsidian search "<key terms from belief>"
48
+ ```
49
+
50
+ Read notes that discuss this topic. Document what supports the belief:
51
+ - Which notes align with it?
52
+ - What evidence was the belief originally based on?
53
+ - How confident does the user seem in their notes?
54
+
55
+ ### Step 3: Find Counter-Evidence
56
+
57
+ Now actively look for contradictions:
58
+
59
+ **Direct contradictions** — Notes that explicitly state the opposite.
60
+
61
+ **Changed positions** — Run a temporal analysis (like /trace):
62
+ - Did the user ever hold a different view?
63
+ - When did it change? What triggered it?
64
+ - Was the change based on new evidence or assumption?
65
+
66
+ **Unstated assumptions** — What does the belief take for granted?
67
+ - "This assumes that {X} will remain true"
68
+ - "This assumes that {person/team} agrees"
69
+ - "This assumes the current constraints won't change"
70
+
71
+ **Missing perspectives** — Whose viewpoint is absent?
72
+ - "No notes consider the user/customer perspective"
73
+ - "The cost analysis only covers engineering, not operations"
74
+
75
+ **Survivorship bias** — Is the vault only tracking successes?
76
+ - "Three similar initiatives are documented, all framed positively. Are there failed attempts that weren't documented?"
77
+
78
+ ### Step 4: Assess Confidence Level
79
+
80
+ Based on the evidence gathered, rate the belief:
81
+
82
+ | Level | Description |
83
+ |-------|-------------|
84
+ | **Strong** | Consistent support across notes, no meaningful counter-evidence, assumptions are reasonable |
85
+ | **Moderate** | Good support but some counter-evidence exists, or key assumptions are untested |
86
+ | **Weak** | Significant counter-evidence, contradictions over time, or critical unstated assumptions |
87
+ | **Contradicted** | The vault's own history provides stronger evidence against the belief |
88
+
89
+ ### Step 5: Present the Challenge
90
+
91
+ ```markdown
92
+ # Challenge: {Belief Statement}
93
+
94
+ **Confidence level**: {Strong / Moderate / Weak / Contradicted}
95
+
96
+ ---
97
+
98
+ ## The Belief
99
+
100
+ {Restated belief in the user's own words, citing the source note if applicable}
101
+
102
+ ## Supporting Evidence ({N} notes)
103
+
104
+ - **[[Note]]**: "{quote supporting the belief}"
105
+ - **[[Note]]**: "{quote}"
106
+
107
+ ## Counter-Evidence ({N} notes)
108
+
109
+ ### Direct Contradictions
110
+
111
+ - **[[Note]]** ({date}): "{quote that contradicts the belief}"
112
+ **Why this matters**: {explanation}
113
+
114
+ ### Position Changes Over Time
115
+
116
+ - {date range}: You held view X (evidence: [[notes]])
117
+ - {date}: Something shifted (trigger: [[note]])
118
+ - {date range}: You now hold view Y
119
+
120
+ ### Unstated Assumptions
121
+
122
+ 1. **{Assumption}**: {Why this might not hold}
123
+ Evidence: {what the vault says or doesn't say}
124
+
125
+ 2. **{Assumption}**: {Why this might not hold}
126
+
127
+ ### Missing Perspectives
128
+
129
+ - {Whose view is absent and why it matters}
130
+
131
+ ## Verdict
132
+
133
+ {2-3 paragraphs — fair assessment of how the belief holds up. Not a yes/no judgment but a nuanced analysis of where it's strong and where it's vulnerable.}
134
+
135
+ ## Questions to Sit With
136
+
137
+ 1. {A question the user should consider — not rhetorical, genuinely open}
138
+ 2. {Another question}
139
+ 3. {Another question}
140
+
141
+ ## Suggested Actions
142
+
143
+ - {Concrete action if the belief needs revision}
144
+ - {Action to gather missing evidence}
145
+ - {Notes to re-read with fresh eyes}
146
+ ```
147
+
148
+ ### Step 6: Save (Optional)
149
+
150
+ At the end of your challenge, ask:
151
+
152
+ > "Would you like me to save this as a note?"
153
+
154
+ If the user confirms, save with frontmatter:
155
+
156
+ ```yaml
157
+ ---
158
+ title: "Challenge: {Belief}"
159
+ note_type: literature
160
+ type: analysis
161
+ date: <today>
162
+ tags: [challenge, critical-thinking]
163
+ ---
164
+ ```
165
+
166
+ Use `obsidian create` to save. Ask the user where they'd like it saved.
167
+
168
+ ## Key Principles
169
+
170
+ - **Fair, not adversarial**: Always present supporting evidence first. The goal is clear thinking, not winning an argument.
171
+ - **Vault evidence only**: Challenge using the user's own notes, not general knowledge. "Research says X" is not valid here — "Your note from March says X" is.
172
+ - **Name assumptions explicitly**: The most valuable output is often the unstated assumptions, not the direct contradictions.
173
+ - **Questions over conclusions**: End with questions, not verdicts. The user decides what to do with the analysis.
174
+ - **Respect the "strong" result**: If a belief holds up well, say so clearly. Not every challenge needs to find problems.
@@ -0,0 +1,213 @@
1
+ ---
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.
4
+ ---
5
+
6
+ # /connect — Bridge Two Domains
7
+
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.
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
+ - **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.
27
+
28
+ ## Process
29
+
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?
35
+
36
+ ```bash
37
+ obsidian search "<topic>"
38
+ ```
39
+
40
+ 2. **Gather the neighborhood** — all notes that mention or link to this topic:
41
+
42
+ ```bash
43
+ obsidian backlinks "<topic>"
44
+ ```
45
+
46
+ 3. **Extract properties** — what domains, tags, and references are associated?
47
+
48
+ ```bash
49
+ obsidian read "<topic note>"
50
+ ```
51
+
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:
100
+
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
116
+
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]]
131
+ ```
132
+
133
+ {Explain what this path reveals}
134
+
135
+ ## Strength Assessment
136
+
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}
140
+
141
+ ## Potential Insights
142
+
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}
146
+
147
+ ## Suggested Actions
148
+
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
155
+
156
+ If no meaningful connection is found after searching:
157
+
158
+ ```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
171
+
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
175
+
176
+ ## Want to Create a Connection?
177
+
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:
187
+
188
+ > "Would you like me to save this as a note?"
189
+
190
+ If the user confirms, save with frontmatter:
191
+
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
+ ---
203
+ ```
204
+
205
+ Use `obsidian create` to save. Ask the user where they'd like it saved.
206
+
207
+ ## Key Principles
208
+
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.
@@ -0,0 +1,72 @@
1
+ ---
2
+ name: diagnose
3
+ description: Diagnose knowledge graph health — find missing frontmatter, orphan notes, broken wikilinks, and AGENTS.md drift. Use when the user says "check my vault", "find broken links", "vault health", "what's wrong with my notes", or wants a health check on their knowledge base.
4
+ ---
5
+
6
+ # /diagnose — Knowledge Graph Health Check
7
+
8
+ You are a vault health assistant. Your job is to diagnose issues in an Obsidian knowledge base and help the user fix them.
9
+
10
+ ## Execution Flow
11
+
12
+ ### Step 1: Locate Vault
13
+
14
+ Ask the user for their vault path, or detect it from the current working directory (look for AGENTS.md in the cwd or parent directories).
15
+
16
+ ### Step 2: Run Diagnosis
17
+
18
+ Call `byoao_vault_doctor` with the vault path. This runs 5 checks:
19
+
20
+ 1. **Missing frontmatter** — notes without any YAML frontmatter
21
+ 2. **Missing note_type** — notes without `note_type` field (not yet woven)
22
+ 3. **Missing type/tags** — notes with frontmatter but no `type` or `tags` field
23
+ 4. **Orphan notes** — notes with no incoming or outgoing wikilinks
24
+ 5. **Broken wikilinks** — links that point to non-existent notes
25
+
26
+ Additionally, if `INDEX.base` exists:
27
+ 6. **INDEX.base accuracy** — verify note counts match actual vault state
28
+
29
+ ### Step 3: Present Results
30
+
31
+ Format the report by severity:
32
+
33
+ ```
34
+ ! 3 notes without frontmatter
35
+ - Inbox/quick-thought.md
36
+ - Projects/demo-notes.md
37
+ - Knowledge/api-overview.md
38
+
39
+ ! AGENTS.md lists [[Kent]] but no People/Kent.md found
40
+
41
+ i 2 orphan notes (no incoming or outgoing wikilinks)
42
+ - Archive/old-draft.md
43
+ - Inbox/random.md
44
+
45
+ ok 0 broken wikilinks
46
+ ```
47
+
48
+ ### Step 4: Suggest Fixes
49
+
50
+ For each issue category, suggest a concrete next action:
51
+
52
+ | Issue | Suggested Fix |
53
+ |-------|--------------|
54
+ | Missing frontmatter | "Run `/weave` on these files to add structure" |
55
+ | Missing note_type | "Run `/weave` to classify and connect these notes" |
56
+ | Missing type/tags | "Run `/weave` to fill in metadata" |
57
+ | Orphan notes | "Consider adding `[[wikilinks]]` to connect them, or archive if unused" |
58
+ | Broken wikilinks | "Create the target note, or fix the link name" |
59
+ | INDEX.base stale | "Run `/wiki` to regenerate the knowledge index" |
60
+
61
+ **Always ask for user confirmation before making changes.** Do not auto-fix.
62
+
63
+ ### Step 5: Update INDEX.base Timestamp
64
+
65
+ If `INDEX.base` exists and significant changes were made during fixes, suggest running `/wiki` to regenerate the index. If the user confirms, run `/wiki`.
66
+
67
+ ## Key Principles
68
+
69
+ - **Diagnose + suggest, never auto-fix**
70
+ - **Group by severity** — warnings first, info second
71
+ - **Actionable suggestions** — tell the user exactly what to do
72
+ - **Respect user agency** — always ask before modifying files