Use project memory
Project memory keeps the conversations of your project and learns from them. Your agents and your apps then use what it learned.
| You use memory from | With | To |
|---|---|---|
| The console | Your sign-in | Turn memory on, review and pin memories, erase an end user |
| An MCP client, such as Claude Code | Your sign-in | Let an agent read and save memories. See Connect an MCP client |
| Your code | A virtual key | Read, save and erase memories with the /v1/memory API |
| Each chat call | A virtual key | Add the matching memories to the call with a header |
1. Turn memory on
Memory needs every prompt and answer. When you turn memory on, Proxium sets Stored prompts and answers to all. You cannot narrow it while memory is on.
- In the console, open Memory. While memory is off, the screen shows only its settings.
- Set Memory to on. Proxium saves it at once.
- Optional: in Only these senders, type the apps to remember, separated by commas. Empty means every app.
- Optional: in Keep conversations for, type a number of days. Empty means keep everything.
- Select Save.
Any member of the project can do this. The Memory screen then shows the Knowledge page, the Memories and the Recent conversations.
If you turn memory off later, Stored prompts and answers stays at all. To store less, change What to store in Settings › Stored prompts and answers.
What Proxium remembers
Proxium remembers a call when all of these are true:
| Condition | Example |
|---|---|
The route is /v1/chat/completions, /v1/messages or /v1/responses | Not /v1/embeddings |
| The call succeeded | A 502 is not remembered |
| The app is in Only these senders, or that field is empty | x-proxium-source: support-bot |
The call does not send x-proxium-memory: off |
A call without x-proxium-source is remembered only when Only these senders is empty.
When a conversation has no new turn for 10 minutes, Proxium reads it. It writes a title, a summary and the memories that it finds.
2. Choose what each call does
Send the x-proxium-memory header on a call:
| Value | What Proxium does |
|---|---|
write (default) | Remembers the call |
recall | Remembers the call, and first adds the matching memories to it. Only on chat and Messages calls |
off | Does not remember the call |
Example: a support bot that knows the earlier tickets of the user.
curl https://proxium.tech/v1/chat/completions \
-H "Authorization: Bearer $PROXIUM_KEY" \
-H "Content-Type: application/json" \
-H "x-proxium-source: support-bot" \
-H "x-proxium-memory: recall" \
-H "x-proxium-memory-subject: user-1234" \
-d "{\"model\": \"$PROXIUM_MODEL\", \"messages\": [{\"role\": \"user\", \"content\": \"Which plan am I on?\"}]}"
With recall, Proxium searches the memories for the last user message. It adds at most 8 of them as one system message, after your own system messages. If the search is slow or fails, the call continues without memories.
On /v1/responses, recall acts as write. Any other value gets 400 invalid_memory_mode.
3. Name the end user
A memory can be about one end user of your app. Proxium calls that end user the subject. It reads the subject from:
- The
x-proxium-memory-subjectheader. - If there is no header, the
userfield of the body. On/v1/messages,metadata.user_id.
| Call | Reads the memories of |
|---|---|
With subject user-1234 | user-1234, and the memories of the whole project |
| Without a subject | The whole project, and the memories of every end user |
Send the subject on each recall call that is about one end user. Without it, the call can get the memories of other end users.
Use an opaque id, not an email address. A subject has at most 256 characters, and no control characters. Else a remembered call gets 400 invalid_memory_subject.
4. Give your agents the memory
An agent with an MCP client uses the MCP server. Your own code uses the memory API with a virtual key, at https://proxium.tech/v1:
| Task | Request | Reference |
|---|---|---|
| Read the memory at the start of a task | POST /v1/memory/wake-up | Wake-up |
| Search conversations and memories | POST /v1/memory/search | Search |
| Read one conversation | GET /v1/memory/episodes/{id} | Episode |
| Save a memory | POST /v1/memory/items | Remember |
| Correct a memory | PATCH /v1/memory/items/{id} | Correct |
| Rate a memory | POST /v1/memory/items/{id}/rating | Rate |
| Remove a memory | DELETE /v1/memory/items/{id} | Forget |
| Read the knowledge graph | POST /v1/memory/graph | Graph |
Start a task with wake-up
The answer holds at most 20 pinned and trusted memories, the newest conversation summaries and the knowledge page. A subject adds the memories of that end user.
curl https://proxium.tech/v1/memory/wake-up \
-H "Authorization: Bearer $PROXIUM_KEY" \
-H "Content-Type: application/json" \
-d '{"subject": "user-1234"}'
Save a memory
Save one statement in each memory. kind is fact (default), preference, decision, event or procedure. importance is 0 to 5, default 3. Leave out subject for a memory of the whole project.
curl https://proxium.tech/v1/memory/items \
-H "Authorization: Bearer $PROXIUM_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Refunds over 100 EUR need a second approval.", "kind": "procedure", "importance": 4}'
Rate a memory after you use it
curl https://proxium.tech/v1/memory/items/$MEMORY_ID/rating \
-H "Authorization: Bearer $PROXIUM_KEY" \
-H "Content-Type: application/json" \
-d '{"rating": "useful"}'
A memory rated wrong two times leaves the recall, until a person selects Confirm on the Memory screen.
What a virtual key may change
| Action | Allowed | If not |
|---|---|---|
| Save a memory | When memory is on | 409 memory_off |
| Pin a memory | Never. Only a person can pin, in the console | 403 forbidden |
| Correct or remove a memory of an agent | Yes | |
| Correct or remove a memory that a person wrote | No | 403 forbidden |
A text has at most 4,000 characters. Proxium refuses a text that looks like a prompt injection (403), and it replaces a credential in the text with a placeholder. A correction keeps the old memory in the history.
Review what agents saved
Open the Memory screen. The Memories list shows to review first: the memories of agents that no person confirmed. For each one, select Confirm, Pin, Edit or Remove. To add a memory yourself, fill in New memory, Kind and User, and select Save.
Erase one end user
You cannot undo an erasure.
With the API, with any virtual key of the project
curl -X DELETE https://proxium.tech/v1/memory/subjects/user-1234 \
-H "Authorization: Bearer $PROXIUM_KEY"
In the console, as an owner of the project
- Open Memory. The section Erase one user is at the bottom of the screen.
- Type the subject in User id.
- Select Erase permanently, and confirm.
Proxium deletes the memories, the profile and the conversations of the subject, in one transaction. It also deletes the stored prompts and answers of the calls that memory kept for that subject. The audit record keeps a SHA-256 hash of the subject. Data handling says what stays.
Delete old conversations
Set Keep conversations for at the top of the Memory screen. Once a day, Proxium deletes the conversations whose last turn is older than that number of days. It also deletes the memories that were corrected or removed before that time. Live memories stay.
What memory costs
The summaries, the memories, the pages and the embeddings come from model calls. Proxium sends them through the routing of your project, and records them as your spend, with the application proxium-memory. The top of the Memory screen shows the memory cost of this month.
Proxium uses the first tier of each row that has a chain in your project:
| Job | Tiers, in order |
|---|---|
| Conversation summaries | memory-summary, then trivial |
| Memories from a conversation | memory-extract, then trivial |
| Merges, graph facts and pages | memory-consolidate, then memory-extract, then trivial |
| Embeddings | memory-embed, then embed |
To set a chain for a tier, see Route requests to models.