Skip to main content

Universal project management for AI coding agents — MCP server + CLI + git-native task board

Project description

agendum

PyPI version Python 3.13+ Tests License: MIT

Universal project management for AI coding agents.

An MCP server that gives any AI agent (Claude Code, Cursor, OpenCode) a shared project management layer — spec-driven planning, task tracking with dependencies, memory, and cross-session continuity. Works for dev, docs, email, and life organization.

Quick Start

# 1. Install
pip install agendum
# or: uvx agendum --help

# 2. Add to Claude Code
claude mcp add agendum -- uvx agendum --home serve

# 3. Start managing projects
# (in Claude Code, the pm_* tools are now available)

Installation

Claude Code

claude mcp add agendum -- uvx agendum --home serve

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "agendum": {
      "command": "uvx",
      "args": ["agendum", "--home", "serve"]
    }
  }
}

Cursor

Add to Cursor Settings > MCP Servers:

{
  "agendum": {
    "command": "uvx",
    "args": ["agendum", "--home", "serve"]
  }
}

CLI (standalone)

agendum init                                    # Initialize board
agendum project create my-app                   # Create a project
agendum task create my-app "Build auth" -p high # Add tasks
agendum task list my-app                        # View board
agendum next my-app                             # What to work on next?
agendum status                                  # Dashboard overview

Features

32 MCP Tools across 7 Modules

Group Tools Purpose
Board pm_board_init, pm_board_status Initialize and overview
Projects pm_project_create, pm_project_list, pm_project_get, pm_spec_update, pm_plan_update Multi-project management with living specs
Tasks pm_task_create, pm_task_list, pm_task_get, pm_task_claim, pm_task_progress, pm_task_complete, pm_task_block, pm_task_handoff, pm_task_next Full task lifecycle with dependencies
Memory pm_memory_read, pm_memory_write, pm_memory_append, pm_memory_search Cross-session knowledge persistence
Agents pm_agent_register, pm_agent_heartbeat, pm_agent_list, pm_agent_suggest Multi-agent coordination and routing
Utils pm_check_deps Dependency cycle detection
Orchestrator pm_orchestrate_plan, pm_orchestrate_next, pm_orchestrate_report, pm_orchestrate_status, pm_orchestrate_approve, pm_orchestrate_review, pm_orchestrate_policy Structured planning, dispatch, review

Key Capabilities

  • Spec-driven planning — living specifications that evolve with the project
  • Task dependencies — auto-unblocks tasks when their dependencies complete
  • Cross-session continuity — pick up exactly where you left off
  • Multi-project boards — manage dev, docs, personal tasks in one place
  • Agent routing — suggests which model/agent should handle each task type
  • Handoff context — structured knowledge transfer between agents
  • Memory system — project learnings, decisions, and patterns persist across sessions
  • Orchestrated execution — DAG-based parallel dispatch with topological levels
  • Four-status reporting — done, done_with_concerns, needs_context, blocked
  • Two-stage review — spec compliance then code quality, configurable per project
  • Execution traces — append-only records of every task attempt for analysis

How It Works

All state is stored as human-readable Markdown files with YAML frontmatter:

~/.agendum/
├── config.yaml
├── projects/
│   ├── webapp/
│   │   ├── spec.md              # Living specification
│   │   ├── plan.md              # Task decomposition
│   │   ├── policy.yaml          # Orchestration policy (review, approval)
│   │   ├── tasks/
│   │   │   ├── task-001.md      # Markdown + YAML frontmatter
│   │   │   └── task-002.md
│   │   └── plans/
│   │       └── plan-001.yaml    # Execution plans with DAG levels
│   └── personal/
│       └── tasks/...
├── agents/
├── traces/
│   └── webapp/
│       └── task-001-2026-03-29T10-30-00.yaml  # Execution traces
└── memory/
    ├── project.md               # Shared learnings
    ├── decisions.md             # Key decisions + rationale
    └── patterns.md              # Discovered conventions

Task Lifecycle

pending --> in_progress --> review --> done
  |            |              |
  v            v              v
cancelled    blocked        blocked

Completing a task automatically unblocks its dependents.

Task File Example

---
id: task-001
project: webapp
title: Implement OAuth2 authentication
status: in_progress
priority: high
type: dev
assigned: claude-code
dependsOn: []
blocks: [task-003, task-004]
acceptanceCriteria:
  - Google OAuth redirect works
  - Tokens stored securely
---

## Context
User needs Google sign-in for the webapp.

## Progress
- [2026-03-28T10:05Z] claude-code — Explored existing auth code
- [2026-03-28T14:30Z] claude-code — All tests passing, PR #42 ready

