Skip to main content
Glama
backloghq

backlog

by backloghq

backlog

GitHub stars License: MIT CI Docs

为 Claude Code 提供持久化、跨会话的任务管理。任务可以在会话间保留,因此一个智能体开始的工作可以由另一个智能体继续完成。

构建于 @backloghq/agentdb 之上 —— 支持类型化模式、自动递增 ID、虚拟过滤器和 Blob 存储。纯 TypeScript,零原生依赖。

安装

/plugin marketplace add backloghq/backlog
/plugin install backlog@backloghq-backlog

从源码安装

git clone https://github.com/backloghq/backlog.git
cd backlog && npm install && npm run build
claude --plugin-dir /path/to/backlog

独立 MCP 服务器

添加到项目的 .claude/settings.json 中:

{
  "mcpServers": {
    "backlog": {
      "command": "node",
      "args": ["/path/to/agent-teams-task-mcp/dist/index.js"],
      "env": {
        "TASKDATA": "/path/to/task-data"
      }
    }
  }
}

Related MCP server: Vibe Board VE

技能

技能

描述

/backlog:tasks

显示当前待办事项 —— 待处理、进行中、阻塞、逾期任务

/backlog:plan

将目标拆解为带有依赖项、优先级和规范的任务

/backlog:standup

每日站会 —— 已完成、进行中、阻塞、下一步

/backlog:refine

整理待办事项 —— 修复模糊的任务、缺失的优先级、损坏的依赖项、陈旧的项目

/backlog:spec

在实施前为任务编写规范文档

/backlog:implement

领取任务、阅读规范、实施并标记为完成

/backlog:handoff

为下一次会话做准备 —— 注释进度、停止活动任务、总结状态

智能体

当有人需要规划工作时,Claude 可以自动调用 task-planner 智能体。它会读取代码库,将目标分解为带有依赖项的任务,并为复杂项目编写规范。

钩子

事件

作用

SessionStart

会话开始时显示待处理任务数量

TaskCreated

将 Claude 内置任务同步到持久化待办事项中

TaskCompleted

当 Claude 完成内置任务时,将对应的待办事项标记为完成

SubagentStart

将未分配的待处理任务自动分配给生成的智能体

工具 (MCP)

用于完整任务生命周期管理的工具:

工具

描述

task_list

使用过滤语法查询任务。返回包含所有字段的 JSON 数组。

task_count

计算符合过滤条件的任务数量。语法与 task_list 相同。

task_add

创建新的待处理任务。仅需描述;所有其他字段可选。

task_log

直接以已完成状态记录已完成的工作。

task_modify

对符合过滤条件的一个或多个任务进行部分更新。仅更改提供的字段。

task_duplicate

复制现有任务,并可选择覆盖字段。

task_done

将任务标记为完成,并记录结束时间戳。

task_delete

软删除任务。可通过 task_undo 恢复。使用 task_purge 永久移除。

task_annotate

添加带时间戳的备注。长内容请使用 task_doc_write。

task_denotate

通过精确文本匹配移除注释。

task_start

将任务标记为正在进行中。在 +ACTIVE 查询中可见。

task_stop

停止处理任务。将其返回至待处理状态。

task_undo

撤销最近的操作。可重复调用。

task_info

通过 ID 或 UUID 获取单个任务的完整 JSON 详情。

task_import

从 JSON 数组批量创建任务。原子批处理操作。

task_purge

永久移除已删除的任务。不可逆。

task_doc_write

为任务附加/替换 Markdown 文档(规范、备注、上下文)。

task_doc_read

读取附加到任务的 Markdown 文档。

task_doc_delete

移除任务的文档。永久性操作。

task_archive

将旧的已完成/已删除任务移动到季度归档段。

task_archive_list

列出可用的归档段。

task_archive_load

加载归档任务以进行只读检查。

task_projects

列出带有待处理/循环任务的项目名称。

task_tags

列出带有待处理/循环任务的标签。

过滤语法

status:pending                    # all pending tasks
project:backend +bug              # bugs in backend project
priority:H due.before:friday      # high priority due before friday
+OVERDUE                          # overdue tasks
+ACTIVE                           # tasks currently being worked on
+BLOCKED                          # tasks blocked by dependencies
+READY                            # actionable tasks (past scheduled date)
agent:explorer                    # tasks assigned to the explorer agent
( project:web or project:api )    # boolean with parentheses
description.contains:auth         # substring match

