@jayjiang/byoao 2.0.7 → 2.0.9
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 +11 -0
- package/dist/__tests__/plugin-config.test.js.map +1 -1
- package/dist/assets/obsidian-skills/obsidian-cli.md +7 -0
- package/dist/assets/presets/common/AGENTS.md.hbs +5 -5
- package/dist/assets/presets/common/INDEX.base.example +136 -0
- package/dist/assets/presets/common/Start Here.md.hbs +1 -1
- package/dist/assets/presets/pm-tpm/preset.json +1 -0
- package/dist/assets/skills/ask/SKILL.md +47 -10
- package/dist/assets/skills/connect/SKILL.md +1 -1
- package/dist/assets/skills/cook/SKILL.md +2 -2
- package/dist/assets/skills/diagnose/SKILL.md +1 -1
- package/dist/assets/skills/ideas/SKILL.md +2 -2
- package/dist/assets/skills/trace/SKILL.md +1 -1
- package/dist/assets/skills/wiki/SKILL.md +50 -57
- package/dist/cli/cli-program.js +52 -15
- package/dist/cli/cli-program.js.map +1 -1
- package/dist/e2e/cli-init.e2e.test.js +92 -0
- package/dist/e2e/cli-init.e2e.test.js.map +1 -0
- package/dist/hooks/idle-suggestions.js +1 -1
- package/dist/hooks/idle-suggestions.js.map +1 -1
- package/dist/index.js +213 -171
- package/dist/plugin-config.js +4 -0
- package/dist/plugin-config.js.map +1 -1
- package/dist/tools/init-vault.js +1 -1
- package/dist/tools/init-vault.js.map +1 -1
- package/dist/vault/__tests__/create.test.js +4 -1
- package/dist/vault/__tests__/create.test.js.map +1 -1
- package/dist/vault/__tests__/doctor.test.js +8 -0
- package/dist/vault/__tests__/doctor.test.js.map +1 -1
- package/dist/vault/__tests__/index-base-example.test.js +31 -0
- package/dist/vault/__tests__/index-base-example.test.js.map +1 -0
- package/dist/vault/__tests__/mcp.test.js +1 -0
- package/dist/vault/__tests__/mcp.test.js.map +1 -1
- package/dist/vault/__tests__/obsidian-plugins.test.js +1 -0
- package/dist/vault/__tests__/obsidian-plugins.test.js.map +1 -1
- package/dist/vault/__tests__/preset-init-filter.test.js +18 -0
- package/dist/vault/__tests__/preset-init-filter.test.js.map +1 -0
- package/dist/vault/create.js +4 -0
- package/dist/vault/create.js.map +1 -1
- package/dist/vault/doctor.js +11 -0
- package/dist/vault/doctor.js.map +1 -1
- package/dist/vault/index-base-example.js +19 -0
- package/dist/vault/index-base-example.js.map +1 -0
- package/dist/vault/manifest.js +1 -1
- package/dist/vault/preset.js +18 -2
- package/dist/vault/preset.js.map +1 -1
- package/dist/vault/self-update.js +1 -1
- package/dist/vault/upgrade.js +3 -0
- package/dist/vault/upgrade.js.map +1 -1
- package/package.json +1 -1
- package/src/assets/obsidian-skills/obsidian-cli.md +7 -0
- package/src/assets/presets/common/AGENTS.md.hbs +5 -5
- package/src/assets/presets/common/INDEX.base.example +136 -0
- package/src/assets/presets/common/Start Here.md.hbs +1 -1
- package/src/assets/presets/pm-tpm/preset.json +1 -0
- package/src/skills/ask/SKILL.md +47 -10
- package/src/skills/connect/SKILL.md +1 -1
- package/src/skills/cook/SKILL.md +2 -2
- package/src/skills/diagnose/SKILL.md +1 -1
- package/src/skills/ideas/SKILL.md +2 -2
- package/src/skills/trace/SKILL.md +1 -1
- package/src/skills/wiki/SKILL.md +50 -57
|
@@ -48,6 +48,17 @@ describe("PresetConfigSchema", () => {
|
|
|
48
48
|
expect(result.mcpServers).toEqual({});
|
|
49
49
|
expect(result.templates).toEqual([]);
|
|
50
50
|
expect(result.frontmatterExtras).toEqual({});
|
|
51
|
+
expect(result.initOfferWhen).toBe("always");
|
|
52
|
+
});
|
|
53
|
+
it("parses initOfferWhen work", () => {
|
|
54
|
+
const result = PresetConfigSchema.parse({
|
|
55
|
+
name: "pm-tpm",
|
|
56
|
+
displayName: "PM / TPM",
|
|
57
|
+
description: "d",
|
|
58
|
+
agentDescription: "a",
|
|
59
|
+
initOfferWhen: "work",
|
|
60
|
+
});
|
|
61
|
+
expect(result.initOfferWhen).toBe("work");
|
|
51
62
|
});
|
|
52
63
|
it("validates mcpServers field", () => {
|
|
53
64
|
const result = PresetConfigSchema.parse({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-config.test.js","sourceRoot":"","sources":["../../src/__tests__/plugin-config.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"plugin-config.test.js","sourceRoot":"","sources":["../../src/__tests__/plugin-config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,6 +59,13 @@ obsidian backlinks file="My Note"
|
|
|
59
59
|
|
|
60
60
|
Use `--copy` on any command to copy output to clipboard. Use `silent` to prevent files from opening. Use `total` on list commands to get a count.
|
|
61
61
|
|
|
62
|
+
## Bases (`.base` files) and CLI retrieval
|
|
63
|
+
|
|
64
|
+
[Obsidian Bases](https://obsidian.md/blog/bases/) use `.base` files (for example `INDEX.base`) as the **vault wiki index**: in the app, each row is a note and columns expose frontmatter, paths, backlinks, dates, and other metadata.
|
|
65
|
+
|
|
66
|
+
- **`obsidian read file="INDEX.base"`** returns the **on-disk Base definition** (views, filters, formulas). Obsidian **evaluates** that definition into the live, sortable table — the definition is the source of truth for *what* is in the index, not a throwaway “config.”
|
|
67
|
+
- **Agents** should read the Base to learn path/property scope, then query the same graph at high speed with **`obsidian properties`**, **`obsidian search`**, **`obsidian tags`**, **`obsidian backlinks`**, and any newer list commands from **`obsidian help`**. Do not maintain a duplicate markdown catalog unless the user explicitly wants one.
|
|
68
|
+
|
|
62
69
|
## Plugin development
|
|
63
70
|
|
|
64
71
|
### Develop/test cycle
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
This is an LLM Wiki knowledge base. Your notes are raw material — the Agent compiles them into structured knowledge pages via `/cook`. Both coexist in the same vault, connected through wikilinks.
|
|
5
5
|
|
|
6
6
|
## Getting Started
|
|
7
|
-
Run `/wiki` to
|
|
7
|
+
Run `/wiki` to set up or refresh **`INDEX.base`** (Obsidian Bases wiki index), then explore the knowledge structure from there. Agents query the same graph with Obsidian CLI (`obsidian properties`, `search`, `tags`, `backlinks` — see **`/ask`**).
|
|
8
8
|
|
|
9
9
|
## Note Types
|
|
10
10
|
User notes: Your existing notes, kept in their original directories (Projects/, Daily/, etc.) — untouched.
|
|
@@ -18,17 +18,17 @@ Do not use bash (`cat`, `grep`, `find`, `sed`, etc.) to manipulate note files di
|
|
|
18
18
|
|
|
19
19
|
For questions that must be answered **from this vault** (not general knowledge), follow this chain. **Authoritative specification: the `/ask` skill** — if this summary diverges, follow `/ask`.
|
|
20
20
|
|
|
21
|
-
-
|
|
21
|
+
- **`INDEX.base`** is the vault Bases wiki index (live query + metadata in Obsidian). Read it via CLI to learn scope; use **`obsidian properties`** by `type` (and `search` / `tags` / `backlinks` as needed) to list and traverse the same compiled pages — no duplicate static index file.
|
|
22
22
|
- Read **`SCHEMA.md`** when you need tag taxonomy, domain rules, or agent directory conventions.
|
|
23
|
-
- Run **`obsidian search`**
|
|
24
|
-
- Run **`obsidian read`** on promising paths. Prefer agent pages under `entities/`, `concepts/`, `comparisons/`, and `queries/`, then
|
|
23
|
+
- Run **`obsidian search`** for each key concept and merge results; broaden to user-note paths when the answer may live outside agent directories.
|
|
24
|
+
- Run **`obsidian read`** on promising paths. Prefer agent pages under `entities/`, `concepts/`, `comparisons/`, and `queries/`, then user notes elsewhere. Prefer `status: reviewed` over `draft`, and more recent `updated`.
|
|
25
25
|
- **Synthesize** a direct answer with `[[wikilink]]` citations and explicit gaps. Every claim should be backed by vault notes.
|
|
26
26
|
|
|
27
27
|
## Available Skills
|
|
28
28
|
- **/cook** — Digest notes and external sources, compile knowledge pages
|
|
29
29
|
- **/health** — Check knowledge page health (orphans, stale content, contradictions)
|
|
30
30
|
- **/prep** — Fix frontmatter and broken wikilinks
|
|
31
|
-
- **/wiki** —
|
|
31
|
+
- **/wiki** — Set up or refresh INDEX.base (Bases wiki index) and inventory
|
|
32
32
|
- **/organize** — Reorganize directory structure as needed
|
|
33
33
|
- **/ask** — Open-ended Q&A against the knowledge base
|
|
34
34
|
- **Thinking Tools** — /trace, /connect, /ideas, /challenge, /drift
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# BYOAO LLM Wiki v2 — copy to vault root as INDEX.base (see /wiki). Bases core plugin required.
|
|
2
|
+
# Quoting: keep each formula value in single quotes; use double quotes inside the expression where needed.
|
|
3
|
+
# Recently Updated: use limit + column order only — do not groupBy on raw `updated` (unique timestamps = one row per group).
|
|
4
|
+
|
|
5
|
+
filters:
|
|
6
|
+
or:
|
|
7
|
+
- file.inFolder("entities")
|
|
8
|
+
- file.inFolder("concepts")
|
|
9
|
+
- file.inFolder("comparisons")
|
|
10
|
+
- file.inFolder("queries")
|
|
11
|
+
|
|
12
|
+
formulas:
|
|
13
|
+
type_label: 'if(type == "entity", "Entity", if(type == "concept", "Concept", if(type == "comparison", "Comparison", if(type == "query", "Query", type))))'
|
|
14
|
+
days_since_update: 'if(updated, (today() - date(updated)).days, "")'
|
|
15
|
+
backlink_count: 'file.backlinks.length'
|
|
16
|
+
|
|
17
|
+
properties:
|
|
18
|
+
file.name:
|
|
19
|
+
displayName: Name
|
|
20
|
+
title:
|
|
21
|
+
displayName: Title
|
|
22
|
+
type:
|
|
23
|
+
displayName: Type
|
|
24
|
+
domain:
|
|
25
|
+
displayName: Domain
|
|
26
|
+
tags:
|
|
27
|
+
displayName: Tags
|
|
28
|
+
updated:
|
|
29
|
+
displayName: Updated
|
|
30
|
+
status:
|
|
31
|
+
displayName: Status
|
|
32
|
+
formula.type_label:
|
|
33
|
+
displayName: Kind
|
|
34
|
+
formula.days_since_update:
|
|
35
|
+
displayName: Days since update
|
|
36
|
+
formula.backlink_count:
|
|
37
|
+
displayName: Backlinks
|
|
38
|
+
|
|
39
|
+
views:
|
|
40
|
+
- type: table
|
|
41
|
+
name: All Pages
|
|
42
|
+
groupBy:
|
|
43
|
+
property: type
|
|
44
|
+
direction: ASC
|
|
45
|
+
order:
|
|
46
|
+
- file.name
|
|
47
|
+
- title
|
|
48
|
+
- formula.type_label
|
|
49
|
+
- domain
|
|
50
|
+
- tags
|
|
51
|
+
- updated
|
|
52
|
+
- formula.days_since_update
|
|
53
|
+
- formula.backlink_count
|
|
54
|
+
- status
|
|
55
|
+
summaries:
|
|
56
|
+
formula.backlink_count: Average
|
|
57
|
+
|
|
58
|
+
- type: table
|
|
59
|
+
name: Entities
|
|
60
|
+
filters:
|
|
61
|
+
and:
|
|
62
|
+
- 'type == "entity"'
|
|
63
|
+
groupBy:
|
|
64
|
+
property: domain
|
|
65
|
+
direction: ASC
|
|
66
|
+
order:
|
|
67
|
+
- file.name
|
|
68
|
+
- title
|
|
69
|
+
- domain
|
|
70
|
+
- tags
|
|
71
|
+
- updated
|
|
72
|
+
- formula.days_since_update
|
|
73
|
+
- formula.backlink_count
|
|
74
|
+
- status
|
|
75
|
+
summaries:
|
|
76
|
+
formula.backlink_count: Average
|
|
77
|
+
|
|
78
|
+
- type: table
|
|
79
|
+
name: Concepts
|
|
80
|
+
filters:
|
|
81
|
+
and:
|
|
82
|
+
- 'type == "concept"'
|
|
83
|
+
groupBy:
|
|
84
|
+
property: domain
|
|
85
|
+
direction: ASC
|
|
86
|
+
order:
|
|
87
|
+
- file.name
|
|
88
|
+
- title
|
|
89
|
+
- domain
|
|
90
|
+
- tags
|
|
91
|
+
- updated
|
|
92
|
+
- formula.days_since_update
|
|
93
|
+
- formula.backlink_count
|
|
94
|
+
- status
|
|
95
|
+
|
|
96
|
+
- type: table
|
|
97
|
+
name: Comparisons
|
|
98
|
+
filters:
|
|
99
|
+
and:
|
|
100
|
+
- 'type == "comparison"'
|
|
101
|
+
order:
|
|
102
|
+
- file.name
|
|
103
|
+
- title
|
|
104
|
+
- domain
|
|
105
|
+
- tags
|
|
106
|
+
- updated
|
|
107
|
+
- formula.days_since_update
|
|
108
|
+
- formula.backlink_count
|
|
109
|
+
- status
|
|
110
|
+
|
|
111
|
+
- type: table
|
|
112
|
+
name: Queries
|
|
113
|
+
filters:
|
|
114
|
+
and:
|
|
115
|
+
- 'type == "query"'
|
|
116
|
+
order:
|
|
117
|
+
- file.name
|
|
118
|
+
- title
|
|
119
|
+
- domain
|
|
120
|
+
- tags
|
|
121
|
+
- updated
|
|
122
|
+
- formula.days_since_update
|
|
123
|
+
- formula.backlink_count
|
|
124
|
+
- status
|
|
125
|
+
|
|
126
|
+
- type: table
|
|
127
|
+
name: Recently Updated
|
|
128
|
+
limit: 10
|
|
129
|
+
order:
|
|
130
|
+
- updated
|
|
131
|
+
- file.name
|
|
132
|
+
- title
|
|
133
|
+
- type
|
|
134
|
+
- domain
|
|
135
|
+
- formula.days_since_update
|
|
136
|
+
- formula.backlink_count
|
|
@@ -84,7 +84,7 @@ After cooking, press `Cmd+G` to open Graph View and see the connections.
|
|
|
84
84
|
|---------|-------------|
|
|
85
85
|
| `/cook` | Compile notes into structured knowledge pages |
|
|
86
86
|
| `/health` | Check knowledge page health |
|
|
87
|
-
| `/wiki` |
|
|
87
|
+
| `/wiki` | Set up or refresh INDEX.base (Bases wiki index) |
|
|
88
88
|
| `/organize` | Reorganize vault directories |
|
|
89
89
|
| `/ask` | Open-ended Q&A against your knowledge |
|
|
90
90
|
| `/trace` | Track how an idea evolved over time |
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pm-tpm",
|
|
3
3
|
"displayName": "PM / TPM",
|
|
4
|
+
"initOfferWhen": "work",
|
|
4
5
|
"description": "Adds Atlassian + BigQuery MCP servers, project directories, and PM templates on top of the core LLM Wiki",
|
|
5
6
|
"directories": ["Projects", "Sprints"],
|
|
6
7
|
"agentDescription": "LLM Wiki knowledge base with PM/TPM tooling. Use /cook to digest notes and external sources. Use /health to health-check. Atlassian and BigQuery are connected.",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ask
|
|
3
3
|
description: >
|
|
4
|
-
Open-ended Q&A against the knowledge base.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
like "what is X", "why did we decide Y",
|
|
8
|
-
"summarize what I know about", or any question
|
|
9
|
-
knowledge rather than general training data.
|
|
4
|
+
Open-ended Q&A against the knowledge base. Uses INDEX.base as the vault Bases wiki index,
|
|
5
|
+
Obsidian CLI (properties, search, tags, backlinks) to traverse the same graph the Base
|
|
6
|
+
shows in Obsidian, SCHEMA.md for taxonomy, then reads and synthesizes with citations.
|
|
7
|
+
Use when the user asks questions about vault content like "what is X", "why did we decide Y",
|
|
8
|
+
"explain Z", "what do my notes say about", "summarize what I know about", or any question
|
|
9
|
+
that should be answered from accumulated knowledge rather than general training data.
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# /ask — Knowledge Q&A
|
|
@@ -36,21 +36,56 @@ Identify the key concepts, entities, and intent in the user's question.
|
|
|
36
36
|
|
|
37
37
|
### Step 2: Locate Relevant Pages
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
**Do not delegate this workflow to a generic exploration subagent.** Run the Obsidian CLI steps yourself so searches merge and nothing is skipped.
|
|
40
|
+
|
|
41
|
+
#### 2a — Wiki index: `INDEX.base` (Bases)
|
|
42
|
+
|
|
43
|
+
If `INDEX.base` exists, read it first:
|
|
40
44
|
|
|
41
45
|
```bash
|
|
42
46
|
obsidian read file="INDEX.base"
|
|
43
47
|
```
|
|
44
48
|
|
|
45
|
-
|
|
49
|
+
**What this is:** The vault’s **Obsidian Bases wiki index**. In the app, this file drives a **live, query-backed table** of notes with rich metadata (paths, tags, dates, backlinks, and any columns you add). The bytes on disk are the Base definition (views, filters, formulas); Obsidian **evaluates** that definition into the dynamic index you see in the UI.
|
|
50
|
+
|
|
51
|
+
**How to use it as an agent:** Parse the definition to learn **which paths and property filters** define “compiled knowledge” in this vault. Then run CLI commands that query the **same scope** — do not treat the YAML as meaningless “config” or assume the vault has no index when you do not see note titles in the read output.
|
|
52
|
+
|
|
53
|
+
#### 2b — List agent-maintained pages (same scope the Base should cover)
|
|
54
|
+
|
|
55
|
+
Enumerate compiled pages by v2 frontmatter `type` (high-speed retrieval, same notes the Base is meant to index):
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
obsidian properties type=entity
|
|
59
|
+
obsidian properties type=concept
|
|
60
|
+
obsidian properties type=comparison
|
|
61
|
+
obsidian properties type=query
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Use paths and titles from this output as candidates. When helpful, add **`obsidian tags`**, **`obsidian backlinks file="..."`**, or other list commands from `obsidian help` to exploit metadata associations the Base surfaces as columns.
|
|
65
|
+
|
|
66
|
+
#### 2c — Taxonomy and conventions
|
|
46
67
|
|
|
47
|
-
|
|
68
|
+
Read `SCHEMA.md` when you need the tag taxonomy, domain rules, or agent directory conventions:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
obsidian read file="SCHEMA.md"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
If the question or `SCHEMA.md` points at specific tags, run targeted searches for those tags in addition to plain terms.
|
|
75
|
+
|
|
76
|
+
#### 2d — Search by key concepts
|
|
77
|
+
|
|
78
|
+
For each key concept in the question:
|
|
48
79
|
|
|
49
80
|
```bash
|
|
50
81
|
obsidian search "<key concept>"
|
|
51
82
|
```
|
|
52
83
|
|
|
53
|
-
|
|
84
|
+
Combine and deduplicate results across queries.
|
|
85
|
+
|
|
86
|
+
#### 2e — User and source notes outside agent directories
|
|
87
|
+
|
|
88
|
+
Answers may live in raw notes (e.g. reports, dailies, `Projects/`) that are **not** under `entities/`, `concepts/`, `comparisons/`, or `queries/`. After agent-scope passes, run broader searches (filename keywords, dates, or tags) until you have checked plausible locations or confirmed the vault has no matching note.
|
|
54
89
|
|
|
55
90
|
### Step 3: Read Relevant Pages
|
|
56
91
|
|
|
@@ -61,6 +96,7 @@ obsidian read file="entities/some-page.md"
|
|
|
61
96
|
```
|
|
62
97
|
|
|
63
98
|
Prioritize:
|
|
99
|
+
|
|
64
100
|
- Agent pages in `entities/`, `concepts/`, `comparisons/`, `queries/`
|
|
65
101
|
- Pages with matching tags or domain
|
|
66
102
|
- Pages with `status: reviewed` (over `draft`)
|
|
@@ -133,3 +169,4 @@ Use `obsidian create` to save. Ask the user where they'd like it saved.
|
|
|
133
169
|
- **Acknowledge gaps**: If the vault doesn't have enough information, say so.
|
|
134
170
|
- **Respect scope**: Only answer based on vault content, not external knowledge.
|
|
135
171
|
- **Save on request**: Always offer to save the answer as a note for future reference.
|
|
172
|
+
- **Bases + CLI:** The wiki index is **`INDEX.base`** in Obsidian; discovery via CLI is **`obsidian properties`** (by `type` and other fields), **`obsidian search`**, and related commands — not a duplicate markdown index file.
|
|
@@ -34,7 +34,7 @@ obsidian search "<from>"
|
|
|
34
34
|
obsidian search "<to>"
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
If `INDEX.base` exists, read it to
|
|
37
|
+
If `INDEX.base` exists, read it to align with the vault Bases index, then use `obsidian properties` / `search` as in **`/ask`**.
|
|
38
38
|
|
|
39
39
|
Read any existing agent pages in `entities/`, `concepts/`, `comparisons/`, and `queries/`:
|
|
40
40
|
|
|
@@ -70,7 +70,7 @@ When user provides a URL:
|
|
|
70
70
|
- Identify entities (named things), concepts (abstract ideas), decisions, contradictions
|
|
71
71
|
|
|
72
72
|
### Step 2: Match Against Existing Pages
|
|
73
|
-
- Check `INDEX.base` or scan `entities/`, `concepts/` for existing pages
|
|
73
|
+
- Check `INDEX.base` (Bases index in Obsidian) or scan `entities/`, `concepts/` for existing pages; use `obsidian properties` by `type` for a fast listing
|
|
74
74
|
- Determine: create new vs. update existing
|
|
75
75
|
- Read `SCHEMA.md` (Obsidian CLI) for current tag and domain taxonomy so new pages prefer existing tags when they fit
|
|
76
76
|
|
|
@@ -98,7 +98,7 @@ After Step 3–4, reconcile agent pages touched this cycle with `SCHEMA.md`:
|
|
|
98
98
|
- Stay consistent with SCHEMA rules: singular tags, 2–5 tags per page on agent pages, new tags documented here before (or as soon as) use.
|
|
99
99
|
|
|
100
100
|
### Step 6: Update Navigation
|
|
101
|
-
- `INDEX.base`
|
|
101
|
+
- `INDEX.base` stays current in Obsidian via its Base query — suggest **`/wiki`** if views, filters, or columns need tuning after large cooks
|
|
102
102
|
- Append entry to `log.md`
|
|
103
103
|
|
|
104
104
|
### Step 7: Report
|
|
@@ -84,7 +84,7 @@ Verify vault configuration:
|
|
|
84
84
|
- `.opencode/` directory has current skill definitions
|
|
85
85
|
- `SCHEMA.md` exists and has a defined tag taxonomy
|
|
86
86
|
- `log.md` exists and has recent entries
|
|
87
|
-
- `INDEX.base` exists
|
|
87
|
+
- `INDEX.base` exists as the Bases wiki index (run `/wiki` to verify or improve it)
|
|
88
88
|
|
|
89
89
|
### Step 6: Present Diagnosis
|
|
90
90
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: ideas
|
|
3
3
|
description: >
|
|
4
4
|
Deep vault scan to generate actionable ideas by combining insights across domains, finding gaps,
|
|
5
|
-
and proposing concrete next steps. Uses INDEX.base and agent directories (`entities/`, `concepts/`,
|
|
5
|
+
and proposing concrete next steps. Uses INDEX.base (Bases wiki index) and agent directories (`entities/`, `concepts/`,
|
|
6
6
|
`comparisons/`, `queries/`) for compiled knowledge. Use when the user asks "give me ideas", "what should I work
|
|
7
7
|
on", "what opportunities do you see", "brainstorm from my notes", or wants creative suggestions
|
|
8
8
|
grounded in their vault content.
|
|
@@ -48,7 +48,7 @@ Read notes across domains, prioritizing:
|
|
|
48
48
|
- Recent notes (last 30 days) — what the user is actively thinking about
|
|
49
49
|
- Highly connected notes (many backlinks) — central concepts
|
|
50
50
|
- Notes with `status: active` — current work
|
|
51
|
-
- `INDEX.base`
|
|
51
|
+
- `INDEX.base` and `obsidian properties` / `search` — same compiled knowledge scope as **`/ask`**
|
|
52
52
|
- Agent pages in `entities/`, `concepts/`, `comparisons/`, `queries/` — for compiled knowledge
|
|
53
53
|
|
|
54
54
|
For each domain, read 5-10 representative notes to understand the landscape.
|
|
@@ -45,7 +45,7 @@ obsidian read file="comparisons/<topic>.md"
|
|
|
45
45
|
obsidian read file="queries/<topic>.md"
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
Read `INDEX.base`
|
|
48
|
+
Read `INDEX.base` if it exists, then use `obsidian properties` by `type` and `obsidian search` to find compiled pages (see **`/ask`**).
|
|
49
49
|
|
|
50
50
|
### Step 2: Build Timeline
|
|
51
51
|
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wiki
|
|
3
3
|
description: >
|
|
4
|
-
Generate and maintain INDEX.base — the
|
|
5
|
-
entity, concept, comparison, query). Uses Obsidian
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
"rebuild INDEX.base", or wants
|
|
4
|
+
Generate and maintain INDEX.base — the Obsidian Bases wiki index for v2 agent pages
|
|
5
|
+
(type: entity, concept, comparison, query). Uses Obsidian CLI to inventory pages and
|
|
6
|
+
SCHEMA.md for taxonomy; agents retrieve via the same property/search graph the Base
|
|
7
|
+
evaluates in the UI. Use when the user says "update the index", "refresh the knowledge map",
|
|
8
|
+
"show me the wiki", "what's in the knowledge base", "rebuild INDEX.base", or wants the
|
|
9
|
+
current compiled knowledge overview.
|
|
9
10
|
---
|
|
10
11
|
|
|
11
12
|
# /wiki — Knowledge Map
|
|
@@ -14,7 +15,13 @@ description: >
|
|
|
14
15
|
|
|
15
16
|
## Purpose
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
**`INDEX.base` is the vault wiki index.** In Obsidian, Bases runs a live query and renders each matching note as a row with rich metadata (frontmatter fields, paths, backlinks, dates — whatever columns you configure). That dynamic association model **is** the index; do not duplicate it with a separate static markdown catalog.
|
|
19
|
+
|
|
20
|
+
**Preferred vs fallback:** **Bases + `INDEX.base`** is the preferred index. A **markdown outline in chat** (below) is only a **fallback** when the user has no Bases / no `INDEX.base` (e.g. core plugin off, or vault not yet opened in Obsidian) — it is not a second on-disk index file.
|
|
21
|
+
|
|
22
|
+
For **CLI and AI**, there is no separate index file to maintain beyond `INDEX.base`: use **`obsidian properties`**, **`obsidian search`**, **`obsidian tags`**, and **`obsidian backlinks`** to traverse the same knowledge the Base surfaces. Run `obsidian help` for the latest commands.
|
|
23
|
+
|
|
24
|
+
`SCHEMA.md` defines tag taxonomy when summarizing or grouping entries.
|
|
18
25
|
|
|
19
26
|
## Process
|
|
20
27
|
|
|
@@ -34,9 +41,19 @@ obsidian read file="SCHEMA.md"
|
|
|
34
41
|
|
|
35
42
|
Understand the current tag taxonomy, domain definitions, and page conventions.
|
|
36
43
|
|
|
37
|
-
### Step 3:
|
|
44
|
+
### Step 3: Index source (Bases first, markdown outline as fallback)
|
|
45
|
+
|
|
46
|
+
#### Step 3a — Bases / `INDEX.base` (preferred)
|
|
47
|
+
|
|
48
|
+
1. If the vault has no **`INDEX.base`** at the root, install the template: copy **`INDEX.base.example`** from the BYOAO package to **`INDEX.base`** (same directory as `AGENTS.md`). **`byoao init`** / **`byoao upgrade`** already perform this copy when the file is missing — only copy manually if the user skipped init or removed the file.
|
|
49
|
+
- **Repo path:** `byoao/src/assets/presets/common/INDEX.base.example`
|
|
50
|
+
- **After `npm install`:** `node_modules/@jayjiang/byoao/src/assets/presets/common/INDEX.base.example`
|
|
51
|
+
- **Shell (from vault root, adjust source path):** `cp /path/to/INDEX.base.example ./INDEX.base`
|
|
52
|
+
2. Ask the user to open **`INDEX.base`** in Obsidian (Bases core plugin on). If YAML errors appear, fix quoting or formulas per the bundled **obsidian-bases** skill.
|
|
53
|
+
|
|
54
|
+
#### Step 3b — CLI inventory (always useful; also fallback summary)
|
|
38
55
|
|
|
39
|
-
|
|
56
|
+
Run:
|
|
40
57
|
|
|
41
58
|
```bash
|
|
42
59
|
obsidian properties type=entity
|
|
@@ -46,73 +63,49 @@ obsidian properties type=query
|
|
|
46
63
|
```
|
|
47
64
|
|
|
48
65
|
For each type, compile entries with:
|
|
66
|
+
|
|
49
67
|
- Page name (as wikilink)
|
|
50
68
|
- Title from frontmatter
|
|
51
69
|
- Brief summary (from content's first paragraph or definition section)
|
|
52
|
-
- Tags
|
|
53
|
-
|
|
54
|
-
Format by section:
|
|
70
|
+
- Tags, domain, `updated` — the same dimensions Bases can show as columns
|
|
55
71
|
|
|
56
|
-
|
|
57
|
-
# Knowledge Index
|
|
72
|
+
**If Bases is unavailable:** Present the inventory in your reply as a structured markdown outline (`# Knowledge Index` → `## Entities` → bullet list, etc.). **Do not** save that outline as a permanent `INDEX.md` unless the user explicitly asks. When the user enables Bases later, **`INDEX.base`** remains the canonical index.
|
|
58
73
|
|
|
59
|
-
|
|
60
|
-
- [[feature-a]] — Response time monitoring feature (tags: monitoring, backend)
|
|
61
|
-
- [[zhang-san]] — Senior engineer on Feature A team (tags: team, engineering)
|
|
74
|
+
### Step 4: Ensure `INDEX.base` matches that scope
|
|
62
75
|
|
|
63
|
-
|
|
64
|
-
- [[response-time-metrics]] — Why median replaced avg for trigger calculation (tags: metrics, decisions)
|
|
65
|
-
- [[search-trigger-rules]] — Search trigger rule design principles (tags: search, configuration)
|
|
76
|
+
Verify or refine the Base at vault root. Prefer a **rich Bases layout** (global scope + formulas + multiple views) over four minimal tables with only 2–4 columns.
|
|
66
77
|
|
|
67
|
-
|
|
68
|
-
- [[avg-vs-median-for-trigger]] — Side-by-side analysis of avg vs median as trigger metrics (tags: metrics, decisions)
|
|
78
|
+
**Reference template:** **`INDEX.base.example`** under preset `common/` (`byoao/src/assets/presets/common/INDEX.base.example` in the repo; `node_modules/@jayjiang/byoao/src/assets/presets/common/INDEX.base.example` when installed).
|
|
69
79
|
|
|
70
|
-
|
|
71
|
-
- [[why-did-we-choose-median]] — "Why did we choose median over avg?" — detailed answer (tags: metrics, history)
|
|
72
|
-
```
|
|
80
|
+
**Division of responsibilities — `INDEX.base` vs CLI**
|
|
73
81
|
|
|
74
|
-
|
|
82
|
+
| Layer | Role |
|
|
83
|
+
|-------|------|
|
|
84
|
+
| **`INDEX.base` (Obsidian)** | Live query, grouping, formulas (staleness, backlink count, labels), column display names — **human** scanning and **definition of scope** (which folders / types count as “compiled wiki”). |
|
|
85
|
+
| **Obsidian CLI** | **Does not** evaluate Base formulas. Agents **read** `INDEX.base` to learn filters/paths, then use **`obsidian properties`** (by `type`, etc.), **`obsidian search`**, **`obsidian tags`**, **`obsidian backlinks`** to list and read notes in the **same** scope. |
|
|
75
86
|
|
|
76
|
-
|
|
87
|
+
1. **Global scope (recommended)** — Top-level **`filters`** with `or:` so every view inherits the same universe, e.g. `file.inFolder("entities")`, … `file.inFolder("queries")`. Avoid relying only on per-view `type == "entity"` without folder scope. Search-style alternative: `path:entities/ OR …` if your Bases version supports it.
|
|
77
88
|
|
|
78
|
-
|
|
79
|
-
2. The query filters by `type` frontmatter field
|
|
80
|
-
3. Results are grouped by type
|
|
89
|
+
2. **Formulas (optional but valuable)** — e.g. `type_label`, `days_since_update` from frontmatter `updated`, `backlink_count` from `file.backlinks.length` (confirm syntax for your Obsidian version).
|
|
81
90
|
|
|
82
|
-
|
|
83
|
-
- Open Obsidian → Bases → Create new base
|
|
84
|
-
- Name it "Knowledge Index"
|
|
85
|
-
- Query: `path:entities/ OR path:concepts/ OR path:comparisons/ OR path:queries/`
|
|
86
|
-
- Group by: `type`
|
|
91
|
+
3. **`properties` + `displayName`** — Include **`file.name`** (e.g. displayName `"Name"`) plus `title`, `domain`, `tags`, `updated`, `status`, and `formula.*` fields.
|
|
87
92
|
|
|
88
|
-
|
|
93
|
+
4. **Views (suggested six)** — All Pages (`groupBy: type`); Entities / Concepts (`type` filter + `groupBy: domain`); Comparisons; Queries; **Recently Updated** — use **`limit`** and put **`updated` first in `order`**; **do not** `groupBy` raw `updated` (timestamps are too granular). Optional **`summaries`** (e.g. average of `formula.backlink_count` on wide tables).
|
|
89
94
|
|
|
90
|
-
|
|
95
|
+
5. **YAML** — Keep formula strings consistently quoted; see comments at the top of **`INDEX.base.example`**.
|
|
91
96
|
|
|
92
|
-
|
|
93
|
-
# Knowledge Index
|
|
97
|
+
If the Base doesn't exist or is misconfigured, guide the user to create it in Obsidian or copy **`INDEX.base.example`** as above.
|
|
94
98
|
|
|
95
|
-
|
|
99
|
+
**Reading via CLI:** `obsidian read file="INDEX.base"` returns the **on-disk definition**; it **defines** the live index Obsidian evaluates — use it to align CLI queries with paths and properties.
|
|
96
100
|
|
|
97
|
-
|
|
101
|
+
### Step 5: Present the index to the user
|
|
98
102
|
|
|
99
|
-
|
|
100
|
-
- backend: N pages
|
|
101
|
-
- frontend: M pages
|
|
102
|
-
- infrastructure: K pages
|
|
103
|
+
Show a markdown summary in your reply (totals, sections by type, sample lines) — **chat output**; not a substitute for **`INDEX.base`** when Bases is enabled.
|
|
103
104
|
|
|
104
|
-
|
|
105
|
-
- [[page-name]] — N inbound links
|
|
106
|
-
- [[page-name]] — M inbound links
|
|
107
|
-
|
|
108
|
-
## Recently Updated
|
|
109
|
-
- [[page-name]] — updated YYYY-MM-DD
|
|
110
|
-
- [[page-name]] — updated YYYY-MM-DD
|
|
111
|
-
```
|
|
105
|
+
### Step 6: Suggest gaps
|
|
112
106
|
|
|
113
|
-
|
|
107
|
+
Based on the inventory, identify knowledge gaps:
|
|
114
108
|
|
|
115
|
-
Based on the index, identify knowledge gaps:
|
|
116
109
|
- Entity mentioned in multiple concepts but no entity page exists
|
|
117
110
|
- Concept referenced in entity pages but no concept page exists
|
|
118
111
|
- Domains with very few pages (under-represented areas)
|
|
@@ -120,8 +113,8 @@ Based on the index, identify knowledge gaps:
|
|
|
120
113
|
|
|
121
114
|
## Key Principles
|
|
122
115
|
|
|
123
|
-
- **INDEX.base
|
|
116
|
+
- **One index on disk:** **`INDEX.base`** when Bases is on; use **`INDEX.base.example`** as the default layout. Chat markdown is fallback only.
|
|
124
117
|
- **Summary quality.** Each entry's one-line summary should be genuinely informative, not just the page title repeated.
|
|
125
|
-
- **Navigation first.**
|
|
118
|
+
- **Navigation first.** Structure the Base and your summary for scanning, not exhaustive prose.
|
|
126
119
|
- **Obsidian is first workbench.** All note operations go through Obsidian CLI.
|
|
127
|
-
- **Agent pages only
|
|
120
|
+
- **Agent pages only** in this index: `entities/`, `concepts/`, `comparisons/`, `queries/` — not arbitrary user notes.
|