Skip to content

Instantly share code, notes, and snippets.

@tjhanley
Last active April 19, 2026 02:53
Show Gist options
  • Select an option

  • Save tjhanley/27d7cdce2256d189a8ab0367cb431672 to your computer and use it in GitHub Desktop.

Select an option

Save tjhanley/27d7cdce2256d189a8ab0367cb431672 to your computer and use it in GitHub Desktop.
NecroTomicon — A Personal Operating System in Plain Markdown
MIT License
Copyright (c) 2026 tjhanley
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

NecroTomicon — A Personal Operating System in Plain Markdown

This is a writeup of how I've set up a single Obsidian vault to serve as a personal operating system — for planning, thinking, running a team, and capturing knowledge. The goal isn't "take better notes." The goal is to have one place that holds everything I need to remember, surfaces what matters today, and shrinks the recurring work of running my life and my job.

Philosophy

  • Write once, query many. A person, project, or objective is defined in exactly one place. It surfaces everywhere it's relevant via queries over frontmatter.
  • The vault is executable. Markdown isn't just documentation — it's the interface to automations that read and write the same files.
  • Capture is cheap; synthesis is valuable. Lowering the cost of capture to near zero lets rollup skills do the hard work of compressing noise into signal.
  • Stay in flow; dispatch later. Inline action tags (mine are ;;) let me mark something as actionable mid-sentence without breaking out of the note. A background skill sweeps them up and routes each one — to the ticket system, a queued message, a new vault task, or a research task — so writing is never interrupted by task-management overhead.
  • Interrupts are data. Every ad-hoc request gets logged, then periodically analyzed for automation candidates. This is how the system improves itself.
  • Nothing leaves the vault without review. Drafts live locally; external systems are publishing targets, not sources of truth.
  • Git is the time machine. Automatic commits mean full history without ceremony. Experiments are safe; nothing is ever really lost.
  • Plain text outlives tools. Every capability below is a convenience layer over markdown files. If the tooling disappears tomorrow, the content is still readable in any text editor.

What I'm trying to achieve

  • One substrate for everything. Meeting notes, OKRs, projects, people, ideas, daily logs, research clippings — all in the same vault, all in plain markdown, all cross-linked.
  • Make the vault answer questions, not just store answers. A home dashboard that shows what's overdue, what's due today, what's in progress, and what's upcoming — without me maintaining any of those lists by hand.
  • Shrink repetitive work to a single command. End-of-day summary, weekly rollup, OKR check-in, 1:1 prep — tasks that would take 30 minutes become a slash command that produces a draft I review.
  • Keep capture frictionless. If capturing a thought, an interrupt, or a task takes more than a few seconds, it won't happen. Everything else is built around making that true.
  • Own my data. Plain markdown files in a git repo. No proprietary format, no vendor lock-in, full history, works offline.

Structure

The vault is organized by kind of thing, not by project:

Directory Purpose
people/ One note per person, cross-linked from everywhere they appear
projects/ Active initiatives, tagged with status
daily/, weekly/ Time-based logs
ideas/ Automation candidates and half-formed thoughts
Clippings/ Web captures, later distilled into reference notes
.obsidian/plugins/ The human UX layer
.claude/skills/ The automation layer

Every note carries frontmatter (type, tags, created, status fields where relevant). That structured metadata is the glue that lets the vault query itself.

Obsidian plugins, grouped by job

Querying the vault as a live system

  • Dataview — the single most important plugin. Turns frontmatter into a queryable database. Every dashboard, index, and roster is a live query, not a hand-maintained list.
  • Tasks — a global task queue with overdue / due-today / in-progress views.
  • Omnisearch — ranked full-text search.
  • Smart Connections — semantic similarity between notes, surfaces related thoughts without explicit links.

Capture and authoring speed

  • Templater — scripted note creation with variables.
  • NL Dates — natural-language date input (@today, @next friday).
  • Obsidian Linter — frontmatter normalization on save.
  • Paste Image Rename / Unique Attachments — keeps assets tidy without thinking about it.

Navigation and visual scanability

  • Homepage — boots into the dashboard rather than whatever was open last.
  • File Explorer Plus / Note Count / Folder Collapse — a better sidebar.
  • Icon Folder, File Color, Rainbow Sidebar, Pretty Properties — visual cues that make large vaults navigable at a glance.
  • Custom Sort / Sort & Permute Lines — deliberate ordering where it matters (roadmaps, priorities).

Specialized content

  • Excalidraw — diagrams inline with notes.
  • Leaflet — maps.
  • Lovely Mindmap — brainstorm canvases.
  • Code Styler — syntax highlighting.

Sync and integration

  • Git / GitHub Sync — the vault is a git repo; every change commits automatically.
  • Local REST API / MCP Tools — exposes the vault to agents and other tools.
  • Terminal — run shell commands without leaving the vault.
  • Text Extractor — pull text from PDFs and images so they're searchable.

The automation layer

