A Gardener for my Obsidian vault and a Morning Paper for my reMarkable

A reMarkable tablet lying on a wooden desk next to its pen, showing the front page of The Morning Paper: a blackletter masthead, the date and weather for Cambridge, a photograph of the Perseid meteor shower, and the start of a Today list. Wednesday's front page. The masthead is set in Chomsky, which is a free blackletter face inspired by the New York Times, and the photo is NASA's Astronomy Picture of the Day.

Two weeks ago I bought a reMarkable Paper Pure, and predictably, have become obsessed with it. It has healed something in me that just wanted to write with a pen again, away from the overwhelming noise of my phone. It has also, again predictably, sent me down a rabbit hole of making my tech communicate with fragile little pyramids of code.

I was already struggling to keep my Obsidian vault - a giant undifferentiated knowledge base sitting in midst of the ruins of at least two failed organisational systems - and my real life harmonised. Adding a reMarkable to this - although it meant that I was writing copious notes and thinking more clearly than I had been in months - meant that I now had notes in yet another place. This would not do. And it could be solved with code.

A week ago I read Danny McClanahan's post about using Obsidian and Claude as a personal assistant, then his follow-up about what it did to his productivity, along with the post which inspired him. After handing all of this - and access to my vault, on which more later - to Claude Code, I had the workings of a system which has so far thrilled and delighted me every morning. It has two pieces, which I call the Gardener and the Morning Paper, and here is what they do.

The loop

I write things down wherever I am. This might be an untitled note in Obsidian or a page of handwriting on the tablet. It all lands at the root of my vault, or stays on the tablet, and I leave it there at the end of the day. I don't have to name it or file it (which is great news because historically I never did).

It gets filed overnight. A cron job - the Gardener - reads everything at the vault root, works out what each file is, gives it a name and some frontmatter, links it to the notes it's obviously related to, and files it into the folder structure. Handwritten pages get transcribed and filed the same way, with an image of the original page embedded at the bottom of the note so I can reference any diagrams and untranscribable scribbles. Crucially, if the Gardener can't work out where to put something, it doesn't guess - instead, it writes me a question. And it never writes slop into my vault: the principle I took most seriously from Danny's posts is that the core Obsidian vault only contains things a human actually wrote. The only thing it writes is the short note it leaves for me each night saying what it did.

In the morning, I get a report. This is the bit that turned into the Morning Paper, although it didn't start out this way. I initially just wanted to know exactly what the Gardener had done to my notes the previous night, which started as an email, then transitioned to a PDF which I could receive on my reMarkable instead (because mornings without a laptop are better mornings). This was then embellished with the weather, my calendar and Todoist tasks, a picture of space, and three good bits of science and literature news - heavily inspired by Goosepaper, a service which prints you a daily newspaper for your reMarkable. The finished Morning Paper gets sent to a folder on my reMarkable every morning as a PDF so I can enjoy it over a coffee.

A section of the paper headed The Bright Side, with three short news items about Miocene crocodylians, flightless beetles in Japan, and a Japanese mission to the moons of Mars. The Bright Side focuses on small, exciting science and lit news. This is the one section an LLM writes. It's told very firmly to stick to the facts and not extemporise.

I can write back. The last page of the Morning Paper is a blank reply sheet. Anything I scribble on it - an answer to a question, a new note, a task I've crossed off - gets read and filed by the next morning's Gardener. That part does need the reMarkable, or something like it, but the rest of the system works just as well if the paper only ever arrives by email.

The whole flow was inspired by how I use Todoist, which is the only productivity tool that has so far worked for me: I can dump anything in the Inbox just by writing (almost) plain English, and it will be sorted and filed and reappear exactly when it's relevant and no earlier. For a long time my vault didn't have that guarantee, so it filled up with Untitled notes and I stopped opening it. Now the vault root is explicitly the inbox, and something empties it every night without me having to keep up the structure. The paper does the same job in the other direction: it brings the vault to me at the one time of day I'm reliably going to read it, and it doesn't involve a screen.

