Overview: Dragon is a conversational AI companion that families FaceTime with. It draws out stories, memories, and knowledge from each family member and weaves them into a shared narrative across generations. Built at Opponent Systems, founded by Ian Cheng, and shipped to 1,000+ users.
Year: 2025
Team: Opponent Systems
Roles: Python
Dragon is a conversational agent — when it's mid-call, half a dozen background processes are listening, researching, and updating memory in parallel, and none of that is visible from logs. I built a real-time operator console that lets the team watch a call as it happens: a Next.js frontend connected to the Python agent over Socket.IO, with dedicated panels for the live knowledge graph, the running transcript, and the event stream. The UI buffers state so engineers can drop into a call mid-flight without missing context, and a 'simulate message' tool lets us push test inputs straight into the agent — no phone required. It turned a black-box agent into something the team could watch, poke, and ship new behaviors against with confidence.

I built Dragon's live research system. While a call is happening, the system listens to the transcript and detects topics worth digging into — both explicit cues ('have you seen…') and ambient mentions of people, places, and events — then runs web searches in the background and injects a summary into Dragon's context so it can speak to the topic without breaking the flow. A queue keeps explicit requests ahead of ambient ones, and a per-session cache prevents repeat research. Built in Python on top of Groq for low-latency LLM inference.
For post-call follow-up, I shipped an iMessage feed: a two-stage LLM pipeline reads what came up in the call, cross-references each family member's recent message history, and texts them a curated article — video sessions within 10–20 minutes, text sessions on a 24-hour delay outside quiet hours. A dedup layer ensures no one gets the same story twice. Each call turns into days of ambient engagement.

Every conversation Dragon has gets distilled into facts — people, things, and the relationships between them — and stored as a per-family knowledge graph. I built an interactive visualization in React + D3 that renders the graph live, with nodes and labeled connections that arrange themselves automatically as new facts stream in over WebSockets. Clicking a node pulls up its underlying assertions and provenance in a side panel. It became how the product team judged what Dragon was actually learning, and steered what it should pay attention to.
