Skip to main content

memory-lifecycle

Manage note status transitions in Basic Memory: archive completed work, move notes between status folders, update frontmatter. Use when marking items complete or archiving entities.

Source facts

Repository
basicmachines-co/basic-memory
Last source activity
October 29, 2026 at 00:59
Detected SKILL.md language
English
Stars
4,447
Forks
345

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
memory-lifecycle
description
Manage note status transitions in Basic Memory: archive completed work, move notes between status folders, update frontmatter. Use when marking items complete or archiving entities.
# Memory Lifecycle 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. ## Project scope If the project is unknown, discover it with `bm_project(command="list")`. Pass a nonempty `project` on every note, folder, context and schema call, even with one project or a qualified `memory://` URL. Use the chosen project's name, `workspace/project`, or external ID; `<project>` below is a placeholder for it. Recent activity also requires `project`. Search accepts `project` for one project, `projects` for selected projects, or `all_projects=True` explicitly. Discovery and bundled manuals need no project. Keep the same scope when following returned paths, paginating, or recovering from a refusal. ## When to Use - User says something is "done", "finished", "completed", "submitted", "missed", or "cancelled" - Moving entities between status folders (active → archive, pipeline → active, etc.) - Reverting a mistaken completion - Periodic cleanup of stale active items ## Core Principle: Archive, Never Delete Deleting a note removes it from the knowledge graph — its observations and relations disappear, and links to it from other notes become unresolved links. Archiving preserves everything while signaling the entity is no longer active. ``` # Good — entity stays in the knowledge graph bm_move → active/ to archive/ # Bad — knowledge is lost bm_delete ``` The only exception: notes created by mistake (typos, true duplicates) can be deleted. ## Folder Conventions 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. ## Status Detection 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 | ## Workflow ### 1. Find the Entity Search Basic Memory with multiple variations to locate the entity: ```python bm_search(query="quarterly report", project="<project>") bm_search(query="Q1 report", project="<project>") ``` If multiple matches come back, present options and ask which one. If no match is found, ask for clarification — don't guess. ### 2. Move the File Use `bm_move` to relocate the entity to the appropriate status folder: ```python bm_move( identifier="tasks/active/quarterly-report", destination="tasks/completed/quarterly-report.md", project="<project>", ) ``` 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. ### 3. Update Frontmatter After moving, merge the new status (and completion date, if the type tracks one) into frontmatter with `command="set_metadata"` and the `metadata` parameter; this leaves the body unchanged: ```python bm_edit( identifier="tasks/completed/quarterly-report.md", command="set_metadata", metadata={"status": "completed", "completed": "2026-02-22"}, project="<project>", ) ``` If the note also carries a `- [status]` observation, update it too (for example with `find_replace` on `- [status] active`). ### 4. Confirm Report what was done concisely: ``` Marked complete: Quarterly Report Moved to: tasks/completed/quarterly-report.md Status: completed ``` ## Edge Cases ### Already Archived 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?" ### Partial Completion 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. ### Locked Notes A note with `locked: true` in its frontmatter still moves, and keeps its lock, but the status edit in step 3 is refused. Report that it moved and that its status is unchanged. Only the user can unlock it, by editing the file. ### Revert / Reactivate If something was archived by mistake, move it back: ```python bm_move( identifier="tasks/completed/quarterly-report", destination="tasks/active/quarterly-report.md", project="<project>", ) bm_edit( identifier="tasks/active/quarterly-report.md", command="set_metadata", metadata={"status": "active"}, project="<project>", ) ``` ### Status Without Movement 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. ## Relationship to Other Skills - **memory-tasks**: Tasks are a specific lifecycle case. This skill covers the general pattern; memory-tasks covers task-specific fields (steps, current_step, context). - **memory-notes**: Use search-before-create (from memory-notes) to find the entity before transitioning it. - **memory-defrag**: Periodic defrag can identify stale active items that should be archived. ## Guidelines - **Archive, never delete.** The knowledge graph benefits from historical context. - **Move first, then update frontmatter.** This order ensures the file is in the right place even if the edit step fails. - **Permalinks survive moves by default.** Links to the entity keep working after a `bm_move` unless the project enables `update_permalinks_on_move`. - **Be concise in confirmations.** The user knows their system — just report what changed. - **Ask when ambiguous.** If multiple entities match or the target folder isn't clear, ask rather than guess. - **Batch operations are fine.** If the user says "archive all completed tasks", find them all, confirm the list, then move them in sequence.
View on GitHub