"kgai vs Letta: evolving agent state or an append-only decision record"
You're probably here because an AI writes a fair share of your code and every session starts from zero. Letta and kgai both get called memory, and they're hired for different jobs. This page tries to say plainly which is which. We build kgai, so read it knowing that.
What Letta is good at. Letta, formerly MemGPT, is a platform for building stateful agents. The core idea is memory the agent itself edits. An agent keeps its own memory, revises it as it works, and Letta Cloud carries its memory, identity and conversation history across devices. You install it from npm, run it locally, or embed it in your app through the SDK. Apache-2.0. If you're shipping a product with a long-lived agent inside, this is the shape built for that, and it has years of work behind it.
Where kgai differs, structurally. kgai isn't an agent platform. It's a record of your team's engineering decisions, and the architecture follows from that.
- Nothing is edited in place. The store is an append-only log. A new decision supersedes an old one through an explicit link with a reason. The dead ends keep why they died and stay queryable, while recall hands an agent only the decisions in force. What a Letta agent revises, kgai preserves. The long version of that argument is in what decision memory is.
- There's no server and no daemon. The CLI appends to files in your repo, and that's the whole runtime story.
- The read path is deterministic. Lexical matching plus graph traversal, no embeddings, so the same store gives the same answer on every teammate's machine.
- Team sync is opt-in through an S3 bucket you own, with per-writer shards, so people recording in parallel can't produce a textual conflict.
Choose Letta if you're building an agent product that needs evolving state, user context, or an assistant that learns a person over time. Choose kgai if you're a dev team where the LLM does most of the work and the thing you keep losing is why the code is the way it is. kgai doesn't do conversation memory and doesn't personalize per user. It records decisions, and that's the whole job. If you're weighing framework-native memory instead, kgai vs LangMem covers that side.
Two commands and it's in, as plain files inside your repo. If it's not for you, removing it is one directory.
Try it on your repo. Two commands, MIT, nothing leaves your machine until you configure a bucket.
See how kgai compares to other tools on the comparison page, or browse the other notes.