The shiny three-piece suit of the enemy

I said I'd get to this. I'm really not an AI groupie. If anything I'm one of the fearful sceptics who suspect it's the perfect vector for capitalism to finally fuck us all over for good. I might even be Matthew McConaughey in Contact. But like Matthew McConaughey in Contact, I'm prepared to put on the shiny three-piece suit of the enemy and understand it from the inside, before possibly returning to my faith and blowing it all up in the third act.

I use Claude Code all day, every day at work, because deadlines have compressed to the point where they're unrealistic without it, and in the process I've realised how much it can help me in the space of organisation and recall. I've connected it to my Obsidian vault with a great deal of unease. I'm uneasy enough that this experiment may not last long.

On the one hand I get great handwriting recognition via Claude Vision, a personal assistant that understands a decade of my notes, and a task that intelligently files them while I sleep. On the other hand I've given up autonomy, open source, and any real claim to digital sovereignty over the vault. I'm hoping that open source models running on midrange hardware at home become good enough that I never have to make this choice again. For the moment, they aren't.

How it's built

Everything runs on my home server. mimir is the vault infrastructure: a Docker Compose stack that keeps a server-side copy of the vault in sync with Obsidian Sync, serves it over MCP so Claude can read and write notes, and shows a little read-only dashboard. A private repo holds the agent layer on top: the Gardener, the Morning Paper, and an on-demand MCP server for talking to the reMarkable. Both are just agglutinations of small scripts rather than real software. The heavy lifting is done by three open source projects:

  • obsidian-headless-sync-docker by crosbyh, which runs the official Obsidian sync client headlessly in a container, so the vault on the server is synced.
  • obsidian-web-mcp by Jim Prosser, which serves the vault as an MCP server over the web.
  • remarkable-mcp by Sam Morrow, which does the same for the reMarkable cloud, allowing me to browse, read, and write files on the tablet via Claude.

What follows is a sketch rather than a detailed guide. It assumes you have Obsidian Sync, a Claude subscription, and somewhere Linux-shaped that's on all night. Steps 1 to 4 are the core route; step 5 is the tablet.

Step 1: Put the vault onto the server

Clone mimir, fill in .env and the secrets directory, and run docker compose up -d --build. The sync container downloads the vault into ./data/vault, and from then on the vault-mcp container serves the MCP server on port 8420 on the host. There's an optional Cloudflare Tunnel so the Claude app on my phone, Claude Code, and Claude on the web can all reach the same MCP server from anywhere, which turns out to be very useful ("what presents did I want to get my wife this year?").

Step 2: Write the Gardener's rulebook

The Gardener reads its rulebook directly from the vault at runtime, from a CLAUDE.md at the vault root. This means I can always edit the rules in Obsidian on my phone. The core of the CLAUDE.md is:

## The contract

1. The vault root is the inbox. Any file at the top level is unprocessed by definition.
2. The Gardener processes the inbox: name untitled notes from their content, add
   frontmatter and tags, merge duplicates, wikilink related notes, and file everything.
3. Questions live at root, not in the log. Anything needing my input goes into
   `Gardener questions.md`; I answer by editing the file.
4. Log real moves, tersely. 1-3 lines per entry. No entry at all for no-op runs.
5. Filed-but-imperfect beats unfiled. Make a sensible call and note it.
6. Soft deletes only. Anything removed goes to `.trash/`.

The rest of the file is a map of the folder structure, the frontmatter conventions, and a short list of privacy rules, such as notes and folders it must never interact with at all (although who knows if this works!).

Step 3: Run the Gardener

The Gardener is Claude Code run headlessly with claude -p, and the wrapper script is deliberately dumb: it takes a lock, opens a logfile, and hands the model a prompt and a strict list of tools. Here's the heart of it:

