@jayjiang/byoao 1.1.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/dist/__tests__/plugin-config.test.js +7 -10
  2. package/dist/__tests__/plugin-config.test.js.map +1 -1
  3. package/dist/assets/obsidian-skills/byoao-conventions.md +30 -54
  4. package/dist/assets/obsidian-skills/vault-thinking.md +6 -5
  5. package/dist/assets/presets/common/AGENTS.md.hbs +29 -46
  6. package/dist/assets/presets/common/SCHEMA.md.hbs +57 -0
  7. package/dist/assets/presets/common/Start Here.md.hbs +29 -40
  8. package/dist/assets/presets/minimal/preset.json +3 -3
  9. package/dist/assets/presets/pm-tpm/preset.json +2 -2
  10. package/dist/assets/skills/ask.md +28 -27
  11. package/dist/assets/skills/challenge.md +79 -121
  12. package/dist/assets/skills/connect.md +75 -163
  13. package/dist/assets/skills/cook.md +167 -0
  14. package/dist/assets/skills/diagnose.md +102 -43
  15. package/dist/assets/skills/drift.md +64 -165
  16. package/dist/assets/skills/health.md +63 -0
  17. package/dist/assets/skills/ideas.md +11 -10
  18. package/dist/assets/skills/organize.md +56 -155
  19. package/dist/assets/skills/prep.md +63 -0
  20. package/dist/assets/skills/trace.md +75 -90
  21. package/dist/assets/skills/wiki.md +77 -178
  22. package/dist/cli/cli-program.js +17 -14
  23. package/dist/cli/cli-program.js.map +1 -1
  24. package/dist/cli/installer.js +10 -4
  25. package/dist/cli/installer.js.map +1 -1
  26. package/dist/hooks/idle-suggestions.js +4 -4
  27. package/dist/hooks/idle-suggestions.js.map +1 -1
  28. package/dist/hooks/system-transform.js +35 -1
  29. package/dist/hooks/system-transform.js.map +1 -1
  30. package/dist/index.js +395 -623
  31. package/dist/index.js.map +1 -1
  32. package/dist/plugin-config.js +6 -32
  33. package/dist/plugin-config.js.map +1 -1
  34. package/dist/tools/init-vault.js +8 -38
  35. package/dist/tools/init-vault.js.map +1 -1
  36. package/dist/tools/vault-doctor.js +1 -1
  37. package/dist/tools/vault-doctor.js.map +1 -1
  38. package/dist/tools/vault-status.js +1 -1
  39. package/dist/tools/vault-status.js.map +1 -1
  40. package/dist/vault/__tests__/create.test.js +47 -115
  41. package/dist/vault/__tests__/create.test.js.map +1 -1
  42. package/dist/vault/__tests__/doctor.test.js +14 -2
  43. package/dist/vault/__tests__/doctor.test.js.map +1 -1
  44. package/dist/vault/__tests__/manifest.test.js +2 -2
  45. package/dist/vault/__tests__/manifest.test.js.map +1 -1
  46. package/dist/vault/__tests__/status.test.js +12 -0
  47. package/dist/vault/__tests__/status.test.js.map +1 -1
  48. package/dist/vault/__tests__/upgrade.test.js +3 -3
  49. package/dist/vault/__tests__/upgrade.test.js.map +1 -1
  50. package/dist/vault/create.js +75 -188
  51. package/dist/vault/create.js.map +1 -1
  52. package/dist/vault/doctor.js +49 -0
  53. package/dist/vault/doctor.js.map +1 -1
  54. package/dist/vault/manifest.js +1 -1
  55. package/dist/vault/preset.js +10 -4
  56. package/dist/vault/preset.js.map +1 -1
  57. package/dist/vault/self-update.js +1 -1
  58. package/dist/vault/status.js +24 -0
  59. package/dist/vault/status.js.map +1 -1
  60. package/dist/vault/upgrade.js +120 -16
  61. package/dist/vault/upgrade.js.map +1 -1
  62. package/package.json +1 -1
  63. package/src/assets/obsidian-skills/byoao-conventions.md +9 -6
  64. package/src/assets/obsidian-skills/vault-thinking.md +6 -5
  65. package/src/assets/presets/common/AGENTS.md.hbs +23 -19
  66. package/src/assets/presets/common/SCHEMA.md.hbs +57 -0
  67. package/src/assets/presets/common/Start Here.md.hbs +29 -40
  68. package/src/assets/presets/minimal/preset.json +3 -3
  69. package/src/assets/presets/pm-tpm/preset.json +2 -2
  70. package/src/skills/ask.md +28 -27
  71. package/src/skills/challenge.md +79 -121
  72. package/src/skills/connect.md +75 -163
  73. package/src/skills/cook.md +167 -0
  74. package/src/skills/diagnose.md +102 -43
  75. package/src/skills/drift.md +64 -165
  76. package/src/skills/health.md +63 -0
  77. package/src/skills/ideas.md +11 -10
  78. package/src/skills/organize.md +56 -155
  79. package/src/skills/prep.md +63 -0
  80. package/src/skills/trace.md +75 -90
  81. package/src/skills/wiki.md +77 -178
  82. package/dist/assets/presets/common/Glossary.md.hbs +0 -16
  83. package/dist/assets/presets/common/obsidian/daily-notes.json +0 -5
  84. package/dist/assets/presets/common/obsidian/templates.json +0 -3
  85. package/dist/assets/presets/common/templates/Daily Note.md +0 -19
  86. package/dist/assets/presets/common/templates/Decision Record.md +0 -32
  87. package/dist/assets/presets/common/templates/Investigation.md +0 -34
  88. package/dist/assets/presets/common/templates/Meeting Notes.md +0 -25
  89. package/dist/assets/skills/emerge.md +0 -168
  90. package/dist/assets/skills/weave.md +0 -287
  91. package/dist/tools/add-glossary-term.js +0 -21
  92. package/dist/tools/add-glossary-term.js.map +0 -1
  93. package/dist/tools/add-person.js +0 -21
  94. package/dist/tools/add-person.js.map +0 -1
  95. package/dist/tools/add-project.js +0 -24
  96. package/dist/tools/add-project.js.map +0 -1
  97. package/dist/tools/graph-health.js +0 -25
  98. package/dist/tools/graph-health.js.map +0 -1
  99. package/dist/tools/note-read.js +0 -19
  100. package/dist/tools/note-read.js.map +0 -1
  101. package/dist/tools/search-vault.js +0 -22
  102. package/dist/tools/search-vault.js.map +0 -1
  103. package/dist/vault/__tests__/glossary.test.js +0 -68
  104. package/dist/vault/__tests__/glossary.test.js.map +0 -1
  105. package/dist/vault/__tests__/graph-health.test.js +0 -102
  106. package/dist/vault/__tests__/graph-health.test.js.map +0 -1
  107. package/dist/vault/__tests__/member.test.js +0 -85
  108. package/dist/vault/__tests__/member.test.js.map +0 -1
  109. package/dist/vault/__tests__/note-read.test.js +0 -71
  110. package/dist/vault/__tests__/note-read.test.js.map +0 -1
  111. package/dist/vault/__tests__/obsidian-cli.test.js +0 -108
  112. package/dist/vault/__tests__/obsidian-cli.test.js.map +0 -1
  113. package/dist/vault/__tests__/search-vault.test.js +0 -93
  114. package/dist/vault/__tests__/search-vault.test.js.map +0 -1
  115. package/dist/vault/glossary.js +0 -27
  116. package/dist/vault/glossary.js.map +0 -1
  117. package/dist/vault/graph-health.js +0 -83
  118. package/dist/vault/graph-health.js.map +0 -1
  119. package/dist/vault/member.js +0 -67
  120. package/dist/vault/member.js.map +0 -1
  121. package/dist/vault/note-read.js +0 -70
  122. package/dist/vault/note-read.js.map +0 -1
  123. package/dist/vault/project.js +0 -68
  124. package/dist/vault/project.js.map +0 -1
  125. package/dist/vault/retrieval-types.js +0 -5
  126. package/dist/vault/retrieval-types.js.map +0 -1
  127. package/dist/vault/search-vault.js +0 -87
  128. package/dist/vault/search-vault.js.map +0 -1
  129. package/src/assets/presets/common/obsidian/daily-notes.json +0 -5
  130. package/src/assets/presets/common/obsidian/templates.json +0 -3
  131. package/src/assets/presets/common/templates/Daily Note.md +0 -19
  132. package/src/assets/presets/common/templates/Decision Record.md +0 -32
  133. package/src/assets/presets/common/templates/Investigation.md +0 -34
  134. package/src/assets/presets/common/templates/Meeting Notes.md +0 -25
  135. package/src/skills/emerge.md +0 -168
  136. package/src/skills/weave.md +0 -287
