Crawly is a Flask-based issue detection and autofix dashboard. It scans repositories, creates issues, generates code fixes, and can connect to GitHub or GitLab workflows.
- Scans repositories for code issues
- Creates and tracks issues in the dashboard
- Generates fixes with the configured AI provider
- Supports GitHub OAuth and optional GitHub App bot identity
- Supports GitLab repositories and webhook-driven processing
- Runs background work with Celery or the built-in scheduler paths
- Python 3.11+ recommended
- Conda environment named
crawlyor another Python environment with the project dependencies installed - PostgreSQL
- Redis for Celery/background tasks
- Ollama if you use the default local AI provider
- GitHub OAuth app credentials
- Optional: GitHub App credentials for bot-created issues and PRs
- Optional: GitLab OAuth/app credentials if you use GitLab
- Create and activate the Python environment.
conda activate crawly- Install dependencies.
python -m pip install -r requirements.txt-
Copy
.env.exampleto.envand fill in the values you need. -
Make sure PostgreSQL, Redis, and Ollama are running if you use those features.
Start with .env.example. The template contains placeholders only and no credentials.
Common values you usually need to set in .env:
GITHUB_CLIENT_IDGITHUB_CLIENT_SECRETFLASK_SECRET_KEYDATABASE_URLREDIS_URLAI_PROVIDEROLLAMA_API_URLandOLLAMA_MODELif you use Ollama
Optional values:
GITHUB_APP_IDGITHUB_APP_PRIVATE_KEY_PATHGITHUB_APP_INSTALLATION_IDGITLAB_CLIENT_IDGITLAB_CLIENT_SECRETGITLAB_URLGITLAB_WEBHOOK_SECRET
Start the dashboard:
conda activate crawly
python run.pyThe app defaults to:
- Dashboard:
http://127.0.0.1:5000
The startup script will:
- Load environment variables from
.env - Check Ollama if
AI_PROVIDER=ollama - Start background schedulers
- Launch the Flask-SocketIO dashboard
If you use Celery, start the worker in a second terminal:
conda activate crawly
python run_worker.pyOn Windows, the worker uses the solo pool so it can run without extra multiprocessing setup.
- Log in through GitHub OAuth.
- Add one or more repositories in the dashboard.
- Run a crawl or let the scheduled tasks process repositories.
- Open the Issues page to review generated issues.
- Use the issue actions to:
- Create Fix
- Generate Fix
- Close Issue
- Delete Issue
The Issues page shows created issues from your connected repositories. Depending on the issue metadata, the page can show:
Create Fixto request a code-fix record and generate the fixGenerate Fixto run the on-demand fix flow when file and line context existsCloseto close the issue on the remote platformDeleteto remove the issue on the remote platform
- Go to GitHub Developer Settings.
- Create an OAuth app.
- Set the callback/redirect URL used by your deployment.
- Place the client ID and secret in
.env.
If you want Crawly to act as a bot for issue and PR actions:
- Create a GitHub App.
- Generate a private key.
- Install the app on the target repositories.
- Set these values in
.env:GITHUB_APP_IDGITHUB_APP_PRIVATE_KEY_PATHGITHUB_APP_INSTALLATION_ID
If these are blank, Crawly falls back to user OAuth behavior.
For GitLab repositories, set the GitLab OAuth/webhook values in .env and make sure the repositories are linked in the dashboard.
The default AI provider is Ollama.
Example local settings:
AI_PROVIDER=ollama
OLLAMA_API_URL=http://127.0.0.1:11434
OLLAMA_MODEL=llama3.2
AI_MODEL=llama3.2- If the dashboard does not start, verify
.envvalues and database connectivity. - If
Create Fixdoes nothing, check the server logs and confirm the repository has file and line context for the issue. - If Ollama is unavailable, start it with
ollama serveor switchAI_PROVIDER. - If background tasks are not running, confirm Redis and
run_worker.pyare active.
run.pyis the dashboard entry point.run_worker.pyis the Celery worker entry point..env.exampleintentionally contains no secrets so it is safe to commit.