basic-memory-pi-setup
Set up Basic Memory for a Pi workspace. Use when Basic Memory is not configured, /bm-status…
Manage entity status transitions in Basic Memory: archive completed work, move notes between status folders, update frontmatter, and handle edge cases. Use when marking items complete, archiving old entities, or managing any folder-based status workflow.
$ npx -y skills add basicmachines-co/basic-memory --skill memory-lifecycle --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/memory-lifecycleContext preview
The summary Claude sees to decide when to auto-load this skill.
Manage entity status transitions in Basic Memory: archive completed work, move notes between status folders, update frontmatter, and handle edge cases. Use when marking items complete, archiving old entities, or managing any folder-based status workflow.
name: memory-lifecycle description: "Manage entity status transitions in Basic Memory: archive completed work, move notes between status folders, update frontmatter, and handle edge cases. Use when marking items complete, archiving old entities, or managing any folder-based status workflow."
Manage how entities move through status stages in Basic Memory. The core principle: **archive, never delete.** Completed work is valuable context — move it out of the active view, but keep it in the knowledge graph.
Deleting a note removes it from the knowledge graph — all its observations, relations, and history disappear. Archiving preserves everything while signaling the entity is no longer active.
# Good — entity stays in the knowledge graph move_note → active/ to archive/ # Bad — knowledge is lost delete_note
The only exception: notes created by mistake (typos, true duplicates) can be deleted.
Organize entities by status using folders. The exact folder names depend on your domain, but follow a consistent pattern:
entities/ active/ # Currently relevant, in-progress archive/ # Completed, no longer active, but worth keeping pipeline/ # Future items, not yet started
For tasks specifically:
tasks/ active/ # Work in progress completed/ # Finished work
For any entity type with a clear lifecycle:
[type]/ active/ # Current [end-state]/ # Whatever "done" means for this type
Pick folder names that match your domain. The pattern matters more than the specific names.
When the user mentions completion or status change, extract the intent:
| Signal | Status | Action | |--------|--------|--------| | "finished", "done", "completed", "shipped" | Complete | Move to archive/completed folder | | "submitted", "sent", "delivered" | Complete | Move to archive/completed folder | | "missed", "passed", "skipped", "expired" | Missed | Move to archive or missed folder | | "cancelled", "abandoned", "killed" | Cancelled | Move to archive folder | | "paused", "on hold", "deferred" | Paused | Update frontmatter status, keep in place | | "restarting", "reopening", "reviving" | Reactivate | Move back to active folder |
Search Basic Memory with multiple variations to locate the entity:
search_notes(query="quarterly report") search_notes(query="Q1 report")
If multiple matches come back, present options and ask which one.
If no match is found, ask for clarification — don't guess.
Use `move_note` to relocate the entity to the appropriate status folder:
move_note( identifier="tasks/active/quarterly-report", destination_path="tasks/completed/quarterly-report.md" )
By default the permalink stays the same after a move, so links keep resolving. Projects with `update_permalinks_on_move` enabled rewrite it from the new path.
After moving, merge the new status (and completion date, if the type tracks one) into frontmatter with the `metadata` parameter. An `append` with empty `content` changes only the frontmatter:
edit_note(
identifier="quarterly-report",
operation="append",
content="",
metadata={"status": "completed", "completed": "2026-02-22"}
)If the note also carries a `- [status]` observation, update it too (for example with `find_replace` on `- [status] active`).
Report what was done concisely:
Marked complete: Quarterly Report Moved to: tasks/completed/quarterly-report.md Status: completed
If the entity is already in an archive/completed folder, notify the user:
> "Quarterly Report is already in tasks/completed/. Want me to update anything on it?"
Sometimes only part of an entity is done. Don't move it — instead, update observations or status notes within the entity to reflect partial progress.
If something was archived by mistake, move it back:
move_note(
identifier="tasks/completed/quarterly-report",
destination_path="tasks/active/quarterly-report.md"
)
edit_note(
identifier="quarterly-report",
operation="append",
content="",
metadata={"status": "active"}
)Some status changes don't require a folder move — "paused" or "blocked" items often stay in `active/` with just a frontmatter update. Reserve folder moves for terminal or major state transitions.
AI conversations that actually remember. Never re-explain your project to your AI again. Join our Discord: https://discord.gg/tyvKNccgqN
Repo: basicmachines-co/basic-memory
Set up Basic Memory for a Pi workspace. Use when Basic Memory is not configured, /bm-status…
Use Basic Memory from Pi for durable continuity. Capture checkpoints with bm_capture, recall…
Guide Basic Memory setup in Tau. Use when a user wants to install or configure the Tau memory…
Save a deliberate work checkpoint to Basic Memory with the story, changed files,…
Capture a durable engineering decision in Basic Memory with rationale, alternatives,…
Orient Claude from Basic Memory before substantial repo work by reading active tasks, open…