Agent Face: giving your AI coding agent a soul
Why I spent a weekend building a floating, transparent face for my AI agents — and what it taught me about MCP, presence, and trust.
- MCP
- Tauri
- Rust
- Agents

The premise
Working with an AI coding agent feels like collaborating with a brilliant intern who lives behind a one-way mirror. You can see their output. You can't see them thinking. So one weekend I gave them a face.
Agent Face is a floating, transparent, always-on-top "face" that sits on my desktop and reacts in real time to whatever the AI agent is doing.
- Tools running? 😼 working.
- Reasoning through a hard problem? 🤔 thinking.
- Tests pass? 😸 happy.
- Compile error? 😿 sad.
It makes agents feel human. That sounds frivolous. It isn't.
The stack
- Tauri 2 — for a tiny, native, transparent window. Memory footprint is a fraction of Electron.
- Next.js 15 + React 19 — the UI inside the window.
- Rust + rmcp 1.5 — the MCP server (Streamable HTTP, bound to
127.0.0.1only — nothing leaves the machine). - File-driven face packs — drop a folder of PNGs/GIFs + a tiny
config.jsonand your custom face is live.
You can spawn as many faces as you want, each addressable by label, so multi-agent setups can each have their own avatar.
The four tools
The MCP server exposes exactly four tools:
spawn_face(label, pack)
set_face_state(label, state)
get_face_state(label)
close_face(label)
Any MCP-aware client — Copilot, Claude Code, Cursor — can drive the face with a few lines of instructions.
Why it matters
When you can see the agent's state, you start trusting it more. You catch loops faster. You notice when "thinking" has lasted suspiciously long. Presence is information.
Code coming to GitHub very soon.
Up next
Your Copilot is quietly leaking 53,000 tokens per call
What I found when I parsed real GitHub Copilot chat exports — and the dashboard I built to fix it before June 1, 2026.