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.
63
73%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./skills/memory-tasks/SKILL.mdManage 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 (SPEC-SCHEMA). The schema note lives at memory/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",
"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.
parent_task [[Other Task]], related_to [[Some Note]]note_types is case-sensitive — write_note(note_type="Task") stores the type as lowercase task in frontmatter. Use note_types=["task"] (lowercase) in search queries.On session start or after compaction:
Search for active tasks:
search_notes(note_types=["task"], status="active")Read the task note to get full context
Resume from current_step using the context field
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:
current_step: 3When done:
status: done
completed: YYYY-MM-DDAdd a brief summary of what was accomplished and any follow-up needed.
When a compaction event is imminent:
search_notes(note_types=["task"], status="active")current_step to reflect actual progresscontext with everything needed to resumeWith 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(noteType="Task") | Validate all tasks against schema |
schema_diff(noteType="Task") | Detect drift between schema and actual task notes |
activeparent_task [[X]] or relations to connect related workschema_validate(noteType="Task") periodically to catch incomplete taskscb95e59
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.