返回市场
代理-项目管理

代理-项目管理

作者:gannonh28 星标更新:2025-10-27

项目介绍

技术文档摘要

AgentPM

smithery 徽章

AgentPM 是一个用于 AI 驱动软件开发的规划和编排系统。作为本地安装的 MCP 服务器,它与支持 Anthropic 的模型上下文协议规范的任何 IDE 集成,包括 Cursor、Augment、VS Code Copilot、Cline 和 Roo。

AgentPM 担任产品经理的角色,帮助开发者规划、优先处理并执行复杂的项目:

  • 开发全面的需求
  • 将复杂项目分解为具有明确依赖关系的操作任务
  • 使用上下文感知辅助进行实施编排
  • 在需要时提供相关文档和上下文
  • 引导技术决策和系统设计
  • 推广软件开发最佳实践(TDD、垂直切片)

https://github.com/user-attachments/assets/6ddb551c-0c10-4a93-8665-fc5c1e3127c1

为什么选择 AgentPM?

  • 无摩擦设置:只需与你的编码代理聊天即可开始使用——无需 CLI 或复杂的规则。
  • 令牌/上下文优化:围绕一组核心动态工具整合功能,这些工具在上下文中经济高效且易于编码代理理解和使用。
  • 智能上下文管理:在正确的时间向你的编码代理提供正确的信息,优化令牌使用并消除手动上下文处理或“记忆库”的需求。
  • 结构化输出:自动生成清晰的人类可读的 Markdown 文档;无需解析 JSON 或纯文本文件。
  • 集成文档检索:通过 Context7 集成自动检索相关文档。
  • 综合任务管理:创建具有良好结构的任务,具有适当的依赖关系、优先级、实施细节和状态跟踪。复杂的任务可以被分解为具有明确关系的可管理子任务。
  • 灵活的需求过程:无论是否有现有文档,都可以引导你完成结构化的访谈以从零开始,或者轻松适应现有的项目或计划。
  • AI 助力生成:利用 Claude Sonnet 3.7 进行一致的任务生成,无论 IDE 编码模型如何,可选的 Perplexity API 集成提供基于研究的结果。
  • 自适应项目演进:根据已完成的工作更新未来任务,以处理实现漂移,同时维护随着项目演进而变化的活文档。
  • 内置最佳实践:结合软件开发最佳实践,提供改进代码质量的意见性建议。
  • 无缝 IDE 集成:通过模型上下文协议支持直接在你首选的开发环境中工作。

快速入门

先决条件

  • Node.js:版本 20.0.0 或更高
  • Anthropic API 密钥:用于 Claude AI 集成
  • Perplexity API 密钥:用于基于研究的任务生成

安装及配置

Cursor

在项目 .cursor/mcp.json 文件中添加以下内容(或全局安装在 ~/.cursor/mcp.json)。

{
    "mcpServers": {
        "agent-pm": {
          "command": "npx",
          "args": [
            "-y",
            "@gannonh/agent-pm@latest"
          ],
          "env": {
            "PROJECT_ROOT": "/path/to/project/root/",
            "ANTHROPIC_API_KEY": "sk-your-anthropic-api-key",
            "PERPLEXITY_API_KEY": "pplx-your-perplexity-api-key"
          }
        }
    }
  }

Augment

在 VS-Code Augment 用户设置文件中添加以下内容(CMD+SHIFT+P > Augment: 编辑设置 > 在 settings.json 中编辑):~/Library/Application Support/Code/User/settings.json

