Agent skill

Basic Memory

by basicmachines-co in basicmachines-co/basic-memory

Use the Basic Memory knowledge graph for persistent memory across sessions.

AGPL-3.0Auto-check passedKnowledge Management

Install Basic Memory

skills CLI
$ npx skills add basicmachines-co/basic-memory --skill basic-memory -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install basicmachines-co/basic-memory basic-memory --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/basicmachines-co/basic-memory.git skills-src && mkdir -p .claude/skills && cp -r skills-src/integrations/hermes/skill .claude/skills/basic-memory && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
basic-memory
GitHub stars
4.1k
Token cost
~2.9k tokens
SKILL.md length
1,172 words
Files
1
Skills in repo
49
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Use the Basic Memory knowledge graph for persistent memory across sessions.

  • Works in 6 steps: Search before answering. If the user… → Offer to capture. When the user shares… → Never claim an unwritten save.… → …
  • Tasks that involve Knowledge graphs
  • SKILL.md covers Use bm_*, not the bm CLI, Tool reference, Permalinks and Cross-project routing, plus 5 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Basic Memory is an agent skill from basicmachines-co/basic-memory. Use the Basic Memory knowledge graph for persistent memory across sessions. Search before answering; capture decisions, meetings, and insights as notes.

Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Knowledge Management, covering Knowledge graphs and Agent memory. The repository describes itself as: AI conversations that actually remember. Never re-explain your project to your AI again. Join our Discord: https://discord.gg/tyvKNccgqN. The licence is AGPL-3.0.

When your agent uses it

  • Tasks that involve Knowledge graphs
  • Tasks that involve Agent memory

Example prompts

  • “/basic-memory”

Requirements

  • Python 3

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. Search before answering. If the user asks "what did we decide about X?", run bm_search first.
  2. Offer to capture. When the user shares decisions or meeting outcomes, ask: "Should I save this as a note?"
  3. Never claim an unwritten save. "Remember/record/save/note this" means calling bm_write (or bm_edit) in that turn. Only report a save after…
  4. Suggest connections. When a search returns related notes, surface them so the user knows what already exists.
  5. Don't over-capture. Auto-capture is already running per turn. Don't create a bm_write for every response — only for substantive content…
  6. Sensitive info. Don't capture credentials or personal data without confirmation.

What it can do on your machine

Read from SKILL.md and the folder at commit cb7407f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are markdown).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • docs.basicmemory.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Basic Memory loads about 2.9k tokens when it runs. Until then it costs about 41 tokens; SKILL.md has 1,172 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~41
When it runs · the whole SKILL.md, loaded when a task matches
~2.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from basicmachines-co/basic-memory at commit cb7407f, republished under its AGPL-3.0 licence (© basicmachines-co). 1,172 words, ~2,855 tokens.

