Memória
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Memóriasearch my notes for ticket ABC-123 and its epic"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Agent Memory
English · Português · हिन्दी · עברית
Agent Memory keeps what Claude Code learns as Markdown files on your computer. It shows those notes as a graph and gives them back to Claude Code through an MCP server.
Until v0.4 the app was called Memória. Since v0.5 the names are in English too: the agent-memory command,
the agent-memory MCP server with the memory_search, memory_add and memory_related tools, and the ~/.agent-memory folder.
The old names still work (see Coming from v0.4).
Lessons, rules (do, don't) and task history.
Each note can be linked to a ticket (Jira, GitHub) and its epic.
Fast search (SQLite FTS5) by name, project, ticket, epic, tags and text.
A window with the graph, filters, a timeline, a form for new notes and Claude's MCP activity.
In English, Portuguese, Hindi and Hebrew.
Everything stays on your computer. Nothing is sent anywhere.
Install
No administrator rights needed.
macOS (Intel and Apple Silicon) and Linux, in Terminal:
curl -fsSL https://github.com/cx-guilherme-pinto/claude-memory-app/releases/download/v0.5.0/install.sh | shWindows 10/11, in PowerShell:
powershell -ExecutionPolicy Bypass -c "irm https://github.com/cx-guilherme-pinto/claude-memory-app/releases/download/v0.5.0/install.ps1 | iex"The installer:
installs uv (pinned version) if it's missing;
downloads the wheel and
constraints.txtand checks their SHA-256;installs the app with the uv-managed Python 3.12;
on Windows, installs the WebView2 Runtime (per user) if it's missing;
creates a shortcut:
~/Applications/Agent Memory.appon Mac, "Agent Memory" in the Start menu on Windows.
The commands go to ~/.local/bin (Mac/Linux) or %USERPROFILE%\.local\bin (Windows).
Portable version (no install)
Every release also has one zip per platform, with Python inside:
File | Open |
|
|
|
|
|
|
Unzip and open. No admin rights and no network needed. The workshop setup does this for you.
Connect it to Claude Code:
selftestprints the rightclaude mcp addcommand. On Mac,…/Memoria.app/Contents/MacOS/memoria selftest(the portable app keeps its old file name and shows as Agent Memory); on Windows,agent-memory.cmd selftest. After the one-line install, it's justagent-memory selftest.Prefer the one-line install command. A zip downloaded in a browser needs approval in System Settings → Privacy & Security: macOS blocks the app because it isn't signed. To unblock it in Terminal:
xattr -dr com.apple.quarantine ~/Applications/Memoria.app. On Windows, at "Windows protected your PC", click "More info" and then "Run anyway".Once it's connected to Claude Code, don't move the app.
The zips, the app folder and its launchers keep the
Memorianame: older portable copies can still update in place.
Details and decisions: docs/portatil.md.
Related MCP server: HomeKB MCP Server
Connect to Claude Code
claude mcp add --scope user agent-memory -- "$HOME/.local/bin/agent-memory" mcpOn Windows: claude mcp add --scope user agent-memory -- "%USERPROFILE%\.local\bin\agent-memory.exe" mcp.
MCP tools (in Claude Code: mcp__agent-memory__memory_search and so on):
Tool | Purpose |
| Search notes. A ticket key ( |
| Save a note and return its path. |
| Linked notes, strongest relation first. |
type is lesson, do, dont or history.
Results use the same English names: {"total": 1, "results": [{"id", "path", "type", "title", "project", "task", "epic", "url", "tags", "files", "date", "cost_usd", "links", "excerpt", "score"}]}
(memory_related adds strength and reasons, for example {"link": 1, "task": 1}). Empty fields are left out.
Use
Command | What it does |
| Opens the window. |
| Opens the same interface in the browser. |
| Saves a note. |
| Searches from the command line. |
| Rebuilds the index from the Markdown files. |
| Installs the latest version. |
| Checks the installation. With |
| Shows or sets the language. |
| MCP server (used by Claude Code). |
In the window, click a node to see the note. Press / to search and Esc to close.
Search shows memories, projects and tasks/epics; pick one to focus it.
Filters choose the project, epic, task and period. The type list filters the map.
The timeline's play button shows the graph growing.
On Windows, if WebView2 is missing, the interface opens in the browser at 127.0.0.1.
The terminal prints the session address (http://127.0.0.1:<port>/?t=<key>).
The key is local and only works while the app is open.
Claude activity
The Claude activity button at the top of the column shows what Claude asked Agent Memory for over MCP:
four numbers: calls today, total calls, calls per minute (average of the last 10 minutes) and memories recalled (unique);
the last 100 recalled memories, with time, tool, title, project and task. A search with no results also shows up, with what was searched. Click a title to open the memory.
The view refreshes on its own. It isn't split by session.
The log lives in ~/.agent-memory/.index/activity.sqlite, on your computer, separate from the index
(agent-memory reindex keeps it). The searched text goes through the same secret redaction and is cut short.
Note contents are never logged. Old rows are dropped automatically; the total call count is kept.
Languages
The app speaks English, Portuguese, Hindi and Hebrew. By default it follows the system language:
macOS: the first supported language in System Settings › General › Language & Region;
Windows: the Windows display language;
others:
LANGUAGE,LC_ALL,LC_MESSAGESorLANG.
If none is supported, it uses English.
The picker at the top of the column switches the language at once and saves it in ~/.agent-memory/preferences.json.
From the command line: agent-memory language he. The AGENT_MEMORY_LANG variable overrides everything.
Hebrew opens right to left. Each note's text keeps its own direction.
Hindi and Hebrew use Noto Sans Devanagari and Noto Sans Hebrew, bundled with the app.
Technical terms stay in English in every language (MCP, token, ticket, tool names).
Where memories live
In ~/.agent-memory (or the folder set in AGENT_MEMORY_HOME):
~/.agent-memory/
<project>/<YYYY-MM-DD>-<slug>.md one note per file
config.json update URLs (optional)
.index/index-v3.sqlite index; safe to delete
.index/activity.sqlite MCP call log ("Claude activity" view)
preferences.json language chosen in the pickerEach note has a YAML header. The field names are part of the contract:
---
type: lesson # lesson | do | dont | history
title: Use the build cache
project: security-arena
task: ARENA-12 # optional: ticket key (or owner/repo#12)
epic: ARENA-1 # optional: epic or parent
url: https://company.atlassian.net/browse/ARENA-12 # optional
tags: [ci, cache] # optional
files: [orchestrator/plan.mjs]
date: '2026-10-16T13:25:33+01:00'
cost_usd: 1.25 # optional
links: [Avoid retries]
---
The build is 3x faster with the cache. See [[Avoid retries]].You can edit the files by hand. The app picks up the changes.
agent-memory reindex rebuilds the index at any time.
epic, url and tags came in v0.2 and are optional: v0.1 notes are still valid.
Tickets:
Jira keys are upper-cased (
abc-123→ABC-123); GitHub keys look likeowner/repo#12.Without
task, the app takes it fromurlwhen it's a Jira ticket or an issue/PR.A note without
epicinherits its task's epic, if another note names it.Searching
ABC-123finds that task's notes, its epic's notes and notes that mention it.
Link strength, strongest first:
explicit link ([[...]] or links), same task, same epic, same project, shared files.
Coming from v0.4
Nothing moves and nothing is rewritten. The old names keep working:
Until v0.4 | Since v0.5 |
|
|
|
|
MCP server | MCP server |
|
|
|
|
Header |
|
|
|
|
|
To use the new MCP name in Claude Code: claude mcp remove --scope user memoria, then the claude mcp add above.
Update
agent-memory updateFinds the latest version with
git ls-remote --tags(no API).Downloads the wheel and
constraints.txtand checksSHA256SUMS.Reinstalls with
uv tool install --force.Rebuilds the index. It never touches your notes.
On Windows, the install finishes in a new window. Close Claude Code first.
In the portable version, update downloads the new zip, checks it and swaps the app folder in place. The connection to Claude Code keeps working.
URLs come from ~/.agent-memory/config.json and, if missing, from the package's release.conf.
Keys read (an environment variable with the same name overrides them):
Key | Example |
|
|
|
|
|
|
| path to the |
Privacy
Notes, the index and the interface stay on your computer.
Before saving, the app redacts tokens, API keys (
sk-ant-…,ghp_…,AKIA…,xox…), JWTs, private keys and patterns likepassword=….The interface only listens on
127.0.0.1, with a random session key.The only network use is the version check (
git ls-remote) andagent-memory update. To turn it off:AGENT_MEMORY_NO_UPDATE=1.No embeddings and no models. Search is plain text (SQLite FTS5).
Troubleshooting
"This Python's SQLite has no FTS5": reinstall with uv's Python (
uv tool install --force --managed-python --python 3.12 <wheel>).Company proxy: uv and
agent-memory updateuseHTTPS_PROXYand the system certificates. For uv, also setUV_SYSTEM_CERTS=1.The window doesn't open:
agent-memory --browseropens the same interface in the browser."The search index of your memories is damaged": the app rebuilds the index from the notes by itself. If the message stays (on Windows, another process still has the file open), close Claude Code and the app, then run
agent-memory reindex. The notes are never touched."Warning: memory skipped": a note the app can't read (an error in the YAML header, not UTF-8, outside a project folder, a symlink to outside the folder). Fix the file: the app picks it up by itself.
Development
You need uv and Node.js 22 or newer.
uv sync
(cd web && npm ci && npm run build) && rm -rf src/memoria/web_dist && cp -R web/dist src/memoria/web_dist
uv run playwright install chromium
uv run pytestscripts/build.sh: UI, wheel, installers, portable zips andSHA256SUMSindist/.scripts/build_portatil.py: the portable zips (PORTATIL=0 scripts/build.shskips them).scripts/publish-release.sh: tag, release and assets. Calls to the hosting API live only increate_release()(Gitea or GitHub, fromRELEASE_PROVIDER).scripts/mudar-alojamento.sh: changes the hosting and the version in one go.scripts/lock.sh: regeneratesconstraints.txtand checks there are wheels for Mac and Windows.release.conf: the single source of URLs and versions.
Instructions for Claude: CLAUDE.md. Status, risks and how to publish: docs/HANDOVER.md. Versions follow SemVer. See the CHANGELOG.
License
MIT. See LICENSE.
The Bricolage Grotesque, Noto Sans Devanagari and Noto Sans Hebrew fonts ship with the interface
under the SIL Open Font License 1.1 (web/public/fonts/).
Available Tools
3 toolsmemory_addA
Save a memory as Markdown and return the file path. Secrets (tokens, keys, passwords) are redacted before writing.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Link to the ticket or PR (http/https). | |
| epic | No | Epic or parent key, e.g. ABC-100. | |
| tags | No | Search words, e.g. ['ci', 'cache']. | |
| task | No | Ticket key, e.g. ABC-123 or owner/repo#12. | |
| text | Yes | Body in Markdown. May contain [[name]] links. | |
| type | Yes | lesson, do, dont (don't) or history. | |
| files | No | Related code paths. | |
| links | No | Names or ids of other memories. | |
| title | Yes | Short title. | |
| project | Yes | Project name, e.g. security-arena. | |
| cost_usd | No | Task cost in US dollars. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, and the description adds genuinely new behavior: content is written as Markdown files and secrets (tokens, keys, passwords) are redacted before writing. That redaction note is important context an agent cannot get from structured fields. It stops short of covering duplicate behavior, which matters given idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, the core action front-loaded and the safety-relevant redaction detail second. Nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape explanation is not required, and the annotations plus a fully described schema carry most of the load for an 11-parameter mutation. The remaining gap is where memories land (the project parameter's storage semantics) and how duplicates or re-adds are handled given non-idempotency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with per-field descriptions for all 11 parameters, including the 'type' values (lesson/do/dont/history) and link syntax. The description adds nothing about parameters, which is acceptable at full coverage but leaves it at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Save a memory as Markdown') plus the observable outcome ('return the file path'). It is clearly a write counterpart to the sibling search/related tools, though it never names them to draw the boundary explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to add a memory versus when to search first with memory_search, nor on what qualifies as worth persisting. An agent must infer the whole usage context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_searchARead-only
Search memories by title, body, project, task, epic and tags. A ticket key (e.g. ABC-123) returns everything for that task and its epic. Filters: project, type, task and epic.
| Name | Required | Description | Default |
|---|---|---|---|
| epic | No | Only this epic (includes its tasks), e.g. ABC-100. | |
| task | No | Only this task, e.g. ABC-123 or owner/repo#12. | |
| text | No | Words to search for. Empty returns the most recent. | |
| type | No | lesson, do, dont (don't) or history. | |
| limit | No | Maximum number of results. | |
| project | No | Only this project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuine behavioral context the annotations don't: a ticket key expands to return everything for that task and its epic. No return format or pagination/ranking behavior is described, but that is a minor gap for a read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the verb and resource, then the special ticket-key rule, then the filter list. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description gives enough on filters and special key handling to call the tool correctly, and annotations cover safety. It stops short of explaining result ordering, tag-search semantics, or how multiple filters combine, which an agent might want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds real semantics beyond the schema: the ticket-key expansion rule and the fact that searching spans tags, which is not a parameter at all – both help an agent reason about results rather than just field names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (memories) plus the fields searched (title, body, project, task, epic, tags). The ticket-key behavior sentence makes it clearly different from memory_add and memory_related, so an agent can distinguish it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage ('Search memories by...', 'Filters: project, type, task and epic') but never states when to prefer this over memory_related or when memory_add applies. It also omits that empty text returns most recent results – that detail lives only in the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.5.0- First observed
memory_add - First observed
memory_related - First observed
memory_search
TDQS
Scored across 3 tools
Each tool has a clearly distinct role: searching memories, finding related memories, and adding a memory. The boundaries are reinforced by descriptions that specify different inputs and outputs.
All tools share the `memory_` prefix and short suffixes, giving a predictable pattern. However, the suffixes mix action-oriented and relational terms (`search`, `add`, `related`), which is a minor inconsistency.
Three tools is a focused, minimal surface for a memory server and avoids bloat. It is slightly underprovisioned for full memory lifecycle management but appropriate for the likely intended lightweight use.
The server covers saving, searching, and relating memories, but lacks update and delete operations, leaving the lifecycle incomplete. Agents may hit dead ends when needing to modify or remove a memory.
Maintenance
Related MCP Connectors
Persistent memory layer for AI tools. Save and recall notes across Claude and other MCP clients.
Personal context for every AI: search, read, and write back to your private Markdown library.
Notes and memory assistant: one Markdown vault that Claude, ChatGPT and any MCP client can share.
Persistent memory for Claude Code and Cursor. Stop re-explaining your project every session.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables Claude Code to search and retrieve from a local knowledge base of markdown notes using hybrid semantic+keyword search, keeping data entirely offline.18 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables natural language interaction with a personal knowledge base stored locally on your computer, supporting semantic search, note reading, and writing through Claude Code or mobile apps.13MIT
- AlicenseNot gradedqualityBmaintenanceEnables Claude Code to use local markdown notes as persistent, searchable memory with hybrid recall, episodic memory, note-graph traversal, design memory, and optional cloud sync.141 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude Code to persist and recall cross-repository memories as Markdown files via save, search, read, and health-check tools, with local-only storage and no cloud services.20 npmMIT