Install
~/.anona/config.env with mode 600, and registers the MCP
server with Claude Code when the claude CLI is on your PATH. It edits no shell
profile and writes nothing outside the directories it prints.
Skills load at session start. Restart your agent once after installing, or the
skill is on disk and invisible.
The two skills
anona-memory
The agent’s own memory. Recalls what is already known before a task, records
what the task settled after it.
anona-memory-sdk
Building on Anona. The SDK and API surface, scoping rules, error codes and
framework adapters, so generated code compiles the first time.
--skill:
Options
An existing install is moved under
~/.anona/backups/ rather than deleted, and
deliberately not left beside the skill: an agent reads every directory under
skills/, so a backup parked there would load as a second skill claiming the
same name.
How the skill reaches your memory
Four ways, tried in order. You only need one.1
MCP tools
If the host exposes See MCP for OAuth, the local stdio server, Hermes and OpenClaw.
record, retrieve, reason and list_spaces, the
skill uses them and there is nothing to configure.2
The anona CLI
Otherwise, if the
anona CLI is installed (pip anona
0.24.0 or later), the skill runs anona status once, then
anona retrieve, anona record and anona reason with --json, and
branches on the exit code. The CLI finds its own credential: an API key
(--api-key, ANONA_API_KEY, or ~/.anona/config.env), the command-line
login from anona login, or a temporary profile from anona start. It
never uses the MCP login, so a machine signed in for MCP only exits 4 here
and the skill moves on.3
REST with curl
Otherwise the skill reads
ANONA_API_KEY from the environment or from
~/.anona/config.env and calls https://api.anonalabs.com directly. This
is what makes the skill work in a harness with no MCP support and no
Python.4
Neither
If
anona or uvx is available, the skill may run anona start for a
temporary profile and tell you so in one line; you keep it with
anona login. Otherwise it says once that memory is not configured and
does the task without it. A memory layer that blocks the work is worse
than no memory layer.MCP OAuth sign-in needs no API key. An organization that has never created one
works from its first tool call. If you see
403 no_api_key, that is a fault
on our side, not a missing step on yours; the one case where it is intended is an
organization that revoked all of its keys.Which space
The skill picks one per session, in this order:ANONA_SPACE_ID, set by--spaceor in your environment.- The git repository name, lowercased, when working in a repo.
default.
404 space_not_found on a space
nothing has been written to yet means empty, not broken.
Serving several people through one space? The skill passes
user_id when you
give it one, and the match is strict in both directions: a scoped read never
returns an unscoped memory. See Scoping.What gets recorded
Preferences, decisions and their reasons, fixes that cost time, constraints the code does not state, and outcomes. One fact per memory. Not recorded: secrets, anything already in the repository, narration of the session, or anything still a hypothesis. The skill carries the judgment call and worked examples of both sides.Compaction
Compacting a conversation swaps it for a summary, and whatever the summary drops is gone. The skill treats that as a deadline: what the session settled goes to Anona before it can be lost.- Before. Tell the agent you are about to compact and it records what the session settled first, then says how many memories it wrote.
- After. When a conversation resumes from a summary, the agent records the durable facts in it before going back to the task.
"trigger": "compaction" in metadata; the MCP record tool has no metadata
field, so there it goes without the marker. The same rules apply:
no secrets, nothing already in the repository, nothing still a hypothesis.
The compaction hook
Claude Code compacts without giving the agent a turn first, by/compact or
automatically when the context fills, so skill instructions alone cannot run
the “before” half: it happens only when you ask for it. The “after” half is
what a hook makes reliable.
A Claude Code hook is a
command the client runs on a lifecycle event. Anona uses one: SessionStart
with the compact matcher, which fires once the summary is in place. Its
output is added to the agent’s context, telling it to record what the summary
kept before resuming. The hook only prints. It makes no network call and holds
no key, so it cannot slow a session down or fail one, and the recording itself
goes through the same MCP tools, CLI or curl fallback as every other write.
Adding it by hand. Put this in
~/.claude/settings.json, or in
.claude/settings.json for one project:
/hooks in Claude Code to confirm it is registered.
Turning it off. For the plugin, disable it under /plugin, which also
unloads the skills. Claude Code has no switch for one plugin’s hooks:
"disableAllHooks": true in settings turns off every hook you have, not only
this one. If you added the hook by hand, delete the entry. Either way the skill
still records before a compaction you announce.
Checking it works. Compact a session in which something was decided. Before
the next task resumes the agent should make one record call per durable fact,
into the session’s usual space, and nothing at all when
the session settled nothing.
Claude Desktop and claude.ai
Those two do not read a skills directory. They take a ZIP upload under Customize > Skills, so build one:anona-memory.zip and anona-memory-sdk.zip into the current
directory, with the skill folder as the archive root, which is what the upload
expects. Both skills stay inside the caps that surface enforces on name and
description, 64 and 200 characters.
Then give them tools. There is no shell there, so the CLI and curl
fallbacks cannot run: add Anona as a custom connector under Settings > Connectors.
The Claude Code that runs inside Claude Desktop is a different surface, and it
reads
~/.claude/skills/ normally. The installer at the top of this page
already covers it. The ZIP is only for the chat surface.Supported agents
The installer knows Claude Code, Codex, OpenCode, Cursor, Hermes and OpenClaw
(into
~/.openclaw/skills, or $OPENCLAW_STATE_DIR/skills if you moved it), and takes
--dir for anything else. The community npx skills CLI covers 75+ harnesses
from the same repository:
Source
The skills live inskills/
in the SDK repository. Read them before you install them; they are four Markdown
files and a shell script.
Next steps
MCP
The transport the skill prefers, with OAuth and stdio.
Python SDK
The programmatic client the second skill documents.