"augment.advanced": {

  "mcpServers": [
    {
      "name": "agent-pm",
      "command": "npx",
          "args": [
            "-y",
            "@gannonh/agent-pm@latest"
          ],
          "env": {
            "PROJECT_ROOT": "/path/to/project/root/",
            "ANTHROPIC_API_KEY": "sk-your-anthropic-api-key",
            "PERPLEXITY_API_KEY": "pplx-your-perplexity-api-key"
    },
  ]
}

有关 MCP 服务器配置的更多信息,请参阅特定 IDE 的文档:

环境变量

⚠️ 警告:大多数配置选项已经经过精心调整以获得最佳结果。除非有特殊要求,否则建议仅设置所需的变量,并保留其余默认值。

必需变量

变量描述默认值
PROJECT_ROOT项目目录路径当前目录
ANTHROPIC_API_KEYClaude AI 集成的 API 密钥

常用可选变量

变量描述默认值
PERPLEXITY_API_KEYPerplexity AI 集成的 API 密钥
DEBUG_LOGS启用带有文件日志的调试模式false

高级配置(不推荐更改)

Anthropic API 配置
变量描述默认值
ANTHROPIC_MODEL使用的 Claude 模型"claude-3-7-sonnet-20250219"
ANTHROPIC_TEMPERATUREClaude API 调用的温度0.2
ANTHROPIC_MAX_TOKENSClaude API 的最大令牌数64000
ANTHROPIC_MAX_CACHE_SIZEClaude API 的最大缓存大小100
ANTHROPIC_CACHE_TTLClaude API 的缓存 TTL(毫秒)3600000
ANTHROPIC_MAX_RETRIESClaude API 的最大重试次数5
ANTHROPIC_BASE_URLClaude API 的基础 URL"https://api.anthropic.com"
ANTHROPIC_SYSTEM_PROMPTClaude API 的系统提示"You are a helpful assistant."
Perplexity API 配置
变量描述默认值
PERPLEXITY_MODEL使用的 Perplexity 模型"sonar-pro"
PERPLEXITY_MAX_TOKENSPerplexity API 的最大令牌数1024
PERPLEXITY_MAX_CACHE_SIZEPerplexity API 的最大缓存大小1_00
PERPLEXITY_CACHE_TTLPerplexity API 的缓存 TTL(毫秒)3600000
PERPLEXITY_MAX_RESULTSPerplexity API 的最大结果数5
PERPLEXITY_MAX_RETRIESPerplexity API 的最大重试次数5
PERPLEXITY_BASE_URLPerplexity API 的基础 URL"https://api.perplexity.ai"
PERPLEXITY_TEMPERATUREPerplexity API 调用的温度0.7
PERPLEXITY_SYSTEM_PROMPTPerplexity API 的系统提示"You are a helpful research assistant. Provide factual information with sources."
文件和目录配置
变量描述默认值
ARTIFACTS_DIR存储工件的目录"apm-artifacts"
ARTIFACTS_FILE工件的文件名"artifacts.json"
PRODUCT_BRIEF_FILE项目简介的文件名"project-brief.md"

调试模式

设置 DEBUG_LOGS=true 可启用:

  • logs 目录中详细记录到文件
  • 日志文件以时间戳命名(例如,apm-2025-05-04-18-16.log
  • 对于故障排除 API 集成和复杂操作非常有用

DEBUG_LOGS=false(默认)时:

  • 不会创建日志文件
  • 关键消息仍然输出到 stderr
  • 提高正常运行性能

MCP 工具

任务管理 (apm_task)

目的:查询项目中的任务。

动作

  • get_all:列出任务,可按状态过滤
  • get_single:通过 ID 查看特定任务
  • get_next:查找下一个要做的任务
  • filter_by_statusfilter_by_priority:目标任务列表
<details> <summary><strong>功能详情</strong></summary>

当调用 apm_task 工具时:

  1. 参数验证

    • 验证 action 参数(必需,必须是有效动作之一)
    • 验证 projectRoot 参数(必需,必须是绝对路径)
    • 验证动作特定参数:
      • 对于 get_single:验证 id 参数(必需,非空字符串)
      • 对于 filter_by_status:验证 status 参数(必需,必须是有效状态)
      • 对于 filter_by_priority:验证 priority 参数(必需,必须是有效优先级)
    • 验证可选参数:filewithSubtaskscontainsText
  2. 任务检索

    • 从指定位置读取任务文件(如果没有提供,默认为 apm-artifacts/artifacts.json
    • 从文件中提取任务列表
  3. 动作执行

    • 根据 action 参数执行相应的动作:
      • get_all:返回所有任务,可按状态过滤
      • get_single:通过 ID 返回特定任务
      • get_next:根据依赖关系和状态返回下一个要做的任务
      • filter_by_status:按状态过滤任务
      • filter_by_priority:按优先级过滤任务
  4. 动作特定处理

    • 对于 get_allfilter_by_status
      • 如果指定了状态,则按状态过滤任务
      • 根据 withSubtasks 参数处理子任务
      • 计算汇总指标
    • 对于 get_single
      • 解析任务 ID 以确定是否为子任务
      • 查找特定任务或子任务
    • 对于 get_next
      • 过滤掉已完成的任务
      • 应用优先级和文本过滤器(如果指定了)
      • 检查依赖关系满足情况
      • 优先并选择下一个任务
    • 对于 filter_by_priority
      • 按优先级过滤任务
      • 根据 withSubtasks 参数处理子任务
      • 计算汇总指标
  5. 响应格式化

    • 返回包含以下内容的结构化 JSON 响应:
      • 请求的任务数据
      • 成功状态和消息
      • 查询的上下文信息
      • 时间戳和会话信息
  6. 错误处理

    • 处理验证错误(缺少必填字段、无效值)
    • 处理文件未找到错误
    • 处理任务未找到错误
    • 返回带有上下文信息的标准错误响应
JSON-RPC 请求
{
  "method": "apm_task",
  "params": {
    "action": "get_all|get_single|get_next|filter_by_status|filter_by_priority",
    "projectRoot": "/absolute/path/to/project",
    "file": "optional/path/to/artifacts.json",
    "id": "5",  // 对于 get_single 动作必需
    "status": "pending|in-progress|done|deferred|cancelled",  // 对于 get_all 和 filter_by_status 动作
    "priority": "high|medium|low",  // 对于 get_next 和 filter_by_priority 动作
    "withSubtasks": true|false,
    "containsText": "optional search text"  // 对于 get_next 动作
  }
}
JSON-RPC 响应

对于 get_allfilter_by_status 动作:

{
  "content": [
    {
      "type": "text",
      "text": {
        "success": true,
        "data": {
          "tasks": [
            {
              "id": "1",
              "title": "任务 1",
              "description": "描述",
              "status": "待办",
              "priority": "高",
              "dependencies": []
            }
          ],
          "stats": {
            "总任务数": 10,
            "已完成任务数": 3,
            "待办任务数": 5,
            "进行中任务数": 2,
            "任务完成百分比": 30
          },
          "过滤": "待办"
        },
        "消息": "找到 5 个状态为 '待办' 的任务",
        "内存": {
          "会话ID": "session-123456",
          "上下文": {
            "上次查询": {
              "动作": "get_all",
              "状态": "待办",
              "withSubtasks": false
            },
            "项目根目录": "/path/to/project",
            "时间戳": "2023-06-15T10:30:00Z"
          }
        }
      }
    }
  ]
}

对于 get_single 动作:

{
  "content": [
    {
      "type": "text",
      "text": {
        "success": true,
        "data": {
          "任务": {
            "id": "5",
            "标题": "实现功能",
            "描述": "创建该功能",
            "状态": "待办",
            "优先级": "高",
            "依赖项": ["3", "4"],
            "详情": "实现细节..."
          }
        },
        "消息": "找到任务:实现功能",
        "内存": {
          "会话ID": "session-123456",
          "上下文": {
            "上次查询": {
              "动作": "get_single",
              "id": "5"
            },
            "项目根目录": "/path/to/project",
            "时间戳": "2203-06-15T10:30:00Z"
          }
        }
      }
    }
  ]
}

对于 get_next 动作:

{
  "content": [
    {
      "type": "text",
      "text": {
        "success": true,
        "data": {
          "下一个任务": {
            "id": "2",
            "标题": "下一个任务",
            "描述": "描述",
            "状态": "待办",
            "优先级": "高",
            "依赖项": []
          },
          "所有任务": [
            /* 所有任务数组 */
          ]
        },
        "消息": "找到下一个任务:下一个任务",
        "内存": {
          "会话ID": "session-123456",
          "上下文": {
            "上次查询": {
              "动作": "get_next",
              "优先级": "高",
              "containsText": null
            },
            "任务总数": 10,
            "准备就绪任务数": 3,
            "时间戳": "2023-06-15T10:30:00Z"
          }
        }
      }
    }
  ]
}

对于 filter_by_priority 动作:

{
  "content": [
    {
      "type": "text",
      "text": {
        "success": true,
        "data": {
          "任务": [
            {
              "id": "1",
              "标题": "任务 1",
              "描述": "描述",
              "状态": "待办",
              "优先级": "高",
              "依赖项": []
            }
          ],
          "统计": {
            "总任务数": 10,
            "已完成任务数": 3,
            "待办任务数": 5,
            "进行中任务数": 2,
            "任务完成百分比": 30
          },
          "过滤": "高"
        },
        "消息": "找到 5 个优先级为 '高' 的任务",
        "内存": {
          "会话ID": "session-123456",
          "上下文": {
            "上次查询": {
              "动作": "filter_by_priority",
              "优先级": "高",
              "withSubtasks": false
            },
            "项目根目录": "/path/to/project",
            "时间戳": "2023-06-15T10:30:00Z"
          }
        }
      }
    }
  ]
}
</details>

任务创建与修改 (apm_task_modify)

目的:创建、更新和删除任务及其子任务

动作

  • create:添加新任务
  • update:更新任务详情
  • update_status:更改任务状态
  • delete:删除任务
  • add_subtask:向任务添加子任务
  • remove_subtask:从任务中