Accessing My Vault with Telegram

I can now send a Telegram message and have Claude edit my Obsidian vault — from anywhere, on any device, without opening my laptop.

The Problem

Obsidian is great on desktop. On mobile, it’s tolerable. But the moment you want to do anything beyond opening a note and typing, it falls apart — no scripting, no automation, no real way to run vault pipelines on the go.

I wanted something closer to how a second brain should work: you tell it something, it remembers it properly, organises it, and surfaces it back when relevant. Not a glorified folder of markdown files.

The missing piece wasn’t storage or sync. It was a conversational interface with actual intelligence behind it.

The Solution

Run Claude 24/7 on the NAS, inside a Docker container, mounted directly onto the Obsidian vault. Connect it to a Telegram bot. Now I have a persistent AI that has full read/write access to my notes — accessible from my phone at any time.

This isn’t using an API. It’s running the Claude terminal itself, with Telegram as the input channel. That distinction matters — it means Claude has access to all its tools (file edits, search, skill execution), not just text generation.

p.s. this is version 1 of the Home Lab Architecture

Architecture

Four layers, each with a specific job:

1. Real-time vault replication via CouchDB Obsidian Self-hosted LiveSync replicates the vault across all devices — Macbook, iPhone — via CouchDB running on the NAS. Any device that opens Obsidian pulls the master copy instantly.

2. Headless LiveSync CLI A headless LiveSync instance runs inside Docker, keeping the Claude container’s local copy of the vault in sync with CouchDB. When I write a note on mobile, it propagates to the container. When Claude edits a file, it propagates back out to all my devices.

3. Claude in Docker, mounted on the vault Claude runs as a persistent container with the vault directory mounted as a volume (markdown files only — CouchDB wasn’t viable here, hence the headless sync approach). It starts with claude --channels plugin:telegram@claude-plugins-official and stays alive.

4. Telegram as the interface Messages to the bot arrive as channel events in Claude’s session. Claude reads the vault, makes edits, replies — all within the same conversation context.

[Telegram message]
        ↓
[Claude (Docker on NAS)]
        ↓
[Edit vault files]
        ↓
[Headless LiveSync → CouchDB]
        ↓
[All Obsidian clients pick up change]

Getting It Running

The setup was more painful than expected. A few things that caught me:

Cross-device auth: Claude authenticates on MacOS first. Porting the config to Linux (inside Docker) breaks the Telegram plugin path — the plugin references MacOS-style paths. Fix: volume-map both .claude.json and the entire .claude/ config directory into the container.

Interactive OAuth doesn’t work in a container: The OAuth flow tries to open a browser link, which doesn’t work headlessly. The workaround was claude setup-token to generate a 1-year access token — no interactive login required.

Plugin reinstall: After the cross-device config port, the Telegram plugin needed to be reinstalled inside the container to fix its path resolution.

RAM cap: The container is capped at 2GB to protect the NAS’s 8GB total. Hasn’t been a problem in practice.

What This Unlocks

The goal isn’t just “edit notes from my phone.” It’s the foundation for a self-improving knowledge pipeline:

  • Inbox processing: dump rough notes via Telegram, Claude refines and files them into the right vault directory
  • Vault queries: ask questions, get answers grounded in my actual notes
  • Weekly summaries: trigger a state-of-the-brain report without touching the laptop
  • Skill execution: run vault cleanup, index generation, or any other pipeline skill on demand

This is roughly what tools like OpenClaw aim for — but without handing over API keys or trusting a third-party service with the vault. The intelligence runs locally (on the NAS), the interface is Telegram, and the data never leaves the home lab.

Current Limitations

Conflict resolution is manual. If Claude edits a file while another Obsidian client has it open, CouchDB registers a conflict. The next time any client syncs, Obsidian surfaces the conflict for manual resolution. For now it’s manageable — conflicts are rare in practice — but it’s the main rough edge in the flow.

Access is also restricted to a single allowed user (me) for now. Expanding that requires explicit allowlist configuration.

The basic functionality is working. The pipeline is real. Everything else is polish.