Tasks and projects
Markdown-native task management. One file per task, YAML frontmatter, threads as callouts, a generated dashboard.
Projects and tasks are files. There is no database to sync, nothing to export, and Obsidian renders all of it.
Projects
create-project scaffolds projects/<slug>/ with a README and a tasks/ folder. The two-letter task prefix derives from the slug automatically. archive-project retires one cleanly: moves the folder to the archive, strips references from active docs, banners the README, recompiles the index.
Tasks
Each task lives at projects/<slug>/tasks/<id>-<slug>.md:
---
schema: 1
id: bd-004
title: "Write blog post: Why Bun is a joy for local TS scripts"
type: task
status: open
priority: P2
project: blog-dev
assignee: [basem]
labels: []
created: 2026-04-21
updated: 2026-07-24
due:
depends_on: []
---
## Description
...
## Checklist
- [ ] ...
## Thread
> [!quote] Basem · 2026-07-24
> Let's frame it around the postinstall story.
> [!info] Kevin · 2026-07-24
> Drafted an outline in the description.| Field | Values |
|---|---|
| ID | Two-letter project prefix plus a three-digit number. Globally unique. Kevin assigns them |
| Type | task · bug · idea · epic |
| Status | open · active · blocked · done · cancelled. Transitions are validated |
| Priority | P0 drop everything · P1 this week · P2 this sprint · P3 backlog |
| Thread | Append-only. [!quote] for you, [!info] for Kevin, [!warning] for automated actions |
Closed tasks move to tasks/archive/ on the next sync so the active folder stays scannable.
Driving them
Inside a session, Kevin uses the task_* MCP tools (query, get, create, update, close, thread, scan). Outside a session, the same operations are on the CLI:
kevin task query --status=active
kevin task create --project=blog-dev --title="Draft launch post" --priority=P1
kevin task close bd-004The dashboard file
projects/TASKS.md is generated from task frontmatter on every mutation: weekly, monthly, and yearly goals at the top, then active tasks grouped by project, blocked, overdue, stale, and recently closed. It loads into every session, so Kevin always knows the board. Never edit it by hand.
The goals blocks come from the weekly-goals, monthly-goals, and yearly-goals skills. See Daily rhythm.