Selected work

Creator · Personal AI agent · 2026

A single-user WhatsApp gateway to Claude that runs on my own Mac with no API key.

  • Node.js
  • TypeScript
  • Baileys
  • WhatsApp
  • Claude CLI
  • MCP
  • Whisper
  • Vitest
Three WhatsApp-style chats with Glitch shown side by side
Three flows side by side: a voice note, a PDF review and a read-only refusal.
  • 101

    Tests green

  • 2

    Independent security layers

  • 0

    API keys: it runs on my Claude subscription

Glitch is a personal gateway for chatting with Claude over WhatsApp. One always-on Node process runs on my own Mac and drives the local claude CLI on my subscription, so only I can reach it. It reads images and PDFs, transcribes voice notes and video locally with Whisper, and reuses the Claude Code memory stack plus an on-demand memory tool exposed over MCP.

How a message flows

A message first passes an allowlist gate, which fails closed. It then joins a single-flight queue so only one turn runs at a time, and goes to the claude CLI with the prompt passed through stdin. The reply is split into chunks and sent back as separate bubbles.

Media

Images and PDFs go straight to Claude. Voice notes and video are transcribed locally with Whisper, so the audio does not leave the machine, and the transcript is treated like any other message.

Memory

Glitch reuses the Claude Code memory stack and adds an on-demand memory tool exposed over MCP. A voice note that mentions a task can be saved as a reminder and found again later.

Two security layers

The first layer is the fail-closed allowlist that decides who can talk to it at all. The second is a read-only tool surface (Read, Glob, Grep, WebSearch and memory) enforced on every turn, with secrets kept outside the folder Claude can read. Either layer holds without the other.

Editing itself

Glitch can read its own code and draft a change, but it will not write from WhatsApp. Edits only ever land in a supervised dev session, where I review them.

Highlights

  • One always-on Node process on my own Mac, driving the local claude CLI
  • Fail-closed allowlist and a single-flight queue in front of the CLI
  • Prompt passed through stdin, replies chunked back into bubbles
  • Images and PDFs read, voice notes and video transcribed locally with Whisper
  • Memory through the Claude Code stack plus an on-demand MCP tool
  • Read-only tool surface enforced on every turn
  • Self-edits only in a supervised dev session
  • 101 tests green

© 2026 Theophilus Rex Danquah

Accra, Ghana