Give your agent
a face

One command. Your agent thinks, speaks, reacts, and emotes — in real time. Built for OpenClaw on Mac Mini.

# Add the plugin
cp -r openface ~/.openclaw/plugins/

# Open the face
open http://localhost:9999
State
Emotion

How it works

The plugin hooks into your agent's lifecycle. No code changes needed.

agent thinks
Purple, eyes drift up
agent speaks
Mouth moves, emotion detected
agent uses tools
Gear dots spin, focused eyes
agent listens
Wide eyes, raised brows
agent waits
Still, glancing at input
agent sleeps
Eyes closed, Zzz

Quick Start

Works with any agent framework. Or just curl.

# Start a face server
bun packages/server/src/index.ts

# Push state from anywhere
curl -X POST http://127.0.0.1:9999/api/state \
  -H "Content-Type: application/json" \
  -d '{"state":"speaking","emotion":"happy","text":"Hello!"}'
// Or use the client library
import { OpenFaceClient } from "@openface/client";

const face = new OpenFaceClient("http://127.0.0.1:9999");
await face.setState({ state: "thinking", emotion: "happy" });
await face.speaking("Hello world!");

Built for Mac Mini

Headless agents deserve a face. Run OpenClaw on your Mac Mini, view the face from any device on your network.

13 Emotions

Happy, frustrated, determined, embarrassed, proud, skeptical, and more. Auto-detected from agent output.

12 Face Packs

Swap visual identity instantly. Default, Pixel, Zen, Robot, Cyberpunk, Kawaii, Corporate, and a colorblind-safe pack.

Compound Expressions

Blend two emotions with intensity. "Nervously excited" is happy + concerned at 0.7 intensity.

Open Protocol

JSON over HTTP or WebSocket. Works with OpenClaw, LangChain, Claude Code, or plain curl.

Accessible

Screen reader support, colorblind-safe pack, reduced-motion respect. Tested for cross-cultural readability.