claude -p "$(cat PROMPT.md)" \
  --append-system-prompt "Mode: $MODE." \
  --mcp-config .mcp.json --strict-mcp-config \
  --allowedTools "$TOOLS" \
  --max-turns 200

.mcp.json points at the vault's MCP server on localhost (and, if you have one, the tablet - see step 5), and --strict-mcp-config means it can't pick up any others. The model has no shell or filesystem and no web access. It can only do what those servers let it do, and every write to the vault ends up in an audit log with a hash of the token that made it.

A nice bit here is how I set up --dry-run. Rather than politely asking the model not to change anything, the wrapper just removes the write tools from --allowedTools. The model can plan a whole run and tell you what it would do, but it genuinely cannot do it.

Finally there's a crontab line:

30 4 * * * /home/raphael/gardener/run-gardener.sh >/dev/null 2>&1

Step 4: Print the paper

morning-paper.py is a Python script which collates the following:

  • Weather from Open-Meteo.
  • NASA's Astronomy Picture of the Day as the masthead image.
  • Today's events, from ICS calendar feeds.
  • Today's Todoist tasks, from the Todoist API.
  • Recent items from a list of RSS feeds (Quanta, NASA, ESA, Phys.org, LitHub, the Public Domain Review), handed to claude -p with an instruction to pick two or three positive and interesting ones and rewrite them as short factual snippets.
  • The newest log entry from the Gardener, and every open question it asked, which are just piped directly from the named Markdown files.
  • A blank reply page.

It writes a Typst file, makes it into an A5 PDF, and emails it to me.

Step 5: Add the tablet

This bit is optional but certainly delights me.

The reMarkable talks to the stack through remarkable-mcp, which runs in its own container. It runs --read-only when it's being used by the Gardener (the only write-enabled run is the paper upload). At the start of each run, a small script mirrors every notebook page as a PNG into a media folder in the Obsidian vault, both for backup, and so transcriptions can embed their source page.

Going the other way, an upload script drops each morning's PDF into a Paper/ folder on the tablet and prunes anything older than the newest seven issues.

The last page of the paper is a blank sheet with a header that says anything written here is filed by tomorrow's gardener. The Gardener knows to render the final page of any edition it hasn't seen yet, and if there's reMarkable ink data below the header, to treat it as inbox content: transcribe, file, answer the question, etc. So far I've used it to answer the Gardener's questions, and I've crossed out finished tasks on the Todoist page and had that noticed too. Writing something with a pen on the back of a newspaper and finding it in the right note the next morning is a very good feeling!

Limitations

This thing is a week old and is built for one person, so please treat all of the above as a working sketch rather than a finished design.

You need to be comfortable with an LLM having write access to your notes. I've done what I can to make that better for me - soft deletes, the audit log, the dry-run mode, one folder that is never read at all, and a nightly cap of about thirty items so a bad run can't do that much damage - but it is still a piece of software with power over a vault and its own judgement rearranging my files.

You also need to be comfortable with the running costs: Obsidian Sync, a Claude subscription, and a server that's on all night.

What's next

Some ideas I've parked for now:

A pen puzzle

A daily sudoku, mini crossword, or the Lichess puzzle of the day on the reply page, which I can solve with a pen and have checked by the next morning's Gardener. This feels like the most delightful improvement.

A sky line

Sunrise, sunset, moon phase, astronomical events, in the header.

A year ago today

One greyscale photo from my Immich library, as a daily memory. Sadly a lot of my photos are just random snaps of electronics that isn't working.

A Sunday edition

A weekly variant with the week ahead, a public domain poem, and a reflective prompt on the reply page that Monday's Gardener files into the journal.


I've written this partly so I remember how it all fits together, and partly because I think other people with an Obsidian vault and a habit of writing things down in the wrong place might like it too. If you do set up your own Gardener, or your own paper, I'd love to hear about it - and tell me if it inspires you to do weird stuff with your tech!

References, consolidated