echidnabot is a proof-aware CI bot that automatically verifies formal proofs in your code repositories. It integrates with GitHub, GitLab, and Bitbucket to check proofs on every push and pull request.
It's the bot interface to ECHIDNA, the theorem proving platform. Echidnas are thorough, methodical creatures — like a good proof checker.
- ECHIDNA Core — The theorem proving platform with actual prover backends
- echidnabot — The CI integration layer that connects platforms to ECHIDNA
Yes! echidnabot is open source under MPL-2.0. You can:
- Self-host your own instance
- Use the public instance at echidna.hyperpolymath.dev
- Modify and distribute under the same license
For basic verification, no. echidnabot can run provers directly in CI workflows. For advanced features (ML suggestions, caching), you'll want an ECHIDNA Core instance.
- GitHub — Full support (Check Runs, PR comments, status)
- GitLab — Full support (pipelines, MR comments)
- Bitbucket — Basic support (build status)
- Codeberg — Planned
See [[Getting Started]] for platform-specific instructions. The basic flow is:
- Add a webhook pointing to your echidnabot instance
- Set a secret for signature verification
- Select push and pull request events
Yes! Use the CLI for manual verification:
echidnabot check --commit HEADOr trigger via the GraphQL API.
Check your configuration or run:
echidnabot provers listYes, use file patterns:
[files]
include = ["src/**/*.v", "proofs/**/*.lean"]
exclude = ["test/fixtures/**"]Depends on the proof complexity. Simple proofs: seconds. Large Coq developments: minutes. Set appropriate timeouts:
[provers.coq]
timeout = 300 # 5 minutesechidnabot will:
- Mark the Check Run as failed
- Post error details with line numbers
- Optionally suggest fixes (in Advisor mode)
- Block merge (in Regulator mode)
Yes:
- Re-push the commit
- Use the GitHub Check Run "Re-run" button
- Call the API:
triggerCheck(repoId, commitSha)
Options (in priority order):
echidnabot.tomlin repository root.echidnabot.tomlin repository root~/.config/echidnabot/config.toml- Environment variables
[autocheck]
branches = ["main", "develop"]
[branches.main]
require_passing = true
mode = "regulator"
[branches.develop]
require_passing = false
mode = "advisor"[provers.coq]
flags = ["-R", "src", "MyProject", "-Q", "theories", "Theories"]- Check webhook delivery in platform settings
- Verify signature secret matches
- Check echidnabot logs for errors
- Ensure webhook URL is accessible
Ensure the prover is:
- Enabled in configuration:
enabled = ["coq", "lean4"] - Installed in the CI environment
- Available in PATH
Increase timeout in configuration:
[scheduler]
job_timeout_seconds = 600Or per-prover:
[provers.coq]
timeout = 300Check ECHIDNABOT_DATABASE_URL:
# SQLite (development)
ECHIDNABOT_DATABASE_URL="sqlite://echidnabot.db"
# PostgreSQL (production)
ECHIDNABOT_DATABASE_URL="postgres://user:pass@localhost/echidnabot"Only if using ECHIDNA Core. In local mode, provers run in your CI environment. With ECHIDNA Core, proof content is sent for verification (no storage by default).
In environment variables or encrypted configuration. Never in code or logs.
Only the files you configure. echidnabot needs read access to proof files. It never modifies your code.
Yes, for load distribution:
- Use PostgreSQL for shared state
- Point all instances to same database
- Use a load balancer for webhooks
- Implement prover in ECHIDNA Core
- Add file extension mapping
- Configure in echidnabot
Yes, use file patterns to verify only changed paths:
[files]
include = ["packages/math/**/*.v"]Default limits:
- 10MB per file
- 100 files per job
- 10 minute timeout
Override in configuration if needed.
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Wiki: You're reading it!
- Code: hyperpolymath/echidnabot