Skip to Content
v0.8.0 · shippedNative mobile SDKs, optional Sentry enrichment, and bring-your-own keys/storage. Read the changelog →
Plugin marketplaceWebhook events

Webhook events

Every event ships with this envelope:

interface MushiEvent<TName extends MushiEventName, TData> { event: TName project_id: string occurred_at: string // ISO 8601 UTC data: TData }

Event reference

EventWhendata shape (subset)
report.createdA new report row is inserted{ report_id, severity, title, url }
report.classifiedclassify-report finishes successfully{ report_id, taxonomy_path, confidence }
report.status_changedStatus updated via API or admin{ report_id, from, to, actor_id }
report.commentedA comment is added to a report{ report_id, comment_id, body, visible_to_reporter }
report.dedup_groupedReport is grouped into a dedup cluster{ report_id, group_id, peers }
fix.requestedA fix dispatch has been requested (pre-agent launch){ report_id, fix_id }
fix.proposedOrchestrator opens a draft PR (standard agent or Cursor Cloud Agent){ report_id, attempt_id, pr_url }
fix.appliedDraft PR merged{ report_id, attempt_id, pr_url, sha }
fix.failedOrchestrator gives up after retry budget{ report_id, attempt_id, reason }
qa_story.passedA QA story run completed successfully{ story_id, title, duration_ms }
qa_story.failedA QA story run failed all assertions{ story_id, title, failure_reason }
judge.score_recordedjudge-batch records a score{ report_id, score, prompt_version }
sla.breachedA report has exceeded its severity SLA target{ report_id, severity, target_seconds, elapsed_seconds }
skill_pipeline.step.dispatchedA skill pipeline step is dispatched for execution (cloud mode){ runId, stepIndex, skillSlug, contextPacket, projectId }

Subscribing to a subset

Pass events: ['report.created', 'fix.applied'] when installing the plugin and Mushi will only dispatch those. Empty array = subscribe to everything (default for first-party plugins).

Cursor Cloud Agent events

The Cursor Cloud Agent plugin (cursor-cloud-agent) listens to report.classified, fix.requested, qa_story.failed, and skill_pipeline.step.dispatched. When these fire, it dispatches a Cursor Cloud Agent run instead of a standard outbound webhook — no webhookUrl is required.

For skill_pipeline.step.dispatched, Mushi dispatches to the Cursor Cloud Agent even when the cursor-cloud-agent marketplace plugin is not installed — credentials are read from Integrations → Cursor Cloud (project_settings.cursor_api_key_ref). This fan-out is in addition to any other plugin (Discord, Teams, custom webhook) subscribed to the same event.

See Admin → Marketplace for installation and configuration.

Last updated on