@@ -1,11 +1,14 @@
1
1
  ---
2
2
  name: trace
3
- description: Track how an idea, concept, or topic evolved across the vault over time. Builds a chronological timeline from scattered mentions. Use when the user asks "how did X evolve", "what's the history of", "when did we start thinking about", "trace this idea", or wants to understand the arc of a concept.
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 — Track Idea Evolution
9
+ # /trace — Chronological Timeline
7
10
 
8
- You are a knowledge archaeologist. Your job is to trace how a specific idea, concept, or topic has evolved across the user's vault over time building a chronological narrative from scattered mentions.
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 /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.
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, concept, person, project, or term to trace.
25
- - **since** (optional): Start date for the trace (e.g. "2025-01-01"). Default: trace all history.
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
- ### Sampling Strategy
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 the vault using multiple strategies:
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 check:
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 backlinks "<topic>"
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. **Read the note** to understand the context of the mention
56
- 2. **Extract the date** from frontmatter (`date` field) or filename (daily notes like `2026-03-15`)
57
- 3. **Summarize** what the note says about the topic in 1-2 sentences
58
- 4. **Identify the sentiment/stance** — was the user exploring, deciding, questioning, or concluding?
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
- Sort all mentions chronologically.
62
+ ### Step 3: Detect Phases
61
63
 