支持属性修饰符(.before, .after, .by, .has, .not, .none, .any, .startswith, .endswith)、标签(+tag, -tag)、虚拟标签(+OVERDUE, +ACTIVE, +BLOCKED, +READY, +TAGGED, +ANNOTATED 等)以及布尔运算符(and, or)。

任务文档

为任何任务附加 Markdown 文档(规范、上下文、交接备注):

task_doc_write  id:"1"  content:"# Spec\n\nBuild the auth flow.\n"
task_doc_read   id:"1"
task_doc_delete id:"1"

编写文档会添加 +doc 标签和 has_doc:yes,以便智能体可以发现带有文档的任务:

task_list filter:"+doc"
task_list filter:"has_doc:yes"

智能体身份

任务支持 agent 字段,用于跟踪哪个智能体拥有该任务:

task_add  description:"Investigate bug"  agent:"explorer"
task_list filter:"agent:explorer status:pending"

项目隔离

每个项目都会自动获得自己的任务数据。作为插件使用时,任务数据位于 ~/.claude/plugins/data/backlog/projects/<project-slug>/。独立使用时,请显式设置 TASKDATA

变量

描述

TASKDATA

任务数据目录的显式路径(覆盖自动推导)

TASKDATA_ROOT

自动推导的项目级任务数据的根目录

BACKLOG_NAMESPACE

