Agendum

io.github.sralliPublished by GitHub account sralliv0.3.4Updated Oct 24, 2026

AI agent memory: task tracking, scoped work packages, decisions, and cross-session continuity

Overview

AI-generated overview

Gives AI coding agents persistent project memory: task boards, scoped work packages, decisions, and cross-session continuity.

What you can do
Agendum is a local MCP server that stores project state for coding agents. It exposes 14 pm_* tools: pm_ingest imports a Markdown plan into board items with dependencies, pm_next returns the next scoped work package with enriched context, and pm_done records decisions, patterns, and learnings while unblocking dependents. pm_memory, pm_learn, pm_search, pm_consolidate, and pm_supersede manage searchable knowledge, and pm_status shows a dashboard. State is kept as human-readable Markdown and YAML under ~/.agendum/ or a project-local .agendum/ directory.
When to use it
Use it when an agent works on multi-step coding projects across several sessions and needs to remember decisions, respect task scope, and follow a dependency order. It fits plan-driven workflows where a Markdown plan is turned into bounded tasks. It is less useful for one-off, single-session requests.
Requirements
A local Python runtime; install via pip or run with uvx. No accounts, API keys, or environment variables are declared. Optional vector search requires the agendum[vectors] extra. It runs as a stdio process on the user's machine and is desktop-only.
Before you install
It writes project state, memory, and learnings to disk under ~/.agendum/ or a project-local .agendum/ directory, and pm_done can read git diff and git log automatically. Review what is stored before committing those files, since they may contain decisions or code details. No credentials are requested.

Installation

In SourceWeft

  1. Open Agendum in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

agendum

[PyPI version] [Downloads] [Python 3.13+] [Tests] [License: MIT]

Project memory and scoping engine for AI coding agents.

AI coding agents are stateless — they forget between sessions, lose decisions, and have no way to scope complex work. agendum is an MCP server that gives any agent (Claude Code, Cursor, Windsurf, Cline, and others) persistent project state, bounded work packages, and cross-session continuity.

Without agendumWith agendum
Agent forgets everything between sessionsPicks up exactly where it left off
No scope — agent modifies random filesBounded work packages with file lists, acceptance criteria, constraints
Decisions lost — same mistakes repeatedDecisions and patterns persist in searchable memory
No task ordering — agent picks randomlyDependency graph with auto-unblocking and priority scoring
Learning locked inside one projectCross-project learnings carry patterns forward

Quick Start

bash
pip install agendum                                    # or: uvx agendumclaude mcp add agendum -- uvx agendum --home serve     # add to Claude Code# Done. pm_* tools are now available in your agent.

Works with any MCP client — see setup for Cursor, Windsurf, VS Code, and others.

How It Works

mermaid
flowchart LR    A["PLAN\nwrite plan file"] --> B["pm_ingest\nboard items + deps"]    B --> C["pm_next\nwork package + context"]    C --> D["EXECUTE\nagent implements"]    D --> E["pm_done\ndecisions + patterns"]    E -->|next task| C    E -->|new session| F["pm_status\nresume context"]    F --> C

Each pm_done records decisions and patterns that enrich future pm_next calls — context compounds across sessions.

Example session:

You: I have a plan file for the API rewrite. Ingest it.
Agent:  → pm_ingest(project="api-rewrite", plan_file="plan.md")
  Ingested 4 board items from plan:    item-001: Schema design [high]    item-002: Resolver layer (depends on item-001)    item-003: Auth middleware (depends on item-001)    item-004: Integration tests (depends on item-002, item-003)
You: What should I work on?
Agent:  → pm_next(project="api-rewrite")
  Work package for item-001 "Schema design":    Context: project rules, memory from last session    Scope: Define GraphQL schema types    Acceptance criteria: Types for User, Product, Order
You: Done with the schema. Here's what I decided...
Agent:  → pm_done(project="api-rewrite", item_id="item-001",      decisions="Using code-first with Strawberry",      patterns="N+1 queries need DataLoader",      verified=True)
  Marked item-001 as done. Unblocked: item-002, item-003  > Next: pm_next("api-rewrite") to continue with newly unblocked tasks

14 MCP Tools

Setup & Orientation

ToolPurpose
pm_initInitialize board directory (optional — auto-initializes on first use)
pm_projectCreate, list, or get projects
pm_statusDashboard — item counts, recent progress, memory health, suggested next task

Planning & Backlog

ToolPurpose
pm_addAdd an item with type, priority, tags, dependencies, acceptance criteria
pm_boardView and filter the project board
pm_ingestImport a Markdown plan file into bounded board items with dependencies

Execution Loop

ToolPurpose
pm_nextGet the next scoped work package with complexity signal and enriched context
pm_doneComplete an item — record decisions, patterns, learnings; auto-extract from git; auto-unblock dependents
pm_blockReport a task as blocked with reason

