{ "name": "Feedback clusterer", "objective": "Turn noisy feedback streams into a small set of actionable themes with evidence, owners, and suggested next steps.", "trigger": { "type": "scheduled", "cadence_or_event": "Daily or weekly, and after a launch, incident, release, or support backlog spike." }, "intake": { "sources": ["GitHub issues", "PR comments", "support tickets", "Slack threads", "app reviews", "survey responses"], "selection_rule": "Collect items inside the defined time window, skip already-processed IDs, and cluster by underlying user problem rather than surface wording." }, "workspace": { "isolation": "Read-only access to feedback systems.", "allowed_actions": ["read feedback sources", "create summary docs", "create or update issues and labels"], "disallowed_actions": ["close user reports", "change priorities", "send customer-facing replies"] }, "context": { "required_files": ["product area map", "label and owner directory"], "runtime_sources": ["feedback items in the window", "known duplicates", "prior cluster state"] }, "agents": [ { "role": "Collector", "responsibility": "Gather feedback items and preserve stable source links." }, { "role": "Clusterer", "responsibility": "Group items by user problem and attach representative examples." }, { "role": "Skeptic", "responsibility": "Check clusters for overgeneralization and missing counterexamples." }, { "role": "Reporter", "responsibility": "Produce ranked themes with confidence, owners, and next actions." } ], "verification": { "gates": ["every cluster has source links", "high-impact claims include representative examples", "frequency is reported separately from severity", "processed IDs are recorded"], "receipts": ["query windows and filters", "processed item IDs", "cluster names with example links", "confidence and owner per theme"] }, "state": { "artifacts": ["theme report", "processed-ID ledger"], "update_rule": "Append processed IDs, cluster definitions, and follow-up owners after every run so items are never double counted." }, "budget": { "max_retries": 1, "max_runtime_minutes": 90 }, "escalation": { "conditions": ["security or legal concerns in feedback", "sensitive data exposure", "customer-specific commitments", "prioritization conflicts"], "destination": "Product owner triage channel" }, "exit": { "success": "Clusters are stable and the ranked theme report with next actions is published.", "stop_without_success": "Source rate limits block collection or themes require product judgment." } }