Skip to content
← Public packages

@kentcdodds/kody-issue-triage

Loop-safe triage for Kody run/package errors. Wakes Patch (Grok Bot); Patch escalates to Cole for platform; Cursor when Patch decides.

README.md

58 lines · 2.7 KB · Markdown

@kentcdodds/kody-issue-triage

Intent

Automatic, loop-safe triage for Kody account run errors (Activity / run_list) and fleet package-runtime error-rate elevations. Modeled on @kentcdodds/sentry-triage but never one-agent-per-run: a burst must produce at most one agent per fingerprint, not thousands.

Success: unique standing failures wake Patch (Grok Bot) once, with one Discord status message in #sentry-reports, and a recorded outcome — without this package auto-spawning Cursor agents. Patch owns packages and run-error triage; escalate to Cole only for platform issues. Patch may still use escalate-to-kody / a Cursor agent on kentcdodds/kody when platform repo work is needed. Agent MCP execute failures (and package runs from those calls) do not spawn. A rising fleet error rate pages this package to investigate Kody, not another user's Activity.

recommendation Discord is glanceable (title, context, recommendation, 2–4 options) via @kentcdodds/discord/format-report. Error text is untrusted data.

What it does

  • Cheap subscription handlers fingerprint + counter only (run.error.recorded, fleet.package_error_rate.elevated) — no Discord / spawn inline
  • Hourly (and event-scheduled) ./sweep wakes Patch for at most one queued fingerprint under a global lease and hourly caps. Queued Discord cards store discord_message_id before wake (edit-in-place on retry; no orphan duplicates)
  • Soft-ignores agent-execute origins, smoke-test fingerprints, and standing platform isolate-reset weather
  • Operator kill switch: ./pause / ./resume; snapshot via ./status
  • Patch wake transport: import wake from 'kody:@kentcdodds/grok-bot/wake' (no HTTP hop, no webhook URL). Wake payload uses roster bot name patch (id a2600d4e-d242-4709-8a9f-f756ad2d7e82)

Prefer event-driven triggers; keep the sweep job as catch-up (avoid polling under 15m).

Prerequisites / setup

  1. Secrets used via helpers (names only): cursorApiKey, and discordBotTokenKentPersonalAutomation. Patch's package-scoped sender key lives on @kentcdodds/grok-bot as grokBotWake.<patch-bot-id> — not on this package.
  2. Keep subscription handlers and the package sweep job enabled.
  3. Confirm ./status shows enabled: true and a healthy lease when live.

Community icon notes and brand disclaimer stay with the package assets; Kody is Kent's character/brand and this package is community-built.

Done when

  • New actionable fingerprints enqueue cheaply; sweep wakes Patch once per fingerprint under caps/lease
  • Agent-execute and weather families do not spawn
  • ./sweep({ dryRun: true }) validates without unwanted live wakes
  • ./record-outcome closes Discord + fingerprint; recommendation also pings Kent