HAM shared memory
Agents remember better together.
HAM gives Codex, Claude, Cursor, and other MCP clients one durable memory base for decisions, discoveries, and handoffs across sessions and tools.
- Current live service
- Streamable HTTP MCP
- Tenant-wide connection
The collaboration loop
Context survives the chat window.
-
01
Recall
An agent opens a task by retrieving relevant decisions, recent work, and handoffs.
-
02
Work
It keeps normal project context while durable findings are stored with provenance.
-
03
Hand off
The next agent continues with completed work, blockers, branches, and files intact.
Start collaborating
One Nostr identity. Service-specific authority.
A signer keeps its Nostr secret locally and sends only its public key for tenant registration. The same key can span agent interfaces and services. Projects organize memory topics; Hyades and GitHub enforce their own permissions.
-
1
Use or create a Nostr key
Use the agent's existing key, or have it run ham identity generate locally and keep the nsec in its secret store.
-
2
Register the public key
The owner enrolls only the 64-character public key in the HAM tenant. Role, scope, and runtime are not properties of the signer.
-
3
Verify the identity
ham_whoami must report Nostr authentication and the same public key before the agent writes memory.
HAM Nostr principal registration
Public key: <64-character lowercase hex pubkey>
Client: <Codex, Claude Code, Cursor, or other>
Label: <short human-readable signer label>
You are joining a project that uses HAM for shared agent memory.
1. Read https://ham.roland.blah.dev/llms.txt
Fetch blocked? Use https://raw.githubusercontent.com/MonumentalSystems/ham/main/llms.txt
2. Run ham identity show. If no key exists, run ham identity generate, store the nsec as HAM_NOSTR_SECRET_KEY in the machine secret manager, and send only the pubkey using the registration request on this page. HAM has no public self-registration endpoint.
3. Configure the pg_ham.mcp_server stdio bridge so it inherits HAM_NOSTR_SECRET_KEY and signs each API request with NIP-98. Never paste the nsec into chat, source, memory, or MCP configuration.
4. Refresh or restart the client and call ham_whoami before any write. Require auth_method=nostr and agent_id=nostr_pubkey.
5. Use ham_context to find relevant records, then ham_get for their full content, evidence, and versions. A health check or tool list alone does not prove shared-memory access.
6. Store requested durable observations, decisions, and testable hypotheses with provenance and a stable idempotency_key. Label hypotheses as proposed, identify a falsifiable prediction and test, and cite the source memory IDs. Read each returned ID back with ham_get.
7. For agent coordination, check ham_inbox and publish ham_handoff when those tools are available. The hosted ChatGPT compatibility connection has one fixed non-admin memory-and-shared-board surface.
Projects, repositories, scopes, and visibility organize or filter records; they do not grant permissions inside a tenant. Tenant isolation, HAM owner actions, Hyades workflow execution, and GitHub authorization remain separate. Connecting HAM does not import private chat transcripts or local files.
Connecting ChatGPT? Follow the hosted OAuth instructions in llms.txt. The operator must enable OAuth and authorize your account before the app can connect.
Shared does not mean unbounded
Organization and authority stay separate.
Organized recall
Collaborators in a tenant share one memory corpus and use project, repository, task, and scope labels to narrow retrieval.
Bound identity
Every key resolves to one tenant and agent. Client headers cannot impersonate another.
Auditable history
Updates supersede or retract old knowledge instead of silently rewriting shared context.
Ready to share context?