Vault Scribe — Obsidian + GitHub Markdown Skill
Creates and edits Markdown that is GitHub-Flavored Markdown (GFM) first, with optional Obsidian-specific extensions when needed. Standard Markdown (headings, bold, italic, lists, quotes, code blocks, tables) is assumed knowledge.
Default rule: Use standard GFM syntax unless the user explicitly requests Obsidian-specific features or is working in an Obsidian-only context. Obsidian wikilinks ([[Note]]) break on GitHub — always prefer standard Markdown links for cross-platform compatibility.
When invoked with an argument (e.g. /vault-scribe meeting), use $ARGUMENTS to determine the note type. If no argument is provided, infer the type from the source material or ask the user.
Workflow: Creating a Note
1. Analyse the Source Material
- Read the full transcript, notes, or brief carefully
- Identify the core topic, intended audience, and key concepts
- Note any implicit structure (e.g., problem → solution → examples)
- Extract any explicit examples, warnings, tips, or quotes worth preserving
2. Generate YAML Front Matter
Reference: See references/FRONT-MATTER.md for the complete schema definitions, all enum values, and type-specific required fields.
First, determine the note type based on what the user is creating:
| If the user wants… |
Set type to |
| A guide, reference doc, or knowledge article |
article |
| A step-by-step instructional guide or procedure |
how-to |
| Architecture docs, RFCs, design docs, system specs |
technical |
| An investigation with multiple sources |
deep-research |
| A versioned plan or strategy document |
strategy |
| Meeting notes, 1:1s, standups, retrospectives |
meeting |
| Brainstorming, ideation, or exploratory thinking (solo or group) |
brainstorming |
[!TIP]
Brainstorming is its own note type. It works for group sessions (add attendees and meeting_date) and solo AI ideation (omit them). Add sources when the brainstorm draws on external references.
Then apply the corresponding frontmatter schema from references/FRONT-MATTER.md. Every note type uses the core fields plus any type-specific required fields.
Tag guidelines:
- Use lowercase, hyphenated slugs only (e.g.
distributed-systems, not Distributed Systems)
- Include 4–8 tags: topic-specific first, then broader domain tags
- Always include at least one technology tag and one domain/concept tag
3. Structure the Document Body
Use this hierarchy:
# Title (H1) — matches front matter title
## Section (H2) — major topic areas
### Subsection (H3) — specific concepts within a section
Target sections (adapt names to the topic):
- Overview / What is X? — define the subject clearly
- How It Works — mechanics, process, or architecture
- Practical Examples — concrete code blocks or walkthroughs
- Common Mistakes / Warnings — callout blocks
- Quick-Start / Checklist — actionable summary
- Further Reading & References — links table
[!NOTE]
Minimum 4 sections (Overview, How It Works, Examples, References) for all notes. The full 6 sections are the target for comprehensive articles and guides. Simpler note types (meetings) naturally use fewer sections.
4. Apply Callout Blocks
Use GFM Alerts by default (renders on both GitHub and Obsidian). See references/CALLOUTS.md for the full list of callout types including Obsidian-only variants.
| Callout Type |
Use For |
[!NOTE] |
Neutral supplementary info |
[!TIP] |
Actionable best practice |
[!IMPORTANT] |
Key concept the reader must not miss |
[!WARNING] |
Common mistake or gotcha |
[!CAUTION] |
Risk of data loss, security issue, or breaking change |
[!TIP]
Every Warning, Tip, and TL;DR should be a callout block — not plain prose. This makes the document scannable.
5. Code Blocks
Always use fenced code blocks with a language identifier:
```yaml
key: value
```
```bash
mkdir -p ~/.claude/skills/my-skill
```
For directory trees, use plain text or no language tag.
6. Table of Contents
Never use [TOC], [[_TOC_]], or any other TOC directive — neither GitHub nor Obsidian supports them natively. They render as broken plain text.
- GitHub auto-generates a TOC in the sidebar — no directive needed.
- Obsidian generates one via its built-in plugin — no directive needed.
- Only add a manual TOC (using standard anchor links) when the document has 6+ sections and will be read outside a browser. See
references/MARKDOWN-SYNTAX.md for anchor rules and an example.
7. Tables & Links
Use Markdown tables for comparisons, option lists, and reference links. Always include a reference links table at the end:
| Resource | Link |
|---|---|
| Official Docs | [docs.example.com](https://docs.example.com) |
| Source Video | [youtube.com/watch?v=...](https://youtube.com/watch?v=...) |
8. Inline Formatting Rules
| Element |
Usage |
**bold** |
Key terms on first use, critical values |
*italic* |
Titles of external resources, emphasis |
`code` |
All file paths, commands, config keys, code symbols |
[[wikilink]] |
Internal Obsidian links (only if Obsidian-only context) |
9. Transcript Appendix
When the source material includes a transcript (video, podcast, meeting recording, article), always append the raw transcript at the very end of the document, after all other content, using this exact format:
---
## Transcript
Transcript from: [<name of video or article or meeting>](<link to source>)
Date of material: <YYYY-MM-DD>
\```
<raw transcript>
\```
- The transcript section is separated from the rest of the document by a horizontal rule (
---)
- The source name must be a clickable Markdown link when a URL is available
- If no URL exists, use plain text for the name
- Date should be in
YYYY-MM-DD format when known; leave blank if unknown
- Before appending, scan the transcript for sensitive values and replace each match with
[REDACTED]. Patterns to detect (case-insensitive):
- API keys and tokens: strings matching
sk-[A-Za-z0-9]{20,}, AKIA[A-Z0-9]{16}, AIza[0-9A-Za-z\-_]{35}, ghp_[A-Za-z0-9]{36}, Bearer [A-Za-z0-9\-._~+/]+=*
- Passwords in URLs:
://[^:]+:[^@]+@ (replace the password segment only)
- Connection strings: DSN-style strings containing
password=, pwd=, passwd= followed by a value
- Private key blocks: anything between
-----BEGIN ... KEY----- and -----END ... KEY-----
- Generic high-entropy secrets: any token-like value assigned to a key named
key, secret, token, password, passwd, pwd, credential, or api_key (case-insensitive)
- If no sensitive patterns are found, content is preserved unchanged
- The raw transcript goes inside a fenced code block with no language tag
Output Requirements
- File extension:
.md
- Encoding: UTF-8
- Front matter: Always present, always first
- Minimum sections: 4 (Overview, How It Works, Examples, References). Target 6 for comprehensive articles.
- All external URLs must be real and formatted as
[label](url)
- No bare URLs — always wrapped in Markdown link syntax
- End the document with an
[!abstract] callout containing the TL;DR (before the Transcript appendix, if present)
Quality Checklist
Before finalising the output, verify:
Reference Files
references/FRONT-MATTER.md — Complete frontmatter schemas for all note types, enum values for type, category, and status, and type-specific required/optional fields. Always consult this file when generating front matter.
references/CALLOUTS.md — GFM Alerts (default) and Obsidian callout types, foldable/nested syntax, aliases, and custom CSS callouts.
references/EMBEDS.md — Standard GFM image syntax (default) and Obsidian-specific embed syntax for notes, images, audio, and PDFs.
references/MARKDOWN-SYNTAX.md — Detailed GFM + Obsidian syntax reference for links, tags, comments, highlighting, math, diagrams, footnotes, and the compatibility matrix.
examples/ — Example output files showing correctly formatted notes for different note types.
References
1---2name: vault-scribe3description: Converts transcripts, video summaries, meeting notes, brainstorming sessions, strategy documents, and rough notes into polished Obsidian-flavored Markdown. Activates when creating or editing notes in an Obsidian vault, generating front matter, applying callout blocks, structuring knowledge base articles, or producing developer-facing guides. Also triggers on mentions of Obsidian, front matter, callout blocks, vault organisation, or requests for GitHub-compatible Markdown documents.4---56# Vault Scribe — Obsidian + GitHub Markdown Skill78Creates and edits Markdown that is **GitHub-Flavored Markdown (GFM) first**, with optional Obsidian-specific extensions when needed. Standard Markdown (headings, bold, italic, lists, quotes, code blocks, tables) is assumed knowledge.910> **Default rule:** Use standard GFM syntax unless the user explicitly requests Obsidian-specific features or is working in an Obsidian-only context. Obsidian wikilinks (`[[Note]]`) break on GitHub — always prefer standard Markdown links for cross-platform compatibility.1112When invoked with an argument (e.g. `/vault-scribe meeting`), use `$ARGUMENTS` to determine the note type. If no argument is provided, infer the type from the source material or ask the user.1314---1516## Workflow: Creating a Note1718### 1. Analyse the Source Material1920- Read the full transcript, notes, or brief carefully21- Identify the **core topic**, intended **audience**, and **key concepts**22- Note any implicit structure (e.g., problem → solution → examples)23- Extract any explicit examples, warnings, tips, or quotes worth preserving2425### 2. Generate YAML Front Matter2627> **Reference:** See `references/FRONT-MATTER.md` for the complete schema definitions, all enum values, and type-specific required fields.2829**First, determine the note `type`** based on what the user is creating:3031| If the user wants… | Set `type` to |32|---|---|33| A guide, reference doc, or knowledge article | `article` |34| A step-by-step instructional guide or procedure | `how-to` |35| Architecture docs, RFCs, design docs, system specs | `technical` |36| An investigation with multiple sources | `deep-research` |37| A versioned plan or strategy document | `strategy` |38| Meeting notes, 1:1s, standups, retrospectives | `meeting` |39| Brainstorming, ideation, or exploratory thinking (solo or group) | `brainstorming` |4041> [!TIP]42> **Brainstorming** is its own note type. It works for group sessions (add `attendees` and `meeting_date`) and solo AI ideation (omit them). Add `sources` when the brainstorm draws on external references.4344Then apply the corresponding frontmatter schema from `references/FRONT-MATTER.md`. Every note type uses the **core fields** plus any **type-specific required fields**.4546**Tag guidelines:**47- Use lowercase, hyphenated slugs only (e.g. `distributed-systems`, not `Distributed Systems`)48- Include 4–8 tags: topic-specific first, then broader domain tags49- Always include at least one technology tag and one domain/concept tag5051### 3. Structure the Document Body5253Use this hierarchy:5455```56# Title (H1) — matches front matter title57## Section (H2) — major topic areas58### Subsection (H3) — specific concepts within a section59```6061**Target sections** (adapt names to the topic):621. **Overview / What is X?** — define the subject clearly632. **How It Works** — mechanics, process, or architecture643. **Practical Examples** — concrete code blocks or walkthroughs654. **Common Mistakes / Warnings** — callout blocks665. **Quick-Start / Checklist** — actionable summary676. **Further Reading & References** — links table6869> [!NOTE]70> **Minimum 4 sections** (Overview, How It Works, Examples, References) for all notes. The full 6 sections are the target for comprehensive articles and guides. Simpler note types (meetings) naturally use fewer sections.7172### 4. Apply Callout Blocks7374Use GFM Alerts by default (renders on both GitHub and Obsidian). See `references/CALLOUTS.md` for the full list of callout types including Obsidian-only variants.7576| Callout Type | Use For |77|---|---|78| `[!NOTE]` | Neutral supplementary info |79| `[!TIP]` | Actionable best practice |80| `[!IMPORTANT]` | Key concept the reader must not miss |81| `[!WARNING]` | Common mistake or gotcha |82| `[!CAUTION]` | Risk of data loss, security issue, or breaking change |8384> [!TIP]85> Every Warning, Tip, and TL;DR should be a callout block — not plain prose. This makes the document scannable.8687### 5. Code Blocks8889Always use fenced code blocks with a language identifier:9091````markdown92```yaml93key: value94```9596```bash97mkdir -p ~/.claude/skills/my-skill98```99````100101For directory trees, use plain `text` or no language tag.102103### 6. Table of Contents104105**Never use `[TOC]`, `[[_TOC_]]`, or any other TOC directive** — neither GitHub nor Obsidian supports them natively. They render as broken plain text.106107- GitHub auto-generates a TOC in the sidebar — no directive needed.108- Obsidian generates one via its built-in plugin — no directive needed.109- Only add a **manual** TOC (using standard anchor links) when the document has 6+ sections and will be read outside a browser. See `references/MARKDOWN-SYNTAX.md` for anchor rules and an example.110111### 7. Tables & Links112113Use Markdown tables for comparisons, option lists, and reference links. Always include a reference links table at the end:114115```markdown116| Resource | Link |117|---|---|118| Official Docs | [docs.example.com](https://docs.example.com) |119| Source Video | [youtube.com/watch?v=...](https://youtube.com/watch?v=...) |120```121122### 8. Inline Formatting Rules123124| Element | Usage |125|---|---|126| `**bold**` | Key terms on first use, critical values |127| `*italic*` | Titles of external resources, emphasis |128| `` `code` `` | All file paths, commands, config keys, code symbols |129| `[[wikilink]]` | Internal Obsidian links (only if Obsidian-only context) |130131### 9. Transcript Appendix132133When the source material includes a transcript (video, podcast, meeting recording, article), **always** append the raw transcript at the very end of the document, after all other content, using this exact format:134135```markdown136---137138## Transcript139140Transcript from: [<name of video or article or meeting>](<link to source>)141Date of material: <YYYY-MM-DD>142143\```144<raw transcript>145\```146```147148- The transcript section is separated from the rest of the document by a horizontal rule (`---`)149- The source name must be a clickable Markdown link when a URL is available150- If no URL exists, use plain text for the name151- Date should be in `YYYY-MM-DD` format when known; leave blank if unknown152- Before appending, scan the transcript for sensitive values and replace each match with `[REDACTED]`. Patterns to detect (case-insensitive):153 - API keys and tokens: strings matching `sk-[A-Za-z0-9]{20,}`, `AKIA[A-Z0-9]{16}`, `AIza[0-9A-Za-z\-_]{35}`, `ghp_[A-Za-z0-9]{36}`, `Bearer [A-Za-z0-9\-._~+/]+=*`154 - Passwords in URLs: `://[^:]+:[^@]+@` (replace the password segment only)155 - Connection strings: DSN-style strings containing `password=`, `pwd=`, `passwd=` followed by a value156 - Private key blocks: anything between `-----BEGIN ... KEY-----` and `-----END ... KEY-----`157 - Generic high-entropy secrets: any token-like value assigned to a key named `key`, `secret`, `token`, `password`, `passwd`, `pwd`, `credential`, or `api_key` (case-insensitive)158- If no sensitive patterns are found, content is preserved unchanged159- The raw transcript goes inside a fenced code block with no language tag160161---162163## Output Requirements164165- File extension: `.md`166- Encoding: UTF-8167- Front matter: Always present, always first168- Minimum sections: 4 (Overview, How It Works, Examples, References). Target 6 for comprehensive articles.169- All external URLs must be real and formatted as `[label](url)`170- No bare URLs — always wrapped in Markdown link syntax171- End the document with an `[!abstract]` callout containing the TL;DR (before the Transcript appendix, if present)172173---174175## Quality Checklist176177Before finalising the output, verify:178179- [ ] Front matter is complete and valid YAML180- [ ] `type` field is set and matches the correct note type schema181- [ ] All type-specific required fields are present (per `references/FRONT-MATTER.md`)182- [ ] Title in front matter matches H1 heading183- [ ] `category` is a valid enum value184- [ ] Tags are lowercase and hyphenated185- [ ] All warnings/tips are callout blocks, not plain paragraphs186- [ ] At least one code block example is present (for articles/guides)187- [ ] A reference links table exists at the end188- [ ] Document closes with an `[!abstract]` callout (before Transcript appendix if present)189- [ ] No bare URLs (all links use `[label](url)` format)190- [ ] `date_created` and `date_updated` are set (use today's date if unknown)191- [ ] If source material includes a transcript, it is appended in the Transcript Appendix format192- [ ] Transcript appendix has been scanned for credentials; any sensitive values are replaced with `[REDACTED]`193194---195196## Reference Files197198- `references/FRONT-MATTER.md` — Complete frontmatter schemas for all note types, enum values for `type`, `category`, and `status`, and type-specific required/optional fields. **Always consult this file** when generating front matter.199- `references/CALLOUTS.md` — GFM Alerts (default) and Obsidian callout types, foldable/nested syntax, aliases, and custom CSS callouts.200- `references/EMBEDS.md` — Standard GFM image syntax (default) and Obsidian-specific embed syntax for notes, images, audio, and PDFs.201- `references/MARKDOWN-SYNTAX.md` — Detailed GFM + Obsidian syntax reference for links, tags, comments, highlighting, math, diagrams, footnotes, and the compatibility matrix.202- `examples/` — Example output files showing correctly formatted notes for different note types.203204---205206## References207208- [GitHub Flavored Markdown Spec](https://github.github.com/gfm/)209- [GitHub Alerts](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts)210- [Obsidian Flavored Markdown](https://help.obsidian.md/obsidian-flavored-markdown)211- [Obsidian Internal Links](https://help.obsidian.md/links)212- [Obsidian Callouts](https://help.obsidian.md/callouts)213- [Obsidian Properties](https://help.obsidian.md/properties)