Skip to main content
Glama

PatchWarden

最新版本 Node.js >= 20 Windows x64 License: MIT

让 ChatGPT 规划,本地 Agent 执行,但别把整台电脑直接交给它。

PatchWarden 把 ChatGPT 和 Codex CLI、Claude Code、OpenCode 等本地 Agent 连起来,只在你批准的工作区和验证边界内执行,并留下可检查的 Diff、验证和审计证据。

它不是通用远程 Shell,而是一条 受控、可验证、可审计的 Agent 执行通道。

下载最新 Windows 版本 · 快速开始 · 连接 ChatGPT · 安全边界

为什么需要 PatchWarden

直接让远程 AI 控制本地开发环境,最难的不是“能不能执行”,而是:

  • 它到底能访问哪些目录?

  • 能不能随便跑命令?

  • Agent 说“测试通过”时,有没有独立证据?

  • 改了哪些文件,是否超出批准范围?

  • 最终是谁、基于什么证据接受了这次修改?

PatchWarden 把这些问题放进执行链路本身:

ChatGPT
   ↓  任务 + 约束
PatchWarden
   ↓  工作区 / Agent / 命令边界
Local coding agent
   ↓
Workspace changes
   ↓
Verification + diff + audit + lineage
   ↓
Human acceptance

Related MCP server: mcp-taskflow

你能得到什么

  • 工作区边界:任务只能在配置的 workspaceRoot 内运行。

  • Agent 边界:只调用你本机已经安装并配置好的 Agent。

  • 命令边界:验证命令必须匹配允许列表。

  • 真实 Diff:不只相信 Agent 的自然语言总结。

  • 独立验证:验证步骤和任务执行分开记录。

  • 审计记录:保留 request / task / lineage / audit 状态。

  • 人工验收:最终接受动作绑定到当前证据,而不是简单改一个 JSON 状态。

适合谁

如果你想:

  • 在 ChatGPT 里规划和监督本地开发任务;

  • 继续使用 Codex CLI / Claude Code / OpenCode 作为真正执行者;

  • 又不想给远程模型一个无限制 Shell;

  • 希望每次修改都有可复查证据;

PatchWarden 就是为这种工作流做的。

5 分钟快速上手

1. 下载

从 Latest Release 下载 Windows x64 安装版或便携版。

当前安装包若未代码签名,Windows SmartScreen 可能提示未知发布者。请先用同一 Release 中的 SHA-256 校验文件核对安装包。

PowerShell:

Get-FileHash .\PatchWarden-Setup-*-x64.exe -Algorithm SHA256

2. 准备本地 Agent

至少安装并登录一个:

  • Codex CLI

  • Claude Code

  • OpenCode

从源码或 npm 运行时需要 Node.js 20+;建议同时安装 Git 以生成可靠 Diff。

3. 选一个专用工作区

不要把磁盘根目录、用户主目录、桌面、下载目录直接作为 workspaceRoot。

建议给 PatchWarden 一个专门的项目目录,只放你明确允许它操作的仓库。

4. 检测 Agent

打开 PatchWarden Desktop:

设置 → 本地 Agent 与模型

至少一个 Agent 应显示可调用。如果 CLI 尚未登录,先在独立终端完成登录,再回到 PatchWarden 重新检测。

5. 确认本地健康状态

在 开始使用 / 高级控制台 中确认工作区、Agent 和 Core 服务正常。

到这里,即使还没连接 ChatGPT,PatchWarden 的本地执行边界也已经可以先单独验证。

连接 ChatGPT

ChatGPT Web 需要通过当前 OpenAI 支持的安全 MCP Tunnel / custom app 连接方式访问本地 PatchWarden。

典型流程:

  1. 准备 tunnel-client;

  2. 创建名为 PatchWarden 的专用 Core Tunnel;

  3. 使用具备 Tunnels Read + Use 权限的专用 runtime key;

  4. 在 PatchWarden 的 设置 → MCP 与隧道 中配置并验证;

  5. 在 ChatGPT Developer mode 中添加 PatchWarden,Authentication 选 No Auth;

  6. 保留适合你工作区风险等级的确认策略。

