@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.
- 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/dist/assets/skills/ask.md +28 -27
- package/dist/assets/skills/challenge.md +79 -121
- package/dist/assets/skills/connect.md +75 -163
- package/dist/assets/skills/cook.md +167 -0
- package/dist/assets/skills/diagnose.md +102 -43
- package/dist/assets/skills/drift.md +64 -165
- package/dist/assets/skills/health.md +63 -0
- package/dist/assets/skills/ideas.md +11 -10
- package/dist/assets/skills/organize.md +56 -155
- package/dist/assets/skills/prep.md +63 -0
- package/dist/assets/skills/trace.md +75 -90
- package/dist/assets/skills/wiki.md +77 -178
- package/dist/cli/cli-program.js +17 -14
- package/dist/cli/cli-program.js.map +1 -1
- package/dist/cli/installer.js +10 -4
- 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 +395 -623
- 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 +47 -115
- 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 +75 -188
- 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 +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 +120 -16
- 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.md +28 -27
- package/src/skills/challenge.md +79 -121
- package/src/skills/connect.md +75 -163
- package/src/skills/cook.md +167 -0
- package/src/skills/diagnose.md +102 -43
- package/src/skills/drift.md +64 -165
- package/src/skills/health.md +63 -0
- package/src/skills/ideas.md +11 -10
- package/src/skills/organize.md +56 -155
- package/src/skills/prep.md +63 -0
- package/src/skills/trace.md +75 -90
- package/src/skills/wiki.md +77 -178
- 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/emerge.md +0 -168
- package/src/skills/weave.md +0 -287
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: trace
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Chronological timeline of an idea across notes. Detects phases, turning points, and
|
|
5
|
+
contradictions in how a topic evolved. Use when the user asks "how did X evolve",
|
|
6
|
+
"trace the history of Y", "timeline of Z", or wants to understand how an idea changed over time.
|
|
4
7
|
---
|
|
5
8
|
|
|
6
|
-
# /trace —
|
|
9
|
+
# /trace — Chronological Timeline
|
|
7
10
|
|
|
8
|
-
You are a
|
|
11
|
+
You are a historical detective. Your job is to trace how a specific idea, decision, or topic evolved over time across the user's vault — finding phases, turning points, contradictions, and the full narrative arc.
|
|
9
12
|
|
|
10
13
|
## Prerequisites Check
|
|
11
14
|
|
|
@@ -13,144 +16,126 @@ You are a knowledge archaeologist. Your job is to trace how a specific idea, con
|
|
|
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
|
-
- **topic** (required): The idea,
|
|
25
|
-
- **
|
|
26
|
-
- **output** (optional): If set, save the trace as a new note at this path.
|
|
23
|
+
- **topic** (required): The idea, decision, or concept to trace.
|
|
24
|
+
- **depth** (optional): `summary` (key milestones only) or `detailed` (all mentions with context). Default: `summary`.
|
|
27
25
|
|
|
28
26
|
## Process
|
|
29
27
|
|
|
30
|
-
###
|
|
31
|
-
|
|
32
|
-
If a 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: Find All Mentions
|
|
28
|
+
### Step 1: Locate All Mentions
|
|
35
29
|
|
|
36
|
-
Search for the topic across
|
|
30
|
+
Search for the topic across all notes:
|
|
37
31
|
|
|
38
32
|
```bash
|
|
39
33
|
obsidian search "<topic>"
|
|
34
|
+
obsidian tags "<topic>"
|
|
40
35
|
```
|
|
41
36
|
|
|
42
|
-
Also
|
|
43
|
-
- `INDEX.base` if it exists, for domain and note_type classification
|
|
44
|
-
- Backlinks to `[[<topic>]]` if a note exists for it
|
|
45
|
-
- Tag variations: `#<topic>`, `#<topic-kebab-case>`
|
|
37
|
+
Also search agent-maintained pages under `entities/`, `concepts/`, `comparisons/`, and `queries/`:
|
|
46
38
|
|
|
47
39
|
```bash
|
|
48
|
-
obsidian
|
|
40
|
+
obsidian read file="entities/<topic>.md"
|
|
41
|
+
obsidian read file="concepts/<topic>.md"
|
|
42
|
+
obsidian read file="comparisons/<topic>.md"
|
|
43
|
+
obsidian read file="queries/<topic>.md"
|
|
49
44
|
```
|
|
50
45
|
|
|
46
|
+
Read `INDEX.base` to check if there's already a compiled page for this topic.
|
|
47
|
+
|
|
51
48
|
### Step 2: Build Timeline
|
|
52
49
|
|
|
53
50
|
For each note that mentions the topic:
|
|
54
51
|
|
|
55
|
-
1.
|
|
56
|
-
2.
|
|
57
|
-
3.
|
|
58
|
-
|
|
52
|
+
1. Read the full content using `obsidian read`
|
|
53
|
+
2. Extract the date (from frontmatter or filename for daily notes)
|
|
54
|
+
3. Identify what the note says about the topic:
|
|
55
|
+
- **New idea proposed** — first mention of the concept
|
|
56
|
+
- **Decision made** — commitment to a specific approach
|
|
57
|
+
- **Change/evolution** — modification of previous understanding
|
|
58
|
+
- **Contradiction** — statement that conflicts with an earlier note
|
|
59
|
+
- **Confirmation** — validation of a previous position
|
|
60
|
+
- **Abandoned** — idea dropped or superseded
|
|
59
61
|
|
|
60
|
-
|
|
62
|
+
### Step 3: Detect Phases
|
|
61
63
|
|
|
62
|
-
|
|
64
|
+
Group the timeline into phases:
|
|
63
65
|
|
|
64
|
-
|
|
66
|
+
- **Inception** — topic first appears, initial framing
|
|
67
|
+
- **Exploration** — multiple approaches considered, debate
|
|
68
|
+
- **Decision** — specific approach chosen
|
|
69
|
+
- **Implementation** — execution details, adjustments
|
|
70
|
+
- **Resolution** — outcome, lessons learned (or abandonment)
|
|
65
71
|
|
|
66
|
-
|
|
67
|
-
- **Investigation** — deeper dives, multiple notes, gathering evidence
|
|
68
|
-
- **Decision** — a conclusion was reached, direction was set
|
|
69
|
-
- **Implementation** — action taken, results documented
|
|
70
|
-
- **Reflection** — looking back, lessons learned, re-evaluation
|
|
72
|
+
A topic may skip phases, cycle back, or have multiple parallel tracks.
|
|
71
73
|
|
|
72
|
-
|
|
74
|
+
### Step 4: Identify Turning Points
|
|
73
75
|
|
|
74
|
-
|
|
76
|
+
Highlight moments where the trajectory changed:
|
|
75
77
|
|
|
76
|
-
|
|
78
|
+
- "We switched from X to Y" — explicit change
|
|
79
|
+
- Data or evidence that contradicted previous assumptions
|
|
80
|
+
- New stakeholder or constraint that shifted direction
|
|
81
|
+
- External event (tech release, policy change) that affected the topic
|
|
77
82
|
|
|
78
|
-
|
|
79
|
-
- New information: "After reading [[Source]], your approach changed"
|
|
80
|
-
- Decisions: "The meeting on 2026-04-10 resolved the debate"
|
|
81
|
-
- Abandoned threads: "You explored X but never followed up after May"
|
|
83
|
+
### Step 5: Find Contradictions
|
|
82
84
|
|
|
83
|
-
|
|
85
|
+
Compare statements across time:
|
|
84
86
|
|
|
85
|
-
|
|
87
|
+
- "In Note A (March 1): we decided X"
|
|
88
|
+
- "In Note B (April 15): actually Y is better because..."
|
|
89
|
+
- Is this a genuine contradiction, an evolution of thinking, or a context-dependent difference?
|
|
86
90
|
|
|
87
|
-
|
|
88
|
-
# Trace: {Topic}
|
|
91
|
+
Flag genuine contradictions. Note the dates, sources, and nature of the conflict.
|
|
89
92
|
|
|
90
|
-
|
|
93
|
+
### Step 6: Present Timeline
|
|
91
94
|
|
|
92
|
-
|
|
95
|
+
```markdown
|
|
96
|
+
# Timeline: {topic}
|
|
93
97
|
|
|
94
|
-
|
|
98
|
+
Traced across {N} notes spanning {start date} to {end date}.
|
|
95
99
|
|
|
96
|
-
|
|
97
|
-
> "{key quote from the note}"
|
|
98
|
-
- **{date}** — [[Note Name]]: {summary}
|
|
100
|
+
---
|
|
99
101
|
|
|
100
|
-
|
|
102
|
+
## Phase 1: {Phase Name} ({date range})
|
|
101
103
|
|
|
102
|
-
|
|
104
|
+
**What was happening**: {brief context}
|
|
103
105
|
|
|
104
|
-
|
|
106
|
+
- **{date}** — [[Note A]]: {what happened / what was decided}
|
|
107
|
+
- **{date}** — [[Note B]]: {what changed / what was added}
|
|
105
108
|
|
|
106
|
-
|
|
109
|
+
**Key insight**: {what this phase reveals}
|
|
107
110
|
|
|
108
|
-
|
|
111
|
+
---
|
|
109
112
|
|
|
110
|
-
|
|
113
|
+
## Phase 2: {Phase Name} ({date range})
|
|
114
|
+
...
|
|
111
115
|
|
|
112
|
-
|
|
116
|
+
---
|
|
113
117
|
|
|
114
|
-
|
|
115
|
-
- **Key influences**: {notes/people/events that shaped the direction}
|
|
116
|
-
- **Open threads**: {aspects mentioned but never resolved}
|
|
117
|
-
- **Current state**: {where the topic stands now}
|
|
118
|
+
## Turning Points
|
|
118
119
|
|
|
119
|
-
|
|
120
|
+
1. **{date}**: {what changed and why it mattered} — [[source note]]
|
|
120
121
|
|
|
121
|
-
|
|
122
|
-
- [[Related Topic 1]] — mentioned in {N} of the same notes
|
|
123
|
-
- [[Related Topic 2]] — appears to be a dependency
|
|
124
|
-
```
|
|
122
|
+
## Contradictions Found
|
|
125
123
|
|
|
126
|
-
|
|
124
|
+
- ⚠ [[Note A]] says X, but [[Note B]] says Y — {resolution if known}
|
|
127
125
|
|
|
128
|
-
|
|
126
|
+
## Current State
|
|
129
127
|
|
|
130
|
-
|
|
128
|
+
{Where things stand now — the most recent position on this topic}
|
|
131
129
|
|
|
132
|
-
|
|
130
|
+
## Unanswered Questions
|
|
133
131
|
|
|
134
|
-
|
|
135
|
-
---
|
|
136
|
-
title: "Trace: {Topic}"
|
|
137
|
-
note_type: literature
|
|
138
|
-
type: reference
|
|
139
|
-
domain: <inferred from topic>
|
|
140
|
-
date: <today>
|
|
141
|
-
references:
|
|
142
|
-
- "[[note1]]"
|
|
143
|
-
- "[[note2]]"
|
|
144
|
-
tags: [trace, <topic-tag>]
|
|
145
|
-
---
|
|
132
|
+
{What the vault doesn't tell us about this topic's evolution}
|
|
146
133
|
```
|
|
147
134
|
|
|
148
|
-
Use `obsidian create` to save. Ask the user where they'd like it saved.
|
|
149
|
-
|
|
150
135
|
## Key Principles
|
|
151
136
|
|
|
152
|
-
- **
|
|
153
|
-
- **
|
|
154
|
-
- **
|
|
155
|
-
- **
|
|
156
|
-
- **
|
|
137
|
+
- **Chronology is authority.** The timeline must follow actual note dates, not inferred order.
|
|
138
|
+
- **Evidence-based.** Every claim in the timeline must cite a specific note.
|
|
139
|
+
- **Show the messiness.** Ideas rarely evolve linearly. Show the false starts, reversals, and parallel tracks.
|
|
140
|
+
- **Flag contradictions.** Don't resolve them — present both sides and let the user decide.
|
|
141
|
+
- **Obsidian is first workbench.** All note operations go through Obsidian CLI.
|
|
@@ -1,227 +1,126 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wiki
|
|
3
|
-
description:
|
|
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 —
|
|
10
|
+
# /wiki — Knowledge Map
|
|
7
11
|
|
|
8
|
-
|
|
12
|
+
**Metaphor:** The menu board — shows what's been prepared and what's on offer.
|
|
9
13
|
|
|
10
|
-
##
|
|
14
|
+
## Purpose
|
|
11
15
|
|
|
12
|
-
|
|
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:
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
obsidian list
|
|
33
|
-
```
|
|
20
|
+
### Step 1: Prerequisites Check
|
|
34
21
|
|
|
35
22
|
```bash
|
|
36
|
-
obsidian
|
|
23
|
+
obsidian --version
|
|
37
24
|
```
|
|
38
25
|
|
|
39
|
-
|
|
26
|
+
If this fails, STOP and display the Obsidian CLI availability message (see /prep).
|
|
40
27
|
|
|
41
|
-
### Step 2: Read
|
|
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 "
|
|
31
|
+
obsidian read file="SCHEMA.md"
|
|
47
32
|
```
|
|
48
33
|
|
|
49
|
-
|
|
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
|
|
36
|
+
### Step 3: Generate INDEX.base Content
|
|
58
37
|
|
|
59
|
-
|
|
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
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
|
|
53
|
+
Format by section:
|
|
102
54
|
|
|
103
|
-
|
|
55
|
+
```markdown
|
|
56
|
+
# Knowledge Index
|
|
104
57
|
|
|
105
|
-
|
|
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
|
-
|
|
108
|
-
|
|
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
|
-
|
|
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
|
-
|
|
114
|
-
|
|
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
|
-
|
|
73
|
+
### Step 4: Check Obsidian Base Configuration
|
|
118
74
|
|
|
119
|
-
|
|
120
|
-
```markdown
|
|
121
|
-
# BYOAO — Build Your Own AI OS
|
|
75
|
+
INDEX.base relies on Obsidian Base (saved search) configuration. Verify:
|
|
122
76
|
|
|
123
|
-
|
|
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
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
175
|
-
```
|
|
96
|
+
Total pages: N (X entities, Y concepts, Z comparisons, W queries)
|
|
176
97
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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
|
-
|
|
205
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
120
|
+
## Key Principles
|
|
223
121
|
|
|
224
|
-
- **INDEX.base is
|
|
225
|
-
- **
|
|
226
|
-
- **
|
|
227
|
-
- **
|
|
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.
|
package/dist/cli/cli-program.js
CHANGED
|
@@ -130,8 +130,8 @@ program
|
|
|
130
130
|
// ── byoao init ───────────────────────────────────────────────────
|
|
131
131
|
program
|
|
132
132
|
.command("init")
|
|
133
|
-
.description("Create
|
|
134
|
-
"
|
|
133
|
+
.description("Create an LLM Wiki knowledge base — sets up agent directories, " +
|
|
134
|
+
"SCHEMA.md, log.md, and AI routing (AGENTS.md). Works with empty " +
|
|
135
135
|
"directories or adopts existing folders.")
|
|
136
136
|
.option("--kb <name>", "Knowledge base name (skips interactive prompt)")
|
|
137
137
|
.option("--name <name>", "Your name (default: OS username in non-interactive mode)")
|
|
@@ -153,7 +153,7 @@ program
|
|
|
153
153
|
let ownerName = opts.name || "";
|
|
154
154
|
let vaultPath = opts.path || opts.from;
|
|
155
155
|
let presetName = opts.preset || "minimal";
|
|
156
|
-
let
|
|
156
|
+
let wikiDomain = "";
|
|
157
157
|
let mcpSkip = opts.mcpSkip || [];
|
|
158
158
|
let gcpProjectId = opts.gcpProject || "";
|
|
159
159
|
// Interactive TUI when --kb is not provided and stdout is TTY
|
|
@@ -235,15 +235,15 @@ program
|
|
|
235
235
|
vaultPath = customPath;
|
|
236
236
|
}
|
|
237
237
|
}
|
|
238
|
-
// 4.
|
|
238
|
+
// 4. Work profile (preset)
|
|
239
239
|
const presets = listPresets().filter(p => p.name !== "minimal");
|
|
240
240
|
if (presets.length > 0) {
|
|
241
241
|
const { selectedPreset } = await inquirer.prompt([{
|
|
242
242
|
type: "list",
|
|
243
243
|
name: "selectedPreset",
|
|
244
|
-
message: "
|
|
244
|
+
message: "Choose your work profile:",
|
|
245
245
|
choices: [
|
|
246
|
-
{ name: "
|
|
246
|
+
{ name: "Minimal — core LLM Wiki only", value: "minimal" },
|
|
247
247
|
...presets.map(p => ({
|
|
248
248
|
name: `${p.displayName} — ${p.description}`,
|
|
249
249
|
value: p.name,
|
|
@@ -252,7 +252,15 @@ program
|
|
|
252
252
|
}]);
|
|
253
253
|
presetName = selectedPreset;
|
|
254
254
|
}
|
|
255
|
-
// 5.
|
|
255
|
+
// 5. Wiki domain (optional)
|
|
256
|
+
const { domain } = await inquirer.prompt([{
|
|
257
|
+
type: "input",
|
|
258
|
+
name: "domain",
|
|
259
|
+
message: "What domain does this knowledge base cover? (optional, press Enter to skip)",
|
|
260
|
+
default: "",
|
|
261
|
+
}]);
|
|
262
|
+
wikiDomain = domain.trim();
|
|
263
|
+
// 6. MCP service selection (only if preset has MCP servers)
|
|
256
264
|
if (presetName !== "minimal") {
|
|
257
265
|
const { config: presetCfg } = loadPreset(presetName);
|
|
258
266
|
const mcpEntries = Object.entries(presetCfg.mcpServers);
|
|
@@ -289,10 +297,6 @@ program
|
|
|
289
297
|
}
|
|
290
298
|
}
|
|
291
299
|
}
|
|
292
|
-
// Create owner as a member if a preset with People/ is selected
|
|
293
|
-
if (ownerName && presetName !== "minimal") {
|
|
294
|
-
members.push({ name: ownerName, role: presetName === "pm-tpm" ? "PM/TPM" : "Team Member" });
|
|
295
|
-
}
|
|
296
300
|
}
|
|
297
301
|
catch {
|
|
298
302
|
// inquirer not available — fall through to require --kb
|
|
@@ -316,12 +320,11 @@ program
|
|
|
316
320
|
kbName,
|
|
317
321
|
ownerName,
|
|
318
322
|
vaultPath,
|
|
319
|
-
members,
|
|
320
|
-
projects: [],
|
|
321
323
|
preset: presetName,
|
|
322
324
|
provider: providerOpt,
|
|
323
325
|
gcpProjectId,
|
|
324
326
|
mcpSkip,
|
|
327
|
+
wikiDomain,
|
|
325
328
|
});
|
|
326
329
|
const spinner = startSpinner(`Creating knowledge base "${kbName}"`);
|
|
327
330
|
const result = await createVault(config);
|
|
@@ -429,7 +432,7 @@ program
|
|
|
429
432
|
printEventDetail(` ${result.vaultPath}`);
|
|
430
433
|
printEventDetail(" 2. Enable Obsidian CLI: Settings → General → Advanced → Command-line interface");
|
|
431
434
|
printEventDetail(' 3. Read "Start Here.md" for a quick orientation');
|
|
432
|
-
printEventDetail(" 4. Open the Agent Client panel and run /
|
|
435
|
+
printEventDetail(" 4. Open the Agent Client panel and run /cook to compile your notes into knowledge pages");
|
|
433
436
|
});
|
|
434
437
|
// ── byoao status ─────────────────────────────────────────────────
|
|
435
438
|
program
|