SQLite Kanban Provider#

The SQLite provider is a zero-infrastructure kanban board for Marcus. It stores all task data in a local SQLite database file, eliminating the need for Docker, Planka, Postgres, or any external service.

When to Use SQLite#

Scenario

Recommended Provider

Getting started / first experiment

SQLite

Local development and testing

SQLite

CI/CD pipelines

SQLite

Single developer

SQLite

Team with visual board needs

Planka

Enterprise with existing tools

GitHub / Linear

Configuration#

In config_marcus.json:

{
  "kanban": {
    "provider": "sqlite",
    "sqlite_db_path": "./data/kanban.db",
    "sqlite_attachments_dir": "./data/attachments"
  }
}

Or via environment variables:

export KANBAN_PROVIDER=sqlite
export SQLITE_KANBAN_DB_PATH=./data/kanban.db
export SQLITE_KANBAN_ATTACHMENTS_DIR=./data/attachments

Marcus creates the database automatically on first project creation.

How It Works#

Database Schema#

The provider creates 6 tables:

Table

Purpose

tasks

Core task data (name, status, priority, assignment, timestamps)

task_dependencies

Task-to-task dependency relationships

task_labels

Labels/tags per task

comments

Coordination comments (progress, blockers, assignments)

attachments

Attachment metadata (files stored on disk)

blockers

Blocker records with severity

Concurrency#

SQLite runs in WAL (Write-Ahead Logging) mode, which allows multiple agents to read the board simultaneously while one agent writes. This is the same pattern used by Marcusโ€™s existing SQLitePersistence layer.

Task Lifecycle#

The provider handles the full Marcus workflow:

TODO โ”€โ”€โ†’ IN_PROGRESS โ”€โ”€โ†’ DONE
  โ”‚          โ”‚
  โ”‚          โ–ผ
  โ”‚       BLOCKED โ”€โ”€โ†’ IN_PROGRESS (unblocked)
  โ”‚
  โ””โ”€โ”€โ†’ TODO (recovered from expired lease)

Each transition adds a comment for audit trail:

  • Assignment: "๐Ÿ“‹ Task assigned to agent-1 at 2026-03-28T..."

  • Progress: "๐Ÿ“Š Progress: 50% - Implemented core logic"

  • Blocker: "๐Ÿšซ BLOCKER (HIGH): API is down"

  • Recovery: "โš ๏ธ RECOVERY ADDENDUM\nFrom: agent-1\nProgress: 40%..."

Status/Column Mapping#

The provider maps column names to statuses (case-insensitive):

Column Name

Status

backlog, todo, to do, ready

TODO

in progress, progress

IN_PROGRESS

blocked, on hold

BLOCKED

done, completed

DONE

Inspecting Your Board#

Since thereโ€™s no web UI, use SQLite CLI or any SQLite viewer.

Command Line#

# All tasks with status
sqlite3 data/kanban.db "SELECT name, status, assigned_to, priority FROM tasks"

# Available tasks (what agents will pick up)
sqlite3 data/kanban.db "SELECT name, priority FROM tasks WHERE status='todo' AND assigned_to IS NULL"

# Board summary
sqlite3 data/kanban.db "SELECT status, COUNT(*) as count FROM tasks GROUP BY status"

# Recent comments (coordination audit trail)
sqlite3 data/kanban.db \
  "SELECT t.name, c.content, c.created_at
   FROM comments c JOIN tasks t ON t.id = c.task_id
   ORDER BY c.created_at DESC LIMIT 10"

# Blockers
sqlite3 data/kanban.db \
  "SELECT t.name, b.description, b.severity
   FROM blockers b JOIN tasks t ON t.id = b.task_id
   WHERE b.resolved = 0"

# Task dependencies
sqlite3 data/kanban.db \
  "SELECT t1.name as task, t2.name as depends_on
   FROM task_dependencies d
   JOIN tasks t1 ON t1.id = d.task_id
   JOIN tasks t2 ON t2.id = d.depends_on_id"

GUI Tools#

Any SQLite browser works:

Switching from Planka to SQLite#

  1. Change config_marcus.json:

{
  "kanban": {
    "provider": "sqlite"
  }
}
  1. Existing Planka projects in the registry wonโ€™t be affected โ€” theyโ€™ll continue to reference Planka. New projects created via create_project will use SQLite.

  2. To migrate existing tasks, export from Planka and re-import (manual process).

File Locations#

File

Purpose

src/integrations/providers/sqlite_kanban.py

Provider implementation

src/integrations/kanban_interface.py

Abstract interface (all providers)

src/integrations/kanban_factory.py

Provider selection logic

src/config/marcus_config.py

Configuration fields

tests/unit/integrations/test_sqlite_kanban.py

Test suite (80 tests, 93% coverage)

Limitations#

  • No web UI โ€” use CLI or SQLite browser for visibility

  • Single database file โ€” not suitable for distributed multi-node deployments

  • No real-time notifications โ€” agents poll for changes via get_available_tasks()

  • Attachments stored on local filesystem โ€” not shareable across machines

For team environments or when a visual board is needed, use the Planka provider instead.