连接时请保持这些边界:

  • 这个 runtime key 对应 CONTROL_PLANE_API_KEY,不是普通 OPENAI_API_KEY;

  • OPENAI_ADMIN_KEY 可以用于管理 Tunnel,但不应作为长期运行密钥;

  • 不要把 runtime key 填进 ChatGPT 的 Authentication 字段;

  • Direct 是可选的第二 Tunnel,只有需要 Direct 工具时才创建;

  • Direct 不是只读通道。它提供受工作区边界、敏感路径和确认策略约束的文件编辑能力(包括补丁、创建、移动和删除);只有明确需要时才启用,并保留人工确认;

  • 如果直接启用本地 HTTP MCP(不经过 stdio Tunnel),必须先配置 PATCHWARDEN_OWNER_TOKEN。匿名 /healthz 只返回最小状态,详细 health 与 /mcp 都要求 owner token。

Tunnel runtime key 是运行连接所需的本地秘密,不要写进 README、Prompt、截图或 Git 仓库。

连接完成后,先做只读检查:

请调用 PatchWarden:
1. health_check
2. list_agents

只返回服务状态和可调用 Agent,不修改任何文件。

第一个可审计任务

建议第一次只在可丢弃的 Demo 仓库中测试:

请通过 PatchWarden 执行一次受控任务:
- 只在我指定的 Demo 工作区内工作;
- 使用 invocation_ready=true 的本地 Agent;
- 只修改我明确允许的文件;
- 只运行项目中真实存在且已允许的验证命令;
- 禁止 commit、push、tag、publish、release、deploy;
- 最后返回 Diff、verification、audit 和 lineage 状态。

不要只看 Agent 说“完成了”

一次可靠的任务结果至少应该能回答:

证据

你要确认什么

task_id / lineage_id

这次工作能否唯一追踪

changed files

是否只改了批准范围

verification

真实验证命令是否通过

out-of-scope changes

是否为 0

audit

独立审计是否接受

local attestation

是否用 patchwarden-attest 对当前证据做了人工验收

final lineage

整条工作流是否完整结束

审计通过后,任务通常仍是 ready_for_review。权威验收需要在本地 TTY 执行:

patchwarden-attest <task_id> --accept

PatchWarden 的目标不是让 Agent “更会说自己做对了”,而是让你能检查它到底做了什么。

安全边界

PatchWarden 的核心原则:能力最小化 + 证据优先。

  • 工作区必须显式配置;

  • 不把任意本机路径默认暴露给远程模型;

  • 验证命令受允许列表限制;

  • Direct 是可选的受限编辑能力,不是只读验证通道;它应保持更严格的工作区边界、敏感路径和确认策略,未启用时不要在提示词里引用它;

  • 本地 HTTP MCP 的敏感接口要求 owner token;

  • 本地 HTTP MCP 的详细 health 与 /mcp 都要求 PATCHWARDEN_OWNER_TOKEN;

  • 日志、截图和诊断不应暴露 API Key / Tunnel ID /账号秘密;

  • 最终人工 attestation 绑定当前证据摘要,而不是只相信任务目录里的状态文件;

  • 对高风险操作,应继续保留人工确认。

PatchWarden 不是什么

  • 不是通用远程桌面;

  • 不是无限制远程 Shell;

  • 不替代 Codex / Claude Code / OpenCode;

  • 不把所有本地文件自动暴露给 ChatGPT;

  • 不把 Agent 的自然语言“测试通过”当成最终证据;

  • 不应该用来绕过你原本的本地安全策略。

支持的工作流

PatchWarden 当前重点围绕:

Plan in ChatGPT
      ↓
Execute with a local coding agent
      ↓
Verify independently
      ↓