The vault is also a Claude Code project. Slash commands (skills) read and write the same markdown files. A few categories:

  • Daily rhythm — morning briefing, today's plan, end-of-day review, evening summary.
  • Periodic rollups — weekly and monthly rollups, OKR check-ins, health/quality scoring.
  • Team and people ops — team status snapshots, 1:1 balance audits, interview prep packets.
  • Capture and triage — quick-capture classification, interrupt logging, interrupt analysis for automation candidates, and sweeping inline ;; action tags out of notes to dispatch them.
  • Research and synthesis — cross-system research, clipping compilation, draft filing.
  • External sync — pulls from calendar, ticket system, chat, email, git hosting; writes back as queued actions.
  • Publishing — promotes drafts from the vault to wherever they need to live.

Each skill is a markdown file with a description and a prompt. The agent reads the vault, does the work, and writes results back. The markdown stays the source of truth.


Running this yourself

The companion file setup-your-vault.md in this gist is a prompt you can paste into a coding agent to walk you through building a similar vault. It asks one question at a time, skips anything you decline, and won't install things without confirming.

Claude Code

  1. Open a terminal in the directory where you want the vault (or an existing one).
  2. Run claude to start a session.
  3. Paste the contents of setup-your-vault.md.
  4. Answer the checkpoints as they come up.

Tip: if you want the prompt available as a reusable slash command, save it to .claude/commands/setup-vault.md in the directory and invoke it with /setup-vault.

Codex CLI

  1. cd into the target directory.
  2. Run codex and paste the prompt into the chat.
  3. Approve file writes as they're proposed.

Any other agent (Cursor, Aider, etc.)

Open the agent in the target directory, paste the prompt, and follow along. The prompt is deliberately tool-agnostic — it describes behavior, not tool-specific commands.

What you'll need

  • Obsidian installed (the plugin checklist step assumes you'll install plugins through Obsidian's Community Plugins browser yourself — agents can't do that for you).
  • Git available on your $PATH.
  • A coding agent with file-write access to the target directory.

Expect the full walkthrough to take 15–30 minutes depending on how many optional pieces you opt into.

Setup Prompt: Build Your Own Personal OS Vault

Paste this into a coding agent (Claude Code, Cursor, etc.) while inside an empty directory — or alongside an existing Obsidian vault you want to evolve.


You are helping me set up a personal operating system built on an Obsidian vault. The philosophy and structure are described in the companion file necrotomicon.md — read it first, then walk me through setup.

Work incrementally. Ask before doing. Don't install everything at once.

Conversation flow

Go through these checkpoints one at a time. For each one, ask me the question, wait for my answer, then act. Skip sections I decline.

1. Starting point

  • Am I starting a new vault or adapting an existing one?
  • What's the absolute path?
  • Is it already a git repo? If not, should we git init and make the first commit?

2. Directory skeleton

Propose this structure and ask which folders I want: people/, projects/, ideas/, daily/, weekly/, Clippings/, plus a top-level namespace folder for my work/life context.

Only create the ones I confirm.

3. Frontmatter conventions

Ask if I want the type / tags / created convention enforced. If yes, create a short CLAUDE.md (or AGENTS.md) at the vault root documenting it so future agent runs stay consistent.

4. Obsidian plugins

Group plugins by job and ask which groups I want. Don't install them — Obsidian plugins install through the app. Instead, produce a checklist I can work through in Obsidian's Community Plugins browser.

Groups to offer:

  • Querying (Dataview, Tasks, Omnisearch) — the core. Recommended.
  • Capture speed (Templater, NL Dates, Linter)
  • Navigation (Homepage, Icon Folder, File Explorer Plus)
  • Specialized (Excalidraw, Leaflet, Mindmap)
  • Sync (Obsidian Git, Local REST API, MCP Tools)

5. Dashboard

Ask if I want a home dashboard (Home.md or similar) with Dataview queries for overdue / due-today / in-progress / recently-touched. Only create it if Dataview and Tasks made it into the plugin list.

6. Automation layer

Ask which coding agent I use. If it's one that supports slash-command skills, offer to scaffold a .claude/skills/ (or equivalent) directory with starter skills. Offer these one at a time and let me pick:

  • today — daily plan from due tasks
  • new — quick capture with auto-classification
  • daily-review — end-of-day comparison of planned vs actual
  • weekly-rollup — synthesize the week's daily logs

Write each skill as a short markdown file with a description and prompt. Don't over-engineer. A skill that's 20 lines is fine.

7. Inline action tags

Ask if I want the ;; inline action-tag pattern. Explain it briefly: while writing a note, I can drop ;; do X mid-sentence to mark something as actionable without breaking flow. A skill sweeps them out of notes on demand.

If yes, scaffold one minimal skill — process-actions — that does just this:

  • Greps the vault for lines containing ;;
  • Appends each one to a single tasks/inbox.md file with a backlink to the note it came from
  • Removes the ;; line (or strikes through) from the original note after filing

Do not wire up Jira, Slack, or any external routing. That's a personal next step once I've connected my own integrations. Say so explicitly in the skill file as a comment.

8. Git hygiene

Ask if I want automatic commits on every change (via Obsidian Git plugin settings) or manual commits only. Recommend automatic for a personal vault.

Ground rules

  • One question at a time. Don't front-load a wall of questions.
  • Show before you write. Preview file contents before creating them.
  • No boilerplate. Don't generate 500-line starter files. Keep everything minimal and let me grow it.
  • Stop and summarize at the end with a list of what was created and what I should do next (e.g. install plugins in Obsidian, review the dashboard).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment