Skip to main content

The doors

There are several ways to talk to the system. Each one is a door into the same brain and the same vault. The owner picks the one that fits the moment.

Where you see it​

This is the most visible part of the system. The owner uses these every day.

DoorBest forWhat powers it
The chat page and the OfficeDaily use from phone or desk. Shows each step as it works.sdk_server.py on the box
A laptop sessionDeep work and careful checking.Claude Code on the laptop, no server
EmailA zero-setup fallback. Write to the agent, the reply comes back to the inbox.watcher.py on a timer
DiscordReach the full agent from anywhere, privately.discord-agent.py, always connected
WhatsAppThe one door that can start a conversation. The box can text first.A WhatsApp bridge on the box
The Claude appA quick question from the Claude app.mcp_door.py, a connector

A separate program, auth_door.py (the public door), is not a chat at all. It handles the owner's taps: reconnect a login, approve a held action. Because of it, a tap never needs the chat page's login. The chat page itself can be reached from the internet, but only behind its login and its secret link.

What happens, step by step​

  1. The owner opens the chat page on their phone and types: "What did the bakery order last week?"
  2. sdk_server.py checks which key the page was opened with.
  3. It starts one run of Claude with the vault as its home folder.
  4. That run reads the model setting from the logbook, the same place every door reads it.
  5. It reads the vault files it needs.
  6. The answer streams back, with each step shown as it happens.

Discord works the same way. A message from an allowed Discord account goes straight to a full agent run. The bot answers only accounts on its allow list.

What powers it​

PartWhat it does
sdk_server.pyRuns the chat page and the Office. Checks the key, starts each run.
auth_door.pyThe public tap door: reconnect, approve. No chat.
watcher.pyReads mail sent to the agent and replies. Refuses forged senders.
discord-agent.pyKeeps a live connection to Discord and passes allowed messages on.
mcp_door.pyLets the Claude app ask the box a question.
The logbook settings rowsWhich model answers. A global row, plus an optional row per agent.

Why it works this way​

Different moments want different things. At a desk, the owner wants to watch the work. On a walk, a quick message is enough. With no app handy, email works. Discord was chosen as the "from anywhere" door because it is free and private. Giving the box its own phone number risked WhatsApp bans.

The Claude app door is the weakest. The app's own Claude calls a tool on the box and gets an answer back. That is two brains passing notes, not one brain. So it comes last.

One place for the model setting. Which Claude model answers is a settings row in the logbook. There is one global row. An agent can also have its own row, and that row wins for that agent. An agent with no row of its own uses the global one. So changing the global row changes every door, except for agents that have their own row. In the owner's words: "they're all reading their model from one place."

Owner and mechanic

There are two kinds of key. The owner is the person whose company it is. The mechanic is the person who maintains the box. The mechanic key can change things. The client key on the chat page can read everything and change nothing.

An honest note about quick answers​

A fast answer can look just as sure as a careful one while having checked much less. There is no step limit on any door. Shorter answers are a habit, not a rule of the machine. Once, a quick answer produced a price table five times too high, because it never opened the file with the real number. For anything that matters, ask the agent to check its source, or use a deeper session.

Connected to​