---
title: "Obsidian Academy — Complete Reference"
description: "All 33 pages of the Obsidian Academy training site, combined into one file."
source: "Obsidian Academy"
source_url: https://obsidian-academy.pages.dev/
saved: 2026-05-16
tags: [obsidian-academy, saved-from-web, complete]
---

# Obsidian Academy — Complete Reference

Saved 2026-05-16 from [https://obsidian-academy.pages.dev](https://obsidian-academy.pages.dev).

## Table of contents

- [Welcome to your Obsidian Academy](#welcome)
- [What is Obsidian, really?](#basics--01-what-is-obsidian)
- [Markdown in 5 minutes](#basics--02-markdown-essentials)
- [Links and backlinks](#basics--03-links-and-backlinks)
- [Tags and frontmatter](#basics--04-tags-and-frontmatter)
- [Plugins and the mobile app](#basics--05-plugins-and-mobile)
- [Sync via Syncthing](#basics--06-sync-via-syncthing)
- [1. Daily Driver](#workflows--01-daily-driver)
- [2. Inbox Zero](#workflows--02-inbox-zero)
- [3. Prep-for (CRM)](#workflows--03-prep-for)
- [4. Meeting Machine](#workflows--04-meeting-machine)
- [5. Content Engine](#workflows--05-content-engine)
- [6. Weekly Review](#workflows--06-weekly-review)
- [7. Research Synthesizer](#workflows--07-research-synthesizer)
- [8. Visual Journal](#workflows--08-visual-journal)
- [9. Spaced Repetition](#workflows--09-spaced-repetition)
- [10. MOC Maintainer](#workflows--10-moc-maintainer)
- [Zettelkasten — atomic notes](#bonus--01-zettelkasten)
- [Dataview Dashboard](#bonus--02-dataview-dashboard)
- [Readwise / Kindle pipeline](#bonus--03-readwise-pipeline)
- [GTD adaptation](#bonus--04-gtd-adaptation)
- [Obsidian Canvas for research](#bonus--05-obsidian-canvas)
- [PARA + Zettelkasten hybrid](#bonus--06-para-zettelkasten-hybrid)
- [Habit tracker + dashboards](#bonus--07-habit-tracker)
- [Smart Connections — AI auto-linking](#bonus--08-smart-connections)
- [My hardware](#setup--01-my-hardware)
- [Skills installed](#setup--02-skills-installed)
- [Mobile sync (Syncthing)](#setup--03-mobile-sync)
- [nano-banana + Gemini key](#setup--04-nano-banana-setup)
- [Skills cheatsheet](#reference--01-skills-cheatsheet)
- [Glossary](#reference--02-glossary)
- [Troubleshooting](#reference--03-troubleshooting)

---

<a id="welcome"></a>

## Welcome to your Obsidian Academy

*A personal training site for your Obsidian + Claude Code + nano-banana stack.*


This site teaches **you** — Justin — how to get the most out of the Obsidian setup you just built. It's written specifically for your vault at `C:\Vault\WhittechAI`, your Galaxy S26+, your ZenBook A16, and the 7 skills you deployed in `~/.claude/skills/`.

It's not a generic Obsidian tutorial. The examples reference your actual folders. The screenshots come from your actual setup. When a workflow says "your inbox", it means `00-Inbox/` in your vault — not somebody else's.

## How to read this site

  ### New to Obsidian?

Start with **Obsidian Basics** in the sidebar. Six short pages — markdown, links, tags, the mobile app, your Syncthing setup.
  ### Already comfortable?

Jump straight to **[[workflows/01-daily-driver|Daily Driver]]** — the morning ritual that powers everything else.
  ### Want power-user tricks?

The **Bonus Workflows** section has 8 patterns from the wider Obsidian community — Zettelkasten, Dataview dashboards, GTD, and more.
  ### Setup questions?

**Setup & Stack** documents your specific deployment — Syncthing, nano-banana, mobile sync, gemini-cli quirks.

## The stack at a glance

| Layer | What it is | Where it lives |
|---|---|---|
| **Vault** | Your knowledge base — plain markdown files | `C:\Vault\WhittechAI` |
| **Obsidian** | The editor and viewer for that vault | Desktop + Galaxy S26+ |
| **Sync** | Syncthing keeps phone and PC identical | LAN (IPv6 direct) |
| **Claude Code** | Runs the skills that automate workflows | Your desktop terminal |
| **Skills** | Plain-text instructions Claude follows | `~/.claude/skills/` |
| **MCP** | Bridge between Claude and the vault | Local REST API plugin |
| **Image gen** | Nano-banana via Gemini CLI for visuals | Free Gemini API tier |

## The 10 core workflows

Ordered by **start here first**:

- **[[workflows/01-daily-driver|1. Daily Driver]]** — Morning daily-note builder — the spine of the whole system
- **[[workflows/02-inbox-zero|2. Inbox Zero]]** — Triage everything in 00-Inbox/
- **[[workflows/03-prep-for|3. Prep-for]]** — One-page briefing on a person before a call
- **[[workflows/04-meeting-machine|4. Meeting Machine]]** — Voice memos or raw notes → structured meeting note
- **[[workflows/05-content-engine|5. Content Engine]]** — Draft a blog post + auto-generate illustrations
- **[[workflows/06-weekly-review|6. Weekly Review]]** — Sunday synthesis of the past 7 days
- **[[workflows/07-research-synthesizer|7. Research Synthesizer]]** — Literature-review style MOC from raw clips
- **[[workflows/08-visual-journal|8. Visual Journal]]** — One AI-generated image per day of your year
- **[[workflows/09-spaced-repetition|9. Spaced Repetition]]** — Auto-flashcards from #learn tagged notes
- **[[workflows/10-moc-maintainer|10. MOC Maintainer]]** — Weekly rebuild of folder index notes

---

## 📦 Take the whole thing offline

Three ways to bring this whole site into your vault or onto your device.

  ### Download as a vault folder (.zip)

Every page as a separate Markdown note, organized into `basics/`, `workflows/`, `bonus/`, etc. Internal links use Obsidian `[[wiki-link]]` syntax — the graph view works after import. Drop the unzipped folder into `40-Resources/obsidian-academy/`.

    [[downloads/obsidian-academy.zip|⬇️ obsidian-academy.zip]]
  ### Download as one big Markdown file

All 33 pages concatenated into a single `.md` with a clickable table of contents. Easier to share or skim linearly. ~100 KB.

    [[downloads/obsidian-academy-all|⬇️ obsidian-academy-all.md]]
  ### Install as a phone app (PWA)

Open this site on your Galaxy S26+ in Chrome → ⋮ menu → **"Add to Home Screen"**. Lands as an icon. Tap it like an app. Works offline after first visit.

> Every individual page also has a **"Save to vault"** button in the top-right that downloads just that page as Markdown.

---

> **One rule.** Don't try to learn this all in one sitting. Pick a workflow that solves a real problem you have today. Use it for a week. Then come back.



---



# Obsidian Basics


<a id="basics--01-what-is-obsidian"></a>

## What is Obsidian, really?

*It's just a folder of markdown files. You own everything.*


Obsidian is two things:

1. **A folder of plain markdown files on your hard drive** — yours, portable, editable in any text editor.
2. **A friendly editor that links those files together** with backlinks, graph view, and plugins.

That's it. There's no proprietary database. No cloud account required. No vendor lock-in. If Obsidian disappeared tomorrow, your notes would still open in VS Code, Notepad, or any text editor.

## Your specific setup

Your vault lives at:

```
C:\Vault\WhittechAI
```

Open File Explorer and navigate there. You'll see folders like `00-Inbox`, `10-Daily`, `20-Projects`. Each one contains `.md` files — plain text with light formatting. Open any of them in Notepad. You'll see:

```markdown
# Today's note

- [ ] Pick up dry cleaning
- [x] Send the proposal

Some thoughts...
```

That's a complete Obsidian note. The hash makes a heading. The bullet-dash-square-bracket makes a task. The rest is prose. No magic.

## Why this matters

Because your notes will outlive any single app. Your vault works:

- **Without internet** — it's all local
- **Without Obsidian** — open the `.md` files in anything
- **Across decades** — markdown predates Obsidian by 20 years and isn't going anywhere
- **Without paying** — Obsidian is free for personal use

Compare to Notion, Roam, Evernote — all proprietary databases. Export and you get a different file format than what you put in. With Obsidian, what you write is what you get.

## The vault as a folder

Your vault is **just a folder**. That has consequences:

- Want to back it up? Copy the folder.
- Want to sync with your phone? Use any file sync tool (you picked Syncthing).
- Want to version it? `git init` inside the folder.
- Want to grep it? `rg "search term" C:\Vault\WhittechAI` works fine.
- Want to programmatically edit it? Any tool that writes text files works — including Claude Code via the Obsidian MCP.

This is why the workflows on this site work. Claude isn't talking to a special API. It's reading and writing `.md` files in a folder, and Obsidian sees the changes instantly.

## What's in a vault

Looking at your `C:\Vault\WhittechAI` right now:

```
00-Inbox/          Stuff to triage
10-Daily/          One note per day
20-Projects/       Active work
30-Areas/          Ongoing responsibilities
40-Resources/      Reference material
50-Archive/        Done / dead
60-People/         Personal CRM
70-Meetings/       Meeting notes
80-Content/        Drafts + published
90-Templates/      Note skeletons
_setup/            How this stack works
```

That's a vault. Numbered folders so they sort alphabetically. PARA-ish, with extras.

## Next

Now you know what Obsidian is. Continue to [[basics/02-markdown-essentials|Markdown in 5 minutes]] to learn how to actually write notes that look good.



---


<a id="basics--02-markdown-essentials"></a>

## Markdown in 5 minutes

*Just enough markdown to write Obsidian notes that look good.*


Markdown is plain text with light formatting symbols. Obsidian renders them visually. Here's everything you actually need.

## Headings

```md
# H1 — page title
## H2 — section
### H3 — subsection
```

Rule of thumb: one `# H1` per note (it's the title), then `## H2` for major sections, `### H3` for subsections. Don't go deeper than H3 in daily writing.

## Emphasis

```md
*italic* or _italic_
**bold** or __bold__
***bold italic***
~~strikethrough~~
```

## Lists

```md
- bullet
- bullet
  - nested bullet
- bullet

1. numbered
2. numbered
3. numbered
```

## Tasks

```md
- [ ] thing to do
- [x] thing done
- [-] thing cancelled (Obsidian-specific)
- [>] thing forwarded
```

Tasks render with clickable checkboxes in Obsidian. The skills on this site count `- [x]` patterns to track completion.

## Links and images

```md
[link text](https://example.com)
![alt text](path/to/image.png)
```

For images stored in your vault:

```md
![[my-image.png]]
```

The double-bracket syntax is **Obsidian-specific** and works for both files and other notes (next page).

## Code

Inline: `` `code` ``

Block:

````md
```bash
gemini extensions list
```
````

The language hint (`bash`, `python`, `js`) gives you syntax highlighting.

## Quotes

```md
> A blockquote.
> Continues on a new line.

> **Note:** quote with bold callout
```

## Tables

```md
| col 1 | col 2 |
|-------|-------|
| a     | b     |
| c     | d     |
```

Useful but verbose. Don't bother for casual notes.

## Horizontal rule

```md
---
```

A horizontal line. Great for breaking up long notes.

## Frontmatter (YAML at the top)

```md
---
title: My note
tags: [draft, project-x]
date: 2026-05-15
status: active
---

# My note

Content starts here.
```

Frontmatter is metadata. Obsidian plugins (especially Dataview) can query it. The skills on this site use it heavily — e.g., the Visual Journal reads `mood:` and `event:` from your daily note frontmatter.

## What to skip

- HTML inside markdown (works but ugly)
- Markdown extensions you don't recognize (footnotes, definition lists, etc. — niche)
- Trying to remember every detail. You'll absorb it by writing.

## Next

[[basics/03-links-and-backlinks|Links and backlinks]] — the feature that makes Obsidian *Obsidian*.



---


<a id="basics--03-links-and-backlinks"></a>

## Links and backlinks

*The feature that makes Obsidian Obsidian.*


If you only learn one thing about Obsidian beyond markdown, learn linking.

## How to link a note

Type two open square brackets and a note name:

```md
I met with [[Alice Chen]] yesterday.
```

That creates a link to `Alice Chen.md` in your vault. Click it in Obsidian → you jump to that note. The link works even if the note doesn't exist yet — clicking it creates the file.

## Backlinks: the magic part

Open any note. Look at the right sidebar in Obsidian. You'll see a **Backlinks** panel showing every other note that links *to* the one you're viewing.

This is bidirectional. You don't have to manually maintain "see also" sections. If `Daily 2026-05-15.md` mentions `[[Alice Chen]]`, then opening `Alice Chen.md` shows that daily note in its backlinks panel automatically.

That's the whole point. **Linking is cheap. Discovering connections is automatic.**

## Aliases — same note, different names

You'll write about Alice as "Alice", "Alice C.", and "Chen" depending on context. You don't want three different notes. Use aliases in frontmatter:

```md
---
aliases: [Alice, Alice C., Chen]
---

# Alice Chen
```

Now `[[Alice]]` resolves to the same note. Cleaner writing, one canonical source.

## Pipe syntax — show different text

Sometimes you want a link to look natural in a sentence:

```md
I met with [[Alice Chen|Alice]] yesterday.
```

Renders as: "I met with Alice yesterday." The link still points to `Alice Chen.md`.

## The graph view

`Ctrl+G` (or the graph icon in the left sidebar) opens the global graph — every note as a dot, every link as a line. Use it:

- **As pretty art** (it's mesmerizing)
- **To find clusters** — what topics are deeply linked? what's isolated?
- **To find orphans** — disconnected dots are notes nobody links to. Either delete them or add links.

For a single note, the local graph view shows just that note's neighborhood. Useful for browsing.

## Embedding notes inside notes

```md
![[Alice Chen]]
```

The `!` prefix embeds the full content of the linked note inline. Useful for:

- Showing a related note's content without leaving the current note
- Including a "Q1 goals" note inside daily summaries
- Building dashboards (combine with Dataview later)

## Embedding a specific section

```md
![[Alice Chen#Background]]
```

Embeds just the `## Background` section.

## Embedding a block

Highlight a paragraph in any note, right-click → Copy Block Reference. You get something like `^abc123`. Now you can embed it:

```md
![[Alice Chen#^abc123]]
```

The exact paragraph appears, with a permalink. The skills use block references for citing specific claims in research synthesis.

> [!NOTE]
> Don't over-think the linking conventions. Start by linking liberally — every person, project, and concept gets `[[brackets]]`. The graph rewards density.

## Next

[[basics/04-tags-and-frontmatter|Tags and frontmatter]] — the second axis of organization.



---


<a id="basics--04-tags-and-frontmatter"></a>

## Tags and frontmatter

*Two ways to add structure that aren't folders.*


Folders give one place to a note. Tags and frontmatter let a note belong to many things at once.

## Tags — quick and casual

Drop a `#tag` anywhere in a note:

```md
Some thoughts about agents. #ai #learn

#project/whittech
```

Tags can be nested with slashes: `#project/whittech`, `#person/alice`, `#mood/anxious`.

Click any tag in Obsidian → see every note that uses it. The tag pane (left sidebar → tag icon) shows your whole tag tree.

## Frontmatter — structured metadata

YAML block at the top of a note:

```md
---
title: Q2 launch plan
status: active
owner: me
target_date: 2026-06-15
priority: high
tags: [project, q2]
---

# Q2 launch plan
```

Frontmatter is **machine-readable**. Plugins like Dataview can query it. Claude Code reads it. You can build dashboards from it.

## Tags vs frontmatter — when to use which

| Use tags when | Use frontmatter when |
|---|---|
| You want to **categorize** | You want to **describe** |
| Casual, inline | Structured, queryable |
| Examples: `#idea`, `#learn` | Examples: `status: draft`, `due: 2026-06-01` |

Use both. They don't conflict.

## Tags this site uses

The 10 workflows reference these tags in your vault:

- `#learn` — flagged for spaced-repetition card generation
- `#idea` — fleeting ideas in inbox; gets routed to `40-Resources/ideas/`
- `#project/[slug]` — explicit project tagging if folder isn't enough

## Frontmatter the skills look for

| Field | Used by | Purpose |
|---|---|---|
| `date:` | Daily Driver | Note date |
| `mood:`, `energy:`, `event:`, `weather:` | Visual Journal | Image prompt building |
| `status:` | MOC Maintainer | Filter active vs done |
| `tags:` | Multiple | Cross-cutting categorization |
| `aliases:` | Prep-for, Inbox Zero | Match a note by other names |
| `archived:`, `outcome:` | When moving to `50-Archive/` | Searchable archive context |

## Don't go nuts

You'll see Obsidian forum posts about elaborate tag taxonomies with 50 tags and 8 nesting levels. Resist. Start simple:

- 5–10 top-level tags max
- Add nesting only when you have ≥5 notes that need the distinction
- Reuse existing tags before inventing new ones
- Periodically prune (the MOC Maintainer flags stale ones)

## Next

[[basics/05-plugins-and-mobile|Plugins and the mobile app]] — extending Obsidian and using it on your phone.



---


<a id="basics--05-plugins-and-mobile"></a>

## Plugins and the mobile app

*Extending Obsidian + using it on the Galaxy S26+.*


Obsidian out of the box is a markdown editor with backlinks. Plugins turn it into a Swiss army knife.

## Two kinds of plugins

| Type | What they are | Where you find them |
|---|---|---|
| **Core plugins** | Built by Obsidian devs, ship with the app | Settings → Core plugins |
| **Community plugins** | Built by third parties | Settings → Community plugins → Browse |

Core plugins are safe by default. Community plugins are user-contributed — read the readme, check stars, install from the official directory only.

## The 5 community plugins you'll actually use

Install these via Settings → Community plugins → Browse:

| Plugin | What it does | Why you need it |
|---|---|---|
| **Local REST API** | Exposes vault over HTTP | Powers Claude Code's Obsidian MCP |
| **Dataview** | Query frontmatter and tags | Required for several workflows |
| **Templater** | Smarter templates with variables | Better than the built-in template plugin |
| **Tasks** | Advanced task filtering | If you live in checkboxes |
| **Obsidian Git** | Auto-commit to a git repo | Free version history beyond Syncthing's |

You already installed Local REST API (it's what powers the Claude integration). Install Dataview next — several skills on this site degrade without it.

## The mobile app

Install **Obsidian** from the Google Play Store on your Galaxy S26+.

Opens the same vault, same notes. The interface adapts to touch:

- Sidebar swipes from the left
- Long-press a note for options
- Pin notes to the home screen as Android shortcuts
- Quick capture: home screen widget for "new note" or "append to today's daily note"

> [!NOTE]
> **Community plugins on mobile** — most work, but some don't (the ones that depend on Node APIs). Dataview, Templater, Tasks all work on mobile. Local REST API doesn't need to — your phone hits the desktop's API via Syncthing-pushed files, not directly.

## Mobile-specific gotchas

- **Frontmatter editor** — the mobile UI for editing frontmatter is clumsier than desktop. Edit YAML in source mode if you're picky.
- **Plugin install location** — community plugins must be re-enabled on the mobile install (the vault syncs them but they're disabled by default to be safe).
- **Performance** — vaults with 5000+ notes can be slow on mobile. Yours is small (~30 files), no problem.

## What's NOT on mobile

- Custom CSS snippets (the `.obsidian/snippets/` files don't apply on mobile)
- Some advanced themes (most do work though)
- Anything that needs a terminal — Claude Code runs only on desktop

## Quick capture from your phone

Two flows:

1. **Open Obsidian → tap + (new note) → type → save** — appears in `00-Inbox/` after sync (or wherever you tell it; configure default new-file location in Settings → Files & Links)
2. **Bixby Routine or HTTP Shortcut** → POST to `00-Inbox/inbox.md` via the Local REST API (covered in [[setup/03-mobile-sync|Setup → Mobile sync]])

## Next

[[basics/06-sync-via-syncthing|Sync via Syncthing]] — how your desktop vault stays mirrored with your phone.



---


<a id="basics--06-sync-via-syncthing"></a>

## Sync via Syncthing

*Your desktop vault and Galaxy S26+ stay mirrored automatically.*


Your vault lives on the ZenBook A16 at `C:\Vault\WhittechAI`. Your phone has a copy at `/storage/emulated/0/Documents/Obsidian/WhittechAI`. Syncthing keeps them identical. No cloud, no monthly fee, no Apple/Google account required.

## The mental model

- **Syncthing runs as a daemon on both sides** (desktop + phone)
- **Both daemons know each other** (paired by Device ID)
- **They watch the vault folder** and broadcast changes
- **Files appear on the other side** within ~30 seconds on LAN

When you edit a note on your phone, your phone's Syncthing notifies your PC's Syncthing, which pulls the change. Same in reverse. Conflicts are rare on a vault with one user but happen — Syncthing creates `~conflict~` files when they do.

## What's running on your machine right now

On your ZenBook A16:

- **`syncthing.exe`** (native ARM64 from winget package `Syncthing.Syncthing`) — the daemon. Runs at `localhost:8384` web UI.
- **Syncthing Tray** (native ARM64 from `Martchus.syncthingtray`) — system-tray UI. Optional but nice.
- **Auto-start shortcuts** in `%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\` — both above launch on login.

On your Galaxy S26+:

- **Syncthing-Fork** (from F-Droid) — the Android daemon. Set to **"Force start, ignore run conditions"** so Samsung's battery optimization doesn't suspend it.

## Verifying sync works

1. On PC: edit `00-Inbox/inbox.md`, append a line, save
2. Wait 15–30 seconds
3. On phone: open `00-Inbox/inbox.md` in Obsidian — line appears
4. Reverse direction works the same way

If sync stalls:

- Check Syncthing-Fork on phone: status should be **green** circle. Yellow = idle / not connected. Red = stopped.
- Check Syncthing web UI on PC (`http://127.0.0.1:8384`) under "Other Devices" — phone should show **Connected**.
- If both look fine but sync is stale: restart Syncthing on either side.

## Conflicts

If you edit the same note on both devices simultaneously (or one is offline and you edit both):

- Syncthing creates a `note name~conflict~timestamp.md` file
- You merge manually, then delete the conflict file
- This is rare on a single-user vault but happens after Wi-Fi drops

Best practice: **pick a lead device at any given moment.** If you're at your PC, don't edit from the phone too.

## What Syncthing doesn't do

- **Doesn't sync over the public internet without help.** Same WiFi = direct TCP. Different networks = falls back to relay servers (works but slower). For best results across networks, install [[setup/04-remote-access-tailscale|Tailscale]] to put both devices on a private virtual network.
- **Doesn't version your files.** Use Obsidian Git plugin or just `git init` in the vault folder if you want version history.
- **Doesn't back up.** If both devices' copies die, your vault is gone. Add a third sync target (a NAS, a friend's PC, a cloud bucket via Remotely Save) for backup.

> [!NOTE]
> **On Samsung specifically:** the One UI battery optimizer is aggressive. If sync stops working overnight, check Syncthing-Fork's status — likely Samsung suspended it. Use Settings → Apps → Syncthing-Fork → Battery → **Unrestricted** and add it to "Never sleeping apps".

## What's in this folder for you

Inside your vault is a `_setup/` folder I created with three Markdown guides:

- `_setup/mobile-sync.md` — the full setup walkthrough you already followed
- `_setup/remote-access-tailscale.md` — for syncing when off-network
- `_setup/ios-shortcut-capture.md` — analogous Bixby Routine pattern for Android quick capture

These are living docs inside the vault, so they're available on your phone too.

## Next

You've completed Obsidian Basics. Continue to the [[workflows/01-daily-driver|10 Core Workflows →]] section. Start with **Daily Driver**.



---



# 10 Core Workflows


<a id="workflows--01-daily-driver"></a>

## 1. Daily Driver

*Morning daily-note builder — the spine of the whole system.*


**TL;DR** — Say "good morning" to Claude Code and it builds today's daily note in `10-Daily/` with yesterday's carry-over tasks, your top 3 priorities, and a snapshot of what's waiting in your inbox. Used every weekday morning. Takes ~10 seconds.

This is the workflow you'll use most. Get this one right and the rest of the system has a spine.

## When to use it

- First thing in the morning, before email
- After a multi-day gap (weekend, travel) — it'll consolidate carry-overs
- When you want a clean starting page for the day without manual setup

> **Try it now:** `"good morning"`
>
> Open Claude Code in your `WhittechAI` vault and type that phrase. The skill triggers on variants too: *"start my day"*, *"build today's note"*, *"daily driver"*.

The skill will:

1. Read yesterday's note from `10-Daily/`
2. Pull anything from `00-Inbox/` that hasn't been triaged
3. Scan recent changes in `20-Projects/` for momentum signals
4. Write today's note to `10-Daily/YYYY-MM-DD.md`

A new note appears in your file tree. Open it. That's your dashboard for the day.

## Under the hood

- **Skill location:** `~/.claude/skills/daily-driver/SKILL.md`
- **Reads:**
  - `10-Daily/[yesterday].md` — for carry-over tasks and tomorrow's #1
  - `00-Inbox/inbox.md` + `00-Inbox/*` — for surfaced inbox items
  - `obsidian_get_recent_changes` — last 2 days, top 10 files
- **Writes:** one file — `10-Daily/YYYY-MM-DD.md`
- **Template source:** `90-Templates/daily.md`
- **Doesn't chain** other skills, but its output is read by [[workflows/06-weekly-review|Weekly Review]] on Sundays.

## Watch out for

- **First run after a weekend** can be noisy — it'll surface 3+ days of carry-over. That's correct behavior, not a bug.
- **On mobile**, Claude Code runs on your desktop. Trigger it before you leave home, and Syncthing pushes the note to your Galaxy S26+ within ~30 seconds.
- **Missing yesterday note:** if you skipped a day, it'll look back up to 7 days. Beyond that, you get a blank slate — by design.
- **`obsidian_get_recent_changes` errors** mean Dataview isn't installed in Obsidian. Install it from Community Plugins to fix.

## Make it yours

- **Change the wake phrase:** edit the `description:` line in the skill's frontmatter to add a phrase like "punch in" or "let's go".
- **Change the note layout:** edit `90-Templates/daily.md`. Every future daily note picks up your changes — Workout, Reading, Meditation sections, whatever you want.
- **Stack it:** run "good morning" then immediately "process my inbox" — your day is now planned + zeroed in 60 seconds.

## Related workflows

- **[[workflows/02-inbox-zero|Inbox Zero]]** — Natural next step after your morning note exists
- **[[workflows/06-weekly-review|Weekly Review]]** — Consumes a week of these daily notes every Sunday



---


<a id="workflows--02-inbox-zero"></a>

## 2. Inbox Zero

*Triage everything in 00-Inbox/ — classify, expand, file.*


**TL;DR** — Run "process my inbox" and Claude reads every file in `00-Inbox/`, classifies each item (task, idea, person, meeting note, web clip, voice memo), expands shorthand into real notes, and files them to the right folder. Inbox returns to empty.

This is the workflow that keeps friction-free capture *also* friction-free to use. You dump anything into `00-Inbox/` from any device. Claude sorts it later.

## When to use it

- End of day, after capturing throughout
- Whenever the inbox starts to feel cluttered (more than 5–10 items)
- After a phone-heavy day where you've been dropping things from Syncthing
- When you have 5 minutes and don't want to think about *where* a thought belongs

> **Try it now:** `"process my inbox"`
>
> Triggers on *"inbox zero"*, *"triage"*, *"clear my inbox"* too.

For each item Claude finds, it'll propose a destination — task, idea, person, meeting, etc. — and show you the plan before executing. If items are obvious, it just files them. For ambiguous ones, it asks one batched question with 2–3 options.

## Under the hood

- **Skill location:** `~/.claude/skills/process-inbox/SKILL.md`
- **Reads:** `00-Inbox/` (every file except `README.md`)
- **Writes:** various — depends on classification:
  - **Tasks** → appended to today's daily note (`10-Daily/YYYY-MM-DD.md`)
  - **Ideas** → expanded note in `40-Resources/ideas/`
  - **Web clips / references** → `40-Resources/[topic]/`
  - **Person mentions** → `60-People/[name].md` (uses `90-Templates/person.md` if creating)
  - **Project updates** → `20-Projects/[project]/log.md`
  - **Meeting raw notes** → routes to `process-meeting` skill
- **Deletes:** source file from `00-Inbox/` only after successful write elsewhere

## Watch out for

- **Stream files like `inbox.md`** — they're parsed entry-by-entry. After processing, the file is cleared back to its stub.
- **Voice memos** in `00-Inbox/voice/` — if it's just an audio file with no transcript, the skill flags it and recommends running transcription separately.
- **Empty files** get deleted silently.
- **Old unprocessed items** (>30 days, seen multiple times) get moved to `50-Archive/inbox-unprocessed/` with a warning. The system tells you you've been ignoring stuff.
- **Big batches** (20+ items) won't auto-process — the skill shows the plan first and waits for your nod.

## Make it yours

- **Add a category:** edit the skill to add e.g. "recipe" routing to `40-Resources/recipes/`.
- **Auto-process small batches:** add a setting in your prompt — "process my inbox, auto-file anything under 5 items".
- **Skip certain files:** add a frontmatter `pin: true` to any inbox file you want to keep for review later.

## Related workflows

- **[[workflows/01-daily-driver|Daily Driver]]** — Run this right after the morning note builds
- **[[workflows/04-meeting-machine|Meeting Machine]]** — Where raw meeting notes from the inbox go



---


<a id="workflows--03-prep-for"></a>

## 3. Prep-for (CRM)

*One-page briefing on a person before a call.*


**TL;DR** — Say "prep for [Name]" and Claude assembles their `60-People/` note, the last 3 meetings with them, recent vault mentions, and open threads into a one-page briefing displayed in chat. The briefing is ephemeral by default — your prep, not a saved artifact.

The point: walk into every call already remembering what you said you'd do, what they care about, and what's open between you.

## When to use it

- 5 minutes before a call you actually care about
- The morning of a recurring 1:1
- After a long gap with someone — refresh your memory
- Before sending a high-stakes message (so the message lands in their context, not yours)

> **Try it now:** `"prep for Alice"`
>
> Substitute the actual name. Variants that trigger: *"brief me on Alice"*, *"what do I know about Alice"*, *"I have a call with Alice"*.

You get back:

- Their role, org, relationship, last contact
- Context for this call (Claude infers from your calendar or asks)
- Recent threads (open items from past convos)
- What they care about (patterns from past notes)
- Mutual interests
- Open asks (their asks to you, your asks to them)
- Things to ask them this time
- A suggested opener — a specific, contextual hook for the first 30 seconds

## Under the hood

- **Skill location:** `~/.claude/skills/prep-for/SKILL.md`
- **Reads:**
  - `60-People/[name].md` — primary source
  - `70-Meetings/*` — searched for the name, last 90 days
  - All daily notes + project notes for incidental mentions (last 60 days)
- **Writes:** nothing by default. Display in chat.
- **Optional save:** if you ask, it writes to `70-Meetings/YYYY-MM-DD-prep-[name].md`.

## Watch out for

- **No person note exists** → the skill offers to create a stub from `90-Templates/person.md`. Say yes — even an empty stub anchors future mentions.
- **Ambiguous name** (two Alexes?) → it asks which one. Save it the trouble by using last initials in your person notes (`Alex K.md`, `Alex T.md`).
- **No recent meetings** → still useful, just lighter. The "things to ask" section pulls from longer-tail vault mentions.
- **Don't fabricate.** The skill is instructed to say "no record of this" instead of inventing context. Trust missing data — it's information too.

## Make it yours

- **Different audience templates:** create `prep-for-executive`, `prep-for-customer`, `prep-for-candidate` variants that emphasize different sections (e.g., customer prep weighs revenue + product feedback heavier).
- **Auto-trigger from calendar:** if you integrate a calendar MCP later, set the skill to auto-prep for any meeting starting in the next 30 minutes.
- **Tighten the briefing:** strip sections you never use (e.g., remove "mutual interests" if you're prep'ing a customer call).

## Related workflows

- **[[workflows/04-meeting-machine|Meeting Machine]]** — Captures the meeting itself; feeds future prep-fors
- **[[workflows/02-inbox-zero|Inbox Zero]]** — Routes person mentions into 60-People/



---


<a id="workflows--04-meeting-machine"></a>

## 4. Meeting Machine

*Voice memo or raw notes → structured meeting note with action items.*


**TL;DR** — Drop messy notes or a voice transcript into chat. Claude structures it into a real meeting note in `70-Meetings/` with agenda, decisions, action items (owned by `@me` or `@person`), and links to the people it mentions. Your `@me` actions also land in today's daily note.

You stop losing the "what we said we'd do" half of meetings.

## When to use it

- Right after a call, while it's fresh
- Processing a Granola/Fireflies transcript
- Cleaning up notes you typed mid-call (or someone else did)
- Voice-memo'd thoughts on the drive home

> **Try it now:** `"process this meeting"`
>
> Then paste the notes or transcript. Triggers also on *"I just got off a call with X about Y"* or *"process the voice memo"*.

What you get:

- Metadata: date, attendees, topic, project (if mentioned)
- **Discussion** — synthesized by topic, not transcribed chronologically
- **Decisions** — explicit yes/no calls
- **Action items** with owner + ideal deadline
- **Follow-ups** — open questions, things to research
- **To send** — `@other` actions you owe a follow-up message on

## Under the hood

- **Skill location:** `~/.claude/skills/process-meeting/SKILL.md`
- **Reads:** raw input (pasted or file at provided path); `60-People/*` to cross-link attendees; `20-Projects/*` to detect project mentions
- **Writes:**
  - `70-Meetings/YYYY-MM-DD-[topic-slug].md` — primary artifact
  - Today's daily note — appends `@me` actions to your task list
  - `20-Projects/[project]/log.md` — appends a "Last meeting: [[link]]"
  - `60-People/[name].md` — appends a "Last meeting" reference

## Watch out for

- **No clean transcript?** Just paste your raw notes. The skill works from anything — bullet fragments, full transcripts, scattered thoughts.
- **Multiple Alexes** — same fix as Prep-for: use last initials in `60-People/`.
- **`@me` overload** — if every meeting generates 5 actions and you do this daily, your daily note becomes a wall of tasks. Limit to top 3 explicit commitments; defer "nice to do" to project notes.
- **Voice memos with no transcript** — the skill flags them. Use a separate transcription tool first (Whisper, MacWhisper, etc.) and feed it the text.

## Make it yours

- **Customer call template:** create `process-customer-meeting` that emphasizes pain points, objections, product feedback, and feeds into a customer health note.
- **1:1 template:** highlight career topics, blockers, and personal context separately.
- **Auto-send drafts:** integrate with Gmail/Slack MCPs so "To send" items become drafted messages — but never auto-sent.

## Related workflows

- **[[workflows/03-prep-for|Prep-for]]** — The before; this is the after
- **[[workflows/02-inbox-zero|Inbox Zero]]** — Routes voice memos from 00-Inbox/voice/ to this skill



---


<a id="workflows--05-content-engine"></a>

## 5. Content Engine

*Draft a post from your notes + auto-generate featured + inline illustrations.*


**TL;DR** — Say "write a blog post about X". Claude searches your vault for related notes, drafts the post, calls nano-banana for a featured image + inline illustrations, saves everything to `80-Content/drafts/`, and optionally generates Twitter/LinkedIn variants. You go from "I should write about this" to "I have a publishable draft with art" in ~5 minutes.

This is the workflow that converts your vault into output. Without it, you're just hoarding notes.

## When to use it

- You've been mulling a topic and want a real draft
- A meeting or a thread you saw sparked an opinion worth sharing
- You need a thumbnail/featured image for something you've already drafted
- Quarterly newsletter time — synthesize a month of notes into a piece

> **Try it now:** `"write a blog post about claude code for solo developers"`
>
> Trigger phrases: *"draft an article on X"*, *"content engine"*, *"make a thread about X"*. Length defaults to medium (~800 words); say "long" or "short" to override.

What happens:

1. **Research** — vault search for relevant notes via `obsidian_simple_search`
2. **Outline** — 5-bullet outline shown for your approval (skip with "just write it")
3. **Draft** — full markdown post saved to `80-Content/drafts/YYYY-MM-DD-[slug].md`
4. **Visuals** — featured image (1200×630) + 2–3 inline illustrations to `80-Content/assets/[slug]/`
5. **Variants** (if requested) — Twitter thread + LinkedIn post as sibling files

## Under the hood

- **Skill location:** `~/.claude/skills/content-engine/SKILL.md`
- **Reads:** vault via search; `90-Templates/blog-post.md`
- **Writes:**
  - `80-Content/drafts/YYYY-MM-DD-[slug].md`
  - `80-Content/assets/[slug]/featured.png` + 2-3 inline images
  - Optional: `[slug]-twitter.md`, `[slug]-linkedin.md`
- **Chains:** calls the [[workflows/08-visual-journal|nano-banana]] skill for image generation

## Watch out for

- **Style drift** — first run, ask Claude to use *your* voice samples. Point it at 2-3 existing drafts in `80-Content/published/` and say "match this voice".
- **AI-tells in the draft** — watch for "in today's fast-paced world", "delve", "tapestry", "moreover" — these are banned in the skill. If you see one, the skill needs a tightening pass.
- **Image cost** — free-tier Gemini gives ~500 images/day. A post with 4 images = trivial. Be aware if you batch 50 posts.
- **Embedded image paths** — drafts use relative paths like `../assets/[slug]/featured.png`. If you publish to a CMS, swap with absolute URLs at publish time.

## Make it yours

- **Pick a default style** — once you settle on "flat illustration, minimalist" or "editorial photo", encode it in the skill so you don't pick every time.
- **Build a CTA library** — keep ready-to-go CTAs in `40-Resources/ctas.md`; have the skill pull one based on the post topic.
- **Sequence with publish:** add a step that opens a Ghost/WordPress draft API call once you mark frontmatter `status: ready`.

## Related workflows

- **[[workflows/08-visual-journal|Visual Journal]]** — Different use of the same nano-banana skill
- **[[workflows/07-research-synthesizer|Research Synthesizer]]** — When you want a literature-review style post



---


<a id="workflows--06-weekly-review"></a>

## 6. Weekly Review

*Sunday synthesis of the past 7 days.*


**TL;DR** — Sunday evening, say "weekly review". Claude reads every daily note from the past 7 days, recent project changes, and completed tasks. Produces a single review note in `30-Areas/reviews/` with wins, lessons, themes, missed commitments, and a proposed top-3 for next week.

The point: turn 7 days of operational noise into one signal you'll actually re-read in 6 months.

## When to use it

- Sunday night, before the new week starts
- After a major project ends — do a project-scoped variant
- After a hard week, to keep the lessons rather than the bruises
- Quarterly: stack the four most recent weekly reviews into a quarterly retrospective

> **Try it now:** `"weekly review"`
>
> Variants: *"review my week"*, *"Sunday review"*, *"what happened this week"*. Specify a different week with *"review week of May 5"*.

You get back a review note with:

- 🏆 **Wins** — specific, named (shipped X on Wednesday, not "made progress")
- 🪨 **Stuck on** — items appearing in multiple daily notes without progress
- 📚 **Lessons** — quoted insights from your daily logs
- ⏭️ **Missed / dropped** — tasks that slipped or commitments to others you didn't deliver
- 🔭 **Themes** — recurring topics — what was this week *about*?
- 🎯 **Top 3 for next week** — picks up dropped commitments + continues strongest theme + adds one growth item

## Under the hood

- **Skill location:** `~/.claude/skills/weekly-review/SKILL.md`
- **Reads:**
  - All `10-Daily/YYYY-MM-DD.md` matching the week's range
  - `obsidian_get_recent_changes` (days=7, limit=50)
  - Vault-wide search for `- [x]` completed tasks
- **Writes:** `30-Areas/reviews/YYYY-[W]WW.md` (ISO week number)
- **Doesn't auto-create:** templates use `90-Templates/weekly-review.md`

## Watch out for

- **Sparse weeks** — early weeks have few daily notes. The review will be thinner; that's accurate.
- **Don't sanitize the review.** If a week was hard, the review should say so. Future-you needs honesty, not polish.
- **Themes ≠ events.** One bad day is data; three bad days in a row is a theme. The skill is trained to surface patterns, not anecdotes.
- **Sunday bias** — if Sunday is your worst day (errand chaos), do reviews on Saturday morning instead. Block 20 minutes and treat it as sacred.

## Make it yours

- **Monthly stack:** create `monthly-review` that reads the last 4 weekly reviews and finds higher-order themes.
- **Custom sections:** add Health, Family, Finance subsections — the review surfaces patterns across life areas, not just work.
- **Streaks:** include "consecutive weeks reviewed" as a metric. Gamification has its place.

## Related workflows

- **[[workflows/01-daily-driver|Daily Driver]]** — The input. Feed quality in, get quality reviews out.
- **[[workflows/10-moc-maintainer|MOC Maintainer]]** — Pairs well — run weekly review then rebuild MOCs



---


<a id="workflows--07-research-synthesizer"></a>

## 7. Research Synthesizer

*Literature-review style MOC from raw clips.*


**TL;DR** — Drop 5 articles as web clips in `00-Inbox/`. Say "synthesize [topic]". Claude reads them all, produces a literature-review style Map of Content (MOC) at `40-Resources/[topic].md` with claims attributed to specific sources. You go from a pile of tabs to a referenced synthesis in 10 minutes.

> [!NOTE]
> **Skill status: coming soon.** The `synthesize` skill isn't built yet — this page is the design sketch. Track it in your GitHub issues (or just ask me to build it).

## When to use it

- You're researching a topic across 5+ sources and don't want to lose track of who said what
- Pre-writing a strategy doc / proposal / pitch
- Catching up on a domain you've been ignoring (AI capabilities, market trend, regulation)
- Preparing a briefing for a colleague

> **Try it now:** `"synthesize this topic: agent memory architecture"`
>
> Variants planned: *"research synthesis on X"*, *"do a literature review on X"*.

What the output looks like:

```md
# Agent Memory Architecture — Synthesis

## Key claims

- **Working memory should be ephemeral** ([[Source: anthropic-blog-2026]])
- **Long-term memory benefits from structured retrieval** ([[Source: openai-research-paper]])
- ...

## Where sources agree
...

## Where sources disagree
...

## Open questions
...

## Sources
- [[clip-2026-05-anthropic-memory]]
- [[clip-2026-05-openai-retrieval]]
- ...
```

## Under the hood (design)

- **Skill location (planned):** `~/.claude/skills/synthesize/SKILL.md`
- **Reads:**
  - `00-Inbox/` web clips matching topic keywords
  - Existing `40-Resources/` notes on related topics (for prior knowledge)
- **Writes:**
  - `40-Resources/[topic].md` — the synthesis MOC
  - Optionally moves source clips into `40-Resources/[topic]/sources/`
- **Approach:** every claim gets a source link. No claim without attribution.

## Watch out for (anticipated)

- **Source quality** — synthesis only as good as inputs. Don't synthesize hot takes and expect rigor.
- **AI summarization risk** — the skill will be told to quote-and-attribute, not paraphrase. Watch for misattributed claims.
- **Topic scope** — too narrow (5 sources all making the same point) wastes effort; too broad (50 sources) wastes context.

## Make it yours (planned customizations)

- **Domain-specific templates** — separate styles for academic synthesis vs market research vs technical comparison.
- **Citation format** — choose APA / inline / footnotes depending on output destination.
- **Auto-fetch URLs** — if inbox items are bare URLs, the skill could fetch + clean them via the WebFetch tool first.

## Related workflows

- **[[workflows/05-content-engine|Content Engine]]** — Once you have a synthesis, turn it into a post
- **[[workflows/02-inbox-zero|Inbox Zero]]** — Web clips land here first



---


<a id="workflows--08-visual-journal"></a>

## 8. Visual Journal

*One AI-generated image per day mapped to your mood/event.*


**TL;DR** — Add `mood:` and `event:` frontmatter to your daily note. The `nano-banana` skill generates an abstract image representing that day's state, saves it next to the note as `10-Daily/YYYY-MM-DD.png`, and embeds it. End of year: 365 images that visually map your year.

A low-stakes, high-delight workflow. Don't take it too seriously.

## When to use it

- End of day, when you fill in the evening review section
- Catch-up batch: generate the last week's images on Sunday during weekly review
- Looking back: re-render an old day with a different art style and see how it changes the read

> **Try it now:** `"generate today's visual journal"`
>
> Or: *"make the image for today's daily note"*, *"visual journal Tuesday"*. You can also just embed an `<!-- generate-visual -->` HTML comment in the daily note template and let it auto-trigger.

Frontmatter the skill reads:

```yaml
---
date: 2026-05-15
mood: focused
energy: 8
event: shipped the api refactor
weather: drizzle
---
```

The skill builds a prompt like:

> *"Abstract digital painting. Mood: focused. Energy: high. Visual metaphor: completing a long technical project under soft drizzly light. Soft palette: deep teal, off-white, hint of warm orange. Minimal composition, generous negative space. No text."*

## Under the hood

- **Skill location:** `~/.claude/skills/nano-banana/SKILL.md` (the same skill, different invocation)
- **Reads:** today's `10-Daily/YYYY-MM-DD.md` frontmatter
- **Writes:** `10-Daily/YYYY-MM-DD.png` (~400 KB JPEG/PNG, 1408×768)
- **Tool:** `gemini --yolo "/generate 'prompt'"` under the hood
- **Cost:** ~$0.045–0.07 per image, well within free-tier daily limit

## Watch out for

- **Don't filter for "good" days.** The point is honesty across time. Bad days deserve images too — drab tones tell a story.
- **Style consistency** — pick one art style and stick with it for at least 30 days before changing. Otherwise the gallery looks chaotic, not coherent.
- **Filename ≠ embedded image** — Obsidian Markdown embeds use `![[YYYY-MM-DD.png]]`. The skill adds this for you, but check on first run.
- **Mobile sync size** — Syncthing pushes the PNGs to your S26+. Over a year you'll have ~50–150 MB of journal images. Fine, but plan storage.

## Gallery

End of month / year, build a `40-Resources/visual-journal-YYYY-MM.md` that uses Obsidian's image gallery or the Dataview plugin to show the month's images in a grid. Or use the [[reference/skills-cheatsheet|Gallery component]] on a published version.

## Make it yours

- **Pick a signature palette** — e.g., earth tones, monochrome blue, pastel. Encode in the skill's prompt template.
- **Add a "year-end remix"** workflow that picks the 12 most representative images and lays them out as a poster.
- **Layer text** — version 2: also overlay one word from your evening review onto the image (use the nanobanana extension's `/edit` command).

## Related workflows

- **[[workflows/01-daily-driver|Daily Driver]]** — Provides the daily note this skill reads
- **[[workflows/05-content-engine|Content Engine]]** — Same nano-banana skill, different use case



---


<a id="workflows--09-spaced-repetition"></a>

## 9. Spaced Repetition

*Auto-flashcards from #learn tagged notes.*


**TL;DR** — Tag any note `#learn` and Claude generates 3–5 Q&A flashcards from it in `40-Resources/cards/`. Run "review my cards" and it serves a randomized batch of 10. Forgetful future-you actually retains what current-you reads.

> [!NOTE]
> **Skill status: coming soon.** The `review-cards` skill isn't built yet — this page is the design sketch.

## When to use it

- After finishing a chapter, article, or course
- Vocabulary you keep forgetting (technical terms, language learning, names of people in a new org)
- Anything where you've thought "I should remember this" — tag it `#learn` and move on
- Daily 5-minute review on the phone (read-only, doesn't need typing)

> **Try it now:** `"review my cards"`
>
> Variants planned: *"flashcards please"*, *"quiz me"*. To generate cards: *"make cards from [note name]"*.

What card generation looks like:

Source note (with `#learn` tag):

```md
# Why bidirectional links matter

Bidirectional links in Obsidian work both ways — if note A links to note B,
note B automatically shows A in its backlinks panel. This makes idea
connections discoverable without manual maintenance.
```

Generated cards (in `40-Resources/cards/why-bidirectional-links.md`):

```md
---
source: [[Why bidirectional links matter]]
created: 2026-05-15
---

Q: What's a bidirectional link in Obsidian?
A: A link from note A to note B that automatically appears in B's backlinks.

Q: Why do bidirectional links matter?
A: They make connections discoverable without manual maintenance.

Q: What's the alternative?
A: Manual cross-linking, which silently rots.
```

## Under the hood (design)

- **Skill location (planned):** `~/.claude/skills/review-cards/SKILL.md`
- **Card generation skill (planned):** `~/.claude/skills/make-cards/SKILL.md`
- **Reads:** notes tagged `#learn`; `40-Resources/cards/*` for review batches
- **Writes:** `40-Resources/cards/[slug].md` (one file per source note); appends `review_count` and `last_reviewed` frontmatter to each card after use
- **Algorithm:** simple SRS — cards reviewed less recently surface more often. Don't over-engineer Leitner boxes.

## Watch out for (anticipated)

- **Card quality matters more than quantity.** 3 sharp cards beat 10 fluffy ones.
- **Don't review broken cards.** If you generate cards from a note and they're bad, regenerate — don't review garbage.
- **Mobile-first review session.** Set up the workflow so review works fine on the Galaxy S26+ in the morning. No typing required, just remember-then-flip.

## Make it yours (planned customizations)

- **Card styles** — Q&A, cloze deletion, image occlusion (different note types take different formats).
- **Tag scoping** — `#learn/programming`, `#learn/spanish`, `#learn/people` to filter review sessions.
- **Export to Anki** — generate `.apkg` files for use in the Anki ecosystem.

## Related workflows

- **[[workflows/07-research-synthesizer|Research Synthesizer]]** — After synthesizing, tag the synthesis #learn to seed cards
- **[[workflows/02-inbox-zero|Inbox Zero]]** — Routes #learn-tagged inbox items into Resources



---


<a id="workflows--10-moc-maintainer"></a>

## 10. MOC Maintainer

*Weekly rebuild of folder index notes.*


**TL;DR** — Once a week, Claude rebuilds index notes (Maps of Content) for each top-level vault folder — `00-Inbox.md`, `20-Projects.md`, `60-People.md`, etc. Each MOC lists children, recent activity, and orphan notes that need linking. Your vault stays navigable as it scales.

> [!NOTE]
> **Skill status: coming soon.** The `rebuild-mocs` skill isn't built yet — this page is the design sketch.

## When to use it

- Weekly, as part of your Sunday ritual (right after weekly-review)
- After importing a big chunk of notes (e.g., post-conference dump)
- When the graph view starts to look like spaghetti
- When you can't remember whether you have a note on X

> **Try it now:** `"rebuild my MOCs"`
>
> Variants planned: *"refresh the index notes"*, *"update maps of content"*.

What each MOC looks like:

```md
# 20-Projects MOC

> Last rebuilt: 2026-05-15

## Active projects (12)
- [[whittech-redesign]] — updated 2 days ago
- [[obsidian-academy]] — created today
- [[sales-workspace]] — updated 5 days ago
- ...

## Recently completed
- [[seven-oh-tracker]] — archived 2026-05-10

## Orphan notes (no incoming links)
- [[project-XYZ]] — created 30 days ago, never linked. Archive or link?

## Stale (no edits in 30+ days)
- [[old-project-A]]
- [[old-project-B]]
```

## Under the hood (design)

- **Skill location (planned):** `~/.claude/skills/rebuild-mocs/SKILL.md`
- **Reads:** every top-level folder via `obsidian_list_files_in_dir`; recent changes via `obsidian_get_recent_changes`; backlink data (via Dataview if available, fallback to text search)
- **Writes:** one MOC per top-level folder — `00-Inbox.md`, `10-Daily.md`, `20-Projects.md`, ..., `90-Templates.md`
- **Doesn't touch:** the contents of the folders themselves, only the index notes at root

## Watch out for (anticipated)

- **First run** will create the MOCs from scratch. Subsequent runs overwrite them — make sure you don't manually edit MOCs without them being regenerated.
- **Orphan signal** — sometimes orphan notes are intentional (e.g., a one-off draft you'll publish soon). The skill flags them; don't auto-delete.
- **Dataview dependency** — for richer queries (e.g., "all projects with status: active"), Dataview plugin needed. The skill should degrade gracefully without it.

## Make it yours (planned customizations)

- **MOC styles** — visual MOCs (Obsidian Canvas), textual (Dataview tables), simple (bulleted list). Pick per folder.
- **Stale thresholds** — for `60-People/`, "stale" might be 6 months (some friendships are quiet); for `20-Projects/`, 30 days is reasonable.
- **Auto-archive** — if a project hasn't been touched in 90+ days AND is marked `status: complete`, auto-move to `50-Archive/`.

## Related workflows

- **[[workflows/06-weekly-review|Weekly Review]]** — Run weekly-review first, then this. Patterns appear.
- **[[workflows/07-research-synthesizer|Research Synthesizer]]** — MOCs are static; synthesis is generative. Both have a place.



---



# Bonus Workflows


<a id="bonus--01-zettelkasten"></a>

## Zettelkasten — atomic notes

*One idea per note, densely linked. Knowledge emerges over time.*


**TL;DR** — Write notes that capture a single idea each, link them densely to related notes. Your vault becomes a self-organizing knowledge graph instead of a folder of essays.

## What makes a Zettel

A Zettelkasten note (German for "slip box"):

- **Captures one idea.** Not a topic — an idea. Not "Productivity" — "Why mornings are best for hard work."
- **Is written in your own words.** Quoting sources is fine; but the synthesis is yours.
- **Links to related Zettels.** Liberally. Every concept that connects.
- **Has a stable, unique title.** Future-you can find it.
- **Stands alone.** Re-read it 3 years from now and it should still make sense.

## Why bother

The point isn't taking notes. The point is the **connections between notes**, which only become visible when notes are atomic. A 2000-word essay-style note hides 5–10 ideas inside it. Each of those ideas could link to different things. Atomic notes surface those links.

After a year of consistent Zettel writing, the graph view becomes useful for thinking — not just pretty art.

## How it pairs with Claude Code

Several skills become more powerful with atomic notes:

- **[[workflows/07-research-synthesizer|Research Synthesizer]]** — works better when source notes are already atomic
- **[[workflows/09-spaced-repetition|Spaced Repetition]]** — atomic notes make 1–2 perfect flashcards; essays make 20 mediocre ones
- **Orphan detection** — atomic + densely linked means orphans really *are* orphans. The MOC Maintainer can flag them honestly.

Claude can also help atomize: paste an essay, ask "split this into atomic Zettels" — get back 5–10 candidate notes with suggested links.

## Where to put them

Either:

- **Dedicated folder:** `40-Resources/zettels/` — clean separation
- **Mixed in `40-Resources/`** with a `#zettel` tag — looser

Start with dedicated. Move to mixed once you have ~100 notes and start craving cross-pollination with the rest of your vault.

## Sources

- [Zettelkasten Method in Obsidian](https://desktopcommander.app/blog/zettelkasten-obsidian/)
- [Linking Your Thinking (Nick Milo)](https://www.linkingyourthinking.com/) — the gentler "MOC-first" school
- The original How to Take Smart Notes by Sönke Ahrens — the canonical reference

## Related workflows

- **[[workflows/07-research-synthesizer|Research Synthesizer]]** — Synthesis output → seed atomic notes from each claim
- **[[workflows/09-spaced-repetition|Spaced Repetition]]** — Atomic notes make excellent flashcards



---


<a id="bonus--02-dataview-dashboard"></a>

## Dataview Dashboard

*Turn your vault into a queryable database.*


**TL;DR** — Install the Dataview plugin. Now you can write SQL-ish queries inside notes that pull live data from across your vault. Your daily note can show "all open tasks tagged @home" auto-updating. Your project notes can show "all meetings about this project, latest first." Static notes become living dashboards.

## What Dataview does

Dataview queries scan your vault's notes, their tags, their frontmatter, and their inline metadata. Output goes back into the note as a live table or list.

A trivial example — in any note:

````md
```dataview
LIST FROM #project
WHERE status = "active"
SORT file.mtime DESC
```
````

Renders inside the note as a bullet list of every note tagged `#project` with frontmatter `status: active`, sorted by most recently modified.

## Real dashboards you can build

**Today dashboard** (in your daily note template):

````md
## Open tasks

```dataview
TASK
FROM "20-Projects" OR "00-Inbox"
WHERE !completed
SORT created DESC
LIMIT 10
```
````

**People you owe** (in `60-People.md` MOC):

````md
```dataview
TABLE last_contact AS "Last seen", relationship AS "How"
FROM "60-People"
WHERE last_contact AND date(last_contact) < date(today) - dur(30 days)
SORT last_contact ASC
```
````

**Habit heatmap** (using inline metadata `[exercise:: true]` in daily notes):

````md
```dataview
CALENDAR file.day
FROM "10-Daily"
WHERE exercise = true
```
````

## Inline metadata — the secret sauce

Beyond frontmatter, Dataview reads inline metadata. Write:

```md
The meeting [project:: q2-launch] ended with [decision:: ship June 15].
```

`project` and `decision` are now queryable fields.

## How it pairs with Claude Code

- The **MOC Maintainer** skill produces hand-curated MOCs; Dataview produces query-based ones. Use both: a hand-written intro paragraph + a Dataview block listing children.
- The **Weekly Review** skill can dump completed tasks into the review via a Dataview query — saves the skill having to count manually.
- Claude can write Dataview queries for you. "Show me all notes tagged #learn modified in the last 30 days" → it writes the query, pastes it into the note.

## Install

Settings → Community plugins → Browse → "Dataview" → Install → Enable.

That's it. No config needed for basics. Advanced: Settings → Dataview → enable "JavaScript queries" if you want the full DSL.

## Sources

- [Creating a Habits Dashboard with Obsidian and the Dataview JS API](https://rachsmith.com/creating-a-habits-dashboard/)
- [Dataview official docs](https://blacksmithgu.github.io/obsidian-dataview/)

## Related workflows

- **[[workflows/10-moc-maintainer|MOC Maintainer]]** — Pairs naturally — Dataview for the dynamic, MOC for the curated
- **[[workflows/06-weekly-review|Weekly Review]]** — Dataview makes the metrics section trivial



---


<a id="bonus--03-readwise-pipeline"></a>

## Readwise / Kindle pipeline

*Highlights from your reading flow into atomic notes.*


**TL;DR** — Close the loop between books and notes. Highlights you make on Kindle (or any reader Readwise supports) auto-sync into Obsidian as book notes, then get atomized into Zettels with Claude Code's help.

## The flow

```
Kindle → Readwise → Obsidian (book note) → atomic Zettels (by hand or via Claude)
```

Without this, your highlights die in the Kindle app. With this, they re-enter your knowledge stream.

## Setup

1. **Readwise account** — paid (~$10/mo), but they offer a free tier for students/first-time. Connect your Amazon / Apple Books / Kobo / Hypothesis.
2. **Obsidian plugin** — Settings → Community plugins → "Readwise Official". Install + enable + paste API token from your Readwise dashboard.
3. **Configure target folder** — `40-Resources/books/` is a good choice.
4. Run **Sync now** in the Readwise plugin. Every book becomes a note like:

```md
---
title: Atomic Habits
author: James Clear
readwise_id: 12345
synced: 2026-05-15
---

# Atomic Habits — by James Clear

## Highlights

> Every action you take is a vote for the type of person you wish to become.
— Page 38

> The plateau of latent potential...
```

Subsequent syncs append new highlights to existing notes.

## The "atomize" step

Book notes from Readwise are great as raw input — terrible as final notes. They're long, unorganized lists of quotes.

Use Claude to atomize:

> *"Read my Atomic Habits book note. Pull out the 5 most important ideas. For each, write an atomic Zettel in 40-Resources/zettels/ with the source quote at the bottom."*

You go from a 30-quote dump to 5 sharp atomic notes you'll actually re-read.

## Cheaper alternative: just Kindle, no Readwise

If you don't want a subscription, use:

- **Obsidian Kindle plugin** — direct sync from your Amazon account, no Readwise middleware
- Or manual export — Kindle gives you a `.txt` of highlights you can drop into `00-Inbox/`, then have Claude process

Less polished, free.

## What about non-Kindle reading?

- **Articles (web)** — Use the Readwise Reader app (separate product) to read + highlight web articles. Same pipeline.
- **Hypothesis** — Free, open-source annotation tool that works on any webpage. Syncs to Readwise.
- **Physical books** — There's no automation for this. Type your favorite passages into Obsidian manually. Friction is the point — you only type what's truly worth keeping.

## Sources

- [Setup a Fantastic Kindle-Readwise-Obsidian Flow](https://medium.com/@sarleryd/how-to-kindle-readwise-obsidian-highlights-sync-workflow-541093e02644)

## Related workflows

- **[[bonus/01-zettelkasten|Zettelkasten]]** — The destination format for atomized highlights
- **[[workflows/09-spaced-repetition|Spaced Repetition]]** — Tag a book note with #learn → flashcards from highlights



---


<a id="bonus--04-gtd-adaptation"></a>

## GTD adaptation

*David Allen's Getting Things Done, mapped onto Obsidian.*


**TL;DR** — David Allen's *Getting Things Done* (GTD) is a 5-step capture-clarify-organize-reflect-engage workflow. Obsidian + the Tasks plugin + your Inbox Zero skill maps onto it cleanly. More rigorous than just "process my inbox" — every action gets a context (`@home`, `@phone`, `@laptop`) and a project, and your "next action" list is always one query away.

## The GTD loop

```
Capture → Clarify → Organize → Reflect → Engage
```

- **Capture** — get everything out of your head into `00-Inbox/`
- **Clarify** — is it actionable? Is it one action or a project? What's the next step?
- **Organize** — file it into projects, areas, or "someday/maybe"
- **Reflect** — weekly review what's open, what's stalled, what's new
- **Engage** — actually do work, with a clean list of next actions

The Inbox Zero skill handles Capture and most of Clarify/Organize. Weekly Review handles Reflect. GTD's contribution: the **context system** for the Engage step.

## Contexts in Obsidian

Tag every actionable task with a context:

```md
- [ ] Pick up dry cleaning #context/errands
- [ ] Email Alice about Q2 budget #context/laptop @alice
- [ ] Call insurance #context/phone
- [ ] Read Atomic Habits chapter 3 #context/reading
```

Then when you sit down at your laptop, run a Dataview query:

````md
```dataview
TASK
FROM "20-Projects" OR "10-Daily"
WHERE !completed AND contains(tags, "#context/laptop")
SORT created ASC
```
````

You get a focused list. No phone calls in the middle of laptop time, no errands while you're in flow.

## GTD-style project structure

GTD defines "project" as anything requiring 2+ actions. So:

```
20-Projects/
  ├── q2-launch.md
  │     ## Open actions
  │     - [ ] Draft press release #context/laptop
  │     - [ ] Confirm legal approval #context/phone @alice
  │     ## Someday / maybe
  │     - [ ] Localize for German market
  └── ...
```

Every project note has both "open actions" (active) and "someday/maybe" (parking lot) sections.

## How Claude Code fits in

- **`process-inbox`** can be configured to GTD mode — adding a "context" classification step in its plan.
- A new skill **`gtd-next-actions`** could surface your `@laptop` / `@phone` / `@errands` lists on demand: *"what's next for laptop work?"* → returns a filtered list.
- **Weekly Review** can flag projects with no open actions ("stuck") and projects with stale actions (open >30 days).

## Sources

- [GTD workflow in Obsidian forum thread](https://forum.obsidian.md/t/getting-things-done-workflow-in-obsidian/100145)
- David Allen's *Getting Things Done* (the book) — read once, set up your system, then forget it and just live

## Related workflows

- **[[workflows/02-inbox-zero|Inbox Zero]]** — Capture + Clarify + Organize
- **[[workflows/06-weekly-review|Weekly Review]]** — The Reflect step, with extra GTD polish



---


<a id="bonus--05-obsidian-canvas"></a>

## Obsidian Canvas for research

*Infinite visual space — mindmaps, knowledge maps, architecture sketches.*


**TL;DR** — Obsidian's Canvas is a freeform 2D space where notes, images, and live embeds become movable cards you can arrange spatially. Excellent for literature reviews, competitive analysis, architecture sketches, and anything where 2D layout beats linear prose.

## What Canvas is

A `.canvas` file is JSON describing nodes (notes, images, embedded URLs) and edges (arrows/connections). You edit it visually inside Obsidian — no other tool needed. It's a core feature, no plugin required.

## When to use it

| Use case | Why Canvas wins |
|---|---|
| Literature review | See all sources at once; cluster by topic |
| Competitor analysis | Spatial grid: rows = competitors, cols = features |
| System architecture | Draw boxes-and-arrows, embed the notes that detail each box |
| Brainstorming | Loose cards you can move and group as ideas crystallize |
| Reading map | Books → key ideas → your own Zettels, all visible together |

## Create one

`Ctrl+P` (command palette) → "Create new canvas" → opens an empty grid.

- **Drag a note** from the file tree onto the canvas → it becomes a live card
- **Right-click empty space** → add a card, a group, or an image
- **Drag from one card's edge to another** → connect with an arrow

Save like any note. The canvas file shows up in your file tree.

## How Claude Code fits in

The Obsidian MCP can read `.canvas` JSON. So Claude can:

- **Generate a canvas from a query.** "Make a canvas of all notes tagged #q2-launch, grouped by status." Claude writes the JSON; Obsidian renders it.
- **Find spatial relationships.** Currently manual — the Canvas API doesn't easily expose proximity to plugins — but Claude could read positions and report cluster patterns.
- **Update existing canvases.** After your weekly review, Claude could add new notes to your "ongoing themes" canvas in the right cluster.

## A starter canvas pattern: "Topic landscape"

For any topic you're researching (e.g., "agent memory"):

```
+--- canvas: agent-memory.canvas ---+
|                                   |
|   [Sources]    [Key claims]       |
|   - paper-a    - claim 1          |
|   - paper-b    - claim 2          |
|   - clip-c                        |
|                                   |
|   [My Zettels] [Open questions]   |
|   - zettel-1   - q1               |
|   - zettel-2   - q2               |
|                                   |
+-----------------------------------+
```

Four quadrants: Sources, Key Claims, My Notes, Open Questions. As you read, drag new cards into the right quadrant. The picture becomes a snapshot of your understanding.

## Sources

- [Lucas Mercier's research workflow](https://www.lucasmercier.me/blog/research_workflow/)
- Obsidian docs: [Canvas](https://help.obsidian.md/Plugins/Canvas)

## Related workflows

- **[[workflows/07-research-synthesizer|Research Synthesizer]]** — Text-output complement to Canvas's spatial view
- **[[workflows/10-moc-maintainer|MOC Maintainer]]** — Text MOCs as a tier-1 layer; Canvas as tier-2 deep dives



---


<a id="bonus--06-para-zettelkasten-hybrid"></a>

## PARA + Zettelkasten hybrid

*Tiago Forte's PARA for actionable work + Zettelkasten for long-term knowledge.*


**TL;DR** — PARA (Projects, Areas, Resources, Archive) is great for managing **work and intentions**. Zettelkasten is great for managing **ideas and knowledge**. The two systems answer different questions. Most personal vaults benefit from running both — and you already do, you just haven't named it that way.

## PARA in your vault

Tiago Forte's PARA framework:

| Layer | What | In your vault |
|---|---|---|
| **Projects** | Time-bound, with a finish line | `20-Projects/` |
| **Areas** | Ongoing responsibilities, no finish | `30-Areas/` |
| **Resources** | Reference material for future use | `40-Resources/` |
| **Archive** | Done, abandoned, or stale | `50-Archive/` |

The folders I created for you map directly. If you commit to keeping these clean — moving completed projects to Archive, surfacing relevant Resources during Project work — PARA delivers its promise.

## Zettelkasten on top

Inside `40-Resources/` (or a sub-folder), keep atomic Zettels that capture single ideas. PARA gives them a home; Zettelkasten gives them shape.

Critical principle from August Bradley's PPV (Pillars-Pipelines-Vaults): **the Resources layer is the long-term asset.** Projects come and go. Areas evolve. But the ideas in Resources compound over decades.

Treat Resources as your knowledge endowment. Treat Projects as where you spend that endowment.

## The hybrid pattern

```
20-Projects/q2-launch/
  ├── README.md          ← scope, status, definition of done
  ├── log.md             ← chronological updates
  └── notes-from/        ← project-specific scratch
     [[zettel: why-pricing-anchors-matter]] ← link OUT to Zettel
     [[zettel: customer-jobs-to-be-done]]   ← Zettel from Resources
```

Project notes **link to** Zettels from Resources. They don't duplicate. When the project ends, you archive the project folder but **the Zettels stay** in Resources, available for the next project.

## Pillars (the third axis)

August Bradley's contribution: **Pillars** = the life areas you care about (Health, Family, Finance, Career, Knowledge, etc.). Every Project ladders up to a Pillar. Every Area is a Pillar in active state.

In Obsidian, tag every Project and Area:

```yaml
---
pillar: career
status: active
---
```

Then Dataview can show: "all Projects laddering to my Career pillar." You see where your time is going at the strategic layer, not just the task layer.

## How Claude Code fits in

- **`process-inbox`** already routes items into PARA folders. Add Pillar tagging at clarify-time.
- A new skill **`pillar-health`** could read all Projects tagged `pillar: career`, summarize progress, and surface neglect.
- **Weekly Review** can show "Pillars touched this week" — if Health hasn't been mentioned in 14 days, you have a signal.

## When NOT to hybridize

- **Vault under 50 notes.** Hybrid is overkill. Just dump everything in `40-Resources/` and revisit later.
- **You're new to PKM.** Pick one (PARA OR Zettelkasten) and master it before combining.
- **You're using Obsidian as a journal only.** Skip the framework debate. Daily notes is plenty.

## Sources

- [PARA + Zettelkasten Vault Template](https://forum.obsidian.md/t/para-zettelkasten-vault-template-powerful-organization-task-tracking-and-focus-tools-all-in-one/91380)
- Tiago Forte, *Building a Second Brain* (the PARA canonical text)
- August Bradley's PPV system: [augustbradley.com](https://www.augustbradley.com/)

## Related workflows

- **[[bonus/01-zettelkasten|Zettelkasten]]** — The atomic note half
- **[[workflows/02-inbox-zero|Inbox Zero]]** — Routes captures into PARA folders



---


<a id="bonus--07-habit-tracker"></a>

## Habit tracker + dashboards

*Quantified daily habits, surfaced as heatmaps and trends.*


**TL;DR** — Annotate habits in your daily note with inline Dataview metadata. Build a single dashboard note that shows streaks, heatmaps, and per-habit trends. Your habit data becomes a second-brain metric, viewable alongside notes and goals.

## The capture layer

In your daily note, add a habits section the template generates:

```md
## Habits

- exercise:: true
- meditation:: 10
- writing:: 500
- alcohol:: false
- sleep_hours:: 7.5
```

The `::` is Dataview's inline metadata syntax. Each line becomes a queryable field on this day's note.

Be honest. Tracking dishonest data is worse than tracking nothing.

## The dashboard

Create `30-Areas/health/habits-dashboard.md`:

````md
# Habits dashboard

## Exercise — last 30 days

```dataview
CALENDAR file.day
FROM "10-Daily"
WHERE exercise = true AND date(file.day) >= date(today) - dur(30 days)
```

## Writing words this week

```dataview
TABLE writing AS "Words", file.day AS "Day"
FROM "10-Daily"
WHERE writing AND date(file.day) >= date(today) - dur(7 days)
SORT file.day DESC
```

## Streak: meditation

```dataview
LIST file.day AS "Day"
FROM "10-Daily"
WHERE meditation > 0
SORT file.day DESC
LIMIT 7
```
````

Pin this note to your sidebar. Open weekly during your review.

## Tracker plugin (advanced)

The community plugin **Tracker** gives you proper line/bar charts. Install if you want visual graphs beyond Dataview's tables.

Example chart:

````md
```tracker
searchType: dvField
searchTarget: sleep_hours
folder: 10-Daily
startDate: -30d
endDate: today
line:
  title: Sleep hours, last 30 days
  yAxisLabel: Hours
  lineColor: "#7c5cff"
```
````

## How Claude Code fits in

- **Daily Driver** can prompt you to log habits if today's note doesn't have them yet ("you skipped habits yesterday — track them now?")
- **Weekly Review** can pull habit stats automatically: "Exercise: 5/7 days. Writing: 3200 words. Sleep avg: 7.1h."
- A new skill **`habit-correlate`** could find correlations: "On weeks you exercised 5+ times, your mood scores averaged 8.2. On weeks you exercised fewer than 3 times, 6.4."

## Make it lightweight

Don't track 15 habits. Track 3–5 you actually care about, for 90 days, before deciding what to do next. Over-instrumented systems get abandoned. Under-instrumented systems teach you the truth.

## Sources

- [The Complete Guide to Habit Tracking in Obsidian](https://gethabitspace.com/blog/complete-guide-habit-tracking-obsidian)
- [Tracker plugin](https://github.com/pyrochlore/obsidian-tracker)

## Related workflows

- **[[workflows/01-daily-driver|Daily Driver]]** — The capture layer
- **[[workflows/06-weekly-review|Weekly Review]]** — Where the data becomes insight
- **[[workflows/08-visual-journal|Visual Journal]]** — The qualitative twin to quantitative tracking



---


<a id="bonus--08-smart-connections"></a>

## Smart Connections — AI auto-linking

*Let an embedding model suggest connections your eyes miss.*


**TL;DR** — Smart Connections is a community plugin that builds embeddings for every note in your vault, then surfaces semantically similar notes as you read. Your Claude Code workflow is the active half (Claude reads + writes); Smart Connections is the passive half (always-on background recommendations).

## What it does

A pane in Obsidian that always shows "notes semantically related to this one." Not by tag, not by link — by **meaning**.

Reading your weekly review and it surfaces a project log from 3 months ago that hits the same theme. You'd never have found it through search or backlinks.

## Install

Settings → Community plugins → Browse → "Smart Connections" → Install + Enable.

First run: it builds embeddings for every note. Takes a minute for a small vault. Bigger vaults can take 10+ minutes — let it run in the background.

By default it uses local embeddings (no API key, no cost, no privacy concern). You can swap in OpenAI embeddings for better quality, but it's optional.

## The pane

Open any note. The Smart Connections pane (right sidebar by default) lists related notes ranked by semantic distance. Click any to jump there.

You'll discover:

- **Same idea, different vocabulary.** A Zettel about "biased anchoring" connects to a meeting note where someone said "they're stuck on the first number they heard." Tags wouldn't have caught it.
- **Forgotten threads.** Old project notes that prefigured ideas you're having now.
- **Implicit themes.** When the top 5 connections all share a vibe, you've found a theme worth naming.

## Pairing with Claude Code

Two ways:

1. **Claude as the link-creator.** Smart Connections suggests; Claude evaluates and writes the actual `[[link]]`. Workflow: highlight a Smart Connections suggestion, ask Claude *"is this connection real? If yes, link these two notes and add a 1-line explanation."*
2. **Claude reading Smart Connections output.** Future-state: a skill `auto-link` runs nightly, pulls top suggestions for newly-modified notes, asks Claude to vet each, and applies the high-confidence ones.

> [!NOTE]
> **Don't blindly accept suggestions.** Smart Connections finds similarity, not always meaningful connection. False positives waste graph space. Treat suggestions as a prompt to think, not as ground truth.

## Privacy

If you use the local embeddings model (default), nothing leaves your machine. If you switch to OpenAI embeddings, your note text gets sent to OpenAI's embedding API — fine if that's your tolerance, off the table if not.

## When NOT to use it

- **Vault under 100 notes.** Manual linking is fine; nothing to discover.
- **Privacy-paranoid.** Even local embeddings store vectors. Some folks don't want vault-derived data on disk in any form.
- **Confused vault.** If you can't explain what most of your notes are *for*, more suggestions won't help. Tidy first, automate after.

## Sources

- [Smart Connections plugin](https://github.com/brianpetro/obsidian-smart-connections)
- [Agentic PKM Patterns gist (Mark Bruns)](https://gist.github.com/MarkBruns/469e193ab090ce1ff3f70fc2d08ad1f6)

## Related workflows

- **[[bonus/01-zettelkasten|Zettelkasten]]** — Atomic notes get richer Smart Connections suggestions
- **[[workflows/10-moc-maintainer|MOC Maintainer]]** — Smart Connections finds dense regions; MOCs name them



---



# Setup & Stack


<a id="setup--01-my-hardware"></a>

## My hardware

*ZenBook A16 (ARM) + Galaxy S26+, and what changed because of it.*


## ZenBook A16 — Snapdragon X2 Elite Extreme

Your laptop runs **Windows 11 on ARM** with the Snapdragon X2 Elite Extreme chip. That's a Copilot+ class machine: powerful, efficient, and 100% ARM-native at the CPU layer.

Most software now has native ARM builds. Some doesn't. Here's what mattered during setup:

| Tool | Status | Notes |
|---|---|---|
| Node.js | ✅ ARM64 | Installed via nodejs.org official .msi. `node -p "process.arch"` should say `arm64` |
| Git | ✅ ARM64 | Git for Windows ships ARM64 |
| gh CLI | ✅ ARM64 | Latest releases include ARM64 |
| Syncthing | ✅ ARM64 | Native build from winget `Syncthing.Syncthing` (we explicitly grabbed ARM64) |
| Syncthing Tray | ✅ ARM64 | Native via winget `Martchus.syncthingtray` |
| uv (Python) | ✅ ARM64 | `uv` from astral.sh ships ARM64 |
| Gemini CLI | ✅ Cross-platform JS | Runs on Node, arch-agnostic |
| Obsidian | ⚠️ Mostly x64 | Runs under emulation. Fine for normal use; some plugins with native deps may quirk |
| SyncTrayzor | ❌ x64 only | .NET WPF — we picked Syncthing Tray instead |

> [!NOTE]
> **Battery vs emulation.** Tools running under x64 emulation cost more battery than native ARM ones. For background daemons (sync, MCPs), always prefer native ARM. For occasional GUI apps (Obsidian itself), emulation is fine.

## Galaxy S26+ — Android One UI

Your phone is a Samsung Galaxy S26+ on Android with One UI. Samsung's flavor adds **aggressive battery optimization** that suspends background apps. For long-running services (Syncthing, Tailscale), you must explicitly exempt them.

For each background app, do all three:

1. **Settings → Apps → [App] → Battery → "Unrestricted"**
2. **Settings → Battery → Background usage limits → Never sleeping apps → +** (add the app)
3. **Settings → Battery → Background usage limits → Sleeping apps** — make sure the app is NOT here

We did this for Syncthing-Fork during setup. Do it for any other background-running app you add.

## Why ARM matters

The Snapdragon X2 series benefits:

- ~24+ hour battery (vs ~10 for an x86 equivalent)
- Cool/quiet operation
- Wake-from-sleep is instant
- Strong AI/ML perf for on-device models (you can run small LMs locally for things like Smart Connections embeddings)

The trade-off:

- ~5% of Windows software has compatibility issues (mostly older niche apps)
- Some games / GPU-intensive workloads underperform vs an x86 + dedicated GPU laptop
- Driver maturity is still improving

For a knowledge-work + Claude Code + Obsidian stack: ARM is an excellent choice. We confirmed it.

## What broke and what we fixed

During setup we hit two ARM-specific issues:

1. **SyncTrayzor wouldn't have run natively.** Solution: switched to Syncthing Tray (native ARM Qt app). Same job, no emulation tax.
2. **gemini-cli extension list bug** — shows empty in non-tty mode on Windows. Solution: read the enablement file directly at `~/.gemini/extensions/extension-enablement.json` to verify state.

Both documented in [[reference/03-troubleshooting|Troubleshooting]].



---


<a id="setup--02-skills-installed"></a>

## Skills installed

*The canonical list of every Claude Code skill on your machine and what it does.*


Skills live in `~/.claude/skills/`. Each is a single `SKILL.md` file with frontmatter (`name`, `description`, `allowed-tools`) and the body is plain-English instructions Claude follows.

## Currently installed

| Skill | Path | Purpose | Trigger phrases |
|---|---|---|---|
| `daily-driver` | `~/.claude/skills/daily-driver/SKILL.md` | Build today's daily note | "good morning", "build today's note", "daily driver" |
| `process-inbox` | `~/.claude/skills/process-inbox/SKILL.md` | Triage `00-Inbox/` | "process my inbox", "inbox zero", "triage" |
| `prep-for` | `~/.claude/skills/prep-for/SKILL.md` | Person briefing | "prep for [Name]", "brief me on [Name]" |
| `process-meeting` | `~/.claude/skills/process-meeting/SKILL.md` | Structure meeting notes | "process this meeting", "I just got off a call" |
| `content-engine` | `~/.claude/skills/content-engine/SKILL.md` | Blog post + illustrations | "write a blog post about", "make a thread" |
| `weekly-review` | `~/.claude/skills/weekly-review/SKILL.md` | Sunday synthesis | "weekly review", "review my week" |
| `nano-banana` | `~/.claude/skills/nano-banana/SKILL.md` | Image generation via Gemini CLI | "generate an image of", "create a thumbnail" |

## Not yet installed (planned)

These workflows are documented on this site but the skill files don't exist yet:

| Skill | Workflow page | Status |
|---|---|---|
| `synthesize` | [[workflows/07-research-synthesizer|Research Synthesizer]] | Design ready, not built |
| `review-cards` | [[workflows/09-spaced-repetition|Spaced Repetition]] | Design ready, not built |
| `make-cards` | [[workflows/09-spaced-repetition|Spaced Repetition]] | Design ready, not built |
| `rebuild-mocs` | [[workflows/10-moc-maintainer|MOC Maintainer]] | Design ready, not built |

When you're ready to build any of these, ask Claude — the design notes on the workflow pages are detailed enough to scaffold from.

## How to inspect a skill

```powershell
notepad C:\Users\justi\.claude\skills\daily-driver\SKILL.md
```

The file has YAML frontmatter (don't change `name` — it's the skill ID), then markdown instructions. Editing is safe; Claude re-reads on next invocation. No rebuild step.

## How to add a new skill

```powershell
mkdir C:\Users\justi\.claude\skills\my-new-skill
notepad C:\Users\justi\.claude\skills\my-new-skill\SKILL.md
```

Inside the file:

```md
---
name: my-new-skill
description: One-sentence description that triggers Claude's recognition. Make this specific — the more your trigger phrases match, the better skill routing works.
allowed-tools: mcp__mcp-obsidian__obsidian_get_file_contents, mcp__mcp-obsidian__obsidian_append_content
---

# My New Skill

Plain-English instructions for Claude here. Be specific about steps, files to read, files to write, edge cases, and tone.
```

Restart Claude Code (or wait for skill discovery to refresh) and the skill is live.

## How to delete a skill

```powershell
rmdir /S C:\Users\justi\.claude\skills\my-old-skill
```

Done. No registry to clean.

## Removing a skill from skill routing without deleting it

Add `disabled: true` to the frontmatter. Claude will skip routing to it but the file remains for reference.

## Where skills came from on your machine

I wrote all 7 of these during our Claude Code session in early May 2026. They reference your specific vault layout (`00-Inbox/`, `10-Daily/`, etc.). If you change folder names, update the skills.



---


<a id="setup--03-mobile-sync"></a>

## Mobile sync (Syncthing)

*How your desktop vault and Galaxy S26+ stay in sync.*


This page is the deployment record of what's running on your machine. For the bigger picture, see [[basics/06-sync-via-syncthing|Basics → Sync via Syncthing]].

## What's installed

### On ZenBook A16

| Component | Where | Auto-start |
|---|---|---|
| `syncthing.exe` (native ARM64) | `C:\Users\justi\AppData\Local\Microsoft\WinGet\Packages\Syncthing.Syncthing_Microsoft.Winget.Source_8wekyb3d8bbwe\syncthing-windows-arm64-v2.1.0\` | ✅ Shortcut in Startup folder |
| Syncthing Tray (native ARM64) | `C:\Users\justi\AppData\Local\Microsoft\WinGet\Packages\Martchus.syncthingtray_Microsoft.Winget.Source_8wekyb3d8bbwe\` | ✅ Shortcut in Startup folder |
| Web UI | `http://127.0.0.1:8384` | Available when daemon is running |
| Config | `C:\Users\justi\AppData\Local\Syncthing\config.xml` | Contains API key (keep private) |
| Auto-start shortcuts | `%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\` | `syncthing.lnk` + `SyncthingTray.lnk` |

### On Galaxy S26+

| Component | Source | Critical setting |
|---|---|---|
| Syncthing-Fork | F-Droid (`com.github.catfriend1.syncthingandroid`) | "Force start, ignore run conditions" enabled |
| Battery | Settings → Apps → Syncthing-Fork → Battery | **"Unrestricted"** |
| Sleeping apps list | Settings → Battery → Background usage limits | Syncthing-Fork in "Never sleeping apps" |
| Vault location | `/storage/emulated/0/Documents/Obsidian/WhittechAI` | Must be shared storage, not app-private |
| Obsidian app | Play Store | Opens the synced folder as a vault |

## The folder being synced

- **PC side:** `C:\Vault\WhittechAI`
- **Phone side:** `/storage/emulated/0/Documents/Obsidian/WhittechAI`
- **Folder ID** (must match on both ends): `whittechai-vault`
- **Folder label:** `WhittechAI`
- **Type:** Send & Receive (bidirectional)
- **Versioning:** Trashcan (30 day retention of deleted files)
- **File watcher:** Enabled (instant detection of changes)
- **Ignore permissions:** Yes (recommended for cross-platform)

## Verifying it works

Edit `00-Inbox/inbox.md` from your desktop, save, wait ~30 sec, check phone. Then reverse. If both directions sync, you're good.

If sync stalls, in order:

1. Check phone Syncthing-Fork status icon — green good, yellow = idle, red = stopped, gray = manually stopped
2. Check PC web UI at `http://127.0.0.1:8384` → "Other Devices" → phone should be **Connected**
3. Look for `~conflict~` files in the vault — these block sync until resolved
4. As a last resort: restart Syncthing on either side

## API access (for skills + automation)

The Obsidian Local REST API plugin exposes `https://127.0.0.1:27124` with your personal API key (stored in Obsidian's settings — never check it into source control).

This API is what powers the Claude Code Obsidian MCP. It's also the endpoint you'd hit from a phone shortcut (see Tailscale page for cross-network access).

## What we changed during setup

- Picked Syncthing Tray over SyncTrayzor (native ARM)
- Forced ARM64 architecture during `winget install` to ensure no x64 emulation
- Set up Startup folder shortcuts (rather than Task Scheduler — simpler, doesn't need admin)
- Discovered Samsung battery optimization was suspending Syncthing-Fork; fixed via "Force start, ignore run conditions" + unrestricted battery



---


<a id="setup--04-nano-banana-setup"></a>

## nano-banana + Gemini key

*Free image generation via Google's Gemini Nano Banana model.*


The `nano-banana` skill generates images by calling the Gemini CLI's `nanobanana` extension, which hits Google's `gemini-2.5-flash-image` (or `gemini-3-pro-image-preview`) endpoints. With the free Gemini API tier, you get ~500 images/day — plenty for personal use.

## What's installed

| Component | Where | Notes |
|---|---|---|
| `@google/gemini-cli` | Global npm install | `npm install -g @google/gemini-cli` |
| nanobanana extension | `~/.gemini/extensions/nanobanana/` | Installed via `gemini extensions install` |
| nano-banana skill | `~/.claude/skills/nano-banana/SKILL.md` | The Claude Code wrapper |
| GEMINI_API_KEY | User env var (`setx`) + `~/.nano-banana/.env` | Persisted across reboots |
| Extension enablement | `~/.gemini/extensions/extension-enablement.json` | Must NOT have `"overrides": ["/C:/Users/justi/*"]` |

## Verify it works

```bash
gemini --yolo -p "/generate 'a single yellow banana on white background'"
```

If everything's good, an image appears in `./nanobanana-output/`. If you see "GEMINI_API_KEY not set", the env var didn't propagate — open a new terminal.

## Get a Gemini API key

If you ever rotate yours:

1. Visit [aistudio.google.com/apikey](https://aistudio.google.com/apikey)
2. Sign in with any Google account (no payment method required)
3. Click "Create API key"
4. Copy the key (starts with `AIza...`)
5. Update it in two places:
   - User env var: `setx GEMINI_API_KEY "your-key"`
   - `~/.nano-banana/.env`: edit the file

> [!NOTE]
> **The API key is sensitive.** Don't commit it to git, don't paste in public chats, don't embed in screenshots. Treat like a password.

## The extension enablement gotcha

A known quirk during setup: `gemini extensions list` returns empty even when extensions are installed. Cause: the extension has an "overrides" entry in `~/.gemini/extensions/extension-enablement.json` that disables it for your home directory.

Fix: edit the file so the extension's `overrides` array is empty (`[]`) or remove the entry entirely.

```json
{
  "nanobanana": {
    "overrides": []
  }
}
```

That re-enables it globally.

## Free-tier limits

As of May 2026:

- **gemini-2.5-flash-image**: ~500 images/day, free
- **gemini-3-pro-image-preview**: ~150 images/day, free (higher quality)
- Resolution: up to 4K
- Aspect ratios: 1:1, 16:9, 9:16, 4:3, 3:2, 21:9 etc.

Hard rate limits (per minute) exist but you'll hit the daily cap first if you're bulk-generating.

## Cost if you exceed free tier

Per Google's pricing as of mid-2026:

- ~$0.04 per 1K image (flash)
- ~$0.14 per 4K image (pro)

Trivial unless you batch-generate at scale.

## Models the skill knows about

The skill accepts model aliases:

| Alias | Real model | Use for |
|---|---|---|
| `flash` (default) | `gemini-2.5-flash-image` | Daily use, speed, volume |
| `pro` | `gemini-3-pro-image-preview` | High-quality featured images, 4K |

Override per call: `gemini --yolo -p "/generate '...' --model pro"`

## Where outputs go

Default: `./nanobanana-output/` in whatever directory you ran the command from.

In the [[workflows/05-content-engine|Content Engine]] workflow, outputs get moved to `80-Content/assets/[slug]/`. In the [[workflows/08-visual-journal|Visual Journal]] workflow, into `10-Daily/` next to the day's note.

## When the skill triggers

The skill is set up to be invoked for ANY image request the user makes. The frontmatter:

```yaml
description: REQUIRED for all image generation requests. Generate and edit images using Nano Banana (Gemini CLI). Handles blog featured images, YouTube thumbnails, icons, diagrams, patterns, illustrations, photos, visual assets, graphics, artwork, pictures. Use this skill whenever the user asks to create, generate, make, draw, design, or edit any image or visual content.
```

If you ever want Claude to use a different image tool, edit this frontmatter.



---



# Reference


<a id="reference--01-skills-cheatsheet"></a>

## Skills cheatsheet

*Every trigger phrase, one table.*


## Daily ops

| Say this | Skill | Result |
|---|---|---|
| **"good morning"** | `daily-driver` | Today's daily note appears in `10-Daily/` |
| **"start my day"** / **"build today's note"** | `daily-driver` | Same |
| **"process my inbox"** | `process-inbox` | `00-Inbox/` triaged + filed |
| **"inbox zero"** / **"triage"** | `process-inbox` | Same |
| **"prep for [Name]"** | `prep-for` | One-page briefing on a person, in chat |
| **"brief me on [Name]"** | `prep-for` | Same |

## Meeting + content

| Say this | Skill | Result |
|---|---|---|
| **"process this meeting"** + paste notes | `process-meeting` | `70-Meetings/YYYY-MM-DD-topic.md` + actions filed |
| **"I just got off a call with [Person] about [topic]"** | `process-meeting` | Walks you through capture |
| **"write a blog post about [topic]"** | `content-engine` | Draft + featured + inline illustrations in `80-Content/drafts/` |
| **"make a thread about [topic]"** | `content-engine` | Same, optimized for Twitter/X |
| **"generate an image of [scene]"** | `nano-banana` | Direct image gen, no post wrapper |

## Review + maintenance

| Say this | Skill | Result |
|---|---|---|
| **"weekly review"** | `weekly-review` | `30-Areas/reviews/YYYY-WW.md` synthesis |
| **"review my week"** | `weekly-review` | Same |
| **"what happened this week"** | `weekly-review` | Same |
| **"rebuild my MOCs"** | `rebuild-mocs` (not yet built) | Folder index notes refreshed |
| **"review my cards"** | `review-cards` (not yet built) | Spaced-repetition session |
| **"synthesize [topic]"** | `synthesize` (not yet built) | Literature-review MOC |

## Search + ask (no specific skill, just plain English)

| Say this | What Claude does |
|---|---|
| **"what notes do I have about [topic]?"** | Vault-wide search via `obsidian_simple_search` |
| **"find anything mentioning [Person]"** | Search returns matching files |
| **"when did I last talk to [Person]?"** | Searches meetings + daily notes |
| **"what's open on the [project] project?"** | Reads the project's `tasks.md` / `log.md` |

## Direct file ops

| Say this | What Claude does |
|---|---|
| **"create a project note for [name]"** | New folder + `README.md` from `90-Templates/project.md` |
| **"add a task to today's daily note: ..."** | Appends `- [ ] ...` to today's note |
| **"move [note] from inbox to projects/[slug]"** | Reads source, writes to destination, deletes source |

## The big rule

Don't memorize commands. The skills trigger on plain English. If a workflow exists, describe what you want — Claude routes it.

When Claude doesn't trigger the right skill, it's usually because the trigger phrase in the skill's frontmatter is too narrow. Open the skill file and add a synonym.



---


<a id="reference--02-glossary"></a>

## Glossary

*Strict vocabulary used across this site.*


Pick one term, stick with it. These are the canonical terms used everywhere on this site. If you see two terms for the same thing in your own notes, replace one of them.

| Term | Definition |
|---|---|
| **Vault** | The folder containing your Obsidian notes. Yours: `C:\Vault\WhittechAI`. Synonyms to avoid: library, directory, knowledge base (the last one is a category, not this thing). |
| **Note** | A single `.md` file inside the vault. Synonyms to avoid: page, document, entry. |
| **Daily note** | A note in `10-Daily/` named `YYYY-MM-DD.md`. The Daily Driver builds it. Synonyms to avoid: journal entry, today's page. |
| **Skill** | A `SKILL.md` file in `~/.claude/skills/` describing what Claude should do when triggered. Synonyms to avoid: agent, command, tool, prompt. |
| **Trigger phrase** | The plain-English phrase that activates a skill (e.g., "good morning"). Synonyms to avoid: invocation, hotword, prompt. |
| **MCP** | Model Context Protocol — the bridge between Claude and external tools. The Obsidian MCP is what lets Claude read/write your vault. |
| **MOC** | Map of Content. A note that indexes other notes — typically one per top-level folder. Generated by the MOC Maintainer skill. |
| **Zettel** | An atomic note capturing one idea, written in your own words, densely linked. Plural: Zettels (or Zettelkasten, the collective system). |
| **Frontmatter** | YAML metadata block at the top of a note between `---` lines. Queryable by Dataview and skills. |
| **Inline metadata** | Dataview's `key:: value` syntax inside note body — queryable like frontmatter but appearing in prose. |
| **Tag** | A `#word` anywhere in a note. Categorical, not hierarchical (though nesting via `/` works). |
| **Backlink** | A reverse pointer — note B shows up in note A's backlinks panel because B links *to* A. Automatic. Bidirectional. |
| **Inbox** | The `00-Inbox/` folder. Where you dump anything that doesn't yet have a home. The `process-inbox` skill triages it. |
| **Carry-over** | Tasks from yesterday's daily note that didn't get done; surfaced in today's note by the Daily Driver. |
| **Capture** | Fast, friction-free recording of a thought, usually to inbox, usually from a non-Obsidian context (mobile, voice, browser). |
| **Triage** | Processing capture into proper homes — projects, areas, resources, people, meetings. |
| **MCP server** | A specific running instance of an MCP — like the Obsidian REST API plugin acting as a server for the Obsidian MCP client. |
| **Tier** | A level in a hierarchical layout. e.g., `30-Areas` is tier-1; `30-Areas/reviews/` is tier-2; `30-Areas/reviews/YYYY-WW.md` is a leaf. |
| **Orphan note** | A note with zero incoming links. Either intentional (recent draft) or rot (forgotten). The MOC Maintainer flags them. |
| **Atomicity** | One idea per note. Smaller is better, up to the point of comprehensibility. Atomic Zettels enable density of linking. |



---


<a id="reference--03-troubleshooting"></a>

## Troubleshooting

*Specific problems we hit during setup + the fixes that worked.*


## Obsidian MCP shows ✓ Connected but tools return 40101

**Cause:** The MCP server process started before the OBSIDIAN_API_KEY was updated in `~/.claude.json`. It's running with the old (or placeholder) key.

**Fix:** Restart Claude Code. The MCP re-reads its env vars on launch.

## Syncthing-Fork on Galaxy S26+ shows yellow circle, never green

**Cause:** Samsung One UI's battery optimization is suspending the Syncthing background service.

**Fix (do all three):**

1. Settings → Apps → Syncthing-Fork → Battery → **Unrestricted**
2. Settings → Battery → Background usage limits → **Never sleeping apps** → add Syncthing-Fork
3. In the Syncthing-Fork app: tap the status indicator → **"Force start, ignore run conditions"**

After all three, status goes green within seconds.

## `gemini extensions list` returns empty (Windows)

**Cause:** Two possibilities.

1. Extension is installed but disabled by an override in `~/.gemini/extensions/extension-enablement.json`. The `nanobanana` install script sometimes adds a disabling override for the install path.
2. Non-tty output mode renders the list as empty.

**Fix:** Check directly:

```powershell
type C:\Users\justi\.gemini\extensions\extension-enablement.json
```

If you see:

```json
{ "nanobanana": { "overrides": ["/C:/Users/justi/*"] } }
```

Edit it to:

```json
{ "nanobanana": { "overrides": [] } }
```

Or just delete the file entirely (default state is "enabled everywhere").

## `obsidian_get_recent_changes` errors "Cannot read properties of undefined (reading 'tryQuery')"

**Cause:** The Obsidian Local REST API plugin uses Dataview's API for "recent changes". Dataview isn't installed.

**Fix:** Install Dataview from Community Plugins. The tool starts working immediately. (Daily Driver uses this — also fixes that.)

## Syncthing folder offer notification doesn't appear on phone

**Cause:** The phone didn't yet receive the folder share from the PC (race condition or daemon was paused).

**Fix:** On the PC, open the Syncthing web UI → Folders → click your folder → check "Sharing" tab → confirm phone is listed. If listed but no notification on phone:

1. On phone, open Syncthing-Fork → Folders tab → scroll for pending entries
2. Force-refresh in the Syncthing-Fork app (pull down on the folders list)

## Astro Starlight build fails with "Node 18 deprecated"

**Cause:** Cloudflare Pages defaults to Node 18; Astro 4+ requires Node 20+.

**Fix:** In Cloudflare Pages project settings → Environment variables → add `NODE_VERSION = 20` to **both** Production and Preview environments.

## Obsidian mobile app says "permission denied" when opening the synced vault

**Cause:** Android storage permissions for Obsidian aren't set.

**Fix:** Settings → Apps → Obsidian → Permissions → Files and media → **Allow all the time**.

## Claude Code "MCP server failed to connect" for mcp-obsidian

**Cause:** Common reasons:

1. Obsidian app isn't running (the Local REST API plugin only exposes when Obsidian is open)
2. API key in `~/.claude.json` doesn't match the Local REST API plugin's key
3. Port mismatch (default is 27124 HTTPS, 27123 HTTP — both need to be enabled)

**Fix:** Open Obsidian → Settings → Community plugins → Local REST API → confirm the plugin is enabled. Copy the API key. Open `~/.claude.json`, find the `mcp-obsidian` entry, confirm `OBSIDIAN_API_KEY` matches. Save and restart Claude Code.

## Generated image filename has `.png` extension but `file` says JPEG

**Cause:** A nanobanana extension quirk — saves JPEGs with `.png` extension.

**Fix:** Functionally harmless (Obsidian and browsers render based on content, not extension). If it bothers you, rename:

```powershell
Get-ChildItem *.png | ForEach-Object { Rename-Item $_ ($_.BaseName + ".jpg") }
```

> [!NOTE]
> **When in doubt, restart.** Closing and reopening Claude Code, Obsidian, or Syncthing fixes ~30% of issues. Quick to try.



---
