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.0rc20"DocumentationGitHubPyPI1.0.0rc20 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, OpenCode, Muse Code or interactive Cursor get memory and skills over MCP and sessions recorded through hooks:
neosian setup --writeregisters the machine once.
A Claude Code session landing as a recorded turn that neosian audit names, 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.0rc20). 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, and since 1.0.0rc20 by content:
search_historyin the agent,neosian searchin the shell, one rule on every store (substrings, never embeddings). The hosted service will put a screen on 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.