{
  "tools": [
    {
      "name": "prd_status",
      "description": "Check where the project stands. Call this at the start of a session and before choosing what to work on: it returns open goals, requests by status, open health findings, stale items, and tracking-branch summaries plus the autonomy level for this repo's .prd_plugin state.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "json",
              "markdown"
            ]
          }
        }
      }
    },
    {
      "name": "prd_check_messages",
      "description": "Check messages in the current repo. Call this FIRST when the user asks whether there are messages, requests, inbox items, mailbox replies, or outbox items. It reads this repo's PRD Plugin transport and request-thread state; do not substitute chat, email, or collaboration tools.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "json",
              "markdown"
            ]
          }
        }
      }
    },
    {
      "name": "prd_find",
      "description": "Need relevant state without reading whole JSON files? Find a bounded set of records by kind, status, linked ID, or text, including DBR tracking branches. Defaults to 25 and never returns more than 100 records.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "TRK",
              "REQ",
              "EV",
              "DEC",
              "CHG",
              "HLT",
              "MEM",
              "DBR"
            ]
          },
          "status": {
            "type": "string"
          },
          "linked_id": {
            "type": "string"
          },
          "query": {
            "type": "string"
          },
          "limit": {
            "type": "number",
            "minimum": 1,
            "maximum": 100
          }
        }
      }
    },
    {
      "name": "prd_get",
      "description": "Know the ID? Fetch exactly that canonical record or DBR tracking branch without opening or scanning its backing file.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ]
      }
    },
    {
      "name": "prd_create",
      "description": "Create a mutable tracking, request, or health record without choosing an ID. Allocation, duplicate detection, timestamps, and the record write run under the existing state lock. Use the specialised evidence/decision/change tools for append-only records.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "TRK",
              "REQ",
              "HLT"
            ]
          },
          "summary": {
            "type": "string"
          },
          "record_type": {
            "type": "string"
          },
          "severity": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "critical"
            ]
          },
          "rationale": {
            "type": "string"
          },
          "linked_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "affected_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "recommended_action": {
            "type": "string"
          },
          "agent": {
            "type": "string"
          },
          "session": {
            "type": "string"
          }
        },
        "required": [
          "kind",
          "summary"
        ]
      }
    },
    {
      "name": "prd_update",
      "description": "Update permitted fields on an existing TRK, REQ, or HLT record. IDs, record types, provenance, and caller timestamps are immutable; append-only EV/DEC/CHG records keep their specialised tools.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "severity": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "critical"
            ]
          },
          "rationale": {
            "type": "string"
          },
          "linked_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "affected_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "affected_areas": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "graduated_to": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "recommended_action": {
            "type": "string"
          },
          "resolution": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ]
      }
    },
    {
      "name": "prd_link",
      "description": "Link two existing record-backed IDs without editing either JSON file. Both records must exist; the symmetric link is deduplicated and written under one lock.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "left_id": {
            "type": "string"
          },
          "right_id": {
            "type": "string"
          }
        },
        "required": [
          "left_id",
          "right_id"
        ]
      }
    },
    {
      "name": "prd_reflection_list",
      "description": "Inspect the configured reflection categories and questions without reading config.json. Filter by entity, category, or enabled state; results include effective activation.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "all",
              "category",
              "question"
            ]
          },
          "category_id": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          }
        }
      }
    },
    {
      "name": "prd_reflection_create",
      "description": "Add a reflection category or question. Question IDs are allocated as collision-free RFQ IDs under the shared state lock; duplicate category IDs and normalized question text are rejected.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "category",
              "question"
            ]
          },
          "category_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          }
        },
        "required": [
          "entity",
          "category_id"
        ]
      }
    },
    {
      "name": "prd_reflection_update",
      "description": "Edit, activate, deactivate, rename, or move one reflection category/question. IDs are immutable; supply only the fields that should change.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "category",
              "question"
            ]
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "category_id": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          }
        },
        "required": [
          "entity",
          "id"
        ]
      }
    },
    {
      "name": "prd_reflection_delete",
      "description": "Delete one reflection question or an empty category. Category deletion is safe by default; set cascade=true explicitly to delete its questions too.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "category",
              "question"
            ]
          },
          "id": {
            "type": "string"
          },
          "cascade": {
            "type": "boolean"
          }
        },
        "required": [
          "entity",
          "id"
        ]
      }
    },
    {
      "name": "prd_open_tracking_branch",
      "description": "Before parallel agent fan-out, the lead creates one tracking document branch per worker. This allocates DBR/DBR-DELTA IDs and a dedicated branch file but does NOT touch canonical tracking. Commit the seeds before workers start; each worker updates only its assigned branch.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "owner": {
            "type": "string"
          },
          "target_id": {
            "type": "string"
          },
          "goal_type": {
            "type": "string",
            "enum": [
              "goal",
              "active_work"
            ]
          },
          "linked_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "agent": {
            "type": "string"
          },
          "session": {
            "type": "string"
          }
        },
        "required": [
          "summary",
          "owner"
        ]
      }
    },
    {
      "name": "prd_update_tracking_branch",
      "description": "A parallel worker records progress only in its pre-assigned DBR tracking branch. This never allocates an ID or mutates canonical tracking/registry state, so separate worktrees can update different branch files safely before the lead merges them.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "owner": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "note": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "open",
              "active",
              "complete",
              "resolved",
              "deferred",
              "parked",
              "superseded"
            ]
          },
          "linked_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "id",
          "owner"
        ]
      }
    },
    {
      "name": "prd_promote_tracking_branch",
      "description": "After worker branches are merged, the lead promotes one DBR branch into canonical TRK state. Promotion is locked, allocates canonical IDs only here, merges additive notes/links, rejects overlapping field conflicts, records DBR-MERGE provenance, and is safe to retry.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "evidence_id": {
            "type": "string"
          },
          "no_evidence_reason": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ]
      }
    },
    {
      "name": "prd_next_id",
      "description": "Allocate a globally unused ID for an embedded planning prefix (PRD-REQ, ARCH-DEC, IMP-TASK, ...). Never compute an ID or inspect/edit the registry by hand. Record-backed tools allocate internally; use prd_create or the specialised evidence/decision/change/goal tools for records.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "prefix": {
            "type": "string"
          }
        },
        "required": [
          "prefix"
        ]
      }
    },
    {
      "name": "prd_open_goal",
      "description": "Starting a new piece of work? Call this FIRST. Opens a TRK goal (the record the autonomous stop-guard works toward) with an allocated ID and server-side timestamps. Close it with prd_close_goal when the work is verified done.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string",
            "description": "What 'done' means, one line."
          },
          "goal_type": {
            "type": "string",
            "enum": [
              "goal",
              "active_work"
            ]
          },
          "linked_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "agent": {
            "type": "string"
          },
          "session": {
            "type": "string"
          }
        },
        "required": [
          "summary"
        ]
      }
    },
    {
      "name": "prd_update_goal",
      "description": "Record progress on an open TRK goal or move its status. Statuses use ONE vocabulary: open, active, complete, resolved, deferred, parked, superseded (legacy values like in_progress are rejected with the mapping). updated_at is stamped server-side.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "note": {
            "type": "string",
            "description": "Progress note appended to the summary."
          },
          "status": {
            "type": "string",
            "enum": [
              "open",
              "active",
              "complete",
              "resolved",
              "deferred",
              "parked",
              "superseded"
            ]
          }
        },
        "required": [
          "id"
        ]
      }
    },
    {
      "name": "prd_close_goal",
      "description": "Finishing a goal? Record the proof FIRST (prd_record_evidence), then close with the EV id. Closing requires a linked EV-* that actually exists, or an explicit no_evidence_reason — 'done' without evidence is exactly what the method forbids.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "evidence_id": {
            "type": "string"
          },
          "no_evidence_reason": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "complete",
              "resolved"
            ]
          }
        },
        "required": [
          "id"
        ]
      }
    },
    {
      "name": "prd_file_request",
      "description": "Found a bug, want a change, or hit a compatibility problem? File a REQ record instead of editing project truth directly. The record lands as 'proposed' (never self-accept). Works from headless sub-agents too — this IS the write path. If the request is about PRD Plugin itself (a prd_* script, a hook, a project-* skill, the MCP server, the installer), it is submitted upstream automatically — you do not need to export anything by hand. Supply scope: local only when the filing must remain local; omit scope to use automatic classification.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "request_type": {
            "type": "string",
            "enum": [
              "bug",
              "change",
              "feature",
              "compat",
              "method"
            ]
          },
          "severity": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high"
            ]
          },
          "rationale": {
            "type": "string"
          },
          "scope": {
            "type": "string",
            "description": "Explicit 'local' bypasses upstream auto-classification; omit to classify."
          },
          "target_repo": {
            "type": "string",
            "description": "Address this request to a declared peer repo (REQ-136). Use prd_list_destinations for valid ids; delivery is verified and the filing never fails because of it."
          },
          "affected_areas": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "expected_behavior": {
            "type": "string"
          },
          "risk": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high"
            ]
          },
          "linked_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "agent": {
            "type": "string"
          },
          "session": {
            "type": "string"
          }
        },
        "required": [
          "summary",
          "request_type",
          "severity"
        ]
      }
    },
    {
      "name": "prd_import_request",
      "description": "Hub-side inbox intake (REQ-106): import one staged upstream package from .prd_plugin/inbox/ into canonical requests as a single validated, duplicate-safe call. Writes full transport provenance (origin_repo, source_request_id, upstream flags) so message_check reports the package as imported. Lands as 'proposed' — triage decides acceptance separately.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "package_path": {
            "type": "string",
            "description": "Repo-relative path to the staged package under .prd_plugin/inbox/."
          },
          "agent": {
            "type": "string"
          },
          "session": {
            "type": "string"
          }
        },
        "required": [
          "package_path"
        ]
      }
    },
    {
      "name": "prd_record_evidence",
      "description": "About to claim something is done, fixed, or passing? Record the proof here FIRST: what you ran and what it showed. Creates an EV record (and optionally a markdown doc under docs/evidence/), then close the goal with prd_close_goal.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string",
            "description": "What was verified and how."
          },
          "type": {
            "type": "string",
            "enum": [
              "validation",
              "review",
              "measurement"
            ]
          },
          "linked_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "commands": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "e.g. [{command, outcome}]"
          },
          "limitations": {
            "type": "string"
          },
          "body": {
            "type": "string",
            "description": "Optional markdown body for docs/evidence/<EV>.md"
          },
          "link_to": {
            "type": "string",
            "description": "TRK-*/REQ-* record to cross-link this evidence into."
          }
        },
        "required": [
          "summary"
        ]
      }
    },
    {
      "name": "prd_record_decision",
      "description": "Made a durable decision (architecture, process, tooling)? Record it with provenance so future sessions don't re-litigate it. decided_by, autonomy_tier, and linked_ids are required — an unattributed decision is not auditable.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "decided_by": {
            "type": "string",
            "enum": [
              "autonomous",
              "human_approved",
              "user_requested"
            ]
          },
          "autonomy_tier": {
            "type": "string",
            "enum": [
              "autonomous",
              "key_decision",
              "guided"
            ]
          },
          "linked_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "rationale": {
            "type": "string"
          },
          "options": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "consequences": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "agent": {
            "type": "string"
          }
        },
        "required": [
          "summary",
          "decided_by",
          "autonomy_tier",
          "linked_ids"
        ]
      }
    },
    {
      "name": "prd_log_change",
      "description": "Shipped a change? Append a CHG changelog record naming what changed (artifact_refs) and why (source_refs, e.g. the REQ). Timestamp is server-side.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "artifact_refs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "source_refs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "summary"
        ]
      }
    },
    {
      "name": "prd_service_list",
      "description": "List repository-declared consumed/provided services with the deterministic manifest hash.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "consumes",
              "provides"
            ]
          }
        }
      }
    },
    {
      "name": "prd_close_thread",
      "description": "Close a finished request thread with a reason (REQ-113). Without this a settled conversation stays 'unresolved' in message_check forever, leaving the transport dashboard permanently amber. Only a settled request (implemented, rejected, deferred) may have its thread closed, so live work is never hidden. Idempotent.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The request whose thread is being closed."
          },
          "reason": {
            "type": "string",
            "description": "Why it is closed. Required — an unexplained close is unauditable."
          }
        },
        "required": [
          "id",
          "reason"
        ]
      }
    },
    {
      "name": "prd_list_destinations",
      "description": "List the peer repos this repo can address (REQ-136), with whether each is reachable right now and whether it shares your workspace. Peers are declared once as requests.peers {repo id -> path}; a configured path is the consent to deliver there. Call this before addressing a request so you use a real destination id.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "prd_send_request",
      "description": "Deliver an addressed request into a peer repo's inbox and verify it by reading the written package back (REQ-136). The request must carry target_repo. Filing is never at risk: an undeclared target refuses delivery only and names the fix, and an unreachable declared target is held for the next flush. Hub-private ('upstream') messages never travel to a peer.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The local request id to deliver."
          }
        },
        "required": [
          "id"
        ]
      }
    },
    {
      "name": "prd_flush_addressed_requests",
      "description": "Deliver every request carrying a target_repo that has not reached its peer yet, and report the ones that could not go with the reason (REQ-136). Nothing is dropped or retried destructively, so an undeliverable request stays visible instead of becoming a black hole.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "prd_service_get",
      "description": "Read one consumed or provided repository service declaration by stable id.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "consumes",
              "provides"
            ]
          },
          "id": {
            "type": "string"
          }
        },
        "required": [
          "kind",
          "id"
        ]
      }
    },
    {
      "name": "prd_service_upsert",
      "description": "Create or update one repository service declaration atomically; stable ids make the operation duplicate-safe.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "consumes",
              "provides"
            ]
          },
          "service": {
            "type": "object"
          }
        },
        "required": [
          "kind",
          "service"
        ]
      }
    },
    {
      "name": "prd_service_remove",
      "description": "Remove one repository service declaration atomically by kind and stable id.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "consumes",
              "provides"
            ]
          },
          "id": {
            "type": "string"
          }
        },
        "required": [
          "kind",
          "id"
        ]
      }
    },
    {
      "name": "prd_service_audit",
      "description": "Audit the repository service manifest for schema, semantic, duplicate, contract, required/fallback, and drift-ready validity.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "prd_substrate_catalog",
      "description": "Audit or inspect the versioned PRD intent-to-Substrate capability catalog, including deliberate discover-only boundaries.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "audit",
              "list",
              "intent"
            ]
          },
          "id": {
            "type": "string"
          }
        }
      }
    },
    {
      "name": "prd_substrate_links",
      "description": "Audit or read duplicate-safe links between canonical PRD records and runtime goals, capsules, threads, watches, apps, cases, or exports.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "audit",
              "list",
              "get"
            ]
          },
          "kind": {
            "type": "string"
          },
          "local_id": {
            "type": "string"
          }
        }
      }
    },
    {
      "name": "prd_substrate_call",
      "description": "Execute one live, UTCP-discovered, capability-allowlisted Substrate tool with source provenance and hash-bound receipts.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "tool": {
            "type": "string"
          },
          "capability": {
            "type": "string"
          },
          "arguments": {
            "type": "object"
          },
          "source_refs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "idempotency_key": {
            "type": "string"
          },
          "required": {
            "type": "boolean"
          }
        },
        "required": [
          "tool",
          "capability",
          "arguments",
          "source_refs"
        ]
      }
    },
    {
      "name": "prd_substrate_runtime",
      "description": "Dispatch one waiting judgment, all pending judgments, or one delegated reporting task through the configured runtime callback contract.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "judgment",
              "drain",
              "report"
            ]
          },
          "id": {
            "type": "string"
          },
          "task": {
            "type": "string"
          }
        },
        "required": [
          "action"
        ]
      }
    },
    {
      "name": "prd_reporting_validate",
      "description": "Validate and normalize a delegated reporting result against its exact source-backed bundle without writing project state.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "bundle": {
            "type": "object"
          },
          "result": {
            "type": "object"
          }
        },
        "required": [
          "bundle",
          "result"
        ]
      }
    },
    {
      "name": "prd_config_list",
      "description": "Inspect the unified PRD Plugin configuration surface. List classified settings with optional category/latency/mutability filters, audit direct JSON edits, or inventory persistent, environment, install-time, host-wiring, specialized-CRUD, and invocation-only controls.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "view": {
            "type": "string",
            "enum": [
              "settings",
              "inventory",
              "audit"
            ]
          },
          "category": {
            "type": "string"
          },
          "latency": {
            "type": "string",
            "enum": [
              "high",
              "medium",
              "low",
              "none"
            ]
          },
          "mutable": {
            "type": "string",
            "enum": [
              "all",
              "yes",
              "no"
            ]
          }
        }
      }
    },
    {
      "name": "prd_config_get",
      "description": "Read one unified configuration key. Describe returns value, type, default, owner, activation, dependencies, and latency; effective additionally explains disabled dependencies.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "view": {
            "type": "string",
            "enum": [
              "value",
              "describe",
              "effective"
            ]
          }
        },
        "required": [
          "key"
        ]
      }
    },
    {
      "name": "prd_config_set",
      "description": "Change one operator-mutable unified configuration key through validated, formatting-preserving writes. Use enable/disable only for boolean keys; managed/read-only keys are rejected.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "value": {},
          "action": {
            "type": "string",
            "enum": [
              "set",
              "enable",
              "disable"
            ]
          }
        },
        "required": [
          "key"
        ]
      }
    },
    {
      "name": "prd_config_profile",
      "description": "List, inspect, diff, atomically apply, save, or delete unified configuration profiles. Built-in lean/balanced/thorough profiles never auto-enable external integrations; apply supports dry-run.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "list",
              "show",
              "diff",
              "apply",
              "save",
              "delete"
            ]
          },
          "name": {
            "type": "string"
          },
          "dry_run": {
            "type": "boolean"
          },
          "keys": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "action"
        ]
      }
    },
    {
      "name": "prd_workflow_list",
      "description": "List shipped deterministic workflows, versions, step counts, judgment boundaries, and effective enablement.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "prd_workflow_actions",
      "description": "List the code-owned workflow action allowlist with determinism, mutation, and idempotency metadata.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "prd_workflow_audit",
      "description": "Audit the managed workflow catalog for schema, action, provenance, input, postcondition, and duplicate defects.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "prd_workflow_plan",
      "description": "Validate inputs and return a stable dry-run plan without allocating a run or executing an action.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "workflow": {
            "type": "string"
          },
          "inputs": {
            "type": "object"
          }
        },
        "required": [
          "workflow"
        ]
      }
    },
    {
      "name": "prd_workflow_run",
      "description": "Start a persistent deterministic workflow run; completion is impossible until every declared postcondition passes.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "workflow": {
            "type": "string"
          },
          "inputs": {
            "type": "object"
          },
          "idempotency_key": {
            "type": "string"
          }
        },
        "required": [
          "workflow"
        ]
      }
    },
    {
      "name": "prd_workflow_status",
      "description": "Read a persistent workflow run including steps, receipts, pending judgment, attempts, and terminal outcome.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ]
      }
    },
    {
      "name": "prd_workflow_resume",
      "description": "Validate a hash-bound external judgment result and resume deterministic execution; the model never writes canonical state.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "result": {
            "type": "object"
          }
        },
        "required": [
          "id",
          "result"
        ]
      }
    },
    {
      "name": "prd_workflow_cancel",
      "description": "Cancel a non-terminal workflow run with an auditable reason.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "reason"
        ]
      }
    },
    {
      "name": "prd_workflow_retry",
      "description": "Retry a safely retryable failed workflow within its configured attempt limit; outcome-unknown mutations remain blocked.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ]
      }
    },
    {
      "name": "prd_validate",
      "description": "Pre-flight the commit gate on demand (duplicate IDs, version drift, state consistency, stranded outbox, timescale warnings). Run this BEFORE committing — fixing findings now is cheaper than a blocked commit later. Returns structured findings.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
  ]
}
