@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.
- package/dist/__tests__/plugin-config.test.js +7 -10
- package/dist/__tests__/plugin-config.test.js.map +1 -1
- package/dist/assets/obsidian-skills/byoao-conventions.md +30 -54
- package/dist/assets/obsidian-skills/vault-thinking.md +6 -5
- package/dist/assets/presets/common/AGENTS.md.hbs +29 -46
- package/dist/assets/presets/common/SCHEMA.md.hbs +57 -0
- package/dist/assets/presets/common/Start Here.md.hbs +29 -40
- package/dist/assets/presets/minimal/preset.json +3 -3
- package/dist/assets/presets/pm-tpm/preset.json +2 -2
- package/{src/skills/ask.md → dist/assets/skills/ask/SKILL.md} +30 -27
- package/dist/assets/skills/ask.md +28 -27
- package/dist/assets/skills/challenge/SKILL.md +134 -0
- package/dist/assets/skills/challenge.md +79 -121
- package/dist/assets/skills/connect/SKILL.md +126 -0
- package/dist/assets/skills/connect.md +75 -163
- package/dist/assets/skills/cook/SKILL.md +170 -0
- package/dist/assets/skills/cook.md +167 -0
- package/dist/assets/skills/diagnose/SKILL.md +134 -0
- package/dist/assets/skills/diagnose.md +102 -43
- package/dist/assets/skills/drift/SKILL.md +123 -0
- package/dist/assets/skills/drift.md +64 -165
- package/dist/assets/skills/health/SKILL.md +65 -0
- package/dist/assets/skills/health.md +63 -0
- package/{src/skills/ideas.md → dist/assets/skills/ideas/SKILL.md} +11 -10
- package/dist/assets/skills/ideas.md +11 -10
- package/dist/assets/skills/organize/SKILL.md +109 -0
- package/dist/assets/skills/organize.md +56 -155
- package/dist/assets/skills/prep/SKILL.md +65 -0
- package/dist/assets/skills/prep.md +63 -0
- package/dist/assets/skills/trace/SKILL.md +143 -0
- package/dist/assets/skills/trace.md +75 -90
- package/dist/assets/skills/wiki/SKILL.md +127 -0
- package/dist/assets/skills/wiki.md +77 -178
- package/dist/cli/cli-program.js +18 -15
- package/dist/cli/cli-program.js.map +1 -1
- package/dist/cli/installer.js +54 -29
- package/dist/cli/installer.js.map +1 -1
- package/dist/hooks/idle-suggestions.js +4 -4
- package/dist/hooks/idle-suggestions.js.map +1 -1
- package/dist/hooks/system-transform.js +35 -1
- package/dist/hooks/system-transform.js.map +1 -1
- package/dist/index.js +455 -636
- package/dist/index.js.map +1 -1
- package/dist/plugin-config.js +6 -32
- package/dist/plugin-config.js.map +1 -1
- package/dist/tools/init-vault.js +8 -38
- package/dist/tools/init-vault.js.map +1 -1
- package/dist/tools/vault-doctor.js +1 -1
- package/dist/tools/vault-doctor.js.map +1 -1
- package/dist/tools/vault-status.js +1 -1
- package/dist/tools/vault-status.js.map +1 -1
- package/dist/vault/__tests__/create.test.js +48 -116
- package/dist/vault/__tests__/create.test.js.map +1 -1
- package/dist/vault/__tests__/doctor.test.js +14 -2
- package/dist/vault/__tests__/doctor.test.js.map +1 -1
- package/dist/vault/__tests__/manifest.test.js +2 -2
- package/dist/vault/__tests__/manifest.test.js.map +1 -1
- package/dist/vault/__tests__/status.test.js +12 -0
- package/dist/vault/__tests__/status.test.js.map +1 -1
- package/dist/vault/__tests__/upgrade.test.js +3 -3
- package/dist/vault/__tests__/upgrade.test.js.map +1 -1
- package/dist/vault/create.js +86 -196
- package/dist/vault/create.js.map +1 -1
- package/dist/vault/doctor.js +49 -0
- package/dist/vault/doctor.js.map +1 -1
- package/dist/vault/manifest.js +2 -2
- package/dist/vault/manifest.js.map +1 -1
- package/dist/vault/preset.js +10 -4
- package/dist/vault/preset.js.map +1 -1
- package/dist/vault/self-update.js +1 -1
- package/dist/vault/status.js +24 -0
- package/dist/vault/status.js.map +1 -1
- package/dist/vault/upgrade.js +165 -23
- package/dist/vault/upgrade.js.map +1 -1
- package/package.json +1 -1
- package/src/assets/obsidian-skills/byoao-conventions.md +9 -6
- package/src/assets/obsidian-skills/vault-thinking.md +6 -5
- package/src/assets/presets/common/AGENTS.md.hbs +23 -19
- package/src/assets/presets/common/SCHEMA.md.hbs +57 -0
- package/src/assets/presets/common/Start Here.md.hbs +29 -40
- package/src/assets/presets/minimal/preset.json +3 -3
- package/src/assets/presets/pm-tpm/preset.json +2 -2
- package/src/skills/ask/SKILL.md +135 -0
- package/src/skills/challenge/SKILL.md +134 -0
- package/src/skills/connect/SKILL.md +126 -0
- package/src/skills/cook/SKILL.md +170 -0
- package/src/skills/diagnose/SKILL.md +134 -0
- package/src/skills/drift/SKILL.md +123 -0
- package/src/skills/health/SKILL.md +65 -0
- package/src/skills/ideas/SKILL.md +173 -0
- package/src/skills/organize/SKILL.md +109 -0
- package/src/skills/prep/SKILL.md +65 -0
- package/src/skills/trace/SKILL.md +143 -0
- package/src/skills/wiki/SKILL.md +127 -0
- package/dist/assets/presets/common/Glossary.md.hbs +0 -16
- package/dist/assets/presets/common/obsidian/daily-notes.json +0 -5
- package/dist/assets/presets/common/obsidian/templates.json +0 -3
- package/dist/assets/presets/common/templates/Daily Note.md +0 -19
- package/dist/assets/presets/common/templates/Decision Record.md +0 -32
- package/dist/assets/presets/common/templates/Investigation.md +0 -34
- package/dist/assets/presets/common/templates/Meeting Notes.md +0 -25
- package/dist/assets/skills/emerge.md +0 -168
- package/dist/assets/skills/weave.md +0 -287
- package/dist/tools/add-glossary-term.js +0 -21
- package/dist/tools/add-glossary-term.js.map +0 -1
- package/dist/tools/add-person.js +0 -21
- package/dist/tools/add-person.js.map +0 -1
- package/dist/tools/add-project.js +0 -24
- package/dist/tools/add-project.js.map +0 -1
- package/dist/tools/graph-health.js +0 -25
- package/dist/tools/graph-health.js.map +0 -1
- package/dist/tools/note-read.js +0 -19
- package/dist/tools/note-read.js.map +0 -1
- package/dist/tools/search-vault.js +0 -22
- package/dist/tools/search-vault.js.map +0 -1
- package/dist/vault/__tests__/glossary.test.js +0 -68
- package/dist/vault/__tests__/glossary.test.js.map +0 -1
- package/dist/vault/__tests__/graph-health.test.js +0 -102
- package/dist/vault/__tests__/graph-health.test.js.map +0 -1
- package/dist/vault/__tests__/member.test.js +0 -85
- package/dist/vault/__tests__/member.test.js.map +0 -1
- package/dist/vault/__tests__/note-read.test.js +0 -71
- package/dist/vault/__tests__/note-read.test.js.map +0 -1
- package/dist/vault/__tests__/obsidian-cli.test.js +0 -108
- package/dist/vault/__tests__/obsidian-cli.test.js.map +0 -1
- package/dist/vault/__tests__/search-vault.test.js +0 -93
- package/dist/vault/__tests__/search-vault.test.js.map +0 -1
- package/dist/vault/glossary.js +0 -27
- package/dist/vault/glossary.js.map +0 -1
- package/dist/vault/graph-health.js +0 -83
- package/dist/vault/graph-health.js.map +0 -1
- package/dist/vault/member.js +0 -67
- package/dist/vault/member.js.map +0 -1
- package/dist/vault/note-read.js +0 -70
- package/dist/vault/note-read.js.map +0 -1
- package/dist/vault/project.js +0 -68
- package/dist/vault/project.js.map +0 -1
- package/dist/vault/retrieval-types.js +0 -5
- package/dist/vault/retrieval-types.js.map +0 -1
- package/dist/vault/search-vault.js +0 -87
- package/dist/vault/search-vault.js.map +0 -1
- package/src/assets/presets/common/obsidian/daily-notes.json +0 -5
- package/src/assets/presets/common/obsidian/templates.json +0 -3
- package/src/assets/presets/common/templates/Daily Note.md +0 -19
- package/src/assets/presets/common/templates/Decision Record.md +0 -32
- package/src/assets/presets/common/templates/Investigation.md +0 -34
- package/src/assets/presets/common/templates/Meeting Notes.md +0 -25
- package/src/skills/challenge.md +0 -174
- package/src/skills/connect.md +0 -213
- package/src/skills/diagnose.md +0 -72
- package/src/skills/drift.md +0 -223
- package/src/skills/emerge.md +0 -168
- package/src/skills/organize.md +0 -206
- package/src/skills/trace.md +0 -156
- package/src/skills/weave.md +0 -287
- 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:
|
|
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
|
|
9
|
+
# /connect — Bridge Two Topics
|
|
7
10
|
|
|
8
|
-
You are a
|
|
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 /
|
|
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):
|
|
25
|
-
- **to** (required):
|
|
26
|
-
- **
|
|
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:
|
|
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 "<
|
|
32
|
+
obsidian search "<from>"
|
|
33
|
+
obsidian search "<to>"
|
|
38
34
|
```
|
|
39
35
|
|
|
40
|
-
|
|
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
|
-
|
|
38
|
+
Read any existing agent pages in `entities/`, `concepts/`, `comparisons/`, and `queries/`:
|
|
47
39
|
|
|
48
40
|
```bash
|
|
49
|
-
obsidian read "
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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
|
-
|
|
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
|
-
|
|
67
|
+
### Step 3: Find Direct Connections
|
|
136
68
|
|
|
137
|
-
|
|
138
|
-
-
|
|
139
|
-
-
|
|
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
|
-
|
|
74
|
+
### Step 4: Find Indirect Paths (Expanded Mode)
|
|
142
75
|
|
|
143
|
-
|
|
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
|
-
|
|
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
|
-
|
|
150
|
-
-
|
|
151
|
-
-
|
|
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
|
-
|
|
88
|
+
### Step 5: Present the Connection
|
|
157
89
|
|
|
158
90
|
```markdown
|
|
159
|
-
#
|
|
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
|
-
|
|
173
|
-
|
|
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
|
-
##
|
|
96
|
+
## Connection Paths
|
|
97
|
+
{If indirect paths exist, show them:}
|
|
177
98
|
|
|
178
|
-
|
|
179
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
- **
|
|
210
|
-
- **
|
|
211
|
-
- **
|
|
212
|
-
- **
|
|
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
|