Knowledge & Search

ToolPurpose
pm_memoryRead, write, append, or search project memory (decisions, patterns, project knowledge)
pm_learnRecord global or project-scoped learnings with tags and topic entities
pm_searchHybrid search across all knowledge — memory, learnings, completed items
pm_consolidateClean memory corruption, deduplicate learnings, detect contradictions
pm_supersedeSoft-invalidate a learning — excluded from all future searches

Hybrid Search

pm_search combines three signals to find relevant knowledge across memory, learnings, and completed board items:

  • FTS5 with Porter stemming — auth matches authentication, config matches configuration. Always on, zero config.
  • Vector search (optional) — Install agendum[vectors] to add semantic similarity via fastembed + sqlite-vec. Activates automatically alongside FTS5.
  • Entity graph — Topics and tags form a knowledge graph. Entries sharing 2+ entities are linked automatically. Graph expansion surfaces related knowledge that keyword search misses.

All three signals are fused via Reciprocal Rank Fusion (RRF), then reranked by recency and access frequency. The index rebuilds from Markdown files — no data loss if it gets corrupted.

Key Capabilities

  • Adaptive context budget — enrichment scales with task complexity: 4K chars for trivial tasks, up to 10K for large ones
  • Verification gate — pm_done(verified=True) distinguishes tested from untested completions
  • Git auto-extract — pm_done reads git diff and git log automatically when no files are specified
  • Pluggable enrichment pipeline — four context sources injected into every work package: project rules (CLAUDE.md/AGENTS.md), memory, dependency context, learnings
  • Dependency resolution — topological ordering with cycle detection; dependents unblock automatically when upstream tasks complete
  • Memory health — pm_status warns about corrupted entries; pm_consolidate strips XML fragments, deduplicates, and flags contradictions
  • Zero config — auto-initializes on first tool call, derives board name from git remote
  • Git-native storage — all state is human-readable Markdown + YAML in .agendum/, diffable and committable

Installation

All MCP clients except VS Code use the same config. Add to the appropriate file:

json
{  "mcpServers": {    "agendum": {      "command": "uvx",      "args": ["agendum", "--home", "serve"]    }  }}
ClientConfig location
Claude CodeRun: claude mcp add agendum -- uvx agendum --home serve
Cursor.cursor/mcp.json in project root
Windsurf~/.codeium/windsurf/mcp_config.json
ClineSettings › MCP Servers › Edit
Roo CodeMCP settings file
Claude Desktopclaude_desktop_config.json

VS Code (GitHub Copilot): Uses "servers" instead of "mcpServers". Add to .vscode/mcp.json:

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

CLI (standalone)

bash
pip install agendumagendum project create my-app   # Create a projectagendum status                  # Dashboard overviewagendum next my-app             # Suggest next task

Storage Layout

All state lives in ~/.agendum/ (or .agendum/ in your project if you prefer local storage):

~/.agendum/├── .cache/│   └── search.db               # FTS5 + vector search index (auto-rebuilt)├── config.yaml├── projects/│   └── webapp/│       ├── project.yaml         # Project metadata│       ├── board/│       │   ├── item-001.md      # Markdown + YAML frontmatter│       │   └── item-002.md│       └── learnings/           # Project-scoped learnings│           └── learning-001.md├── learnings/                   # Cross-project learnings│   └── learning-001.md└── memory/    ├── decisions.md             # Key decisions + rationale    └── patterns.md              # Discovered conventions

Architecture

src/agendum/├── server.py              # MCP server wiring (FastMCP)├── tools.py               # 14 MCP tools├── models.py              # Pydantic models (BoardItem, WorkPackage, SearchResult)├── task_graph.py          # Dependency resolution + topological levels├── config.py              # Shared configuration├── env_context.py         # Git diff/log auto-extraction├── cli.py                 # CLI interface├── enrichment/│   ├── pipeline.py        # ContextEnricher, budget allocation│   └── sources.py         # ProjectRules, Memory, Dependency, Learnings sources└── store/    ├── board_store.py     # BoardItem CRUD    ├── board_format.py    # Markdown <-> BoardItem serialization    ├── project_store.py   # Project metadata    ├── memory_store.py    # Scoped memory storage    ├── learnings_store.py # Global and project-scoped learnings    ├── search_index.py    # FTS5 + vector + entity graph + RRF    ├── embedding.py       # Lazy fastembed wrapper (optional)    └── locking.py         # get_lock() + atomic_write()

Development

bash
git clone https://github.com/sralli/agendum.gitcd agendumuv syncuv run pytest tests/ -v     # all testsuv run ruff check .          # lintuv run ruff format --check . # format check

License

MIT

Source: README.md at commit 369519a

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.3.4LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts