Skip to content

Mini-app

Companion Face

Apps

An always-on face beside your camera that reacts to your assistant

  • Android — supported
  • iPhone — not available
  • Mac — supported

Capabilities

What it does

Far more than a mascot — an ambient OS docked at the camera edge.

  • Always-on at the camera edgeMac notch or Android punch-hole — a living face that blinks, glances, and never steals focus.
  • Speak with lip-synccompanion_speak uses your voice path — on-device TTS or ElevenLabs — while the mouth follows the audio.
  • Powers that run the pillFocus timer, wellness nudges, now-playing show, system pulse, and Slap — each drives the face through the same arbiter.
  • Sensors, not a cameraVolume, battery, headphones, lid lift, thermal, unlock, network — OS moments as short face readouts. Deliberately no camera.
  • Claude Code · Codex · hooksDev agent hooks: permission peeks, celebrate on done, muted errors — loopback-only, token-gated, Benign-capped.
  • Studio + agent authoringIdle cycles, custom expressions, AI-badged invents from your agents — inspect or delete them in Studio.

Powers

What the companion performs

Powers run in the companion module and drive the face through the same arbiter the Studio uses — never generic in-app utilities wearing a face sticker.

  • Work · short break · long break

    Focus timer

    A real Pomodoro that takes over the pill — your focus label, a live countdown, and a celebrate burst when the session ends. The face peeks back in so you know it's still with you.

  • Quiet hours respected

    Wellness nudges

    Per-nudge rows with bespoke face animations, intervals, and quiet hours — stretch, water, look away — without another notification stack.

  • Live media session

    Now playing

    Hooks the system media session (macOS MediaRemote / Android MediaSession). While a track plays, the face runs a rotating show and reacts on every track change.

  • Volume · power · audio · more

    System pulse

    OS moments as face readouts: volume HUD, charging, headphones, unlock wave, dark mode, thermal, network, low power — short-lived, then it yields the pill back.

  • Optional power hook

    Slap (hook)

    Wire the face to Slap — accelerometer-detected desk slaps, meme soundbites, and a leaderboard. Configure it from the Slap app; the companion just reacts.

  • Gestures · moods · AI authoring

    Idle cycles & Studio

    Combos and playlists keep the face alive when nothing is happening. Agents can invent expressions (AI-badged in Studio); you can inspect, reuse, or delete them.

Sensors & system

It reacts to the machine — not a camera

No camera grant, ever. The face is driven by OS and device signals; raw samples and typed text never enter the engine.

  • Volume & mute

    Live percent HUD while you crank the keys; mute/unmute get their own line; 100% earns a celebrate.

  • Power & battery

    Plug-in thumbs-up, unplug notice, low/critical crossings, full-charge celebrate — without opening Settings.

  • Audio devices

    AirPods or headphones connect → device name on the pill and the face puts its own headphones on.

  • Lid angle & lift (Mac)

    MacBook lid sensor: live tilt readout, curious peek on a fast swing. Lift the machine and it is (comically) afraid of heights — then a relieved phew when you set it down.

  • Thermal · network · unlock

    Running hot, offline/online, welcome-back wave on unlock, lights-out / rise-and-shine on appearance change.

  • Android sensor moments

    Shake, posture, pocket, ambient light — plus privacy-minimised accessibility moments (foreground app, touch, scroll, typing). Raw samples and typed text never enter the engine.

Agent hooks

Claude Code, Codex, and anything that can POST

A loopback, token-gated hook pipeline turns coding-agent lifecycle into face reactions, optional notify/TTS, and local summaries — Benign-capped forever.

  • Session · tools · permission · stop

    Claude Code

    Hooks in ~/.claude/settings.json stream session, tool, permission, and stop events into OpenAlly. Permission prompts PECK the notch so you know Claude needs you.

  • agent-turn-complete

    Codex CLI

    Codex notify posts turn-complete (and more) into the same pipeline — the face celebrates when a turn lands, without you watching the terminal.

  • Any DevEvent shape

    Generic webhooks

    POST a versioned DevEvent from CI, long builds, cron, Gemini CLI, OpenCode, Aider — one adapter each. Same face reactions, same activity feed.

  • Face · notify · TTS · summary

    Reaction pipeline

    task:running → thinking · task:done → celebrate · attention → peek · error → muted error. Optional system notify, TTS one-liner, local LiteRT summary, and automation triggers. Loopback-only, token-gated, Benign-capped.

Voice

On-device TTS or ElevenLabs

Prefer companion_speak so the face lip-syncs. Stay fully local, or bring your own ElevenLabs key for studio-grade voices.

  • companion_speak + lip-sync

    The skill's preferred path: speak in your configured voice while the face lip-syncs. Short, conversational lines — not monologues.

  • On-device TTS

    Platform TTS with a detailed lane (utterance IDs, range offsets) so the face starts, articulates, and stops in lockstep — nothing leaves the device for speech when you stay local.

  • ElevenLabs

    Bring your own ElevenLabs key for lifelike voices, Scribe, sound effects, music, and voice design. Generated audio is saved for playback; the companion can still lip-sync what you play.

Film

See it in action

A real recording of Companion Face — not a mock-up.

Prompts

Try asking

Quick actions Companion Face puts in front of you — tap one in the app, or type your own.

  • Wave helloWave at me from your companion face and say hello out loud.
  • Invent an expressionInvent a brand-new facial expression for yourself — something playful — and add it to your face.
  • Calm morning cycleCreate a calm morning idle cycle for your face and switch to it.

Where it lives

Mac: notch panel. Android: in-app and optional camera-edge overlay. Agents control it with companion_* tools.

What it needs

Nothing invasive — no camera. Optional overlay permission on Android for over-other-apps. TTS and ElevenLabs are opt-in voice paths.

The skill that drives it

Grant Companion Face to an agent and it gets companion_status, express, speak, and the expression/cycle authoring tools.

Get Companion Face

It ships inside OpenAlly — one install, the whole catalogue.

Get OpenAlly

More like this