Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ just package-check-openclaw

The Claude Code plugin is the bridge between Claude's working memory and Basic
Memory — session-start briefings, pre-compaction checkpoints, an opt-in capture
output style, and `/basic-memory:setup` · `:remember` · `:share` · `:status`.
output style, and `/basic-memory:bm-setup` · `:remember` · `:share` · `:status`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Prefix all listed skill commands

After this rename, only /basic-memory:bm-remember, /basic-memory:bm-share, and /basic-memory:bm-status exist, but this updated user-facing summary still advertises the old shorthand names :remember, :share, and :status. Users following the README can therefore try slash commands that no longer resolve; update the remaining entries to :bm-remember, :bm-share, and :bm-status as well.

Useful? React with 👍 / 👎.


**Connect the Basic Memory MCP server first** — see [Connect your AI
client](#connect-your-ai-client). The plugin's hooks and skills call it, so it's a
Expand Down
12 changes: 6 additions & 6 deletions plugins/claude-code/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ Memory's durable graph**, rather than a memory layer of its own. See
(`my-team/notes`) or `external_id` UUIDs, since project names collide across
workspaces. Reads route over the user's OAuth session; capture **never** writes to a
shared project.
- **`/basic-memory:share <note>`** (`skills/share/`) — the deliberate personal→team
- **`/basic-memory:bm-share <note>`** (`skills/bm-share/`) — the deliberate personal→team
write: copies a note from the primary project into a configured `teamProjects`
target's `promoteFolder`, with `shared_from` attribution and a confirmation step.
Preserves the note's type so shared decisions stay findable in the team's structured
recall. (Phase 4)
- **`/basic-memory:setup`** (`skills/setup/`) — a short guided interview that
- **`/basic-memory:bm-setup`** (`skills/bm-setup/`) — a short guided interview that
configures the project for the plugin: maps it to a Basic Memory project (picking
an existing one or creating a new one), seeds the `session`/`decision`/`task`
schemas into the project, installs the shared `memory-*` skills via
Expand All @@ -30,11 +30,11 @@ Memory's durable graph**, rather than a memory layer of its own. See
capture reflexes. Writes the `basicMemory` block to
`.claude/settings.json` (or `settings.local.json`). The SessionStart hook nudges
toward this on first run; running it (writing the config) stops the nudge. (Phase 3)
- **`/basic-memory:remember <text>`** (`skills/remember/`) — quick deliberate
- **`/basic-memory:bm-remember <text>`** (`skills/bm-remember/`) — quick deliberate
capture. Writes the text verbatim to the `rememberFolder` (default `bm-remember`)
with a first-line title and a `manual-capture` tag, via the connected Basic Memory
MCP server. Also fires when the user says "remember that…". (Phase 2)
- **`/basic-memory:status`** (`skills/status/`) — diagnostic that reports the active
- **`/basic-memory:bm-status`** (`skills/bm-status/`) — diagnostic that reports the active
project, capture/remember folders, output-style state, recent session checkpoints,
and active-task count. User-invoked only (`disable-model-invocation`). (Phase 2)

Expand Down Expand Up @@ -62,7 +62,7 @@ Memory's durable graph**, rather than a memory layer of its own. See

### Changed

- **SessionStart hook now nudges toward `/basic-memory:setup` on first run** — when
- **SessionStart hook now nudges toward `/basic-memory:bm-setup` on first run** — when
no `basicMemory` config block is present in either settings file. The nudge
survives a failed/empty task query (so a brand-new user with no project yet still
sees it), and stops once setup writes the config. (Phase 3)
Expand All @@ -84,7 +84,7 @@ Memory's durable graph**, rather than a memory layer of its own. See

### Notes

- Slash commands shipped by later phases (`/basic-memory:setup`,
- Slash commands shipped by later phases (`/basic-memory:bm-setup`,
`:remember`, `:status`) will be **plugin-namespaced** — Claude Code namespaces
all plugin skills as `/<plugin>:<skill>`.
- Requires `basic-memory >= 0.19.0` (for `metadata_filters` / structured recall).
Expand Down
68 changes: 36 additions & 32 deletions plugins/claude-code/DESIGN.md

Large diffs are not rendered by default.

16 changes: 8 additions & 8 deletions plugins/claude-code/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@ Plugin skills are namespaced under the plugin name:

| Command | What it does |
|---------|--------------|
| `/basic-memory:setup` | One-time guided setup — maps the project to a Basic Memory project, seeds the note schemas, installs the shared `memory-*` skills, optionally learns your conventions, and turns on the capture reflexes. Run this first. |
| `/basic-memory:remember <text>` | Quick capture — saves the text to the `bm-remember` folder with a `manual-capture` tag. Also fires when you say "remember that…". |
| `/basic-memory:share <note>` | Promote a personal note to a configured team project, with attribution and confirmation. The deliberate way to write to a shared workspace. |
| `/basic-memory:status` | Diagnostic — shows the active project, team read-sources and share targets, capture folders, output-style state, recent session checkpoints, and active-task count. |
| `/basic-memory:bm-setup` | One-time guided setup — maps the project to a Basic Memory project, seeds the note schemas, installs the shared `memory-*` skills, optionally learns your conventions, and turns on the capture reflexes. Run this first. |
| `/basic-memory:bm-remember <text>` | Quick capture — saves the text to the `bm-remember` folder with a `manual-capture` tag. Also fires when you say "remember that…". |
| `/basic-memory:bm-share <note>` | Promote a personal note to a configured team project, with attribution and confirmation. The deliberate way to write to a shared workspace. |
| `/basic-memory:bm-status` | Diagnostic — shows the active project, team read-sources and share targets, capture folders, output-style state, recent session checkpoints, and active-task count. |

## Requirements

Expand All @@ -61,7 +61,7 @@ claude plugin install basic-memory@basicmachines-co

## Configuration

The fastest path is **`/basic-memory:setup`** — a ~2-minute interview that writes
The fastest path is **`/basic-memory:bm-setup`** — a ~2-minute interview that writes
the config, seeds the schemas, and turns on the capture reflexes. The SessionStart
hook nudges you toward it on first run.

Expand Down Expand Up @@ -103,14 +103,14 @@ ever auto-writing to the shared graph.**
- **Read across** — add team projects to `secondaryProjects`. SessionStart pulls their
open decisions into your brief (in parallel, read-only), so you start oriented on
what the team has decided.
- **Capture stays personal** — session checkpoints and `/basic-memory:remember` only
- **Capture stays personal** — session checkpoints and `/basic-memory:bm-remember` only
ever write to your `primaryProject`. Nothing lands in a team project automatically.
- **Share deliberately** — `/basic-memory:share` copies a chosen note into a
- **Share deliberately** — `/basic-memory:bm-share` copies a chosen note into a
`teamProjects` target (with attribution and a confirmation step). That's the only
path to a shared write.

Because project names repeat across workspaces, team refs must be **workspace-qualified**
(`my-team/notes`) or `external_id` UUIDs — `/basic-memory:setup` fills these in for you
(`my-team/notes`) or `external_id` UUIDs — `/basic-memory:bm-setup` fills these in for you
from `list_workspaces`.

## Documentation
Expand Down
8 changes: 4 additions & 4 deletions plugins/claude-code/docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ flowchart TB
OS["output-style<br/>→ search-first / capture / cite reflexes"]
end
subgraph Deliberate["Deliberate (slash commands)"]
SK["/basic-memory:setup · remember · share · status"]
SK["/basic-memory:bm-setup · bm-remember · bm-share · bm-status"]
end

Ambient --> MCP["Basic Memory MCP server"]
Expand Down Expand Up @@ -85,7 +85,7 @@ Key properties:
is ~one query, not the sum.
- **Best-effort.** No Basic Memory, no config, or a slow cloud read never blocks or
errors the session — the worst case is a missing or partial brief.
- **First-run aware.** With no config it nudges toward `/basic-memory:setup`.
- **First-run aware.** With no config it nudges toward `/basic-memory:bm-setup`.

## PreCompact — the checkpoint

Expand Down Expand Up @@ -145,7 +145,7 @@ flowchart TB

T1 -- "read-only<br/>(SessionStart)" --> P
T2 -- "read-only<br/>(SessionStart)" --> P
P -- "/basic-memory:share<br/>(deliberate, confirmed)" --> T2
P -- "/basic-memory:bm-share<br/>(deliberate, confirmed)" --> T2

note["Auto-capture (checkpoints, /remember)<br/>writes ONLY to primaryProject"]
```
Expand All @@ -160,7 +160,7 @@ project names collide across workspaces. Reads route over the user's OAuth sessi
| `hooks/session-start.sh`, `hooks/pre-compact.sh` | the ambient bridge (read / write) |
| `hooks/hooks.json` | registers the hooks |
| `output-styles/basic-memory.md` | the capture reflexes |
| `skills/{setup,remember,share,status}/` | the deliberate slash commands |
| `skills/{bm-setup,bm-remember,bm-share,bm-status}/` | the deliberate slash commands |
| `schemas/{session,decision,task}.md` | picoschema seeds (copied into your project at setup) |
| `.claude/settings.json` → `basicMemory` | per-project configuration |
| your Basic Memory projects | all actual content |
16 changes: 8 additions & 8 deletions plugins/claude-code/docs/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ SessionStart, PreCompact**.
In a project (repo) where you want memory, run:

```
/basic-memory:setup
/basic-memory:bm-setup
```

It's a short interview. It will:
Expand All @@ -57,7 +57,7 @@ It's a short interview. It will:
When it finishes, run:

```
/basic-memory:status
/basic-memory:bm-status
```

to see exactly what the plugin is tracking.
Expand All @@ -67,7 +67,7 @@ to see exactly what the plugin is tracking.
1. **Capture a decision.** In normal conversation, make a decision — e.g. *"Let's use
Postgres, not SQLite, because we need concurrent writers."* With the output style on,
Claude writes a `type: decision` note and tells you the permalink.
2. **Quick-capture something.** `/basic-memory:remember switch the staging job to the
2. **Quick-capture something.** `/basic-memory:bm-remember switch the staging job to the
new image after the rebase lands` → saved to `bm-remember/`.
3. **Start a fresh session.** Open a new Claude Code session in the same project. The
**SessionStart brief** appears first thing, showing your active tasks and the open
Expand All @@ -83,7 +83,7 @@ graph accumulates.
On Basic Memory Cloud with a team workspace, you can read team context into your brief
and publish back deliberately.

Re-run `/basic-memory:setup` (or edit `.claude/settings.json`). Because project names
Re-run `/basic-memory:bm-setup` (or edit `.claude/settings.json`). Because project names
repeat across workspaces, team projects use **workspace-qualified names**
(`my-team/notes`) or `external_id` UUIDs — setup finds these for you via
`list_workspaces`.
Expand All @@ -102,7 +102,7 @@ repeat across workspaces, team projects use **workspace-qualified names**
Now:
- SessionStart folds the team's **open decisions** into your brief (read-only).
- Your captures still go **only** to `primaryProject` — never to the team.
- `/basic-memory:share <note>` publishes a chosen note to `my-team/notes/shared`, with
- `/basic-memory:bm-share <note>` publishes a chosen note to `my-team/notes/shared`, with
attribution and a confirmation step.

Tip: a team brief is only as rich as the team's typed notes. Share an existing decision
Expand All @@ -116,17 +116,17 @@ Everything is in the `basicMemory` block of `.claude/settings.json`. Common knob
|-----|---------|--------------|
| `primaryProject` | (default project) | where briefs read from and captures write to |
| `secondaryProjects` | `[]` | team/shared projects read for recall (read-only) |
| `teamProjects` | `{}` | share targets for `/basic-memory:share` |
| `teamProjects` | `{}` | share targets for `/basic-memory:bm-share` |
| `captureFolder` | `sessions` | folder for PreCompact checkpoints |
| `rememberFolder` | `bm-remember` | folder for `/basic-memory:remember` |
| `rememberFolder` | `bm-remember` | folder for `/basic-memory:bm-remember` |
| `recallTimeframe` | `3d` | recency window for the brief |
| `preCompactCapture` | `extractive` | how checkpoints are produced |

See [settings.example.json](../settings.example.json) for the full shape.

## Troubleshooting

- **No brief at session start?** Confirm Basic Memory is connected (`/basic-memory:status`).
- **No brief at session start?** Confirm Basic Memory is connected (`/basic-memory:bm-status`).
The hooks are silent if `basic-memory` isn't on PATH.
- **Checkpoints aren't being written?** A `primaryProject` must be set — the PreCompact
hook never writes to an un-pinned/default project on its own.
Expand Down
6 changes: 3 additions & 3 deletions plugins/claude-code/docs/why-combine-memory.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,18 +72,18 @@ often on a **team**.
> team's recent open decisions. You're oriented before you ask a single question.

**Wins:** no context bleeding between projects; team memory that compounds across
people; sharing a decision to the team in one gesture (`/basic-memory:share`).
people; sharing a decision to the team in one gesture (`/basic-memory:bm-share`).

## What you actually get

Once installed and set up (`/basic-memory:setup`):
Once installed and set up (`/basic-memory:bm-setup`):

- **Session briefings** — start each session knowing your active tasks, open decisions,
and (if on a team) recent team context.
- **Checkpoints that survive compaction** — long sessions don't lose their thread.
- **Capture reflexes** — Claude searches before answering recall questions and writes
down real decisions as it goes, citing permalinks.
- **Quick capture** — `/basic-memory:remember` for a fast note without breaking flow.
- **Quick capture** — `/basic-memory:bm-remember` for a fast note without breaking flow.
- **Team memory** — read across shared projects; publish back deliberately.

All of it in plain Markdown files you own, in projects you control — local, cloud, or
Expand Down
6 changes: 3 additions & 3 deletions plugins/claude-code/hooks/session-start.sh
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ with ThreadPoolExecutor(max_workers=3 + MAX_SHARED) as pool:
# The first-run nudge — shown until setup writes a basicMemory config block.
setup_nudge = (
"_Basic Memory isn't set up for this project yet. Run "
"`/basic-memory:setup` (~2 min) to configure session briefings and checkpoints._"
"`/basic-memory:bm-setup` (~2 min) to configure session briefings and checkpoints._"
)

# Trigger: every primary query failed (no default project, misnamed project,
Expand All @@ -193,7 +193,7 @@ if primary_tasks is None and primary_decisions is None and primary_sessions is N
print(
"# Basic Memory\n\n"
f"_Couldn't read from `{proj}` — it may be misnamed or unreachable. "
"Run `/basic-memory:status` to check._"
"Run `/basic-memory:bm-status` to check._"
)
sys.exit(0)

Expand Down Expand Up @@ -246,7 +246,7 @@ if shared_sections:
lines += [
"",
"_Shared-project context is read-only. Your captures stay in this project; "
"use `/basic-memory:share` to deliberately promote a note to the team._",
"use `/basic-memory:bm-share` to deliberately promote a note to the team._",
]
if shared_capped:
lines += ["", f"_(reading the first {MAX_SHARED} shared projects; more are configured.)_"]
Expand Down
2 changes: 1 addition & 1 deletion plugins/claude-code/schemas/decision.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ settings:
A **DecisionNote** is a durable record of a real choice — one with alternatives
and a rationale, not a passing preference. The Basic Memory plugin's output-style
prompts Claude to capture these inline as decisions are made, and the future
`/basic-memory:decide` command captures them explicitly.
`/basic-memory:bm-decide` command captures them explicitly.

Decisions are found by structured recall:
`search_notes(metadata_filters={"type": "decision", "status": "open"})`.
Expand Down
2 changes: 1 addition & 1 deletion plugins/claude-code/schemas/session.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ settings:
# Session

A **SessionNote** is a resume checkpoint written by the Basic Memory plugin's
PreCompact hook (and, later, the `/basic-memory:handoff` command) right before
PreCompact hook (and, later, the `/basic-memory:bm-handoff` command) right before
Claude Code compacts the context window. It records what the session was doing
so the next session can pick up where this one left off.

Expand Down
2 changes: 1 addition & 1 deletion plugins/claude-code/settings.example.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"$comment": "Example Basic Memory plugin settings. Copy the basicMemory block (and optionally outputStyle) into your project's .claude/settings.json, then set primaryProject. The easiest way to fill this in is /basic-memory:setup. Team projects (secondaryProjects, teamProjects) must use workspace-qualified names like 'my-team/notes' or external_id UUIDs — bare names are ambiguous across workspaces. See DESIGN.md for the full schema.",
"$comment": "Example Basic Memory plugin settings. Copy the basicMemory block (and optionally outputStyle) into your project's .claude/settings.json, then set primaryProject. The easiest way to fill this in is /basic-memory:bm-setup. Team projects (secondaryProjects, teamProjects) must use workspace-qualified names like 'my-team/notes' or external_id UUIDs — bare names are ambiguous across workspaces. See DESIGN.md for the full schema.",
"basicMemory": {
"primaryProject": "my-project",
"secondaryProjects": ["my-team/main", "my-team/notes"],
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: remember
description: Quickly capture a thought, fact, or reminder into Basic Memory as a lightweight note. Use when the user says "remember that…", "note this", "save this to memory", or runs /basic-memory:remember. For quick deliberate capture — not full decision or session records.
name: bm-remember
description: Quickly capture a thought, fact, or reminder into Basic Memory as a lightweight note. Use when the user says "remember that…", "note this", "save this to memory", or runs /basic-memory:bm-remember. For quick deliberate capture — not full decision or session records.
argument-hint: <text to remember>
---

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: setup
description: Set up the Basic Memory plugin for this project — a short guided interview that configures the project mapping, seeds note schemas, learns or suggests placement conventions, and enables capture reflexes. Use when the user runs /basic-memory:setup, says "set up basic memory", or asks to configure/bootstrap the plugin.
name: bm-setup
description: Set up the Basic Memory plugin for this project — a short guided interview that configures the project mapping, seeds note schemas, learns or suggests placement conventions, and enables capture reflexes. Use when the user runs /basic-memory:bm-setup, says "set up basic memory", or asks to configure/bootstrap the plugin.
argument-hint: (no arguments — runs an interactive interview)
---

Expand Down Expand Up @@ -71,7 +71,7 @@ Ask only what you can't infer. Cover:
six, order the most relevant first and tell them the rest are configured but
not read each session.
- **Share target** (optional): if the user wants a place to *publish* notes to the
team via `/basic-memory:share`, add it to `teamProjects` as
team via `/basic-memory:bm-share`, add it to `teamProjects` as
`"<qualified-name>": { "promoteFolder": "shared" }`. Sharing is always a manual
gesture — auto-capture never writes to a team project.

Expand Down Expand Up @@ -102,7 +102,7 @@ Ask only what you can't infer. Cover:
6. **How active should I be? (output style)** "Want me to proactively capture —
search the graph before recalling, write material decisions as typed notes, and
cite permalinks? Or keep it quiet (just the session brief, the PreCompact
checkpoint, and `/basic-memory:remember` on demand)?" Enabling it sets
checkpoint, and `/basic-memory:bm-remember` on demand)?" Enabling it sets
`outputStyle: "basic-memory"`. Default to enabled; leave it off for a recall-only,
low-noise setup. (This is the single knob for how proactive the assistant is —
the hooks always run regardless.)
Expand All @@ -119,7 +119,7 @@ Ask only what you can't infer. Cover:
### 1. Seed the schemas
The plugin ships seed schemas at `<plugin>/schemas/` — that's **two directories up
from this skill's directory, then `schemas/`** (this skill is at
`<plugin>/skills/setup/`). Read `session.md`, `decision.md`, and `task.md` there.
`<plugin>/skills/bm-setup/`). Read `session.md`, `decision.md`, and `task.md` there.

For each one:
- Check whether the chosen project already has a schema for that type
Expand Down Expand Up @@ -222,5 +222,5 @@ Then handle activation based on the output style:
proactive-capture reflexes wait for the restart.
- **Output style off** → no restart needed; the hooks already run.

End with: *"Done — I'll use this from the next message. Run `/basic-memory:status`
End with: *"Done — I'll use this from the next message. Run `/basic-memory:bm-status`
anytime to see what I'm tracking."*
Loading
Loading