context nucleus. The canonical PM DB points at these bundles.
.project/project.json
— structured manifest
.project/PROJECT.md
— living brief
.project/targets.json
— target definitions (commands)
.project/index/artifacts.json
— artifact index
.project/history/plans/*.json
— plans
.project/history/applies/*.json
— apply receipts
project detect
project context
project target list
project target run <name>
project artifact add <path|url> [--tags a,b,c]
(plan + apply)
Note: these verbs are the target UX. Implementations should remain idempotent and safe.
project pm project add <slug> --name "..." --root <path>
project pm project list
project pm task add <slug> "<title>" --priority P0|P1|P2|P3 [--status inbox|next|doing|blocked|waiting|done]
project pm task list [--project <slug>] [--status ...]
project pm task set-status <taskId> <status>
project pm switch <slug>
- prints pinned docs + top targets + active tasks
project pm focus <taskId>
- loads task-linked files/artifacts and updates the task activity log
project pm trello sync [--project <slug>]
- ensures the single "Safa — PM" Trello board exists
- ensures lists exist (Inbox/Next/Doing/Blocked/Waiting/Done)
- upserts cards for canonical tasks
- moves cards to match status
- applies priority labels (P0..P3)
mcporter list mcp-project-router --schema --timeout 120000 --json
- Board name:
Safa — PM
(or configurable)
- Lists == canonical statuses:
Inbox
, Next
, Doing
, Blocked
, Waiting
, Done
- Card title:
[<project_slug>] <task_title>
- Card description begins with a machine block for idempotency:
--- pm ---
task_id: <stable-id>
project: <slug>
status: <status>
priority: P0|P1|P2|P3
---
- Labels (priority, color-coded):
P0
= red
P1
= orange
P2
= yellow
P3
= blue
/home/safa/clawd/data/pm/pm.sqlite
projects(slug PRIMARY KEY, name, root_path, created_at, updated_at)
tasks(task_id PRIMARY KEY, project_slug, title, status, priority, created_at, updated_at)
task_refs(task_id, kind, ref)
(file paths / urls / artifacts)
external_refs(task_id, system, external_id, meta_json)
(e.g., Trello card_id/list_id)