Share to a team project
Copy a note from the personal/primary project into a configured team project so
teammates can see it. This is the only path by which the plugin writes to a shared
project — session checkpoints and /basic-memory:bm-remember always stay personal.
Steps
-
Resolve config. Read the
basicMemoryblock with the hooks' precedence. For the user-level base, appendsettings.jsonto the literal value ofCLAUDE_CONFIG_DIRwhen that environment variable is present; do not trim it, expand~, or treat an empty value as unset. Use~/.claude/settings.jsononly when the variable is absent. Then the project's.claude/settings.jsonand.claude/settings.local.jsonoverride per key:teamProjects— a map of<project-ref>→{ "promoteFolder": "shared" }. These are the allowed share targets.<project-ref>is a workspace-qualified name (e.g.my-team-2/notes) or anexternal_idUUID.primaryProject— the source project notes are read from.
If
teamProjectsis empty, tell the user there's no share target configured and suggest adding one (or running/basic-memory:bm-setup), then stop. Don't invent a target. -
Find the source note. From
$ARGUMENTS(a title, permalink, ormemory://URL),read_noteit fromprimaryProject. If$ARGUMENTSis empty (you were invoked from "share this"), use the note most clearly referenced in the conversation — confirm which one if there's any ambiguity. Capture its title, full content (including frontmatter), and source permalink. -
Pick the target. If
teamProjectshas one entry, use it. If several, ask which team project to share to. Use that entry'spromoteFolder(defaultshared). -
Confirm before writing. This write is visible to teammates, so show the user what you're about to do — "Share '' to /?" — and wait for a yes. Never share silently.
-
Write the shared copy with
write_note:- Route to the target: if the team ref is an
external_idUUID, pass it asproject_id; otherwise pass the workspace-qualified name asproject. (A bare UUID inprojectwon't route — Basic Memory takes UUIDs only viaproject_id.) directory= thepromoteFoldertitle= the source titlecontent= the source's content, with attribution added: keep its frontmatter (so a shared decision staystype: decisionand is findable in the team's structured recall), add ashared_from: <source permalink>frontmatter field, and add an observation- [context] Shared from <source permalink>. Don't overwrite an existing note at the target unless the user says so.
- Route to the target: if the team ref is an
-
Confirm in one line: what was shared and the new team permalink, e.g.
Shared → my-team-2/shared/<slug>.
Notes
- Sharing copies the note; the original stays in your project. Edits to one don't propagate to the other.
- Don't share notes containing secrets, credentials, or anything the user wouldn't want teammates to see — if in doubt, ask.
- Use whichever Basic Memory MCP server is connected; route to the team project by
the
project(qualified name) orproject_id(UUID) argument.

