OpenClaw plugin for product-team workflow: TaskRecord lifecycle, quality gates, GitHub automation, agent orchestration, budget tracking, and observability
The server defines 2 tools with complete input schemas and descriptions, but both lack documented output schemas. Tool naming follows verb_noun convention (metrics.refresh, agent.nudge) which aids discovery. Descriptions are adequate (115-139 chars, within the 10-1024 baseline) but lack actionable guidance on recovery, dependencies, and expected return structures. Input schemas are well-formed with enums and descriptions for all parameters. However, the absence of output documentation and missing error guidance represent significant gaps for agent planning. Neither tool includes destructive/idempotent hints or confirmation patterns despite agent.nudge being a WRITE operation. The server declares logging=true but no structured logging patterns are visible in the sample code.
Wake up agents and surface blocked tasks. Sends a message to each target agent and returns a NudgeReport.
Trigger on-demand metrics aggregation. Computes agent activity, event counts, pipeline throughput, cost summary, and stage duration from the event log.
No output schemas documented for either tool. LLMs cannot plan downstream tool calls or extract structured data without knowing response field names and types.
agent.nudge is a WRITE operation but lacks destructive/confirmation patterns. Tool description does not warn agents of side effects (sending messages to agents).
No error handling guidance. Descriptions lack recovery hints (e.g., 'If metrics aggregation fails, check event log permissions' or 'If nudge times out, try smaller agentIds batch').
Missing parameter constraints in metrics.refresh. 'period' enum is defined, but no guidance on when to use each period for meaningful aggregation windows. Output results could vary wildly.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 62 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 31 | - | v1 |
agent.nudge has optional agentIds parameter but description does not explain precedence: does scope override agentIds? Are agentIds additive to scope filtering?
No idempotency guidance. Calling metrics.refresh twice in a row, does it return cached results or recompute? Is agent.nudge idempotent if dry_run=false?