Skip to main content

Error Reporting

When your bot module (or any extension) throws errors in production, Lumio collects anonymized error reports and makes them available in the developer dashboard. You get full visibility into what went wrong without accessing any personally identifiable information from the accounts that have your extension installed.

What you can see

The developer error dashboard shows:

DataVisibleExample
Error messageYes (sanitized)TypeError: Cannot read property 'balance' of null
Stack traceYesat points (server/functions.ts:5:42)
Handler nameYespoints
Trigger typeYescommand
PlatformYestwitch
Extension versionYes1.2.0
Sanitized argumentsYes["100"]
Config key namesYes[pointsPerMessage, gamblingEnabled]
User roleYessubscriber
Execution timeYes12ms
Occurrence countYes34
Affected install countYes3 of 150
Anonymous account hashYesanon_a1b2c3
Anonymous install hashYesanon_d4e5f6

What you cannot see

DataWhy
Account IDHMAC-hashed, not reversible
Install IDHMAC-hashed, not reversible
User IDStripped entirely, never stored
Username / display nameStripped entirely
Channel nameStripped entirely
IP addressNever collected
Chat message contentStripped entirely
Config valuesMasked to *
Platform message IDStripped entirely

Anonymization details

HMAC account hashing

Account and install IDs are hashed using HMAC-SHA256 with a per-extension salt (auto-generated, not accessible to you). The resulting anon_* hashes are:

  • Consistent — the same account always produces the same hash, so you can group errors by account
  • Not reversible — you cannot determine which account generated the error
  • Per-extension — different extensions produce different hashes for the same account

Error message sanitization

Error messages are sanitized before storage:

  • UUIDs matching [0-9a-f]{8}-... are replaced with [UUID]
  • @username mentions are replaced with [USER]
  • URLs containing tokens or auth parameters are replaced with [URL]
  • Strings longer than 50 characters in args are truncated

Config value masking

Config key names are visible (you defined them in config_schema), but all values are masked to *. This prevents accidental PII exposure from free-text config fields.

Error grouping

Errors are grouped by a hash of handler + sanitized_error_message + first_line_of_stack. The same error from different accounts and users groups under one entry, with occurrence counts and affected install counts.

Using error reports for debugging

Identifying account-specific issues

The anon_account hash lets you see error distribution:

Error: TypeError: Cannot read property 'balance' of null
Occurrences: 34
anon_account anon_a1b2c3: 28 hits
anon_account anon_x7y8z9: 4 hits
anon_account anon_m3n4o5: 2 hits

28 of 34 errors from the same anonymous account suggests a config-specific issue — perhaps that account has an unusual config combination.

Identifying platform-specific issues

Filter by platform to see if an error only occurs on a specific chat platform.

Identifying version-specific issues

The version field shows when an error was introduced. If errors spike after a version release, you can quickly identify the regression.

Identifying role-specific issues

The user role field (subscriber, moderator, etc.) can reveal issues that only affect certain permission levels.

Retention

Error reports are retained for 30 days, then automatically deleted.

Account owner view

Accounts that have your extension installed see their own errors and logs — not anonymized, since it is their own data. This is separate from the developer view:

ViewWho sees itAnonymized?Scope
Developer Error DashboardExtension developerYesAll installs, all accounts
Account Install LogsAccount ownerNo (own data)Only this account's install

Account owners see their own usernames, chat content, and config values. Extension secrets and API keys are always masked regardless of viewer.

Accessing error reports

Developer dashboard

Navigate to your extension in the developer dashboard and open the Errors tab.

CLI

lumio logs --level error

API

Error reports are available via the REST API:

GET /v1/developer/extensions/{extension_id}/errors?since=2026-05-19T00:00:00Z&handler=points

This endpoint requires the feature:extension_development feature flag and extension ownership verification.