62
- ### Step 3: Identify Phases
64
+ Group the timeline into phases:
63
65
 
64
- Look for natural phases in how the topic evolved:
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
- - **Discovery** first mentions, exploratory, lots of questions
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
- Not every topic will have all phases. Some may cycle through phases multiple times.
74
+ ### Step 4: Identify Turning Points
73
75
 
74
- ### Step 4: Detect Turning Points
76
+ Highlight moments where the trajectory changed:
75
77
 
76
- Flag moments where the user's understanding or stance shifted:
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
- - Contradictions: "In March you wrote X, but by June you concluded Y"
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
- ### Step 5: Present the Trace
85
+ Compare statements across time:
84
86
 
85
- Format the output as a structured timeline:
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
- ```markdown
88
- # Trace: {Topic}
91
+ Flag genuine contradictions. Note the dates, sources, and nature of the conflict.
89
92
 
90
- Traced across {N} notes, spanning {date range}.
93
+ ### Step 6: Present Timeline
91
94
 
92
- ## Timeline
95
+ ```markdown
96
+ # Timeline: {topic}
93
97
 
94
- ### Phase 1: Discovery ({date range})
98
+ Traced across {N} notes spanning {start date} to {end date}.
95
99
 
96
- - **{date}** — [[Note Name]]: {1-2 sentence summary}
97
- > "{key quote from the note}"
98
- - **{date}** — [[Note Name]]: {summary}
100
+ ---
99
101
 
100
- ### Phase 2: Investigation ({date range})
102
+ ## Phase 1: {Phase Name} ({date range})
101
103
 
