vaultr-compile-note
Compiles a single raw Vaultr note into knowledge units using a two-phase AI process (triage → compile). Use this skill whenever the user wants to compile a note into knowledge, extract knowledge from a note, update the knowledge base from a note, merge note content into knowledge
Install
npx skills add https://github.com/skoowoo/vaultr-notes/tree/main/skills/vaultr-compile-note
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install skoowoo-vaultr-notes@llmmart
git clone https://github.com/skoowoo/vaultr-notes.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole skoowoo/vaultr-notes collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
Vaultr Compile Note
Compiles a single raw note into knowledge units — wiki-style pages that capture the author's accumulating understanding of the entities and concepts that matter to them.
Run all five steps to completion without stopping. Do not present intermediate results, ask for confirmation, or pause between steps. Pre-compile (Step 3) is internal — never output it to the user. Only speak at the end (Step 5 summary).
Inputs
- Note path — the raw note to compile (vault-absolute or filesystem path)
- Knowledge directory — where knowledge units live (default:
_knowledge/relative to cwd, which is always the vault root)
Step 1 — Read the note
Read the full content of the target note. Note its path and original publication date — check in order: YAML front matter (date / published), filename date prefix, article/podcast header, or any explicit timestamp in the body. Record this as source_date. If none is found, mark source_date as unknown.
Step 2 — Load relevant knowledge index
List available domain indexes:
vaultr knowledge list-indexes
This returns a JSON array of {"domain": "...", "path": "..."} objects. Based on the note's content, select the 1–2 domains most relevant to what the note covers. Read only those index files to obtain the unit table for this compilation.
If the output is empty (no indexes exist), fall back to cold start: scan <knowledge-dir> directly and build a compact table (title | entity_type | tags | first paragraph ≤80 chars).
Step 3 — Pre-compile (internal, not shown to user)
Scan the note and produce a unit manifest — a list of knowledge units to create or update. Do not generate any content yet.
What qualifies as a knowledge unit
A knowledge unit is a wiki page for any core or key entity in the note that has depth worth accumulating. There are no fixed types — an entity can be a person, company, book, concept, technique, place, event, story, product, methodology, or anything the note treats with substance.
Three qualifying questions
Before adding a unit to the manifest, answer all three:
- Does it have a stable name? A recognized term or proper noun — not a sentence ("the argument that..."). Unnamed ideas belong inside another unit.
- Does it have depth to accumulate? If the content would just restate a definition, there's nothing to compile. A unit needs room to grow — mechanisms, tensions, implications, meaning.
- Will it recur? Would this entity appear across notes from different contexts and dates? If yes, it belongs here. One-off references don't.
If any answer is no, fold the content into an existing unit instead.
Granularity calibration
Too broad — the title is a domain, not an entity ("AI Trends"). Fix: find the specific entity the note actually advances.
Too narrow — a sub-point or isolated fact with no room to grow. Fix: fold into the relevant unit.
Right size — something you'd naturally treat as its own subject. One clear defining sentence, and more to say beyond it.
Split vs. sub-point
Create two units when they have different cores and would grow independently. Keep as a sub-point when one is an example or implication of the other — separating them would leave both thin.
Don't add to the manifest
- Data points and metrics
- Sub-arguments that don't stand alone
- Passing references with no analysis
Output: unit manifest
| unit name | entity_type | operation |
|---|---|---|
| <unit title> | <freeform> | create |
| <unit title> | <freeform> | update |
entity_type is a short descriptive label for what this entity is (e.g. person, company, book, concept, event, technique). It is freeform metadata — there are no type restrictions and no templates tied to it.
The manifest may be empty if the note has no content worth compiling. Immediately continue to Step 4.
For every unit marked update in the manifest: read its existing file at <knowledge-dir>/<unit-name>.md now, before Step 4 begins. Do not proceed to Step 4 until all existing files are loaded.
Step 4 — Compile
For each unit in the manifest, check its operation and read the corresponding file:
create→ readreferences/create.mdand follow it completely.update→ readreferences/update.mdand follow it completely.
references/extract.md documents partial-read commands (vaultr extract outline / section / segment / …). Use them at any step when reading the full note is not necessary.
Complete one unit fully before moving to the next. After all units are done, confirm in prose: which were created, which updated, and what changed in each.
Language
Match the language of existing units in the knowledge directory. If no units exist, use the language of the source note. Dates in opinion sections always use YYYY-MM-DD. When the vault language is not English, translate all section names accordingly.
Time attribution
Knowledge units must anchor time to the original publication date of the source material, not the compilation date.
- If
source_dateis known: use it when writing any time-sensitive content in the unit (e.g. "as of YYYY-MM-DD", "at the time of publication"). - If
source_dateis unknown: omit the time reference or mark it as "date unknown". Never substitute today's date.
Files (vaultr-notes)
-
references
-
create.md 2.2 KB
# Create — New Knowledge Unit Synthesize the content from the current note into a clean knowledge unit written as a fresh document. There is no existing unit to preserve or reference. Do not add inline citations anywhere in the body. All content originates from this note; the Sources section is the sole record. --- ## Content organization You have full freedom to choose and name sections. Let the entity dictate the structure — a person, a book, a company, and a technique each call for different organization. There is no prescribed template. Ask yourself: what does the author need to know about this entity when they return to it later? What is their current understanding, and how should it be organized to grow? **One principle**: a knowledge unit should contain only what's most important. Source notes are the permanent record — the unit is a living distillation. --- ## Two required sections **`## Related Knowledge`** — wikilinks to other knowledge units with a brief note on the relationship. Omit if there are no meaningful connections. **`## Sources`** — always the **last section** in the file. Initialize with `- [[<current-note-stem>]]` where stem is the source note's filename without path or extension (e.g. `/notes/2024-01-15 Weekly Review.md` → `- [[2024-01-15 Weekly Review]]`). If the vault language is not English, translate section headings accordingly (e.g. `## 来源`). --- ## Frontmatter ```yaml --- kind: knowledge title: <Title> entity_type: <freeform label> tags: [tag1, tag2] source_notes: - /path/to/current-note.md created_at: YYYY-MM-DDTHH:MM:SSZ last_compiled_at: YYYY-MM-DDTHH:MM:SSZ compile_count: 1 --- ``` Set `created_at` and `last_compiled_at` to today. `compile_count: 1`. --- ## Tag normalization Before assigning tags, run: ```bash vaultr tag list ``` First determine the tags that accurately describe the unit. Then, for each tag, check the existing list for a semantically equivalent entry (same concept, different language or spelling — e.g. `独立开发` ↔ `indie-dev`). If one exists, replace your tag with it. Only keep a new tag when no equivalent exists. --- ## Write output Create `<knowledge-dir>/<Title>.md` with the full unit content. -
extract.md 1.3 KB
# Extract — Partial Note Reading `vaultr extract` reads parts of a note without loading the full content. Use it whenever the full note is not needed. ## Subcommands **Outline** — heading structure only: ```bash vaultr extract outline <path-or-name> ``` **Section** — one named section and its content (ends at the next heading of equal or higher level): ```bash vaultr extract section <path-or-name> "<heading>" # case-insensitive vaultr extract section today.md "## meeting notes" ``` **Segment** — line range: ```bash vaultr extract segment <path-or-name> --head 20 # first N lines vaultr extract segment <path-or-name> --tail 10 # last N lines vaultr extract segment <path-or-name> --start 5 --end 30 # specific range (1-based, inclusive) ``` **Tags** — front-matter tags only: ```bash vaultr extract tag <path-or-name> ``` **Code blocks** — all fenced code blocks: ```bash vaultr extract code <path-or-name> ``` **Lists** — all bullet and numbered lists: ```bash vaultr extract list <path-or-name> ``` **Links** — all links (wikilinks and markdown links); each result shows type and target: ```bash vaultr extract link <path-or-name> ``` ## Path rules Same as `vaultr read`: accepts vault-absolute paths (`/journal/today.md`) or bare filenames (resolves to most recently updated match). -
update.md 3.6 KB
# Update — Existing Knowledge Unit Your goal is not to append — it is to produce the best current distillation of the existing unit plus the new note. Treat the update as editorial work: - **Integrate, don't append.** Weave new content into the structure where it belongs — no section-appending, no "Updates" blocks. - **Cite by paragraph.** After each paragraph introducing new content, append `[[note-stem]]`. For paragraphs drawing from multiple sources, list all relevant citations. - **Reorganize when the weight has shifted.** If new content changes what's most important, restructure sections accordingly. - **Merge redundancies.** When old and new content overlap, keep only the sharper version. - **Remove what no longer earns its place.** Cut points that are superseded, contradicted, or outweighed by richer content. The unit is not a historical record — source notes are. - **Rewrite for coherence.** The final unit should read as one document, not layered deposits from different dates. Test: does the unit give the clearest possible picture of where the author's understanding stands today? --- ## Content organization You have full freedom to choose and name sections. Let the entity dictate the structure — a person, a book, a company, and a technique each call for different organization. There is no prescribed template. Ask yourself: what does the author need to know about this entity when they return to it later? What is their current understanding, and how should it be organized to grow? **One principle**: a knowledge unit should contain only what's most important. Source notes are the permanent record — the unit is a living distillation. --- ## Two required sections **`## Related Knowledge`** — wikilinks to other knowledge units with a brief note on the relationship. Omit if there are no meaningful connections. **`## Sources`** — always the **last section** in the file. Append `- [[<current-note-stem>]]` only if not already listed — never duplicate. Stem is the source note's filename without path or extension (e.g. `/notes/2024-01-15 Weekly Review.md` → `- [[2024-01-15 Weekly Review]]`). If the vault language is not English, translate section headings accordingly (e.g. `## 来源`). --- ## Frontmatter ```yaml --- kind: knowledge title: <Title> entity_type: <freeform label> tags: [tag1, tag2] source_notes: - /path/to/note.md created_at: YYYY-MM-DDTHH:MM:SSZ last_compiled_at: YYYY-MM-DDTHH:MM:SSZ compile_count: 1 --- ``` Add the current note path to `source_notes`. Update `last_compiled_at` to today. Increment `compile_count`. --- ## Tag normalization Before assigning tags, run: ```bash vaultr tag list ``` First determine the tags that accurately describe the unit. Then, for each tag, check the existing list for a semantically equivalent entry (same concept, different language or spelling — e.g. `独立开发` ↔ `indie-dev`). If one exists, replace your tag with it. Only keep a new tag when no equivalent exists. --- ## Pre-write review Before writing, review the integrated unit against four criteria: 1. **Relevance** — Does every paragraph belong to this unit's core subject? Cut anything that drifted in from adjacent topics. 2. **Currency** — Is any content outdated or superseded by the new note? Cut or correct it. The unit reflects current understanding, not accumulated strata. 3. **Coherence** — Does it read as one document? Are section order and transitions immediately navigable? 4. **Concision** — Is everything load-bearing? Cut anything that restates what is already clear elsewhere. Resolve all issues before writing. --- ## Write output Overwrite the existing file with the full updated content.
-
-
SKILL.md 6 KB
--- name: vaultr-compile-note description: "Compiles a single raw Vaultr note into knowledge units using a two-phase AI process (triage → compile). Use this skill whenever the user wants to compile a note into knowledge, extract knowledge from a note, update the knowledge base from a note, merge note content into knowledge units, or run knowledge compilation. Triggers on phrases like 'compile this note', 'compile note into knowledge', 'extract knowledge from note', 'update knowledge base', 'run compile on', or any request to turn a raw note into structured knowledge units." --- # Vaultr Compile Note Compiles a single raw note into **knowledge units** — wiki-style pages that capture the author's accumulating understanding of the entities and concepts that matter to them. **Run all five steps to completion without stopping.** Do not present intermediate results, ask for confirmation, or pause between steps. Pre-compile (Step 3) is internal — never output it to the user. Only speak at the end (Step 5 summary). --- ## Inputs 1. **Note path** — the raw note to compile (vault-absolute or filesystem path) 2. **Knowledge directory** — where knowledge units live (default: `_knowledge/` relative to cwd, which is always the vault root) --- ## Step 1 — Read the note Read the full content of the target note. Note its path and **original publication date** — check in order: YAML front matter (`date` / `published`), filename date prefix, article/podcast header, or any explicit timestamp in the body. Record this as `source_date`. If none is found, mark `source_date` as unknown. --- ## Step 2 — Load relevant knowledge index List available domain indexes: ```bash vaultr knowledge list-indexes ``` This returns a JSON array of `{"domain": "...", "path": "..."}` objects. Based on the note's content, select the 1–2 domains most relevant to what the note covers. Read only those index files to obtain the unit table for this compilation. If the output is empty (no indexes exist), fall back to cold start: scan `<knowledge-dir>` directly and build a compact table (title | entity_type | tags | first paragraph ≤80 chars). --- ## Step 3 — Pre-compile (internal, not shown to user) Scan the note and produce a **unit manifest** — a list of knowledge units to create or update. Do not generate any content yet. ### What qualifies as a knowledge unit A knowledge unit is a wiki page for any **core or key entity** in the note that has depth worth accumulating. There are no fixed types — an entity can be a person, company, book, concept, technique, place, event, story, product, methodology, or anything the note treats with substance. ### Three qualifying questions Before adding a unit to the manifest, answer all three: 1. **Does it have a stable name?** A recognized term or proper noun — not a sentence ("the argument that..."). Unnamed ideas belong inside another unit. 2. **Does it have depth to accumulate?** If the content would just restate a definition, there's nothing to compile. A unit needs room to grow — mechanisms, tensions, implications, meaning. 3. **Will it recur?** Would this entity appear across notes from different contexts and dates? If yes, it belongs here. One-off references don't. If any answer is no, fold the content into an existing unit instead. ### Granularity calibration **Too broad** — the title is a domain, not an entity ("AI Trends"). Fix: find the specific entity the note actually advances. **Too narrow** — a sub-point or isolated fact with no room to grow. Fix: fold into the relevant unit. **Right size** — something you'd naturally treat as its own subject. One clear defining sentence, and more to say beyond it. ### Split vs. sub-point Create two units when they have **different cores** and would grow independently. Keep as a sub-point when one is an example or implication of the other — separating them would leave both thin. ### Don't add to the manifest - Data points and metrics - Sub-arguments that don't stand alone - Passing references with no analysis ### Output: unit manifest | unit name | entity_type | operation | | -------------- | ------------ | --------- | | \<unit title\> | \<freeform\> | create | | \<unit title\> | \<freeform\> | update | `entity_type` is a short descriptive label for what this entity is (e.g. `person`, `company`, `book`, `concept`, `event`, `technique`). It is freeform metadata — there are no type restrictions and no templates tied to it. The manifest may be empty if the note has no content worth compiling. Immediately continue to Step 4. For every unit marked `update` in the manifest: read its existing file at `<knowledge-dir>/<unit-name>.md` now, before Step 4 begins. Do not proceed to Step 4 until all existing files are loaded. --- ## Step 4 — Compile For each unit in the manifest, check its `operation` and read the corresponding file: - **`create`** → read `references/create.md` and follow it completely. - **`update`** → read `references/update.md` and follow it completely. `references/extract.md` documents partial-read commands (`vaultr extract outline / section / segment / …`). Use them at any step when reading the full note is not necessary. Complete one unit fully before moving to the next. After all units are done, confirm in prose: which were created, which updated, and what changed in each. --- ## Language Match the language of existing units in the knowledge directory. If no units exist, use the language of the source note. Dates in opinion sections always use `YYYY-MM-DD`. When the vault language is not English, translate all section names accordingly. ## Time attribution Knowledge units must anchor time to the **original publication date of the source material**, not the compilation date. - If `source_date` is known: use it when writing any time-sensitive content in the unit (e.g. "as of YYYY-MM-DD", "at the time of publication"). - If `source_date` is unknown: omit the time reference or mark it as "date unknown". Never substitute today's date.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.