@jayjiang/byoao 1.1.2 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/plugin-config.test.js +7 -10
- package/dist/__tests__/plugin-config.test.js.map +1 -1
- package/dist/assets/obsidian-skills/byoao-conventions.md +30 -54
- package/dist/assets/obsidian-skills/vault-thinking.md +6 -5
- package/dist/assets/presets/common/AGENTS.md.hbs +29 -46
- package/dist/assets/presets/common/SCHEMA.md.hbs +57 -0
- package/dist/assets/presets/common/Start Here.md.hbs +29 -40
- package/dist/assets/presets/minimal/preset.json +3 -3
- package/dist/assets/presets/pm-tpm/preset.json +2 -2
- package/{src/skills/ask.md → dist/assets/skills/ask/SKILL.md} +30 -27
- package/dist/assets/skills/ask.md +28 -27
- package/dist/assets/skills/challenge/SKILL.md +134 -0
- package/dist/assets/skills/challenge.md +79 -121
- package/dist/assets/skills/connect/SKILL.md +126 -0
- package/dist/assets/skills/connect.md +75 -163
- package/dist/assets/skills/cook/SKILL.md +170 -0
- package/dist/assets/skills/cook.md +167 -0
- package/dist/assets/skills/diagnose/SKILL.md +134 -0
- package/dist/assets/skills/diagnose.md +102 -43
- package/dist/assets/skills/drift/SKILL.md +123 -0
- package/dist/assets/skills/drift.md +64 -165
- package/dist/assets/skills/health/SKILL.md +65 -0
- package/dist/assets/skills/health.md +63 -0
- package/{src/skills/ideas.md → dist/assets/skills/ideas/SKILL.md} +11 -10
- package/dist/assets/skills/ideas.md +11 -10
- package/dist/assets/skills/organize/SKILL.md +109 -0
- package/dist/assets/skills/organize.md +56 -155
- package/dist/assets/skills/prep/SKILL.md +65 -0
- package/dist/assets/skills/prep.md +63 -0
- package/dist/assets/skills/trace/SKILL.md +143 -0
- package/dist/assets/skills/trace.md +75 -90
- package/dist/assets/skills/wiki/SKILL.md +127 -0
- package/dist/assets/skills/wiki.md +77 -178
- package/dist/cli/cli-program.js +18 -15
- package/dist/cli/cli-program.js.map +1 -1
- package/dist/cli/installer.js +54 -29
- package/dist/cli/installer.js.map +1 -1
- package/dist/hooks/idle-suggestions.js +4 -4
- package/dist/hooks/idle-suggestions.js.map +1 -1
- package/dist/hooks/system-transform.js +35 -1
- package/dist/hooks/system-transform.js.map +1 -1
- package/dist/index.js +455 -636
- package/dist/index.js.map +1 -1
- package/dist/plugin-config.js +6 -32
- package/dist/plugin-config.js.map +1 -1
- package/dist/tools/init-vault.js +8 -38
- package/dist/tools/init-vault.js.map +1 -1
- package/dist/tools/vault-doctor.js +1 -1
- package/dist/tools/vault-doctor.js.map +1 -1
- package/dist/tools/vault-status.js +1 -1
- package/dist/tools/vault-status.js.map +1 -1
- package/dist/vault/__tests__/create.test.js +48 -116
- package/dist/vault/__tests__/create.test.js.map +1 -1
- package/dist/vault/__tests__/doctor.test.js +14 -2
- package/dist/vault/__tests__/doctor.test.js.map +1 -1
- package/dist/vault/__tests__/manifest.test.js +2 -2
- package/dist/vault/__tests__/manifest.test.js.map +1 -1
- package/dist/vault/__tests__/status.test.js +12 -0
- package/dist/vault/__tests__/status.test.js.map +1 -1
- package/dist/vault/__tests__/upgrade.test.js +3 -3
- package/dist/vault/__tests__/upgrade.test.js.map +1 -1
- package/dist/vault/create.js +86 -196
- package/dist/vault/create.js.map +1 -1
- package/dist/vault/doctor.js +49 -0
- package/dist/vault/doctor.js.map +1 -1
- package/dist/vault/manifest.js +2 -2
- package/dist/vault/manifest.js.map +1 -1
- package/dist/vault/preset.js +10 -4
- package/dist/vault/preset.js.map +1 -1
- package/dist/vault/self-update.js +1 -1
- package/dist/vault/status.js +24 -0
- package/dist/vault/status.js.map +1 -1
- package/dist/vault/upgrade.js +165 -23
- package/dist/vault/upgrade.js.map +1 -1
- package/package.json +1 -1
- package/src/assets/obsidian-skills/byoao-conventions.md +9 -6
- package/src/assets/obsidian-skills/vault-thinking.md +6 -5
- package/src/assets/presets/common/AGENTS.md.hbs +23 -19
- package/src/assets/presets/common/SCHEMA.md.hbs +57 -0
- package/src/assets/presets/common/Start Here.md.hbs +29 -40
- package/src/assets/presets/minimal/preset.json +3 -3
- package/src/assets/presets/pm-tpm/preset.json +2 -2
- package/src/skills/ask/SKILL.md +135 -0
- package/src/skills/challenge/SKILL.md +134 -0
- package/src/skills/connect/SKILL.md +126 -0
- package/src/skills/cook/SKILL.md +170 -0
- package/src/skills/diagnose/SKILL.md +134 -0
- package/src/skills/drift/SKILL.md +123 -0
- package/src/skills/health/SKILL.md +65 -0
- package/src/skills/ideas/SKILL.md +173 -0
- package/src/skills/organize/SKILL.md +109 -0
- package/src/skills/prep/SKILL.md +65 -0
- package/src/skills/trace/SKILL.md +143 -0
- package/src/skills/wiki/SKILL.md +127 -0
- package/dist/assets/presets/common/Glossary.md.hbs +0 -16
- package/dist/assets/presets/common/obsidian/daily-notes.json +0 -5
- package/dist/assets/presets/common/obsidian/templates.json +0 -3
- package/dist/assets/presets/common/templates/Daily Note.md +0 -19
- package/dist/assets/presets/common/templates/Decision Record.md +0 -32
- package/dist/assets/presets/common/templates/Investigation.md +0 -34
- package/dist/assets/presets/common/templates/Meeting Notes.md +0 -25
- package/dist/assets/skills/emerge.md +0 -168
- package/dist/assets/skills/weave.md +0 -287
- package/dist/tools/add-glossary-term.js +0 -21
- package/dist/tools/add-glossary-term.js.map +0 -1
- package/dist/tools/add-person.js +0 -21
- package/dist/tools/add-person.js.map +0 -1
- package/dist/tools/add-project.js +0 -24
- package/dist/tools/add-project.js.map +0 -1
- package/dist/tools/graph-health.js +0 -25
- package/dist/tools/graph-health.js.map +0 -1
- package/dist/tools/note-read.js +0 -19
- package/dist/tools/note-read.js.map +0 -1
- package/dist/tools/search-vault.js +0 -22
- package/dist/tools/search-vault.js.map +0 -1
- package/dist/vault/__tests__/glossary.test.js +0 -68
- package/dist/vault/__tests__/glossary.test.js.map +0 -1
- package/dist/vault/__tests__/graph-health.test.js +0 -102
- package/dist/vault/__tests__/graph-health.test.js.map +0 -1
- package/dist/vault/__tests__/member.test.js +0 -85
- package/dist/vault/__tests__/member.test.js.map +0 -1
- package/dist/vault/__tests__/note-read.test.js +0 -71
- package/dist/vault/__tests__/note-read.test.js.map +0 -1
- package/dist/vault/__tests__/obsidian-cli.test.js +0 -108
- package/dist/vault/__tests__/obsidian-cli.test.js.map +0 -1
- package/dist/vault/__tests__/search-vault.test.js +0 -93
- package/dist/vault/__tests__/search-vault.test.js.map +0 -1
- package/dist/vault/glossary.js +0 -27
- package/dist/vault/glossary.js.map +0 -1
- package/dist/vault/graph-health.js +0 -83
- package/dist/vault/graph-health.js.map +0 -1
- package/dist/vault/member.js +0 -67
- package/dist/vault/member.js.map +0 -1
- package/dist/vault/note-read.js +0 -70
- package/dist/vault/note-read.js.map +0 -1
- package/dist/vault/project.js +0 -68
- package/dist/vault/project.js.map +0 -1
- package/dist/vault/retrieval-types.js +0 -5
- package/dist/vault/retrieval-types.js.map +0 -1
- package/dist/vault/search-vault.js +0 -87
- package/dist/vault/search-vault.js.map +0 -1
- package/src/assets/presets/common/obsidian/daily-notes.json +0 -5
- package/src/assets/presets/common/obsidian/templates.json +0 -3
- package/src/assets/presets/common/templates/Daily Note.md +0 -19
- package/src/assets/presets/common/templates/Decision Record.md +0 -32
- package/src/assets/presets/common/templates/Investigation.md +0 -34
- package/src/assets/presets/common/templates/Meeting Notes.md +0 -25
- package/src/skills/challenge.md +0 -174
- package/src/skills/connect.md +0 -213
- package/src/skills/diagnose.md +0 -72
- package/src/skills/drift.md +0 -223
- package/src/skills/emerge.md +0 -168
- package/src/skills/organize.md +0 -206
- package/src/skills/trace.md +0 -156
- package/src/skills/weave.md +0 -287
- package/src/skills/wiki.md +0 -227
package/src/skills/emerge.md
DELETED
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: emerge
|
|
3
|
-
description: Surface conclusions, patterns, and insights the vault implies but never explicitly states. Analyzes clusters, orphans, and cross-domain connections. Use when the user asks "what patterns do you see", "what am I missing", "analyze my vault", "find hidden connections", or wants a big-picture review of their knowledge base.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# /emerge — Surface Hidden Patterns
|
|
7
|
-
|
|
8
|
-
You are a pattern recognition analyst. Your job is to read across the user's vault and surface insights that the notes collectively imply but never explicitly state — hidden conclusions, recurring themes, unnoticed contradictions, and latent connections.
|
|
9
|
-
|
|
10
|
-
## Prerequisites Check
|
|
11
|
-
|
|
12
|
-
```bash
|
|
13
|
-
obsidian --version
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
If this fails, STOP and display the Obsidian CLI availability message (see /weave for the full error text).
|
|
17
|
-
|
|
18
|
-
## Tool Selection
|
|
19
|
-
|
|
20
|
-
Use `obsidian` CLI for content operations (read, search, backlinks, properties, tags). Use BYOAO tools (`byoao_search_vault`, `byoao_graph_health`) when Obsidian CLI is unavailable or for graph-level structural queries.
|
|
21
|
-
|
|
22
|
-
## Parameters
|
|
23
|
-
|
|
24
|
-
- **scope** (optional): Limit analysis to a folder, domain, or tag. Default: entire vault.
|
|
25
|
-
- **depth** (optional): "quick" (top-level scan) or "deep" (read every note in scope). Default: "quick".
|
|
26
|
-
- **output** (optional): If set, save findings as a note at this path.
|
|
27
|
-
|
|
28
|
-
## Process
|
|
29
|
-
|
|
30
|
-
### Sampling Strategy
|
|
31
|
-
|
|
32
|
-
If a domain or 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: Map the Vault
|
|
35
|
-
|
|
36
|
-
Build a structural picture:
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
obsidian list
|
|
40
|
-
obsidian properties sort=count counts
|
|
41
|
-
obsidian tags
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
Identify:
|
|
45
|
-
- Total notes and their distribution across folders/domains
|
|
46
|
-
- Most-used tags and properties
|
|
47
|
-
- Cluster density (which areas have many interconnected notes vs sparse ones)
|
|
48
|
-
|
|
49
|
-
### Step 2: Find Structural Signals
|
|
50
|
-
|
|
51
|
-
Use graph-level queries to identify interesting patterns:
|
|
52
|
-
|
|
53
|
-
**Orphan notes** — notes with no links in or out:
|
|
54
|
-
Use `byoao_graph_health` or scan notes checking for those with zero wikilinks (no `[[` in content) and zero backlinks.
|
|
55
|
-
Orphans may contain ideas the user hasn't connected yet.
|
|
56
|
-
|
|
57
|
-
**Dead-end notes** — notes that link out but nobody links to them:
|
|
58
|
-
Scan for notes with outgoing wikilinks but no backlinks.
|
|
59
|
-
|
|
60
|
-
**Hub notes** — notes with unusually many backlinks:
|
|
61
|
-
```bash
|
|
62
|
-
obsidian backlinks "<note>"
|
|
63
|
-
```
|
|
64
|
-
Hubs reveal what the user's thinking centers around.
|
|
65
|
-
|
|
66
|
-
**Tag clusters** — tags that always co-occur:
|
|
67
|
-
If `#migration` and `#payments` always appear together, there's an implicit connection.
|
|
68
|
-
|
|
69
|
-
### Step 3: Cross-Domain Analysis
|
|
70
|
-
|
|
71
|
-
For each domain (from frontmatter `domain` field or folder grouping):
|
|
72
|
-
|
|
73
|
-
1. **Read a sample of notes** (5-10 per domain, prioritizing recent and highly-linked)
|
|
74
|
-
2. **Extract key themes** — what topics recur within the domain?
|
|
75
|
-
3. **Look for cross-domain bridges** — concepts mentioned in multiple domains
|
|
76
|
-
4. **Identify tension** — contradictory statements across domains or time periods
|
|
77
|
-
|
|
78
|
-
### Step 4: Pattern Detection
|
|
79
|
-
|
|
80
|
-
Look for these specific pattern types:
|
|
81
|
-
|
|
82
|
-
**Recurring questions**: The same question asked in multiple notes but never answered.
|
|
83
|
-
> "You've asked 'what's our rollback strategy?' in 4 different meeting notes but no note contains an answer."
|
|
84
|
-
|
|
85
|
-
**Implicit decisions**: A direction was taken without a documented decision.
|
|
86
|
-
> "Notes shifted from Option A to Option B around April, but no decision record exists."
|
|
87
|
-
|
|
88
|
-
**Convergent threads**: Separate lines of thinking that are heading toward the same conclusion.
|
|
89
|
-
> "Your notes on 'API rate limiting' and 'user quotas' both point toward a tiered access model, but neither note references the other."
|
|
90
|
-
|
|
91
|
-
**Forgotten threads**: Topics that received attention then went silent.
|
|
92
|
-
> "'Data mesh' appears in 6 notes between Jan-Mar but hasn't been mentioned since."
|
|
93
|
-
|
|
94
|
-
**Expertise gaps**: The vault references a topic repeatedly but always superficially.
|
|
95
|
-
> "'Kubernetes networking' appears in 12 notes but always as a dependency, never deeply explored."
|
|
96
|
-
|
|
97
|
-
**Contradictions**: Conflicting statements across notes.
|
|
98
|
-
> "In [[Note A]] you wrote 'we should avoid microservices' but [[Note B]] proposes splitting the monolith."
|
|
99
|
-
|
|
100
|
-
### Step 5: Synthesize Insights
|
|
101
|
-
|
|
102
|
-
For each pattern found, formulate an insight:
|
|
103
|
-
|
|
104
|
-
```markdown
|
|
105
|
-
## Insight: {title}
|
|
106
|
-
|
|
107
|
-
**Pattern**: {what you observed}
|
|
108
|
-
**Evidence**: {list of notes with brief quotes}
|
|
109
|
-
**Implication**: {what this might mean — phrased as a question, not a conclusion}
|
|
110
|
-
**Suggested action**: {what the user could do — write a note, make a decision, connect notes}
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### Step 6: Present Findings
|
|
114
|
-
|
|
115
|
-
```markdown
|
|
116
|
-
# Emerge: Vault Patterns
|
|
117
|
-
|
|
118
|
-
Analyzed {N} notes across {M} domains.
|
|
119
|
-
|
|
120
|
-
## Key Findings
|
|
121
|
-
|
|
122
|
-
### 1. {Insight title}
|
|
123
|
-
{Pattern, evidence, implication, action}
|
|
124
|
-
|
|
125
|
-
### 2. {Insight title}
|
|
126
|
-
...
|
|
127
|
-
|
|
128
|
-
## Structural Observations
|
|
129
|
-
|
|
130
|
-
- **Most connected**: [[Note]] ({N} backlinks) — your thinking hub
|
|
131
|
-
- **Most isolated**: {N} orphan notes that may contain undeveloped ideas
|
|
132
|
-
- **Busiest domain**: {domain} ({N} notes)
|
|
133
|
-
- **Thinnest domain**: {domain} ({N} notes) — possible blind spot
|
|
134
|
-
|
|
135
|
-
## Suggested Next Steps
|
|
136
|
-
|
|
137
|
-
1. {Actionable suggestion — e.g. "Connect [[A]] and [[B]] — they discuss the same problem"}
|
|
138
|
-
2. {Actionable suggestion — e.g. "Write a decision record for the implicit choice between X and Y"}
|
|
139
|
-
3. {Actionable suggestion — e.g. "Run /trace on 'data mesh' to understand why it was abandoned"}
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
### Step 7: Save (Optional)
|
|
143
|
-
|
|
144
|
-
At the end of your findings, ask:
|
|
145
|
-
|
|
146
|
-
> "Would you like me to save this as a note?"
|
|
147
|
-
|
|
148
|
-
If the user confirms, save with frontmatter:
|
|
149
|
-
|
|
150
|
-
```yaml
|
|
151
|
-
---
|
|
152
|
-
title: "Emerge: Vault Patterns"
|
|
153
|
-
note_type: literature
|
|
154
|
-
type: analysis
|
|
155
|
-
date: <today>
|
|
156
|
-
tags: [emerge, patterns]
|
|
157
|
-
---
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
Use `obsidian create` to save. Ask the user where they'd like it saved.
|
|
161
|
-
|
|
162
|
-
## Key Principles
|
|
163
|
-
|
|
164
|
-
- **Show, don't tell**: Always cite specific notes and quotes. Never claim a pattern exists without evidence.
|
|
165
|
-
- **Questions over conclusions**: Frame implications as questions the user should consider, not answers you've decided.
|
|
166
|
-
- **Respect user judgment**: The user may be aware of patterns and have chosen not to act. Present findings neutrally.
|
|
167
|
-
- **Prioritize actionable insights**: "These two notes should link to each other" is more useful than "your vault has 12 orphans."
|
|
168
|
-
- **Deep mode means thorough**: In "deep" mode, read every note in scope. In "quick" mode, use structural signals and sampling.
|
package/src/skills/organize.md
DELETED
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: organize
|
|
3
|
-
description: Reorganize vault directory structure using Obsidian CLI's move command, which safely updates all backlinks. Analyzes enriched frontmatter (type, domain) to propose a logical folder layout. Use when the user says "organize my vault", "reorganize files", "clean up folders", "restructure", or after running /weave on a messy vault.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# /organize — Vault Directory Reorganization
|
|
7
|
-
|
|
8
|
-
You are a vault organizer. Your job is to analyze the current directory structure, propose a logical reorganization based on enriched frontmatter metadata, and execute moves safely using Obsidian CLI — which automatically updates all backlinks and wikilinks.
|
|
9
|
-
|
|
10
|
-
## Prerequisites Check
|
|
11
|
-
|
|
12
|
-
**Before doing anything else:**
|
|
13
|
-
|
|
14
|
-
1. Verify Obsidian CLI is available:
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
obsidian --version
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
If this fails, STOP and display:
|
|
21
|
-
|
|
22
|
-
```
|
|
23
|
-
Obsidian CLI is not available. Please ensure:
|
|
24
|
-
1. Obsidian is running
|
|
25
|
-
2. This vault is open in Obsidian
|
|
26
|
-
3. CLI is enabled: Settings → General → Advanced → Command-line interface
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
2. Check that files have frontmatter (specifically `type`). Run:
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
obsidian properties sort=count counts
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
If `type` property has very low coverage (< 30% of notes), STOP and suggest:
|
|
36
|
-
|
|
37
|
-
```
|
|
38
|
-
Most files lack a `type` property — /organize needs frontmatter to
|
|
39
|
-
decide where files belong. Run /weave first to enrich your notes,
|
|
40
|
-
then come back to /organize.
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
## Parameters
|
|
44
|
-
|
|
45
|
-
- **scope** (optional): `all` (default) or a specific directory path to reorganize
|
|
46
|
-
- **dry-run** (optional): If set, show proposed changes without executing
|
|
47
|
-
- **aggressive** (optional): Also suggest consolidating existing directory structures (e.g., merge year-based sprint folders into `Sprints/`)
|
|
48
|
-
|
|
49
|
-
## File Exclusion Rules
|
|
50
|
-
|
|
51
|
-
Never move or suggest moving:
|
|
52
|
-
|
|
53
|
-
| Pattern | Reason |
|
|
54
|
-
|---------|--------|
|
|
55
|
-
| `AGENTS.md` | BYOAO-managed root file |
|
|
56
|
-
| `INDEX.base` | Knowledge graph index — do not move |
|
|
57
|
-
| `Start Here.md` | BYOAO onboarding file |
|
|
58
|
-
| `.obsidian/`, `.git/`, `.byoao/` | System directories |
|
|
59
|
-
| `.opencode/`, `.cursor/`, `.claude/` | Tool config directories |
|
|
60
|
-
| `.env`, `credentials.*`, `*.key` | Sensitive files |
|
|
61
|
-
|
|
62
|
-
## Process
|
|
63
|
-
|
|
64
|
-
### Step 1: Analyze Current Structure
|
|
65
|
-
|
|
66
|
-
Build a complete picture of the vault:
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
obsidian list
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
Then read frontmatter for every file to build a map of `path → {type, domain, project, tags}`. Use batch reading:
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
obsidian read "<note name>"
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
Categorize every file into one of:
|
|
79
|
-
- **Has type** — can be auto-organized based on the mapping table
|
|
80
|
-
- **No type but in coherent directory** — already organized, leave in place
|
|
81
|
-
- **No type and in root/flat dir** — suggest running `/weave` first
|
|
82
|
-
|
|
83
|
-
### Step 2: Build Reorganization Map
|
|
84
|
-
|
|
85
|
-
For each file with a `type` property, determine if it should move based on this mapping:
|
|
86
|
-
|
|
87
|
-
| `type` | Target Directory | Notes |
|
|
88
|
-
|--------|-----------------|-------|
|
|
89
|
-
| `daily` | `Daily/` | |
|
|
90
|
-
| `meeting` | Project folder if `project` field exists, else `Meetings/` | Group by project when possible |
|
|
91
|
-
| `feature` | `Projects/<project>/` | Use `project` frontmatter field |
|
|
92
|
-
| `project` | `Projects/` | Top-level project notes |
|
|
93
|
-
| `sprint-handoff` | `Sprints/` | |
|
|
94
|
-
| `reference` | `Knowledge/` or user's preferred reference location | General reference material |
|
|
95
|
-
| `person` | `People/` | |
|
|
96
|
-
| `investigation` | Project folder if `project` field exists, else `Knowledge/` | |
|
|
97
|
-
| `idea` | `Knowledge/` | |
|
|
98
|
-
| `decision` | Project folder if `project` field exists, else `Knowledge/` | |
|
|
99
|
-
|
|
100
|
-
**Smart rules — when NOT to move:**
|
|
101
|
-
|
|
102
|
-
1. **Already in the right place** — if a `type: meeting` file is already in `Meetings/` or inside a project folder, skip it
|
|
103
|
-
2. **Part of a coherent group** — if a file sits in `2025 Sprint/Sprint22/JIRA ticket/` alongside related files, the entire group is already organized even if the parent folder name doesn't match BYOAO conventions. Do NOT break up coherent groups
|
|
104
|
-
3. **Deep nesting** — if a file is 3+ levels deep in a project-specific directory, it's likely intentionally placed. Leave it unless the user explicitly asks to flatten
|
|
105
|
-
4. **Name collisions** — if moving a file would create a name collision in the target directory, flag it and skip
|
|
106
|
-
|
|
107
|
-
**When `aggressive` mode is enabled**, also suggest structural consolidation:
|
|
108
|
-
- Multiple year/sprint directories (e.g., `2025 Sprint/`, `2026 Sprint/`) → merge under `Sprints/2025/`, `Sprints/2026/`
|
|
109
|
-
- Scattered documentation directories → consolidate under `Knowledge/`
|
|
110
|
-
- This is a larger operation — always present as a separate approval step
|
|
111
|
-
|
|
112
|
-
### Step 3: Present Plan
|
|
113
|
-
|
|
114
|
-
Group proposed moves by category and show a clear summary:
|
|
115
|
-
|
|
116
|
-
```
|
|
117
|
-
/organize analysis complete.
|
|
118
|
-
|
|
119
|
-
## Files to move (23 of 504)
|
|
120
|
-
|
|
121
|
-
### Root files → proper directories
|
|
122
|
-
HANDOVER-2026-03-04.md → Knowledge/Handovers/HANDOVER-2026-03-04.md
|
|
123
|
-
HANDOVER-2026-03-02.md → Knowledge/Handovers/HANDOVER-2026-03-02.md
|
|
124
|
-
BigQuery_Syntax_Guide.md → Knowledge/BigQuery_Syntax_Guide.md
|
|
125
|
-
|
|
126
|
-
### Meeting notes → Meetings/
|
|
127
|
-
standup-2026-03-15.md → Meetings/standup-2026-03-15.md
|
|
128
|
-
|
|
129
|
-
### Reference docs → Knowledge/
|
|
130
|
-
API_Overview.md → Knowledge/API_Overview.md
|
|
131
|
-
|
|
132
|
-
## New directories to create
|
|
133
|
-
Knowledge/Handovers/
|
|
134
|
-
Meetings/
|
|
135
|
-
|
|
136
|
-
## Files staying in place: 481
|
|
137
|
-
(Already in coherent directory structures)
|
|
138
|
-
|
|
139
|
-
## Files without `type` (cannot auto-organize): 12
|
|
140
|
-
Run /weave on these first, then re-run /organize.
|
|
141
|
-
|
|
142
|
-
Options:
|
|
143
|
-
1. Approve all moves
|
|
144
|
-
2. Review one-by-one
|
|
145
|
-
3. Skip — make no changes
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
Wait for user response before proceeding.
|
|
149
|
-
|
|
150
|
-
### Step 4: Execute Moves
|
|
151
|
-
|
|
152
|
-
For each approved move, use `obsidian move`:
|
|
153
|
-
|
|
154
|
-
```bash
|
|
155
|
-
obsidian move file="HANDOVER-2026-03-04" to="Knowledge/Handovers/"
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
**Execution rules:**
|
|
159
|
-
|
|
160
|
-
- Create target directories first if they don't exist:
|
|
161
|
-
```bash
|
|
162
|
-
mkdir -p "<vault path>/<target directory>"
|
|
163
|
-
```
|
|
164
|
-
- Execute moves one at a time and verify each succeeds
|
|
165
|
-
- If a move fails (name collision, file locked, etc.), log the error and continue with remaining moves
|
|
166
|
-
- Report progress every 10 moves: "Moved 10/23 files..."
|
|
167
|
-
|
|
168
|
-
**Why `obsidian move` instead of `mv`:**
|
|
169
|
-
|
|
170
|
-
`obsidian move` tells Obsidian to perform the move internally. Obsidian automatically updates **all wikilinks and backlinks** across the entire vault that reference the moved file. Using file system `mv` would leave broken links.
|
|
171
|
-
|
|
172
|
-
### Step 5: Verify
|
|
173
|
-
|
|
174
|
-
After all moves complete:
|
|
175
|
-
|
|
176
|
-
1. Get the updated file list:
|
|
177
|
-
```bash
|
|
178
|
-
obsidian list
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
2. Check for broken links:
|
|
182
|
-
```bash
|
|
183
|
-
byoao_graph_health
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
3. Report results:
|
|
187
|
-
|
|
188
|
-
```
|
|
189
|
-
/organize complete:
|
|
190
|
-
- Moved: 23 files
|
|
191
|
-
- Skipped: 0 (errors)
|
|
192
|
-
- New directories created: 2
|
|
193
|
-
- Broken links after moves: 0
|
|
194
|
-
- Files still without `type`: 12 (run /weave to fix)
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
If any broken links are found, report them and suggest fixes.
|
|
198
|
-
|
|
199
|
-
## Important Guidelines
|
|
200
|
-
|
|
201
|
-
- **Conservative by default**: Only suggest moves where the benefit is clear. A file that's "good enough" where it is should stay
|
|
202
|
-
- **Never break coherent groups**: If files are organized together in a project directory, don't scatter them even if their `type` would suggest different target directories
|
|
203
|
-
- **User approval is mandatory**: Never move files without explicit confirmation
|
|
204
|
-
- **`obsidian move` only**: Never use file system `mv`, `cp`, or rename commands for vault files — only `obsidian move` and `obsidian rename` preserve link integrity
|
|
205
|
-
- **Idempotent**: Running /organize twice should not propose moves for files that were already correctly placed in the first run
|
|
206
|
-
- **Reversible**: If the user wants to undo, they can run `/organize` again with manual adjustments, or restore from git history
|
package/src/skills/trace.md
DELETED
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
---
|
|
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.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# /trace — Track Idea Evolution
|
|
7
|
-
|
|
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.
|
|
9
|
-
|
|
10
|
-
## Prerequisites Check
|
|
11
|
-
|
|
12
|
-
```bash
|
|
13
|
-
obsidian --version
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
If this fails, STOP and display the Obsidian CLI availability message (see /weave for the full error text).
|
|
17
|
-
|
|
18
|
-
## Tool Selection
|
|
19
|
-
|
|
20
|
-
Use `obsidian` CLI for content operations (read, search, backlinks, properties, tags). Use BYOAO tools (`byoao_search_vault`, `byoao_graph_health`) when Obsidian CLI is unavailable or for graph-level structural queries.
|
|
21
|
-
|
|
22
|
-
## Parameters
|
|
23
|
-
|
|
24
|
-
- **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.
|
|
27
|
-
|
|
28
|
-
## Process
|
|
29
|
-
|
|
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
|
|
35
|
-
|
|
36
|
-
Search for the topic across the vault using multiple strategies:
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
obsidian search "<topic>"
|
|
40
|
-
```
|
|
41
|
-
|
|
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>`
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
obsidian backlinks "<topic>"
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
### Step 2: Build Timeline
|
|
52
|
-
|
|
53
|
-
For each note that mentions the topic:
|
|
54
|
-
|
|
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?
|
|
59
|
-
|
|
60
|
-
Sort all mentions chronologically.
|
|
61
|
-
|
|
62
|
-
### Step 3: Identify Phases
|
|
63
|
-
|
|
64
|
-
Look for natural phases in how the topic evolved:
|
|
65
|
-
|
|
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
|
|
71
|
-
|
|
72
|
-
Not every topic will have all phases. Some may cycle through phases multiple times.
|
|
73
|
-
|
|
74
|
-
### Step 4: Detect Turning Points
|
|
75
|
-
|
|
76
|
-
Flag moments where the user's understanding or stance shifted:
|
|
77
|
-
|
|
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"
|
|
82
|
-
|
|
83
|
-
### Step 5: Present the Trace
|
|
84
|
-
|
|
85
|
-
Format the output as a structured timeline:
|
|
86
|
-
|
|
87
|
-
```markdown
|
|
88
|
-
# Trace: {Topic}
|
|
89
|
-
|
|
90
|
-
Traced across {N} notes, spanning {date range}.
|
|
91
|
-
|
|
92
|
-
## Timeline
|
|
93
|
-
|
|
94
|
-
### Phase 1: Discovery ({date range})
|
|
95
|
-
|
|
96
|
-
- **{date}** — [[Note Name]]: {1-2 sentence summary}
|
|
97
|
-
> "{key quote from the note}"
|
|
98
|
-
- **{date}** — [[Note Name]]: {summary}
|
|
99
|
-
|
|
100
|
-
### Phase 2: Investigation ({date range})
|
|
101
|
-
|
|
102
|
-
- **{date}** — [[Note Name]]: {summary}
|
|
103
|
-
|
|
104
|
-
### Turning Point: {description}
|
|
105
|
-
|
|
106
|
-
- **{date}** — [[Note Name]]: {what changed and why}
|
|
107
|
-
|
|
108
|
-
### Phase 3: Decision ({date range})
|
|
109
|
-
|
|
110
|
-
- **{date}** — [[Note Name]]: {summary}
|
|
111
|
-
|
|
112
|
-
## Insights
|
|
113
|
-
|
|
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
|
-
|
|
119
|
-
## Related Traces
|
|
120
|
-
|
|
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
|
-
```
|
|
125
|
-
|
|
126
|
-
### Step 6: Save (Optional)
|
|
127
|
-
|
|
128
|
-
At the end of your trace, ask:
|
|
129
|
-
|
|
130
|
-
> "Would you like me to save this as a note?"
|
|
131
|
-
|
|
132
|
-
If the user confirms, save the trace with frontmatter:
|
|
133
|
-
|
|
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
|
-
---
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
Use `obsidian create` to save. Ask the user where they'd like it saved.
|
|
149
|
-
|
|
150
|
-
## Key Principles
|
|
151
|
-
|
|
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.
|