Audit actual changes
      ↓
Accept with evidence

它更适合“我已经知道要做什么,现在需要一个受控执行层”,而不是替代完整的需求分析或产品决策流程。

常见排障

Agent 检测到了但不可调用

在独立终端直接运行对应 CLI,先完成登录和基础模型配置,再回到 PatchWarden 重新检测。

Watcher / Core 状态异常

先通过高级控制台执行正常的启动/重启流程。不要直接强杀未知 PID。

ChatGPT 无法连接

先确认本地 PatchWarden 健康,再检查 Tunnel 是否连接到正确 profile,以及 ChatGPT 侧是否使用了当前支持的 MCP/custom app 连接方式。

验证命令被拒绝

检查它是否真的存在于项目中,并且是否匹配 PatchWarden 的允许命令配置。不要为了让任务通过而临时放宽为任意 Shell。

开发与审计理念

PatchWarden 更关心这些问题:

  • 执行权属于谁?

  • 工作区边界在哪里?

  • 结果能不能独立验证?

  • 证据是否能追溯到这一次具体任务?

  • 人工最终接受是否绑定到当前证据?

如果这些边界比“少一次确认”更重要,这个项目就有价值。

License

MIT. See LICENSE.


PatchWarden is an independent open-source project and is not affiliated with or endorsed by OpenAI, Anthropic, or OpenCode.

Available Tools

71 tools
accept_subgoalA

Accept a subgoal after all associated tasks are accepted by audit_task. Supports both legacy status=accepted and done_by_agent with acceptance_status=accepted.

Inputs: goal_id (required), subgoal_id (required).

apply_patchA
Destructive

Apply JSON patch operations to a file within a Direct session's repo_path. Validates expected_sha256 before applying. Supports replace_exact, insert_before, insert_after, replace_whole_file.

Inputs: path (required), operations (required), session_id (required), expected_sha256 (required), +1 more.

audit_sessionA

Independently audit a Direct session's changes. Performs 16 deterministic checks and returns pass/warn/fail decision. Requires session to be finalized first.

Inputs: session_id (required).

audit_taskA

Independently audit a task's outputs. Verifies status, result.md, test.log, git.diff, repo_path consistency, cross-references agent claims with package.json scripts, and flags unverified release/publish claims. Evidence-backed failures, possible heuristic false positives, and manual-verification items are returned separately. Writes independent-review.md to the task directory.

Inputs: task_id (required).

cancel_taskA

Request graceful cancellation. The runner that owns the child process performs termination; the MCP server never kills a PID read from task files.

Inputs: task_id (required).

check_release_gateA

v1.0.0: Verify release readiness across five sequential stages: local_ready → packed_ready → published_verified → github_release_verified → ci_verified. Remote stages (published/github/ci) query npm registry and GitHub API via node:https read-only GET; network errors return 'not_checked' (not 'failed'). Never claims release complete before published_verified passes. Does not execute shell commands for remote queries.

Inputs: repo_path (required), target_stage (required), branch, version, +2 more.

create_direct_sessionB

Create a Direct editing session for ChatGPT to apply patches directly. Requires enableDirectProfile: true in config.

Inputs: repo_path (required), title, expected_changes.

create_fileA
Destructive

Create a new bounded UTF-8 text file inside an active Direct session. The target and its parent are revalidated, sensitive content is blocked, and existing targets are never overwritten.

Inputs: path (required), content (required), session_id (required), review_id.

create_goalA

v0.8.0: Create a Goal Session for managing a multi-task objective with subgoal dependencies. Generates a structured directory under .patchwarden/goals/{goal_id}/ with GOAL.md, GOALS.md, and goal_status.json. Use list_goals to enumerate existing goals and read_goal to inspect details.

Inputs: title (required), repo_path (required), goal_description (required).

create_subgoal_taskA

