
Configuration
Drop a skene.config.json at the repo root. Skene reads it on every run.
Minimal config
{
"libraries": ["posthog", "mixpanel"],
"include": ["src/**/*.ts", "src/**/*.tsx"],
"ignore": ["**/*.test.ts", "**/*.spec.ts"]
}
libraries: which analytics libraries to track. Defaults to all supported.include: glob patterns Skene scans. Defaults to common source globs.ignore: glob patterns Skene skips. Defaults to test and build outputs.
Accept an intentional change
Sometimes you mean to rename an event. The next run still flags it. Acknowledge once and Skene updates the baseline on merge.
{
"accepted_changes": [
{
"from": "checkout_completed",
"to": "checkoutCompleted",
"reason": "renamed to match the new naming convention (2026-05-22)"
}
]
}
Once merged, the new event becomes the baseline. Future PRs only flag drift from there.
Environment-specific rules
Different rules per environment. Skene picks the block matching SKENE_ENV at run time.
{
"environments": {
"production": {
"ignore": ["src/dev/**", "src/scripts/**"]
},
"staging": {
"ignore": []
}
}
}
Ignoring a single call
When a specific call is intentionally excluded from validation (debug logging, internal tooling), inline-comment it.
// skene-ignore: internal debug logging
posthog.capture('dev_debug', { ... })
Skene skips the line and notes the reason on the run.
What is next
- Install Skene: pick a surface
- What Skene catches: the five failure modes
- Supported libraries: call shapes by library