102
- - **{date}** [[Note Name]]: {summary}
104
+ **What was happening**: {brief context}
103
105
 
104
- ### Turning Point: {description}
106
+ - **{date}** — [[Note A]]: {what happened / what was decided}
107
+ - **{date}** — [[Note B]]: {what changed / what was added}
105
108
 
106
- - **{date}** [[Note Name]]: {what changed and why}
109
+ **Key insight**: {what this phase reveals}
107
110
 
108
- ### Phase 3: Decision ({date range})
111
+ ---
109
112
 
110
- - **{date}** [[Note Name]]: {summary}
113
+ ## Phase 2: {Phase Name} ({date range})
114
+ ...
111
115
 
112
- ## Insights
116
+ ---
113
117
 
114
- - **Evolution**: {how the idea changed from start to now}
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
- ## Related Traces
120
+ 1. **{date}**: {what changed and why it mattered} — [[source note]]
120
121
 
121
- Consider tracing these connected topics:
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
- ### Step 6: Save (Optional)
124
+ - [[Note A]] says X, but [[Note B]] says Y — {resolution if known}
127
125
 
128
- At the end of your trace, ask:
126
+ ## Current State
129
127
 
130
- > "Would you like me to save this as a note?"
128
+ {Where things stand now the most recent position on this topic}
131
129
 
132
- If the user confirms, save the trace with frontmatter:
130
+ ## Unanswered Questions
133
131
 
134
- ```yaml
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
- - **Chronological accuracy**: Always verify dates. Don't guess if a note has no date, say "undated."
153
- - **Quote the source**: Include brief direct quotes so the user can verify your interpretation.
154
- - **Don't infer intent**: Report what the notes say, not what you think the user meant. Flag contradictions but don't resolve them.
155
- - **Respect scope**: Only trace what's in the vault. Don't fill gaps with general knowledge.
156
- - **Highlight gaps**: If there's a 3-month silence on a topic, note it. Gaps are informative.
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: Generate INDEX.base knowledge graph at vault root and update AGENTS.md with current stats. Use when the user says "generate index", "build wiki", "update INDEX", "create knowledge map", or wants a visual overview of their vault.
3
+ description: >
4
+ Generate and maintain INDEX.base — the dynamic knowledge map for v2 agent pages (`type`:
5
+ entity | concept | comparison | query). Uses Obsidian Base queries to list agent-maintained
6
+ pages; SCHEMA.md defines tag taxonomy. Use when the user runs /wiki or wants to see the current
7
+ state of the knowledge base.
4
8
  ---
5
9
 
6
- # /wiki — Generate Knowledge Index
10
+ # /wiki — Knowledge Map
7
11
 
8
- You are a knowledge cartographer. Your job is to generate an `INDEX.base` file at the vault root that serves as the knowledge graph entry point, and update `AGENTS.md` with current vault statistics.
12
+ **Metaphor:** The menu board shows what's been prepared and what's on offer.
9
13
 
10
- ## Prerequisites Check
14
+ ## Purpose
11
15
 
12
- **Before doing anything else**, verify Obsidian CLI is available:
13
-
14
- ```bash
15
- obsidian --version
16
- ```
17
-
18
- If this fails, STOP and display:
19
-
20
- ```
21
- Obsidian CLI is not available. Please ensure:
22
- 1. Obsidian is running
23
- 2. This vault is open in Obsidian
24
- 3. CLI is enabled: Settings → General → Advanced → Command-line interface
25
- ```
16
+ Generate and maintain `INDEX.base`, the dynamic knowledge map that lists all agent-maintained pages grouped by v2 `type` (`entity`, `concept`, `comparison`, `query`). Unlike static index files, INDEX.base uses Obsidian Base queries to stay current automatically. Use `SCHEMA.md` for tag taxonomy when summarizing or grouping entries.
26
17
 
27
18
  ## Process
28
19
 
29
- ### Step 1: Build Vault Map
30
-
31
- ```bash
32
- obsidian list
33
- ```
20
+ ### Step 1: Prerequisites Check
34
21
 
35
22
  ```bash
