Personal AI system · built and run by me

Proxy

Proxy is my AI chief of staff. It reads what comes in from Slack, email and my calendar, drafts the replies and tasks, and hands bigger jobs to coding agents. Nothing leaves without my approval. I designed it, wrote most of it with AI coding agents, and use it every day.

3 machines Slack · Gmail · Calendar intake Claude, Codex and Pi agents Voice + dictation Fingerprint-signed approvals
Proxy overview: a Needs you column listing approvals and finished agent runs beside a task board with To do, In progress and Done columns.
Overview. "Needs you" lists what's waiting on me: approvals, agent questions and finished runs. The board shows every task across my workspaces. Screenshots use sample data.

How it works

Intake, draft, approve, ship

Every 15 minutes, a dispatcher goes through what's new and decides what to do with each item. Routine work becomes a draft or a task. Bigger work becomes a brief for a coding agent. Anything that would act in my name waits for me.

  1. 1 · INTAKE

    Read what came in

    Slack messages, email, calendar events, voice notes and meeting transcripts.

  2. 2 · DRAFT

    Do the first pass

    Draft replies, create and file tasks, write briefs and suggest meeting times.

  3. 3 · APPROVE

    I decide

    Sends, invites, new tools and agent runs all wait for my sign-off. The protected ones need a fingerprint.

  4. 4 · SHIP + REPORT

    Act and close the loop

    It sends exactly once, runs the agent and reports what changed in "Back to me".

Proxy's Slack view with a Needs you section and Reply with Proxy's draft buttons under messages.
Slack, with drafts ready. Proxy flags messages that need me and drafts the replies from my docs and earlier decisions. "Catch me up" summarizes a busy channel.
Approvals panel listing a message to send, a meeting invite, a hand-off to Claude, a website permission and a tool call.
Approvals. One queue for emails, Slack replies, invites, agent hand-offs and new tool access. Nothing goes out until I approve it.

How it's built

Three machines, one system

Proxy runs across my home setup. The laptop is where I talk to it, the Mac mini holds the app and the connections, and a home server runs the agents so heavy jobs never slow my laptop down.

Laptop CachyOS Linux · niri

  • Proxy opens as a desktop app with Super+P
  • Top-bar widget for voice, meetings, dictation and the approval count
  • Hold a key to dictate: local Whisper transcribes, an AI pass cleans the text, then it types it
  • Fingerprint reader signs protected approvals

Mac mini the hub

  • Dashboard and API (Python, FastAPI) with its own MCP server
  • n8n workflows for Slack and Gmail intake and sending
  • A small Swift bridge to Calendar.app for events and invites
  • Voice companion: wake word, Whisper and spoken replies

Home server Docker · Herdr

  • Claude Code, Codex and Pi agents, one terminal workspace per project
  • Dispatcher runs every 15 minutes and asks before handing work off
  • Agents use Proxy's tools through MCP and report back when done

Proactive

It brings work to me

Proxy doesn't wait for a prompt. It notices a Slack question, drafts the answer and puts it in my queue. When something needs a developer, it writes the brief and asks: "Can Claude do this?" I get the ask as a dashboard card, a top-bar badge, a desktop notification and a Slack DM.

Organized

One place for every project

Work is filed as Workspace → Project → Task, so marketing, side projects and the homelab stay separate. Every task in progress links back to the agent chat that's working on it, so I can pick it up from either side.

Voice

Talk instead of type

"Hey Proxy" starts a conversation hands-free, and it can listen to a whole meeting and file the notes. The live transcript appears under my clock as I speak.

Safe by design

Agents can't approve themselves

Prompt injection is real, so sending email or Slack, adding tools and delegating work all need a signed approval. On my laptop that signature comes from the fingerprint reader. Every send goes out exactly once.

Chat with Proxy: a running conversation with voice and typed turns, including a task card Proxy created.
Chat with Proxy. Typed and spoken requests share one thread. The mic marks voice turns, and any task Proxy creates shows up as a card.

Why it matters for marketing

The same pattern runs a demand engine

Proxy is a working model of an AI-first marketing team. Agents do the first draft and the busywork, people set direction and approve, and every step is measured and logged. I already use that loop for marketing work:

Stack

Python · FastAPIJavaScriptSwiftLuau MCPClaude CodeCodexPi n8nWhisperTailscaleDockerPlaywright tests