显式集合名称(默认:tasks

BACKLOG_AUTO_NAMESPACE

设置为 true 以从当前工作目录推导集合名称

BACKLOG_AGENT_ID

用于多写入支持的智能体 ID(Claude, Gemini 等)

BACKLOG_BACKEND

存储后端:省略则为文件系统(默认),s3 为 Amazon S3

BACKLOG_S3_BUCKET

S3 存储桶名称(当 BACKLOG_BACKEND=s3 时必需)

BACKLOG_S3_REGION

AWS 区域(如果使用默认凭证则可选)

多写入支持

Backlog 支持来自多个进程(例如 Claude Desktop 和 Gemini CLI)共享同一数据的并发访问。要启用此功能:

  1. 为每个进程分配一个唯一的 BACKLOG_AGENT_ID(例如 claude, gemini)。

  2. 设置智能体 ID 后,引擎将使用各智能体的写入日志,避免文件锁定。

  3. 每个进程在操作前会自动调用 refresh() 以获取其他智能体的更改。

命名空间

如果您希望为多个项目使用单个 TASKDATA 目录(例如共享的 S3 存储桶或全局 ~/.backlog 文件夹),可以使用命名空间来保持任务隔离:

  1. 手动:设置 BACKLOG_NAMESPACE=my-project 以使用特定的集合名称。

  2. 自动:设置 BACKLOG_AUTO_NAMESPACE=true,让 Backlog 自动从当前工作目录推导集合名称(例如 my-app-a1b2c3d4)。

配置示例 (.claude/settings.json):

{
  "mcpServers": {
    "backlog": {
      "command": "node",
      "args": ["/path/to/backlog/dist/index.js"],
      "env": {
        "TASKDATA": "/home/user/.backlog",
        "BACKLOG_AUTO_NAMESPACE": "true",
        "BACKLOG_AGENT_ID": "claude-desktop"
      }
    }
  }
}

这两种方法都允许多个项目共享同一个存储后端,同时保持隔离的、特定于项目的待办事项。

S3 后端

将任务数据存储在 S3 中以实现团队共享或云端持久化。需要 @backloghq/opslog-s3

npm install @backloghq/opslog-s3

通过 .claude/settings.json 中的环境变量进行配置:

{
  "mcpServers": {
    "backlog": {
      "command": "node",
      "args": ["/path/to/backlog/dist/index.js"],
      "env": {
        "TASKDATA": "my-project/tasks",
        "BACKLOG_BACKEND": "s3",
        "BACKLOG_S3_BUCKET": "my-team-backlog",
        "BACKLOG_S3_REGION": "us-east-1"
      }
    }
  }
}

使用 S3 时,TASKDATA 将成为存储桶中的键前缀,而不是文件系统路径。

Docker

docker build -t backlog .
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' \
  | docker run --rm -i backlog

开发

npm install
npm run build          # compile TypeScript
npm run lint           # run ESLint
npm test               # run tests
npm run test:coverage  # run tests with coverage
npm run dev            # watch mode

社区

如果 backlog 对您有帮助,请考虑给它点个星标 — 这有助于其他人发现该项目。

许可证

MIT

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 20 tool updatesv1.5.0
    • Changedtask_add12 fields changed
      • changedInput schema / properties / agent / description
        Previous value: -"Agent identity, e.g. 'explorer', 'planner', 'reviewer'"New value: +"Agent identity for tracking task ownership across agent teams. E.g. 'explorer', 'planner', 'reviewer'."
      • changedInput schema / properties / depends / description
        Previous value: -"UUID(s) of tasks this depends on, comma-separated"New value: +"Comma-separated UUIDs of tasks this depends on. Task shows as +BLOCKED until dependencies are completed."
      • changedInput schema / properties / description / description
        Previous value: -"Task description text"New value: +"Task description (required, max 500 chars). Brief summary of what needs to be done."
      • changedInput schema / properties / due / description
        Previous value: -"Due date, e.g. 'tomorrow', '2025-12-31', 'eow'"New value: +"Due date. Accepts: ISO dates ('2025-12-31'), relative ('3d', '2w'), named ('tomorrow', 'friday', 'eow', 'eom'), compound ('now+3d')."
      • changedInput schema / properties / extra / description
        Previous value: -"Additional raw attributes"New value: +"Space-separated additional attributes or +tag/-tag modifiers."
      • changedInput schema / properties / priority / description
        Previous value: -"Priority: H (high), M (medium), L (low)"New value: +"Priority: H (high), M (medium), L (low). Affects urgency score and sort order."
      • changedInput schema / properties / project / description
        Previous value: -"Project name, e.g. 'backend'"New value: +"Project name for grouping (alphanumeric, hyphens, underscores). E.g. 'backend', 'auth-refactor'"
      • changedInput schema / properties / recur / description
        Previous value: -"Recurrence frequency, e.g. 'daily', 'weekly', '2wks', 'monthly'. Requires a due date."New value: +"Recurrence pattern. Requires 'due' to be set. Values: 'daily', 'weekly', 'weekdays', 'biweekly', 'monthly', 'quarterly', 'yearly', or numeric like '3d', '2w'."
      • changedInput schema / properties / scheduled / description
        Previous value: -"Scheduled date — when to start working on the task, e.g. 'monday', 'tomorrow'"New value: +"Scheduled start date — when to begin working. Same date formats as 'due'."
      • changedInput schema / properties / tags / description
        Previous value: -"Tags to apply, as comma-separated list or JSON array. E.g. 'bug,urgent' or '[\"bug\",\"urgent\"]'"New value: +"Tags as comma-separated list or JSON array. E.g. 'bug,urgent' or '[\"bug\",\"urgent\"]'. Used for filtering with +tag/-tag syntax."
      • changedInput schema / properties / until / description
        Previous value: -"End date for recurrence — no instances generated past this date, e.g. '2026-12-31'"New value: +"End date for recurrence — no instances generated past this date. Only meaningful with 'recur'. Same date formats as 'due'."
      • changedInput schema / properties / wait / description
        Previous value: -"Wait date — task hidden until this date"New value: +"Wait date — task is hidden from default views until this date. Same date formats as 'due'."
    • Changedtask_annotate2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID."
      • changedInput schema / properties / text / description
        Previous value: -"Annotation text"New value: +"Annotation text to add. Stored with a timestamp. Keep concise — use task_doc_write for longer content."
    • Changedtask_archive1 field changed
      • changedInput schema / properties / older_than_days / description
        Previous value: -"Number of days. Archive tasks completed/deleted more than this many days ago. Default: 90"New value: +"Archive tasks completed/deleted more than this many days ago. Default: 90. E.g. '30' for tasks older than a month."
    • Changedtask_archive_load1 field changed
      • changedInput schema / properties / segment / description
        Previous value: -"Archive segment name, e.g. '2026-Q1'"New value: +"Archive segment name, e.g. '2026-Q1'. Use task_archive_list to see available segments."
    • Changedtask_count1 field changed
      • changedInput schema / properties / filter / description
        Previous value: -"Filter expression. Leave empty for all pending tasks."New value: +"Filter expression. Same syntax as task_list. Examples: 'status:pending', '+OVERDUE', 'project:backend +bug'. Leave empty for all pending tasks."
    • Changedtask_delete1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID of the task to delete."
    • Changedtask_denotate2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID."
      • changedInput schema / properties / text / description
        Previous value: -"Exact annotation text to remove"New value: +"Exact annotation text to remove (case-sensitive). Must match a previously added annotation."
    • Changedtask_doc_delete1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID."
    • Changedtask_doc_read1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID."
    • Changedtask_doc_write2 fields changed
      • changedInput schema / properties / content / description
        Previous value: -"Document content (markdown)"New value: +"Document content in markdown format. Replaces any existing document on this task."
      • changedInput schema / properties / id / description
        Previous value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID."
    • Changedtask_done1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID. Task must be in pending or active status."
    • Changedtask_duplicate8 fields changed
      • changedInput schema / properties / agent / description
        Previous value: -"Agent identity"New value: +"Agent identity for the new task."
      • changedInput schema / properties / description / description
        Previous value: -"New description (overrides original)"New value: +"New description to override the original."
      • changedInput schema / properties / due / description
        Previous value: -"New due date"New value: +"New due date. Pass empty string to clear."
      • changedInput schema / properties / extra / description
        Previous value: -"Additional raw attributes"New value: +"Space-separated additional attributes or +tag/-tag modifiers."
      • changedInput schema / properties / id / description
        Previous value: -"Task ID number or UUID to duplicate"New value: +"Task ID number (e.g. '1') or UUID of the task to copy."
      • changedInput schema / properties / priority / description
        Previous value: -"New priority"New value: +"New priority. Pass empty string to clear."
      • changedInput schema / properties / project / description
        Previous value: -"New project"New value: +"New project. Pass empty string to clear."
      • changedInput schema / properties / tags / description
        Previous value: -"Tags to add or remove, as comma-separated list. E.g. 'frontend,urgent' or '-old,+new'"New value: +"Tags to add (+) or remove (-). E.g. '+frontend,-old'. Applied on top of the copied tags."
    • Changedtask_import1 field changed
      • changedInput schema / properties / tasks / description
        Previous value: -"JSON array of task objects, e.g. '[{\"description\":\"My task\",\"project\":\"foo\"}]'"New value: +"JSON array of task objects. Required field: 'description'. Optional: 'project', 'tags' (string[]), 'priority' (H/M/L), 'due', 'status', 'depends' (UUID[]), 'recur', 'agent', 'uuid' (to set explicit ID). Example: '[{\"description\":\"My task\",\"project\":\"foo\",\"priority\":\"H\"}]'"
    • Changedtask_info1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID. Returns an error if no task matches."
    • Changedtask_list1 field changed
      • changedInput schema / properties / filter / description
        Previous value: -"Filter expression. Leave empty for all pending tasks."New value: +"Filter expression to match tasks. Examples: 'status:pending', 'project:backend +bug', 'due.before:tomorrow', '+OVERDUE', '+BLOCKED', 'priority:H', 'agent:explorer'. Combine with 'and'/'or' and parentheses. Leave empty for all pending tasks."
    • Changedtask_log6 fields changed
      • changedInput schema / properties / agent / description
        Previous value: -"Agent identity"New value: +"Agent identity that completed the work."
      • changedInput schema / properties / description / description
        Previous value: -"Task description text"New value: +"Description of the completed work (required, max 500 chars)."
      • changedInput schema / properties / extra / description
        Previous value: -"Additional raw attributes"New value: +"Space-separated additional attributes or +tag modifiers."
      • changedInput schema / properties / priority / description
        Previous value: -"Priority: H/M/L"New value: +"Priority: H (high), M (medium), L (low)."
      • changedInput schema / properties / project / description
        Previous value: -"Project name"New value: +"Project name for grouping."
      • changedInput schema / properties / tags / description
        Previous value: -"Tags to apply, as comma-separated list. E.g. 'done,reviewed'"New value: +"Tags as comma-separated list. E.g. 'done,reviewed'"
    • Changedtask_modify13 fields changed
      • changedInput schema / properties / agent / description
        Previous value: -"Agent identity, e.g. 'explorer', 'planner', 'reviewer'"New value: +"Agent identity. Pass empty string to unassign."
      • changedInput schema / properties / depends / description
        Previous value: -"New dependency UUIDs"New value: +"New dependency UUIDs (comma-separated). Replaces existing dependencies. Pass empty string to clear."
      • changedInput schema / properties / description / description
        Previous value: -"New description text"New value: +"New description text (max 500 chars). Only set if you want to change it."
      • changedInput schema / properties / due / description
        Previous value: -"New due date"New value: +"New due date. Accepts ISO dates, relative ('3d'), named ('friday', 'eow'). Pass empty string to clear."
      • changedInput schema / properties / extra / description
        Previous value: -"Additional raw attributes"New value: +"Space-separated additional attributes or +tag/-tag modifiers."
      • changedInput schema / properties / filter / description
        Previous value: -"Filter to select tasks to modify (ID, UUID, or filter expression)"New value: +"Filter to select tasks. Can be a numeric ID ('1'), UUID, or filter expression ('project:backend priority:H'). Matches may update multiple tasks."
      • changedInput schema / properties / priority / description
        Previous value: -"New priority (empty string to clear)"New value: +"New priority. Pass empty string to clear priority entirely."
      • changedInput schema / properties / project / description
        Previous value: -"New project name"New value: +"New project name. Pass empty string to clear."
      • changedInput schema / properties / recur / description
        Previous value: -"New recurrence frequency"New value: +"New recurrence pattern ('daily', 'weekly', '3d', etc). Pass empty string to clear."
      • changedInput schema / properties / scheduled / description
        Previous value: -"New scheduled date"New value: +"New scheduled start date. Pass empty string to clear."
      • changedInput schema / properties / tags / description
        Previous value: -"Tags to add (+) or remove (-), as comma-separated list. E.g. 'frontend,urgent' or '-old,+new'"New value: +"Tags to add (+) or remove (-). E.g. '+frontend,+urgent' or '-old,+new'. Prefix with + to add, - to remove. Without prefix, tags are added."
      • changedInput schema / properties / until / description
        Previous value: -"End date for recurrence — no instances generated past this date, e.g. '2026-12-31'"New value: +"End date for recurrence. Pass empty string to clear."
      • changedInput schema / properties / wait / description
        Previous value: -"New wait date"New value: +"New wait date. Task hidden from default views until this date. Pass empty string to clear."
    • Changedtask_purge1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Task ID number or UUID of a deleted task"New value: +"Task ID number (e.g. '1') or UUID. Task must be in 'deleted' status."
    • Changedtask_start1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID. Task must be in pending status."
    • Changedtask_stop1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID. Task must be currently active (started)."
  2. 24 tool updatesv1.4.0
    • First observedtask_add
    • First observedtask_annotate
    • First observedtask_archive
    • First observedtask_archive_list
    • First observedtask_archive_load
    • First observedtask_count
    • First observedtask_delete
    • First observedtask_denotate
    • First observedtask_doc_delete
    • First observedtask_doc_read
    • First observedtask_doc_write
    • First observedtask_done
    • First observedtask_duplicate
    • First observedtask_import
    • First observedtask_info
    • First observedtask_list
    • First observedtask_log
    • First observedtask_modify
    • First observedtask_projects
    • First observedtask_purge
    • First observedtask_start
    • First observedtask_stop
    • First observedtask_tags
    • First observedtask_undo

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a distinct, clearly separated purpose with explicit cross-references in descriptions (e.g., 'use task_log instead', 'use task_doc_write instead'). No overlapping functionality—CRUD, lifecycle, archival, and document operations are cleanly partitioned.

Naming Consistency5/5

Strict snake_case convention with consistent 'task_' prefix. Sub-resources follow predictable patterns (task_doc_read/write/delete, task_archive_list/load). Verbs are clear and consistently placed (task_add, task_delete, task_modify).

Tool Count4/5

24 tools is above the typical ideal range but justified by the domain complexity. The set covers full task lifecycle, document attachments, archival management, annotations, and discovery without redundancy. Each tool earns its place for a comprehensive backlog system.

Completeness4/5

Excellent coverage of CRUD, status workflow (start/stop/done), soft-delete with purge, annotations, document attachments, and archival. Minor gap: archived tasks are view-only with no restore-to-active operation, though this appears to be an intentional cold-storage design.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Persistent memory and task board for Claude Code. 14 tools spanning projects, tasks, sessions, and activity logs — backed by Firestore, runs on the free tier. Handoff notes survive context compaction; the next session reads the last handoff and picks up where you stopped.
    14
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive project management and workflow tracking system that integrates with Claude Code via MCP, automatically capturing sessions, tools, agents, and project tasks into a centralized dashboard and database.
    20
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server for project planning inside Claude. It tracks progress, knows your codebase, and resumes exactly where you left off every session.
    14
    5
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/backloghq/backlog'

If you have feedback or need assistance with the MCP directory API, please join our Discord server