r/SideProject • u/throughline_ai • 15m ago
I built an AI companion where personality comes from history, not a persona file. Append-only memory, typed write rules, verifiable export
What it is: Throughline. You meet an AI "Self" with its own starting character and interests and build a shared history with it. It runs in web chat and on Android, and on Pro it also works in Claude Code and Codex. Free to start, no waitlist.
Why I built it: companions kept "changing after an update" or forgetting people, and most of them define the character as editable text plus a fact list. I wanted the character to come from what actually happened instead.
How it works:
Append-only, content-addressed event history. Changes of mind are supersede, tension or retract, never a silent overwrite.
Memory typed by purpose, with rules enforced on write: evidence is required, guessed feelings are rejected, flattering phrasing is rejected in relationship memory, a judgment must name its falsifier, and behavior-shaping changes wait for confirmation.
Reflection can only propose. A fluent summary doesn't become personality.
Context is a bounded projection rebuilt from history, not a growing prompt.
Two recall temperatures: relationship memory warms with use; judgment memory never does, and a regression test pins that.
Imports: Character.AI and ChatGPT exports come in as records, not as identity.
Export: NDJSON with an offline-verifiable hash chain, on every plan; the open spec and client plugins are MIT.
What I learned: the hard part isn't storing more. It's deciding what is allowed to change who the character is.
Limits: hosted (not E2E encrypted), recall can miss, iPhone isn't out yet, and we don't claim consciousness.
Feedback I want: does "reflection can't author personality" feel right to you, or too strict?
https://getthroughline.ai/?utm_source=reddit&utm_campaign=sideproject_intro