v0.8.0: Create a subgoal within a Goal Session and immediately launch an associated task. Atomically: addSubgoal → create_task → linkTask → mark subgoal running. The subgoal depends_on other subgoals (by id) which must be accepted before suggest_next_subgoal returns it.

Inputs: goal_id (required), repo_path (required), subgoal_title (required), goal, +15 more.

create_taskA

Create a repo-scoped task from exactly one source. For ChatGPT, prefer the guarded inspect_only, feature_small, or fix_tests template when it fits. A stale watcher preserves the task but returns execution_blocked and directs the client to health_check; otherwise call wait_for_task until terminal. Use execution_mode=assess_only to pre-assess risk and get an assessment_id without creating a task; then invoke the returned next_tool_call using only execution_mode=execute and the full assessment_id.

Inputs: goal, agent, plan_id, template, +12 more.

delete_fileA
Destructive

Delete one bounded regular text file inside a Direct session. Requires the current SHA-256 and confirm_delete=true; directories and recursive deletion are unsupported.

Inputs: path (required), session_id (required), confirm_delete (required), expected_sha256 (required), +1 more.

diagnose_taskA

v0.7.0: Diagnose a running or collecting_artifacts task using multi-signal evidence (heartbeat age, log freshness, child PID liveness, watcher ownership, artifact presence). Returns a conservative diagnosis (active_running, stale_running, possibly_stale_running, orphaned_running, artifact_collection_stuck, done_candidate, unknown, terminal) with confidence level and safe_actions. Never relies on a single signal; refuses to call PID-alive tasks 'active' when other signals are stale (PID reuse protection). Read-only — does not modify task state.

Inputs: task_id (required), include_logs.

discard_worktreeA

v1.0.0: Discard an isolated git worktree safely. Removes the worktree (git worktree remove --force), deletes its branch, and archives status as 'discarded'. Use when a subgoal is rejected or abandoned. All paths pass guardWorkspacePath + sensitiveGuard.

Inputs: repo_path (required), worktree_id (required).

discover_toolsA

v0.7.1: Search candidate tools by natural-language query (Chinese or English). Returns compressed summaries with risk level and schema digest. Filters by profile/mode/riskCeiling. High-risk tools (command/release/credential_sensitive) are hidden by default unless includeHighRisk=true. Read-only — never invokes tools.

Inputs: query (required), mode, profile, maxResults, +2 more.

explain_toolA

v0.7.1: Expand a single tool's metadata — title, summary, risk level, tags, aliases, profiles, modes, schema digest, and optionally the full inputSchema. Use after discover_tools to understand a specific tool before calling it. Read-only.

Inputs: name (required), includeSchema.

export_goal_reportB

Export a structured final report for a Goal session, aggregating subgoal completion, task evidence, and risk summary.

Inputs: goal_id (required).

export_handoffA

v0.8.0: Export a handoff.md document for transferring a Goal Session to a new conversation. Includes current goal, completed/pending subgoals, recent diff/test results, blockers, next steps, and risks. Writes to .patchwarden/goals/{goal_id}/handoff.md.

Inputs: goal_id (required).

export_task_evidence_packA

Export a bounded evidence pack for a run_task_loop lineage. Writes evidence.json and EVIDENCE.md without stdout, stderr, full logs, full diff, or sensitive file contents.

Inputs: lineage_id (required), max_items.

finalize_direct_sessionA

Finalize a Direct session: capture after snapshot, generate diff/summary/change artifacts, mark session as finalized. Must be called before audit_session.

Inputs: session_id (required).

get_diffB

Read task diff evidence, or return structured availability and watcher evidence while it is not ready.

Inputs: task_id (required).

get_planB

Read a saved plan by its plan_id.

Inputs: plan_id (required).

get_project_policyA

Read the bounded effective .patchwarden/project-policy.json summary for a repository. Missing policy returns safe defaults. Project policy never expands PatchWarden command allow-lists, workspace confinement, sensitive-path blocking, or watcher/audit boundaries.

Inputs: repo_path (required).

get_resultA

