Inspiration
Every belief change leaves a trail — a moment of doubt, a mental flinch, a quiet recalibration that never makes it into words. But that internal process has always been invisible. We built Lumos because we believed that if you could actually see inside someone's mind as their thinking shifts — the resistance, the emotional reaction, the private stance diverging from what they say out loud — you'd understand belief change in a way that surface behavior never reveals.
What it does
Lumos runs multi-strategy persuasion simulations against a detailed persona and exposes the full internal picture in real time. It tracks the divergence between what someone says publicly and what they actually believe privately, classifies the cognitive mechanism driving each reaction (narrative transportation, reactance, identity-protective cognition, and more), detects identity threat events, and runs a cooling-off phase to distinguish genuine belief change from in-the-moment compliance. The Strategy Comparison Report then ranks every approach side-by-side — public delta, private delta, max stance gap, threats triggered, and whether the shift held.
How we built it
The platform is powered by a Python backend using:
The Persona: A FastAPI agent pipeline that runs each persuasion strategy as an isolated Claude API call, producing a full internal monologue, emotional reaction, private stance, and memory note per turn.
The Judge: A separate Claude-powered mechanism classifier that reads the internal monologue and persuader message against a grounded library of social psychology literature to label what cognitive process is actually at play.
The Memory: A rolling context system that passes prior memory notes forward across turns so the persona accumulates experience across a conversation without cross-contaminating parallel strategy simulations.
The Interface: A React + Framer Motion frontend with a split-panel MindViewer (public conversation left, internal monologue right), stance trajectory charts via Recharts, and a full comparison report with inflection point callouts.
Challenges we ran into
Public vs. private divergence: Getting the model to maintain a consistent gap between what the persona says publicly and what they actually believe privately — without collapsing into either full compliance or robotic resistance — required careful prompt architecture and per-turn validation of the stance delta logic.
AI agent compliance: navigating and altering the inherit tendencies of AI agents to agree when confronted with ambivalent perspectives and reasoning. We solved this by running a fully isolated cooling-off agent — forcing the persona to re-examine its stance alone, 30 simulated minutes later, revealing whether any shift was genuine belief change or just in-the-moment compliance.
Accomplishments that we're proud of
The internal monologue pipeline: We successfully built an agent that produces a genuinely distinct inner voice — one that diverges meaningfully from the public response and reacts to specific language in the persuader's message rather than the message's general topic. The word-overlap scoring that pinpoints which sentence triggered the emotional reaction was particularly satisfying to get right.
Cognitive mechanism grounding: Rather than labeling reactions with invented categories, every mechanism in Lumos links to a reputable source. Watching the classifier correctly identify reactance vs. identity-protective cognition vs. narrative transportation in real outputs — and cite the right source — felt like the research was actually working.
What we learned
Multi-agent orchestration: We learned how to design stateless agent pipelines that run in parallel without shared state.
What's next for Lumos
Real personas: We want to move from synthetic personas to calibrated profiles built from actual interview transcripts or survey data, so the simulation reflects a real population segment rather than an archetype.
Built With
- anthropicapi
- fastapi
- node.js
- python
- react
- tailwindcss
- typescript
- vite
Log in or sign up for Devpost to join the conversation.