The state layer for LLM agents.
Durable conversations, agent-curated memory, skills, a shared board and a ledger of who did what, on storage you own: a directory, your Postgres, or one small state process. For the agent you already use, or the one you build.
curl -fsS https://neosian.com/install | bash
# or:
uv add "neosian==1.0.0rc3"DocumentationGitHubPyPI1.0.0rc3 is a pre-release until v1.0.0: pin it.
Two doors, one store
- Build an agent. An async-only, stateless
Agent(tools, streaming, fallback, guardrails, structured output) that aConversationwraps into a durable, memory-bearing thread. - Give your agent state. Claude Code, Codex, Cursor or OpenCode get memory and skills over MCP and every session recorded through hooks:
neosian mcp install --client claude-code,neosian record install.
A Claude Code session landing as a recorded turn that neosian auditnames, and the next session opening on where we left off. No key of yours, no flags: the home and this project's scope.
store = FileStore(home()) # ~/.neosian, or your PostgresStore(dsn)
convo = Conversation(config, store=store, conversation_id="thread-829",
memory_scope=project_scope()) # user:<login>/proj:<dir>
response = await convo.send("Where did we leave off?")Nothing in the install needs an account to start: Model.FAKE runs keylessly and FileStore is a directory. Agents read the docs too:llms.txt, and neosian docs prints the shipped pages from the wheel.
What is coming
- One store under many agents. Claude Code records a session; Codex, Cursor or a five-line neosian agent opens on where it left off. The switching claim is measured, not promised; the next recordings will show it.
- A hosted state process. Today the container is the appliance (
docker run ghcr.io/mausa-ai/neosian:1.0.0rc3). A hosted neosian will operate it for you: your projects and agents behind one URL, the ledger and the board as a screen. - Asking the past a question. Everything is recorded and reachable by reference. Content search over turns and memory (full text, never embeddings) will land on the hosted service first, and in the library only if agents reach for it.
- v1.0.0 will carry the stability promise: library, seams and wire under one SemVer promise. Until then the seams are append-only by convention.