36
- obsidian properties sort=count counts
23
+ obsidian --version
37
24
  ```
38
25
 
39
- This gives you the full list of notes and their frontmatter distribution.
26
+ If this fails, STOP and display the Obsidian CLI availability message (see /prep).
40
27
 
41
- ### Step 2: Read Existing INDEX.base (if any)
42
-
43
- If `INDEX.base` already exists, read it to understand the current structure:
28
+ ### Step 2: Read SCHEMA.md
44
29
 
45
30
  ```bash
46
- obsidian read "INDEX"
31
+ obsidian read file="SCHEMA.md"
47
32
  ```
48
33
 
49
- ### Step 3: Analyze Knowledge Structure
50
-
51
- Group notes by their `domain` frontmatter field. For notes without `domain`, infer it from content. Count:
52
- - Total notes
53
- - Notes by `domain` (topics)
54
- - Notes by `note_type` (fleeting, literature, permanent)
55
- - Most frequently referenced concepts
34
+ Understand the current tag taxonomy, domain definitions, and page conventions.
56
35
 
57
- ### Step 4: Generate INDEX.base
36
+ ### Step 3: Generate INDEX.base Content
58
37
 
59
- Create or overwrite `INDEX.base` at the vault root. Use Obsidian CLI to create the file:
38
+ Query all agent-maintained pages by v2 frontmatter `type` (`entity`, `concept`, `comparison`, `query`) so each page is listed under the correct section:
60
39
 
61
40
  ```bash
62
- obsidian create name="INDEX" content="<YAML content>" silent overwrite
41
+ obsidian properties type=entity
42
+ obsidian properties type=concept
43
+ obsidian properties type=comparison
44
+ obsidian properties type=query
63
45
  ```
64
46
 
65
- The content should be valid YAML for an Obsidian Base:
66
-
67
- ```yaml
68
- filters:
69
- not:
70
- - 'note_type == ""'
71
- formulas: {}
72
- properties:
73
- note_type:
74
- displayName: Type
75
- domain:
76
- displayName: Domain
77
- views:
78
- - type: table
79
- name: "All Notes"
80
- groupBy:
81
- property: domain
82
- direction: ASC
83
- order:
84
- - file.name
85
- - note_type
86
- - domain
87
- - tags
88
- - date
89
- - type: cards
90
- name: "Gallery"
91
- groupBy:
92
- property: note_type
93
- direction: ASC
94
- order:
95
- - file.name
96
- - note_type
97
- - domain
98
- - date
99
- ```
47
+ For each type, compile entries with:
48
+ - Page name (as wikilink)
49
+ - Title from frontmatter
50
+ - Brief summary (from content's first paragraph or definition section)
51
+ - Tags and domain
100
52
 
101
- **IMPORTANT:** The YAML must be properly formatted. Use single quotes for formulas containing special characters. Ensure proper indentation (2 spaces).
53
+ Format by section:
102
54
 
103
- ### Step 5: Generate AGENTS.md
55
+ ```markdown
56
+ # Knowledge Index
104
57
 
105
- Read the current `AGENTS.md` (if it exists):
58
+ ## Entities
59
+ - [[feature-a]] — Response time monitoring feature (tags: monitoring, backend)
60
+ - [[zhang-san]] — Senior engineer on Feature A team (tags: team, engineering)
106
61
 
107
- ```bash
108
- obsidian read "AGENTS"
109
- ```
62
+ ## Concepts
63
+ - [[response-time-metrics]] — Why median replaced avg for trigger calculation (tags: metrics, decisions)
64
+ - [[search-trigger-rules]] — Search trigger rule design principles (tags: search, configuration)
110
65
 