Read result.md, or return structured availability and watcher evidence while the task is not terminal.

Inputs: task_id (required).

get_result_jsonB

Read the structured result.json for deterministic task acceptance.

Inputs: task_id (required).

get_task_lineageA

Read a bounded safe summary for a run_task_loop lineage. Does not return full logs, diffs, stdout, stderr, or markdown artifacts.

Inputs: lineage_id (required), max_items.

get_task_log_tailA

Read the last N lines of a task log file (stdout/stderr/test/verify) with automatic secret redaction. Default 80 lines, max 200. Always returns tail only — never the full file. Use this instead of read_workspace_file to avoid triggering platform content filters on log output.

Inputs: file (required), task_id (required), lines, redact.

get_task_progressA

Read progress.md for task phases and the most recent heartbeat/current command.

Inputs: task_id (required).

get_task_statusB

Check task status, execution phase, watcher health, pending reason, current command, timeout, and change evidence.

Inputs: task_id (required).

get_task_stdout_tailA

Read the last N lines of agent stdout/stderr. Reads from real-time stdout.log/stderr.log during execution, falls back to result.md after completion. Works on pending, running, and completed tasks. Default 80 lines.

Inputs: task_id (required), lines.

get_task_summaryA

Return structured acceptance evidence. Use view=compact first for bounded counts and risk excerpts; use standard only when full changed-file and log-tail detail is required.

Inputs: task_id (required), view, max_items.

get_test_logC

Read test.log, or return structured availability and watcher evidence while it is not ready.

Inputs: task_id (required).

health_checkA
Read-onlyIdempotent

Check MCP catalog consistency, watcher freshness/supervisor state, workspace readiness, and configured agents. Agent availability is executable-only unless an explicit provider probe is requested. Use detail=self_diagnostic for expanded read-only evidence.

Inputs: detail.

import_speckit_tasksB

Import Spec Kit tasks into a Goal session as subgoals, mapping task files to scope hints and acceptance criteria.

Inputs: goal_id (required), spec_kit_json (required).

invoke_discovered_toolA

v0.8.1: Invoke a previously discovered tool using a discoveryToken. The token must be obtained from discover_tools first. Enforces 10 security checks: token validity, toolName match, profile allowance, risk ceiling, sensitive path guard, assessment requirement, command whitelist, release confirmation, credential block, and invocation logging. Cannot call itself recursively.

Inputs: toolName (required), arguments (required), discoveryToken (required), assessmentId.

kill_taskA

Request immediate termination of a pending or running task. The runner validates and kills only the child process it owns.

Inputs: task_id (required).

list_agentsA

List agents from the active runtime config, verify executable and model-argument wiring, and report the config path used by this process. provider_status remains not_checked because this read-only check does not contact a model provider or test account balance.

Inputs: no named parameters.

list_goalsA

v0.8.0: List all Goal Sessions with completion summaries. Returns goal_id, title, status, subgoal counts, and last update time. Sorted by updated_at descending.

Inputs: no named parameters.

list_tasksB

List recent tasks with status/repo/active/history filters plus watcher state and computed pending reasons. Archived history is excluded by default.

Inputs: limit, status, repo_path, active_only, +1 more.

list_workspaceA
Read-onlyIdempotent

List files and directories within the workspace (sensitive files excluded).

Inputs: path.

merge_worktreeA

v1.0.0: Merge an isolated git worktree's changes back into the main workspace. Use after a subgoal task (created with isolate_worktree=true) is accepted. Updates worktree_status.json to status='merged'. Merge failures do NOT delete the worktree (preserved for manual inspection).

Inputs: repo_path (required), worktree_id (required).

mkdirA
Destructive

Create one new directory level inside an active Direct session. Parent directories must already exist; linked, sensitive, internal, dependency, release, and build-output paths remain blocked.

Inputs: path (required), session_id (required), review_id.

move_fileA
Destructive

