This guide walks you through installing, configuring, and using echidnabot for your repositories.
- A repository on GitHub, GitLab, or Bitbucket
- Proof files in a supported format (Coq, Lean, Agda, etc.)
- Either:
- Access to an ECHIDNA Core instance, or
- Local installation of theorem provers
cargo install echidnabotgit clone https://github.com/hyperpolymath/echidnabot
cd echidnabot
cargo build --release
sudo cp target/release/echidnabot /usr/local/bin/guix install echidnabotpodman pull ghcr.io/hyperpolymath/echidnabot:latest
podman run -p 8080:8080 ghcr.io/hyperpolymath/echidnabot:latestCreate echidnabot.toml in your repository root:
[repository]
platform = "github"
owner = "your-org"
name = "your-repo"
[provers]
enabled = ["coq", "lean4"]
[echidna]
# Use public instance or self-host
endpoint = "https://echidna.hyperpolymath.dev/graphql"- Go to Settings → Webhooks → Add webhook
- Payload URL:
https://your-echidnabot-instance/webhooks/github - Content type:
application/json - Secret: Generate and save securely
- Events: Select Pushes and Pull requests
- Go to Settings → Webhooks
- URL:
https://your-echidnabot-instance/webhooks/gitlab - Secret token: Generate and save
- Triggers: Push events, Merge request events
Push a commit with a proof file:
# Create a simple Coq proof
cat > test.v << 'EOF'
Theorem plus_comm : forall n m : nat, n + m = m + n.
Proof.
intros n m.
induction n.
- simpl. rewrite <- plus_n_O. reflexivity.
- simpl. rewrite IHn. rewrite plus_n_Sm. reflexivity.
Qed.
EOF
git add test.v
git commit -m "Add commutativity proof"
git pushCheck your PR or commit status — you should see echidnabot verification results!
[repository]
platform = "github" # github, gitlab, bitbucket, codeberg
owner = "org-name"
name = "repo-name"
default_branch = "main"[provers]
enabled = ["coq", "lean4", "agda", "z3"]
[provers.coq]
timeout = 120
flags = ["-R", ".", "MyProject"]
[provers.lean4]
lake = true # Use lake build system
[provers.agda]
flags = ["--safe"][files]
include = [
"src/**/*.v",
"proofs/**/*.lean",
"specs/**/*.agda"
]
exclude = [
"vendor/**",
"test/fixtures/**"
][autocheck]
on_push = true
on_pull_request = true
branches = ["main", "develop"]
require_passing = true # Block merge on failureechidnabot can operate in different modes:
| Mode | Behavior |
|---|---|
verifier |
Silent pass/fail, minimal output |
advisor |
Suggestions on failing proofs |
consultant |
Answers questions about proof state |
regulator |
Blocks merges on proof failures |
Set the mode in configuration:
[bot]
mode = "advisor"# Start webhook server
echidnabot serve --port 8080
# Register a repository
echidnabot register --platform github --repo owner/name
# Manually trigger verification
echidnabot check --commit HEAD
# Check status
echidnabot status --repo owner/name
# List available provers
echidnabot provers list| Variable | Description |
|---|---|
ECHIDNABOT_CONFIG |
Path to config file |
ECHIDNABOT_DATABASE_URL |
Database connection string |
ECHIDNABOT_ECHIDNA_ENDPOINT |
ECHIDNA Core GraphQL URL |
GITHUB_WEBHOOK_SECRET |
GitHub webhook secret |
GITLAB_TOKEN |
GitLab access token |
- [[Configuration Reference]] — Full configuration options
- [[Supported Provers]] — Prover-specific setup
- [[Platform Integration]] — Detailed platform guides
- [[Troubleshooting]] — Common issues