basic-memory-pi-setup
Set up Basic Memory for a Pi workspace. Use when Basic Memory is not configured, /bm-status…
Task management via Basic Memory schemas: create, track, and resume structured tasks that survive context compaction. Uses BM's schema system for uniform notes queryable through the knowledge graph.
$ npx -y skills add basicmachines-co/basic-memory --skill memory-tasks --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/memory-tasksContext preview
The summary Claude sees to decide when to auto-load this skill.
Task management via Basic Memory schemas: create, track, and resume structured tasks that survive context compaction. Uses BM's schema system for uniform notes queryable through the knowledge graph.
name: memory-tasks description: "Task management via Basic Memory schemas: create, track, and resume structured tasks that survive context compaction. Uses BM's schema system for uniform notes queryable through the knowledge graph."
Manage work-in-progress using Basic Memory's schema system. Tasks are just notes with `type: Task` — they live in the knowledge graph, validate against a schema, and survive context compaction.
Tasks use the BM schema system. The schema note lives at `schema/Task.md`:
--- title: Task type: schema entity: Task version: 1 schema: description: string, what needs to be done status?(enum, current state): [active, blocked, done, abandoned] assigned_to?: string, who is working on this steps?(array): string, ordered steps to complete current_step?: integer, which step number we're on (1-indexed) context?: string, key context needed to resume after memory loss started?: string, when work began completed?: string, when work finished blockers?(array): string, what's preventing progress parent_task?: Task, parent task if this is a subtask settings: validation: warn ---
When work qualifies, create a task note. Use `write_note` with `note_type="Task"` and put queryable fields in `metadata`:
write_note(
title="Descriptive task name",
directory="tasks",
note_type="Task",
metadata={
"status": "active",
"priority": "high",
"assigned_to": "claude",
"current_step": 1,
"steps": ["First step", "Second step", "Third step"]
},
tags=["task"],
content="""# Descriptive task name
## Observations
- [description] What needs to be done, concisely
- [status] active
- [assigned_to] claude
- [current_step] 1
## Steps
1. [ ] First concrete step
2. [ ] Second concrete step
3. [ ] Third concrete step
## Context
What future-you needs to pick up this work. Include:
- Key file paths and repos involved
- Decisions already made and why
- What was tried and what worked/didn't
- Where to look for related context"""
)**Why both frontmatter and observations?** Fields in `metadata` (stored as frontmatter) power `search_notes` with `metadata_filters`. Fields as observations (`- [status] active`) power `schema_validate`. Include queryable fields in both places for full coverage.
On session start or after compaction:
1. **Search for active tasks:**
search_notes(note_types=["task"], status="active")
2. **Read the task note** to get full context
3. **Resume from `current_step`** using the `context` field
4. **Update as you progress** — increment `current_step`, update context, check off steps
As work progresses, update the task note:
## Steps 1. [x] First step — done, resulted in X 2. [x] Second step — done, changed approach because Y 3. [ ] Third step — next up ## Context Updated context reflecting current state...
Update frontmatter too, with the `metadata` parameter (empty `content` leaves the body alone):
edit_note(
identifier="tasks/descriptive-task-name",
operation="append",
content="",
metadata={"current_step": 3}
)When done:
status: done completed: YYYY-MM-DD
Add a brief summary of what was accomplished and any follow-up needed.
When a compaction event is imminent:
1. Find all active tasks: `search_notes(note_types=["task"], status="active")` 2. For each, update:
3. Context that isn't written down is lost at compaction
With BM's schema system, tasks are fully queryable:
| Query | What it finds | |-------|--------------| | `search_notes(note_types=["task"])` | All tasks | | `search_notes(note_types=["task"], status="active")` | Active tasks | | `search_notes(note_types=["task"], status="blocked")` | Blocked tasks | | `search_notes(note_types=["task"], metadata_filters={"assigned_to": "claude"})` | My tasks | | `search_notes("blockers", note_types=["task"])` | Tasks with blockers | | `schema_validate(note_type="Task")` | Validate all tasks against schema | | `schema_diff(note_type="Task")` | Detect drift between schema and actual task notes |
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…