Move one bounded regular text file within a Direct session. Requires the current source SHA-256 and never overwrites the target.

Inputs: session_id (required), source_path (required), target_path (required), expected_source_sha256 (required), +1 more.

read_goalA

v0.8.0: Read full Goal Session details including GOAL.md content, goal_status.json, and all subgoals with dependency info. Use after list_goals to inspect a specific goal.

Inputs: goal_id (required).

read_workspace_fileA
Read-onlyIdempotent

Read a file within the workspace. Sensitive files (secrets, keys, tokens) are blocked. In Direct mode (with session_id), reads are scoped to the session's repo_path and return sha256.

Inputs: path (required), session_id.

recommend_agent_for_taskA

Return a bounded read-only agent routing recommendation for a repo-scoped task. Does not start an agent, create a task, or read logs.

Inputs: goal (required), repo_path (required), template, risk_hint, +1 more.

reconcile_tasksA

v0.7.0: Scan stale running/collecting_artifacts tasks and either report or safely fix them. report_only (default) returns a diagnosis report without modifying state. safe_fix additionally writes high-confidence status transitions (failed_stale/orphaned/done_by_agent) atomically with backup (status.json.bak), audit fields, and an appended reconcile.log. Never touches tasks still owned by an active watcher; never applies medium/low confidence fixes.

Inputs: mode, max_age_minutes, include_done_candidates.

reject_subgoalA

Reject a subgoal with a reason. Allowed from any non-terminal status (ready/queued/running/done_by_agent/needs_fix). Records rejected_reason in goal_status.json.

Inputs: reason (required), goal_id (required), subgoal_id (required).

release_checkA

v1.3.0: Run a bounded release readiness check by wrapping the existing release gate. Local stages use existing guarded release-gate commands; remote stages are read-only. Does not publish, push, tag, or create a GitHub Release.

Inputs: repo_path (required), branch, version, github_repo, +2 more.

release_cleanupA

v1.3.0: Clean up release artifacts using project-policy auto_cleanup rules. Defaults to dry_run=true. Non-dry-run cleanup only removes low-risk ignored/untracked artifacts under repo_path and writes an audit summary.

Inputs: repo_path (required), dry_run, patterns.

release_prepareA

v1.3.0: Run project-policy release preparation commands only when each command is already accepted by the existing PatchWarden command guard. Returns command status only, never stdout/stderr. Does not publish, push, tag, or create a GitHub Release.

Inputs: repo_path (required), timeout_seconds, required_commands.

release_verifyA

v1.3.0: Verify npm/GitHub/CI release facts with read-only HTTPS requests. Does not run local shell commands and does not publish, push, tag, or create a GitHub Release.

Inputs: repo_path (required), branch, version, github_repo, +1 more.

request_direct_reviewA
Read-only

Request a policy-bound review for the exact Direct operation to be performed. In enforce mode, pass the returned review_id unchanged to the matching operation before it expires.

Inputs: session_id (required), operation_type (required), path, command, +8 more.

retry_taskB

Create a new task with the same plan, agent, repo_path, and test_command as an existing task. The original task is unchanged.

Inputs: task_id (required).

run_direct_verification_bundleA
Destructive

Run multiple allowlisted Direct verification commands sequentially and return only bounded structured status. Omits stdout/stderr tails and log content.

Inputs: commands (required), session_id (required), review_id, timeout_seconds.

run_task_loopA

Start a guarded PatchWarden task loop by composing create_task, wait_for_task, safe summaries, and audit_task. By default it returns request_id, lineage_id, and the created main task immediately while Core continues the loop in the background; follow with wait_for_task and get_task_lineage. It does not bypass the watcher, command allow-list, workspace confinement, or confirmation boundaries.

Inputs: goal (required), repo_path (required), verify_commands (required), agent, +17 more.

run_verificationB
Destructive

Run a whitelisted verification command within a Direct session. Command must be in the Direct allowlist.

Inputs: command (required), session_id (required), review_id, timeout_seconds.