111
- Generate a complete `AGENTS.md` that serves as the agent's entry point for the vault. Use `obsidian create` with `overwrite`:
66
+ ## Comparisons
67
+ - [[avg-vs-median-for-trigger]] — Side-by-side analysis of avg vs median as trigger metrics (tags: metrics, decisions)
112
68
 
113
- ```bash
114
- obsidian create path="AGENTS.md" content="<content>" overwrite silent
69
+ ## Queries
70
+ - [[why-did-we-choose-median]] "Why did we choose median over avg?" detailed answer (tags: metrics, history)
115
71
  ```
116
72
 
117
- The AGENTS.md must contain these sections:
73
+ ### Step 4: Check Obsidian Base Configuration
118
74
 
119
- **Header**
120
- ```markdown
121
- # BYOAO — Build Your Own AI OS
75
+ INDEX.base relies on Obsidian Base (saved search) configuration. Verify:
122
76
 
123
- This knowledge base contains **M topics** and **N indexed notes**.
124
- ```
77
+ 1. The Base query covers all four agent directories
78
+ 2. The query filters by `type` frontmatter field
79
+ 3. Results are grouped by type
125
80
 
126
- **Usage**
127
- ```markdown
128
- ## Usage
81
+ If the Base doesn't exist or is misconfigured, guide the user to set it up:
82
+ - Open Obsidian → Bases → Create new base
83
+ - Name it "Knowledge Index"
84
+ - Query: `path:entities/ OR path:concepts/ OR path:comparisons/ OR path:queries/`
85
+ - Group by: `type`
129
86
 
130
- - `/weave` Scan notes, enrich with frontmatter and wikilinks, build the knowledge graph
131
- - `/wiki` — Regenerate the INDEX.base knowledge map
132
- - `/organize` — Suggest a directory structure based on frontmatter metadata
133
- ```
87
+ ### Step 5: Present the Index
134
88
 
135
- **Current Stats**
136
- ```markdown
137
- ## Current Stats
138
-
139
- - Total notes: {total}
140
- - Indexed notes (have note_type): {indexed}
141
- - Topics (domain): {domain1}, {domain2}, ...
142
- - Pending notes (need weave): {pending}
143
- ```
89
+ Show the current INDEX.base content to the user:
144
90
 
145
- **Interacting with the Vault** — This is critical. The agent must always prefer Obsidian CLI:
146
91
  ```markdown
147
- ## Working with this Vault
148
-
149
- When you need to interact with notes, always use Obsidian CLI first:
150
-
151
- | Task | Command |
152
- |------|---------|
153
- | Search notes | `obsidian search query="keyword"` |
154
- | Read a note | `obsidian read file="Note Name"` |
155
- | Create a new note | `obsidian create name="Note Title" content="# Content"` |
156
- | Create note in folder | `obsidian create path="Folder/Note.md" content="# Content"` |
157
- | Append to a note | `obsidian append file="Note" content="New content"` |
158
- | Add frontmatter | `obsidian prepend file="Note" content='---
159
- title: "Title"
160
- note_type: fleeting
161
- domain: Topic
162
- date: YYYY-MM-DD
163
- tags: [tag1]
164
- ---
92
+ # Knowledge Index
165
93
 
166
- '` |
167
- | Rename/move a note | `obsidian move path="Old.md" to="NewFolder/New.md"` |
168
- | List backlinks | `obsidian backlinks file="Note"` |
169
- | Check links | `obsidian links file="Note"` |
170
- | List all files | `obsidian files ext=md` |
171
- | Check unresolved links | `obsidian unresolved total` |
172
- | Open random note | `obsidian random` |
94
+ Generated on YYYY-MM-DD
173
95
 
174
- For multi-line content, use `\\n` for newlines in the `content=` parameter.
175
- ```
96
+ Total pages: N (X entities, Y concepts, Z comparisons, W queries)
176
97
 
177
- **Creating New Notes** — explicit guidance:
178
- ```markdown
179
- ## Creating New Notes
180
-
181
- When asked to write, research, or document something:
182
-
183
- 1. **Search first** — `obsidian search query="topic"` to check if a relevant note already exists
184
- 2. **Read existing notes** — `obsidian read file="Note"` to understand what's already captured
185
- 3. **Create with frontmatter** — always include proper YAML frontmatter when creating:
186
- ```
187
- obsidian create name="New Note" content='---
188
- title: "New Note"
189
- note_type: fleeting
190
- domain: YourDomain
191
- date: YYYY-MM-DD
192
- tags: [relevant-tags]
193
- ---
194
-
195
- # New Note
196
-
197
- Content here...
198
- '
199
- ```
200
- 4. **Link to existing notes** — use `[[wikilink]]` syntax to connect new notes to existing ones
201
- 5. **Use `/weave` after bulk creation** — to enrich and connect the new notes to the graph
202
- ```
98
+ ## By Domain
99
+ - backend: N pages
100
+ - frontend: M pages
101
+ - infrastructure: K pages
203
102
 
204
- **Footer**
205
- ```markdown
206
- ---
207
- *Generated by /wiki skill*
208
- ```
209
-
210
- ### Step 6: Report
103
+ ## Most Connected
104
+ - [[page-name]] — N inbound links
105
+ - [[page-name]] — M inbound links
211
106
 
107
+ ## Recently Updated
108
+ - [[page-name]] — updated YYYY-MM-DD
109
+ - [[page-name]] — updated YYYY-MM-DD
212
110
  ```
213
- Wiki index generated:
214
- - INDEX.base: created/updated at vault root
215
- - Notes indexed: N
216
- - Topics: M (by domain)
217
- - AGENTS.md: updated with new counts
218
- ```
219
111
 
220
- Suggest the user open `INDEX.base` in Obsidian to view the knowledge graph in table or card view.
112
+ ### Step 6: Suggest Gaps
113
+
114
+ Based on the index, identify knowledge gaps:
115
+ - Entity mentioned in multiple concepts but no entity page exists
116
+ - Concept referenced in entity pages but no concept page exists
117
+ - Domains with very few pages (under-represented areas)
118
+ - Tags used frequently but no corresponding concept page
221
119
 
222
- ## Important Guidelines
120
+ ## Key Principles
223
121
 
224
- - **INDEX.base is a query, not static content** it dynamically displays notes based on frontmatter. The file itself only contains the query configuration.
225
- - **Only index notes with `note_type`** notes without this field are not yet processed by `/weave` and should not appear in the index.
226
- - **Preserve custom views** if the user has added custom views to `INDEX.base`, merge new views rather than overwriting.
227
- - **Idempotent** running `/wiki` multiple times should produce the same result without duplication.
122
+ - **INDEX.base is dynamic.** The Obsidian Base query keeps it current no manual regeneration needed on every cook cycle.
123
+ - **Summary quality.** Each entry's one-line summary should be genuinely informative, not just the page title repeated.
124
+ - **Navigation first.** INDEX.base exists to help humans find knowledge quickly. Structure it for scanning, not completeness.
125
+ - **Obsidian is first workbench.** All note operations go through Obsidian CLI.
126
+ - **Agent pages only.** INDEX.base covers only `entities/`, `concepts/`, `comparisons/`, `queries/` — not user notes.
@@ -130,8 +130,8 @@ program
130
130
  // ── byoao init ───────────────────────────────────────────────────
131
131
  program
132
132
  .command("init")
133
- .description("Create a personal knowledge base — sets up folders, templates, " +
134
- "glossary, and an AI routing index (AGENTS.md). Works with empty " +
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 members = [];
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. Optional work preset
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: "Add a work preset? (optional)",
244
+ message: "Choose your work profile:",
245
245
  choices: [
246
- { name: "Nostart with a minimal personal KB", value: "minimal" },
246
+ { name: "Minimalcore 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. MCP service selection (only if preset has MCP servers)
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 /weave to connect your notes");
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