How PennyOS works with Obsidian
PennyOS is the pocket end of an Obsidian vault kept on an always-on computer you own. Here is what each side does, what crosses between them, and what your vault needs.
The idea
Obsidian keeps your notes as plain markdown files in a folder called a vault, linked with [[wikilinks]]. PennyOS reads those same files. Put the vault on an always-on computer, and the Beepy becomes a pocket window onto it: it reads your pages offline, asks Claude questions inside the vault, and files new notes back into it.
Obsidian itself does not need to run on the server, and PennyOS is not an Obsidian plugin. What matters is the folder of files. Keep editing the vault in Obsidian on your computer or phone however you already do.
The division of labour
| The Beepy | Your server |
|---|---|
| Draws, types, caches, and works offline. | Holds the vault, and thinks: Claude Code, a local model, search, mail. |
| Holds one SSH key that runs a fixed list of commands. | Holds every credential: Anthropic login, mail token, search keys, console token. |
| Reads a mirror of your pages. Never writes to it. | Is the only place anything writes to the vault. |
| Writes new notes and journal entries. | Receives them in inbox/pennyos/, where they show up in Obsidian as ordinary notes. |
This split is why losing the device is survivable. It is a remote control and a notebook, not a copy of your accounts.
What your vault needs
- A
wiki/folder at the vault root. This is what Vault mirrors onto the card. Put the pages you want in your pocket there. Everything outside it stays on the server. - Catalogue files at the root:
index.md,index-entities.md,index-concepts.mdandindex-sources.md, plusprofile.mdandCLAUDE.md. Vault opens onindex.md. If your vault has no use for the others, create them empty, or sync reports an error. - An inbox:
inbox/pennyos/andinbox/pennyos/journal/.
The .obsidian settings folder and .git are never copied to the device.
A vault PennyOS can read
My Vault/
├── wiki/ mirrored to the Beepy
│ ├── people/
│ └── projects/
├── inbox/
│ └── pennyos/ notes from the Beepy land here
│ └── journal/ journal entries land here
├── index.md Vault opens on this page
├── index-entities.md may be empty
├── index-concepts.md may be empty
├── index-sources.md may be empty
├── profile.md may be empty
├── CLAUDE.md may be empty; Claude Code reads it
└── .obsidian/ never copied
What crosses between them
Every request the device makes to the server is an SSH command, and a gate script on the server checks it against a short list before running it.
| Shape | Used by | What runs on the server |
|---|---|---|
rsync pull | Vault, sync | Sends wiki/ and the root files above. Sender side only. |
rsync push | Notes, Journal, saved reports | Receives into inbox/pennyos/ or inbox/pennyos/journal/, nowhere else. |
ask | Ask | claude -p in the vault folder, permission mode forced to default. |
localask | Chat | tools/local_ask.py in the vault: retrieval plus a local model, read only. |
glance | Glance, Home, the LED | Fetches /glance from your console with a token read on the server. |
usage | Usage, the clock face, Ask's footer | Fetches /usage the same way. |
mail | The read only mail reader, never its sign in command. | |
search | Search | The lookup script with one of its five kinds. |
storefront | Store's dig | The dig script, for an address that starts with a digit. |
vaultkey | Boot, optional | Prints the second key for the encrypted card. Only for the separate boot key. |
Anything else is refused with a JSON error and logged with the command. See The gate.
The loop, end to end
- You jot a note on a bus with the radio off. It is on the card.
- You get home. The device joins Wi-Fi, sees the server, and syncs: the note goes to
inbox/pennyos/, a fresh mirror ofwiki/comes back, and Mail, News and Glance refresh. - The note appears in Obsidian on your computer. You file it, or have Claude Code work it into your pages.
- Next morning, the updated page is in Vault on the device, and Ask can answer from it.
Nothing in that loop needs you, the device and the server online at the same moment.
Pieces PennyOS does not include
Three apps talk to things on the server that you provide. If one is missing, that app says it cannot answer and nothing else is affected.
- A console, for Glance and Usage. A small web service on your private network that answers
/glancewith a few plain text lines about overdue items, and/usageand/usage/refreshwith Claude usage as JSON, accepting a token in aktokencookie. - A retrieval script, for Chat.
tools/local_ask.pyin the vault, which takes a question and recent turns, finds matching sections of your pages, asks a local model, and streams back the pages it read and the answer as JSON lines. - Keeping the vault current. PennyOS delivers notes to the inbox. Whether you file them by hand or with an agent is up to you.
Without a server
PennyOS runs fine alone. Notes, Journal, Keys, Clock, Solitaire, Weather, Field, News, Store and Link all work. Add a server later with Server setup.
Which pieces each app needs
| App | Needs on the server |
|---|---|
| Vault | The vault, with wiki/ and the root files. |
| Notes, Journal sync | The inbox folders. |
| Ask, Store dig | Claude Code, signed in. |
| Chat | Ollama and tools/local_ask.py in the vault. |
| Glance, Usage | A console and its token. |
pennyos-mail and a mail account configured. | |
| Search | pennyos-osint, and MailAccess for email and domain. |