safe_auditA

Run audit_task and return only bounded structured audit evidence without full review markdown.

Inputs: task_id (required), max_items.

safe_audit_direct_sessionA

Audit a Direct session and return only bounded structured evidence without verification stdout/stderr tails.

Inputs: session_id (required), max_items.

safe_diff_summaryA

Return changed-file counts and bounded path metadata without returning diff content.

Inputs: task_id (required), max_items.

safe_direct_summaryA
Read-onlyIdempotent

Return a low-noise Direct session summary without diff content or verification stdout/stderr tails.

Inputs: session_id (required), max_items.

safe_finalize_direct_sessionA

Finalize a Direct session and return only bounded structured evidence, omitting diff and verification log content.

Inputs: session_id (required), max_items.

safe_resultA

Return a low-noise structured task result summary without full logs, markdown, or diff content.

Inputs: task_id (required), max_items.

safe_statusA

Return minimal task lifecycle status without exposing diff, log content, file contents, or sensitive paths. Use this when only task state is needed and content-bearing tools may be blocked by upper-layer security.

Inputs: task_id (required).

safe_test_summaryB

Return a compact verification summary for a task without stdout/stderr or test log content.

Inputs: task_id (required).

save_planA

Save an execution plan — ChatGPT writes the plan, PatchWarden stores it for local agent execution. Supports plan_ref to load a plan file already placed inside .patchwarden/plans.

Inputs: title, content, plan_ref.

search_workspaceA
Read-onlyIdempotent

Search file contents (grep-like) within a Direct session's repo_path. Skips .git, node_modules, dist, release, and sensitive files.

Inputs: query (required), session_id (required), max_results, include_globs, +2 more.

suggest_next_subgoalA

v0.8.0: Suggest the next executable subgoal based on the dependency graph. Returns a ready subgoal whose dependencies are all accepted. If none ready, returns blocked_by list. Use to drive goal-directed task sequencing.

Inputs: goal_id (required).

summarize_goal_progressB

Summarize goal completion: counts by status (accepted/rejected/queued/running/ready/needs_fix/done_by_agent), completion_rate, blocked_subgoals, and actionable risks.

Inputs: goal_id (required).

sync_fileA
Destructive

Copy a file from source to target within the same Direct session repo. This legacy operation is outside the first Direct review MVP and is disabled when directReview.mode=enforce. Both paths must be inside the session repo_path.

Inputs: session_id (required), source_path (required), target_path (required), expected_source_sha256, +1 more.

wait_for_taskB

Long-poll a task for up to 30 seconds. If continuation_required=true, call wait_for_task again immediately and do not finish the assistant turn. Terminal responses include get_task_summary acceptance evidence.

Inputs: task_id (required), wait_seconds, timeout_seconds.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.1/5.0

    Scored across 71 tools

    Disambiguation2/5

    Multiple tools serve near-identical purposes with subtle differences (e.g., get_task_status, get_task_progress, get_task_summary, safe_status, safe_result) or are distinguished only by output verbosity. The safe_* family duplicates many base tools, and release_check/release_verify/check_release_gate overlap heavily, making selection confusing.

    Naming Consistency4/5

    Most tools follow a consistent verb_noun snake_case pattern (list_tasks, create_goal, release_prepare), and the safe_ prefix is used consistently. Minor deviations include bare mkdir, sync_file, and versioned tags in descriptions, but overall naming is predictable.

    Tool Count1/5

    71 tools is an extreme count for any MCP server, even a comprehensive one. This is well beyond the 15-tool 'well-scoped' threshold and qualifies as overbuilt per the calibration.

    Completeness4/5

    Despite the excessive size, the server covers task lifecycle (create/cancel/retry/audit), goal management, release gates, worktree isolation, and direct session editing. The main gaps are lack of task update/delete and goal deletion, but the surface is otherwise comprehensive for its stated purpose.

    Maintenance

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers