Skip to content

Adapters

Every adapter is opt-in: it’s only added to a collector run when its credentials are present. A fresh clone with nothing but a project config still runs the HTTP-health adapter alone.

AdapterCollectsCredentialsMinimum permissions
HTTP healthPublic URL up/down, response timeNone (just the project’s public URL)
AmplifyDeploy status, branch, latest buildAWS access key/secret, regionRead-only Amplify access
AWS Cost ExplorerAccount-level month-to-date / last-month cost per AWS serviceAWS access key/secret, regionRead-only Cost Explorer access
Supabase project healthReachability of the hub’s own project or a watched app’sSupabase project URL + service-role keyProject-scoped service-role key
Watched-app Supabase aggregateCount-only aggregate stats from a custom RPCApp’s Supabase URL, anon key, service-role key, RPC nameService-role key (count-only RPC — never raw reads)
ResendSending-domain verification statusResend API keyRead-only API key
OpenAI usageToken totals, request counts, cached tokens, spend by key/modelOpenAI admin API keyAdmin key (required by usage endpoints)
GitHub ActionsWorkflow run counts, latest status, trigger type, branch, durationRepo owner/repo mapping + read tokenActions: read
Cloudflare domainsZone status, DNS record counts, apex/www/MX, registrar expiryCloudflare API token, optional account IDRead-only token scoped to zones/DNS

Probes your project’s public URL. No credentials needed — just set publicUrl in the project config. Optionally override with resources.healthCheckUrl when the public URL is behind Cloudflare Bot Fight Mode.

Custom headers (HTTP_HEALTH_CHECK_HEADER_NAME / HTTP_HEALTH_CHECK_HEADER_VALUE) can be sent to work around Super Bot Fight Mode (Pro plan) via a WAF Skip rule. Free-plan Bot Fight Mode cannot be bypassed this way — use a non-Cloudflare URL for the health check instead.

Reads deploy status from AWS Amplify. Requires an IAM user or role with read-only access to Amplify. Config fields: resources.amplifyAppId, resources.amplifyBranchName, region via AWS_REGION.

Collects account-level month-to-date and last-month costs broken down by AWS service. Costs stay account-level (project_id null) — the dashboard does not guess per-project splits.

Checks reachability of a Supabase project. For the hub’s own project, set "hubSupabase": true in config. For a watched app, provide its project URL and service-role key.

Calls a count-only aggregate RPC that you define in the watched app’s own Supabase project. See docs/examples/app-aggregate-rpc.sql in the repo for an example RPC. The collector never reads raw tables — only the RPC’s aggregate output.

Checks sending-domain verification status. Delivery counts are planned but not yet collected.

Collects token totals, request counts, cached-token counts, and spend by API key and model. Requires an admin API key. Optional apiKeyLabels in config provide display names for key IDs.

Collects workflow run counts, latest status/conclusion, trigger type, branch, and duration totals. Uses the built-in GITHUB_TOKEN for the collector’s own repo; private cross-repo collection needs a PAT with Actions read access. Runtime minutes are derived from run durations, not GitHub billing endpoints.

Collects zone status, DNS record counts, apex/www/MX presence, proxied record counts, registrar name, and expiration days. Domain groups may omit projectSlug to stay account-level. Account ID enables registrar expiration lookup when available.