## Handoff
> OAuth works e2e. Reviewer asked for rate limiting — that's remaining work.

Orchestrated Workflow

For complex work, the orchestrator tools manage structured execution across multiple agents:

plan → approve → next → dispatch sub-agents → report → review → next → complete

1. Decompose a goal into tasks:

pm_orchestrate_plan(
    project="webapp",
    goal="Add user authentication",
    tasks_json='[
        {"title": "DB schema for users/sessions", "type": "dev", "priority": "high"},
        {"title": "User model + validation", "type": "dev", "depends_on_indices": [0]},
        {"title": "Auth endpoints (login/signup)", "type": "dev", "depends_on_indices": [1]}
    ]'
)
# → Creates plan-001 with 3 levels (DRAFT status)

2. Approve and start execution:

pm_orchestrate_approve(project="webapp", plan_id="plan-001")
# → Plan moves to EXECUTING

3. Get next batch of tasks with context packets:

pm_orchestrate_next(project="webapp", plan_id="plan-001")
# → Returns Level 0 tasks with goal, acceptance criteria, key files

4. Report completion with four-status system:

pm_orchestrate_report(project="webapp", task_id="task-001", status="done")
# → Writes execution trace, unblocks Level 1 tasks

5. Review (if policy requires):

pm_orchestrate_review(project="webapp", task_id="task-001", stage="spec", passed=True)
pm_orchestrate_review(project="webapp", task_id="task-001", stage="quality", passed=True)
# → Task marked DONE, dependents unblocked

The orchestrator is runtime-agnostic — it produces structured context packets that any AI agent (Claude Code, Cursor, etc.) uses to dispatch sub-agents via its own runtime.

Architecture

src/agendum/
├── server.py             # MCP server wiring (FastMCP)
├── config.py             # Shared configuration
├── models.py             # Pydantic models
├── task_graph.py         # Dependency resolution + topological levels
├── cli.py                # Click CLI
├── store/
│   ├── __init__.py       # sanitize_name() security utility
│   ├── locking.py        # get_lock() + atomic_write() concurrency primitives
│   ├── task_store.py     # Task Markdown + YAML file I/O
│   ├── project_store.py  # Project specs, plans, and policies
│   ├── memory_store.py   # Scoped memory storage
│   ├── agent_store.py    # Agent persistence across sessions
│   ├── plan_store.py     # Execution plan CRUD
│   └── trace_store.py    # Append-only execution traces
└── tools/                # MCP tool modules
    ├── board.py          # 2 tools
    ├── project.py        # 5 tools
    ├── task.py           # 10 tools
    ├── memory.py         # 4 tools
    ├── agent.py          # 4 tools
    ├── utils.py          # 1 tool (pm_check_deps)
    └── orchestrator/     # 7 tools
        ├── __init__.py   # Register all orchestrator submodules
        ├── _helpers.py   # Shared helpers (resolve_and_unblock, parse_csv)
        ├── planning.py   # pm_orchestrate_plan, pm_orchestrate_status
        ├── dispatch.py   # pm_orchestrate_next, pm_orchestrate_report
        ├── review.py     # pm_orchestrate_review, pm_orchestrate_approve
        └── policy.py     # pm_orchestrate_policy

Development

git clone https://github.com/sralli/agendum.git
cd agendum
uv sync
uv run pytest tests/ -v     # 196 tests
uv run ruff check .          # Lint
uv run ruff format --check . # Format check

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agendum-0.1.0.tar.gz (56.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agendum-0.1.0-py3-none-any.whl (50.5 kB view details)

Uploaded Python 3

File details

Details for the file agendum-0.1.0.tar.gz.

File metadata

  • Download URL: agendum-0.1.0.tar.gz
  • Upload date:
  • Size: 56.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for agendum-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c1dc1ac143199745bbd532d97acd32d2e71ba4a927f88f9d723ec8d68c000f8f
MD5 96247f0c7354ad0189cc62c092a6772f
BLAKE2b-256 fce161a7984b38a814e1cde31ab73a134c751a71d8ec63c931461b32f9e3fd4f

See more details on using hashes here.

File details

Details for the file agendum-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: agendum-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 50.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for agendum-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 84cb0d4cbb3c5a1c0a29522b624d4944fbf40e684bd0f32efc667466bb363817
MD5 e2e88c5ee47e0b3ca17ad93b34b224fb
BLAKE2b-256 b91e158ed115b211078e52222a5a143b5ffa2307bfd15327b99e44d794b236f2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page