Download SKILL.mdSave it as .claude/skills/basic-memory/SKILL.md (or your agent's skills folder).
name
basic-memory
description
Use the Basic Memory knowledge graph for persistent memory across sessions. Search before answering; capture decisions, meetings, and insights as notes.
category
memory

Basic Memory Knowledge Graph

You have access to a persistent knowledge graph backed by Basic Memory. The graph survives across sessions and is shared with other tools (Claude Desktop, Obsidian, the bm CLI). Use the bm_* tools below to recall and capture information.

Use bm_*, not the bm CLI

Use the bm_* tools for note operations rather than shelling out to the bm CLI.

The bm_* tools route through a persistent MCP connection — roughly 0.1 seconds per call. Running bm from the shell spawns a fresh Python process per call (1-2 seconds of cold-start every time) and bypasses Hermes's automatic per-turn capture, so the session-transcript and summary notes won't reflect what you did.

The CLI is fine when you genuinely need a feature these wrappers don't expose (rare). Otherwise, prefer:

Use caseTool (not CLI)
Search the graphbm_search
Read a notebm_read
Create / update a notebm_write / bm_edit
Navigate relationsbm_context
Move / deletebm_move / bm_delete
What's been touched latelybm_recent
List available projectsbm_projects
List cloud workspacesbm_workspaces

Tool reference

bm_search — search the graph

Use before answering questions about prior decisions, projects, meetings, or anything that might already be documented.

bm_search({ query: "auth strategy decision", limit: 5 })
bm_read — fetch a note's full content

After search shows a relevant note, read it for context.

bm_read({ identifier: "decisions/auth-strategy" })
bm_read({ identifier: "memory://projects/api-redesign" })
bm_context — navigate via memory:// URLs

Returns the target note plus related notes via traversed relations.

bm_context({ url: "memory://projects/api-redesign", depth: 1 })
bm_write — capture new knowledge

When the user shares a decision, meeting outcome, or insight worth keeping, capture it. Use clear titles and a folder.

bm_write({
  title: "API Authentication Decision",
  folder: "decisions",
  content: "# API Authentication\n\n## Context\n...\n\n## Decision\n..."
})

Recommended folders: projects/, decisions/, meetings/, concepts/, weekly/.

bm_edit — incremental updates

Operations: append, prepend, find_replace (requires find_text), replace_section (requires section).

bm_edit({
  identifier: "projects/api-redesign",
  operation: "append",
  content: "\n## Update 2026-05-09\nDeployed to staging."
})
bm_delete / bm_move — maintenance

Use sparingly. bm_move takes new_folder.

bm_recent — what's been touched lately

Returns notes updated within a window. Use when there's no specific query yet — e.g. "what was I working on yesterday?"

bm_recent({ timeframe: "7d" })
bm_recent({ timeframe: "yesterday", limit: 20 })
bm_recent({ timeframe: "2 weeks", type: "entity" })

timeframe accepts natural language ("yesterday", "2 weeks", "last month") or compact forms ("7d", "24h"). Default is 7d.

bm_projects — list available projects

Returns name, workspace slug, and external_id (UUID) per project across local and cloud. Call this when the user names a project that isn't the active one. Route follow-up tool calls either by workspace-qualified name (project: "personal/main") or by UUID (project_id: "bf2a4c1e-d77f-...") — see Cross-project routing below.

bm_projects()
bm_workspaces — list BM Cloud workspaces

Workspaces are a BM Cloud concept. Returns name, type, role, and default flag. Pair with bm_projects when the same project name might exist in more than one workspace and you need to disambiguate.

bm_workspaces()

A permalink is the canonical, URL-friendly identifier for a note. Three shapes exist; the read/write tools accept all of them:

ShapeExampleWhen
Shortdecisions/auth-strategyBare folder/note-slug. Tools need a project (or project_id) arg to route — the permalink alone isn't enough.
Project-qualifiedmain/decisions/auth-strategyproject-name/folder/note-slug. Carries enough context to route without a separate project arg.
Workspace-qualifiedpersonal/main/decisions/auth-strategyworkspace-slug/project-name/folder/note-slug. Fully routes, including across cloud workspaces with same-named projects.

Only a workspace-qualified permalink routes by itself. A cloud write with project="personal/main" returns personal/main/folder/note-slug, which bm_read({ identifier: <that permalink> }) can follow with no project arg. A local write returns a short permalink such as folder/note-slug; to read it back, pass the same project or project_id you used for bm_write, or the call falls back to the active project.

memory:// URLs follow the same shapes: memory://personal/main/decisions/auth-strategy is valid. The memory:// prefix is optional for bm_read (any of the three permalink shapes works directly); bm_context expects the prefix.

Cross-project routing

Every read/write tool (bm_search, bm_read, bm_write, bm_edit, bm_context, bm_delete, bm_move, bm_recent) accepts optional project and project_id:

  • project — project name, optionally workspace-qualified. Plain ("main") when the name is globally unique; qualified ("personal/main", "team-paul/research") when you need to pick a specific cloud workspace by slug.
  • project_id — UUID from bm_projects (external_id field). The most stable identifier — survives project renames and works across workspaces without qualification. Wins over project if both are passed.

Omit both and the call uses the Hermes-configured active project.

# Plain project name (unique)
bm_write({ title: "...", folder: "...", content: "...", project: "main" })

# Workspace-qualified name (disambiguates same-named projects across workspaces)
bm_write({ title: "...", folder: "...", content: "...", project: "personal/main" })

# UUID (most stable, survives renames)
bm_write({ title: "...", folder: "...", content: "...", project_id: "bf2a4c1e-d77f-..." })

bm_projects and bm_workspaces themselves do not take routing — they list across everything.

To save into a named project: find it with bm_projects, write with explicit project or project_id, and return the permalink bm_write gives back. Follow-up reads need the same project or project_id unless that permalink is workspace-qualified.

Show full SKILL.md (488 more words)Show less

When to use each tool

SituationTool
User asks about a topic that might already be documentedbm_search first, then bm_read
User exposes a decision, plan, or meeting outcomeoffer to bm_write
Updating prior workbm_edit (append for time-ordered logs, replace_section for living docs)
Exploring related conceptsbm_context
"What was I working on yesterday?" / no specific query yetbm_recent
User names a project that isn't the active onebm_projects → call read/write tool with project: "workspace/name" or project_id: "<uuid>"
Same project name might exist in multiple workspacesbm_projects (+ bm_workspaces if needed) → route with workspace-qualified project or project_id
Following up on a freshly-written noteUse the returned permalink with the same project / project_id as the write (workspace-qualified permalinks need neither)

Note structure

BM treats - [category] lines as observations and WikiLink lines under ## Relations as relations. Categories ([decision], [insight], [risk], [fact], [todo], …) and relation types (relates_to, implements, depends_on, blocks, …) are open-ended — use what fits the content. YAML frontmatter is supported with title, type, tags, and permalink as standard fields; any custom fields are allowed. See the knowledge format docs for the full convention.

markdown
# Clear Title

## Context
Background and current situation.

## Key Points
- Main insights
- Important details

## Observations
- [decision] We chose PostgreSQL for ACID guarantees
- [insight] Users prefer social login
- [risk] Deployment lacks rollback path

## Relations
- relates_to [[Other Note Title]]
- depends_on [[Database Choice]]

## Next Steps
- [ ] Implement
- [ ] Document

Behavior guidelines

  1. Search before answering. If the user asks "what did we decide about X?", run bm_search first.
  2. Offer to capture. When the user shares decisions or meeting outcomes, ask: "Should I save this as a note?"
  3. Never claim an unwritten save. "Remember/record/save/note this" means calling bm_write (or bm_edit) in that turn. Only report a save after the tool returned a result, and quote the returned permalink — never a filename recalled from memory.
  4. Suggest connections. When a search returns related notes, surface them so the user knows what already exists.
  5. Don't over-capture. Auto-capture is already running per turn. Don't create a bm_write for every response — only for substantive content the user wants preserved.
  6. Sensitive info. Don't capture credentials or personal data without confirmation.

Footgun

If a note's body contains literal <memory-context>...</memory-context> tags, Hermes's streaming output scrubber will eat those tags (and the text between paired ones) when you echo the note verbatim back to the user. Tool inputs are unaffected. If you must include such content, fence it in a code block.

Further reading

Official docs live at docs.basicmemory.com. Every page has an AI-friendly raw markdown view at /raw/<path>.md (or send Accept: text/markdown to the canonical URL). WebFetch any of these when you need detail beyond what this skill covers:

  • Knowledge format — observation categories, relation types, frontmatter conventions.
  • Observations & relations — how notes form a graph that's searchable and traversable.
  • Memory URLs — title-based addressing, wildcards (memory://docs/*), and routing resolution order.
  • Projects & folders — multi-project layout, folder organization, cloud routing behavior.
  • Semantic search — how bm_search resolves queries (semantic + full-text).
  • MCP tools reference — Basic Memory's full MCP surface (the bm_* tools here are a curated subset).
  • Cloud routing — local vs cloud project modes, per-project routing setup.
  • llms.txt index — full sitemap of raw markdown pages, useful when you need to look up a page not listed above.

© basicmachines-co, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in integrations/hermes/skill of basicmachines-co/basic-memory.

Open the folder on GitHubat commit cb7407f

Compare with similar skills

Basic Memory next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Basic Memory compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Basic Memory this skillbasicmachines-co/basic-memory4.1k—~2.9kAutomated safety check: PassAGPL-3.0
Ontology1mancompany/OneManCompany4402 repos~1.5kAutomated safety check: PassApache-2.0
Lat Md Knowledge Graphstevesolun/ctx588—~466Automated safety check: PassMIT
Para Memory FilesUndertone0809/rudder292—~2.6kAutomated safety check: PassApache-2.0
MemPalace MemoryMemPalace/mempalace59k—~2.7kAutomated safety check: PassMIT
Cortexdb Memory Hermesliliang-cn/cortexdb274—~1.7kAutomated safety check: PassMIT

Similar skills

  • Ontology

    1mancompany/OneManCompany

    Typed knowledge graph for structured agent memory and composable skills.

    440 GitHub starsUsed in 2 repos~1.5k tokens
    Knowledge ManagementAuto-check passed
  • Design or audit a repo-local markdown knowledge graph with wiki links, source-code backlinks, drift checks, and searchable sections.

    588 GitHub stars~466 tokensUpdated 4 days ago
    Knowledge ManagementAuto-check passed
  • Para Memory Files

    Undertone0809/rudder

    File-based memory system using Tiago Forte's PARA method. An agent skill from Undertone0809/rudder.

    292 GitHub stars~2.6k tokensUpdated today
    Knowledge ManagementAuto-check passed
  • MemPalace Memory

    MemPalace/mempalace

    Gives an agent a local memory palace over MCP: verbatim conversation memory, semantic search and a temporal knowledge graph, with a per-session recall protocol.

    59k GitHub stars~2.7k tokensUpdated today
    Knowledge ManagementAuto-check passed
  • Cortexdb Memory Hermes

    liliang-cn/cortexdb

    Give a Python agent (such as Hermes Agent by Nous Research) durable, local-first memory plus a queryable SPARQL knowledge graph, backed by CortexDB through its gRPC sidecar and the cortexdb-client…

    274 GitHub stars~1.7k tokensUpdated yesterday
    Knowledge ManagementAuto-check passed
  • Cortexdb Memory Openclaw

    liliang-cn/cortexdb

    Give a Node.js agent (such as OpenClaw) durable, local-first memory plus a queryable SPARQL knowledge graph, backed by CortexDB through its gRPC sidecar and the cortexdb-client npm package.

    274 GitHub stars~1.6k tokensUpdated yesterday
    Knowledge ManagementAuto-check passed

More from basicmachines-co/basic-memory

All 49 skills in this repo
  • cmux Settings Editor

    basicmachines-co/basic-memory

    Views, sets, unsets and validates cmux settings in ~/.config/cmux/cmux.json with a helper script that checks keys against the schema.

    4.1k GitHub starsUsed in 1 repo~1.3k tokens
    Auto-check passed
  • cmux Window and Pane Control

    basicmachines-co/basic-memory

    End-user control of cmux topology and routing (windows, workspaces, panes/surfaces, focus, moves, reorder, identify, trigger flash). Use when automation needs…

    4.1k GitHub starsUsed in 2 repos~842 tokens
    Auto-check passed
  • Cmux Markdown Viewer Panel

    basicmachines-co/basic-memory

    Opens markdown files in a formatted cmux panel beside the terminal that re-renders on every change, handy for plans and task lists.

    4.1k GitHub starsUsed in 2 repos~527 tokens
    Auto-check passed
  • cmux Workspace Scoping

    basicmachines-co/basic-memory

    Keeps agent actions scoped to the cmux workspace and terminal that invoked it, and lays out pane and surface commands that avoid disrupting the user's own focus.

    4.1k GitHub starsUsed in 2 repos~1.7k tokens
    Auto-check passed
  • Basic Memory Repo Images

    basicmachines-co/basic-memory

    Produces PR, changelog and two-week retro images for the Basic Memory repository from evidence in PR bodies, saved to fixed paths under docs/assets/infographics.

    4.1k GitHub stars~2.7k tokensUpdated today
    Auto-check passed
  • Logfire Instrumentation

    basicmachines-co/basic-memory

    Adds Pydantic Logfire tracing, logging and metrics to Python, JavaScript or TypeScript and Rust projects, with the correct setup order and library extras.

    4.1k GitHub stars~2.3k tokensUpdated today
    Auto-check passed

Questions about Basic Memory

What does Basic Memory do?

Use the Basic Memory knowledge graph for persistent memory across sessions. Basic Memory is an agent skill from basicmachines-co/basic-memory. Use the Basic Memory knowledge graph for persistent memory across sessions.

When should I use Basic Memory?

Basic Memory fits situations like: tasks that involve Knowledge graphs; tasks that involve Agent memory.

How do I install Basic Memory in Claude Code?

Run `npx skills add basicmachines-co/basic-memory --skill basic-memory -a claude-code`. Or copy the skill folder (integrations/hermes/skill in basicmachines-co/basic-memory) into .claude/skills/basic-memory in your project. Claude Code loads it when a task matches its description.

How do I install Basic Memory in Codex?

Run `npx skills add basicmachines-co/basic-memory --skill basic-memory -a codex`. Or copy the skill folder (integrations/hermes/skill in basicmachines-co/basic-memory) into .agents/skills/basic-memory in your project. Codex loads it when a task matches its description.

Can I use Basic Memory in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add basicmachines-co/basic-memory --skill basic-memory -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/basic-memory, .gemini/skills/basic-memory, .github/skills/basic-memory and .opencode/skills/basic-memory in your project.

What does Basic Memory need to run?

SKILL.md names no scripts, command-line tools or credentials: Basic Memory is instructions for the agent only. Our summary lists: Python 3.

Does Basic Memory access the network?

SKILL.md names 1 domain. As links in the text: docs.basicmemory.com. This is read from the text; nothing was executed.

Is Basic Memory safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Basic Memory use?

Basic Memory is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Basic Memory use?

About 2.9k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Basic Memory?

Skills that share tags, products or a category with Basic Memory: Ontology (1mancompany/OneManCompany, 440 stars), Lat Md Knowledge Graph (stevesolun/ctx, 588 stars), Para Memory Files (Undertone0809/rudder, 292 stars) and MemPalace Memory (MemPalace/mempalace, 59k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Basic Memory?

basicmachines-co (a GitHub organization) maintains it in basicmachines-co/basic-memory, which has 4,115 GitHub stars. The repository holds 49 skills in this directory. The repository was last updated on October 7, 2026.

Source: basicmachines-co/basic-memory on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.