@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.
- package/dist/assets/skills/ask.md +132 -0
- package/dist/assets/skills/challenge.md +174 -0
- package/dist/assets/skills/connect.md +213 -0
- package/dist/assets/skills/diagnose.md +72 -0
- package/dist/assets/skills/drift.md +223 -0
- package/dist/assets/skills/emerge.md +168 -0
- package/dist/assets/skills/ideas.md +172 -0
- package/dist/assets/skills/organize.md +206 -0
- package/dist/assets/skills/trace.md +156 -0
- package/dist/assets/skills/weave.md +287 -0
- package/dist/assets/skills/wiki.md +227 -0
- package/dist/cli/installer.js +37 -2
- package/dist/cli/installer.js.map +1 -1
- package/dist/index.js +104 -363
- package/dist/index.js.map +1 -1
- package/dist/vault/__tests__/create.test.js +18 -18
- package/dist/vault/__tests__/create.test.js.map +1 -1
- package/dist/vault/__tests__/status.test.js +1 -8
- package/dist/vault/__tests__/status.test.js.map +1 -1
- package/dist/vault/__tests__/vault-detect.test.js +1 -13
- package/dist/vault/__tests__/vault-detect.test.js.map +1 -1
- package/dist/vault/create.js +14 -54
- package/dist/vault/create.js.map +1 -1
- package/dist/vault/manifest.js +1 -1
- package/dist/vault/self-update.js +1 -1
- package/dist/vault/status.js +0 -3
- package/dist/vault/status.js.map +1 -1
- package/dist/vault/upgrade.js +1 -2
- package/dist/vault/upgrade.js.map +1 -1
- package/dist/vault/vault-detect.js +2 -4
- package/dist/vault/vault-detect.js.map +1 -1
- package/package.json +1 -1
- package/src/assets/obsidian-skills/byoao-conventions.md +28 -55
- package/src/assets/obsidian-skills/vault-thinking.md +1 -1
- package/src/assets/presets/common/AGENTS.md.hbs +25 -46
- package/src/skills/ask.md +132 -0
- package/src/skills/challenge.md +8 -2
- package/src/skills/connect.md +8 -1
- package/src/skills/diagnose.md +9 -10
- package/src/skills/drift.md +8 -2
- package/src/skills/emerge.md +8 -1
- package/src/skills/ideas.md +9 -3
- package/src/skills/organize.md +2 -3
- package/src/skills/trace.md +10 -3
- package/src/skills/weave.md +83 -78
- package/src/skills/wiki.md +227 -0
- 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
|