Obsidian Brain Workflow
Manage project memory using Obsidian-compatible markdown with Kanban, Dataview, and Templater.
Session Start Checklist
At the beginning of every session:
Read CONTEXT.md - Current project state
cat .project/Memory/CONTEXT.mdCheck KANBAN.md - Active tasks and their lanes
cat .project/Memory/KANBAN.mdReview BLOCKERS.md - Any open blockers
grep "status:: open" .project/Memory/BLOCKERS.mdCreate session file - Copy template or use Templater
cp .project/Sessions/TEMPLATE.md .project/Sessions/$(date +%Y-%m-%d).md
KANBAN.md Format
The Kanban board uses Obsidian Kanban plugin format. Each lane is an H2 heading, each task is a checkbox item.
---
kanban-plugin: board
---
## Backlog
- [ ] T-001 Setup monorepo #wave
- [ ] T-005 Add monitoring
## En Progreso
- [ ] T-002 Configure CI #wave
## Review
- [ ] T-003 Add linters #wave
## Completado
- [x] T-000 Init project
**Complete**
Moving Tasks Between Lanes
Without Obsidian (AI CLI or manual edit):
- Cut the
- [ ]line from one H2 section - Paste it under the target H2 section
- When completing: change
- [ ]to- [x]
With Obsidian:
- Drag and drop cards between lanes
Tags
#wave- Part of current wave#blocker- Has an associated blocker#review- Needs review
Dataview Inline Fields
Memory files use Dataview inline fields for automatic queries. Format: key:: value
Required Fields Reference
| File | Required Fields | Notes |
|---|---|---|
| DECISIONS.md (ADRs) | type:: adr, status::, date:: |
Without these, DASHBOARD queries return empty |
| BLOCKERS.md | type:: blocker, status::, impact::, date:: |
impact values: alto, medio, bajo |
| Sessions/*.md | frontmatter type: session, date, phase, wave |
Use YAML frontmatter, not inline fields |
ADR Fields (DECISIONS.md)
## ADR-002: Use PostgreSQL
type:: adr
status:: aceptada
date:: 2026-01-15
Blocker Fields (BLOCKERS.md)
### BLOCKER-003: Docker build fails
type:: blocker
status:: open
impact:: alto
date:: 2026-01-20
Valid Status Values
| File | Valid Statuses |
|---|---|
| ADRs | pendiente, aceptada, rechazada, deprecada |
| Blockers | open, investigating, resolved, workaround |
Resolving a Blocker
When resolving, update both the inline field and the content:
### BLOCKER-003: Docker build fails
type:: blocker
status:: resolved
impact:: alto
date:: 2026-01-20
**Solucion:**
Changed base image from alpine to debian-slim.
Wave + Kanban Integration
KANBAN.md is for day-to-day task tracking. WAVES.md is the historical record.
Creating a Wave
- Add tasks to KANBAN.md Backlog with
#wavetag - Run
./scripts/new-wave.sh "T-001 T-002 T-003" - Move tagged tasks to "En Progreso" in KANBAN.md
Completing a Wave
- Move all wave tasks to "Completado" in KANBAN.md
- Run
./scripts/new-wave.sh --complete - Remove
#wavetags from completed tasks
Templates
Manual (without Templater)
Copy the template file and fill in placeholders:
# New session
cp .project/Sessions/TEMPLATE.md .project/Sessions/2026-01-15.md
# New ADR - append to DECISIONS.md using the template at the bottom
# New Blocker - append to BLOCKERS.md using the template at the bottom
With Templater (Obsidian)
Use Ctrl+T (or Cmd+T) to insert templates that auto-fill dates and prompt for values:
Session.md- Creates session with current date, prompts for phase/wave/branchADR.md- Creates ADR entry, prompts for number/title/context/decisionBlocker.md- Creates blocker entry, prompts for number/title/impact
Session End Checklist
At the end of every session:
- Update CONTEXT.md - Reflect current state
- Update KANBAN.md - Move tasks to correct lanes
- Complete session file - Fill summary section
- Record blockers - If any new ones appeared
- Record decisions - If any ADRs were made
Dashboard
DASHBOARD.md contains Dataview queries that auto-update in Obsidian:
- Recent decisions
- Active blockers
- Recent sessions
Without Obsidian, it shows as code blocks (read-only reference).