Everything you need to get started with Evolution Engine.
pip install evolution-engine
cd your-repo
evo analyze .
EE auto-detects your tools (git history, lockfiles, CI configs) and runs the full 5-phase pipeline: events, signals, explanations, patterns, and advisory.
evo sources .
Shows connected adapters and tools detected in your repo that could provide additional signals.
evo analyze . --token ghp_your_github_token
EE supports three integration paths. Start with the CLI, graduate to hooks when you trust the output, and add the GitHub Action for team-wide coverage.
Path 1: CLI Path 2: Git Hooks Path 3: GitHub Action
evo analyze . --> evo init --path hooks --> evo init --path action
(manual) (every commit) (every PR)
Already covered above. Run evo analyze . whenever you want to check on your repo.
Git hooks run analysis on every commit or push automatically. The hook runs in the background and never blocks your commit.
# Set up in one command
evo init . --path hooks
# Or install hooks directly
evo hooks install .
# Use pre-push instead of post-commit
evo hooks install . --trigger pre-push
When the hook detects significant changes, it:
Customize hook behavior with evo config set:
# Only notify on critical findings (default: concern)
evo config set hooks.min_severity critical
# Disable desktop notifications
evo config set hooks.notify false
# Disable auto-opening the report
evo config set hooks.auto_open false
# Run hook synchronously (blocks until analysis completes)
evo config set hooks.background false
# Only analyze specific families
evo config set hooks.families "git,ci"
All hook settings:
hooks.trigger — post-commit (default) or pre-pushhooks.min_severity — Notification threshold: info, watch, concern (default), criticalhooks.notify — Desktop notifications (default: true)hooks.auto_open — Open report in browser (default: true)hooks.background — Non-blocking execution (default: true)hooks.families — Filter families (default: auto-detect all)# Check hook status
evo hooks status .
# Remove hooks
evo hooks uninstall .
For repos where git hooks aren't practical, use the commit watcher:
# Foreground mode (Ctrl+C to stop)
evo watch .
# Background daemon
evo watch . --daemon
evo watch . --status
evo watch . --stop
Add Evolution Engine to your pull request workflow. Every PR gets an analysis comment with risk badges.
# Generate workflow file
evo init . --path action
This creates .github/workflows/evolution.yml. The action:
evo analyze on every PR# Sample workflow (generated by evo init)
- uses: evolution-engine/analyze@v1
with:
comment: true # Risk summary on PR
investigate: true # AI investigation on High/Critical
suggest-fixes: true # Inline fix suggestions
validate-on-push: true # Compare on subsequent pushes
All three paths work together. Use hooks for instant local feedback, the Action for team-wide PR coverage, and the CLI for ad-hoc deep dives. Run evo init . --path all to set up everything at once.
evo analyze [path] — Run the full pipeline (detect adapters, compute signals, generate advisory)evo sources [path] — Show connected and detected data sourcesevo sources --what-if datadog — Estimate impact of adding an adapterevo status [path] — Show detected adapters and last run infoevo report [path] — Generate an HTML reportevo investigate [path] — AI investigation of advisory findingsevo investigate . --show-prompt — Print the prompt for manual useevo fix [path] — AI fix loop (iterate until advisory clears)evo fix . --dry-run — Preview fix prompt without modifying filesevo adapter list — List detected adapters with trust badgesevo adapter discover [path] — Find available adapters for tools in your repoevo adapter new <name> --family ci — Scaffold a new adapter packageevo adapter validate <path> — Validate an adapter against the contractevo adapter validate <path> --security — Validate + security scanevo adapter security-check <target> — Standalone security scanevo adapter guide — Show the full adapter building guideevo adapter prompt <name> --family ci — Generate an AI prompt to build an adapterevo adapter block <name> -r "reason" — Block an adapter locallyevo adapter unblock <name> — Unblock a blocked adapterevo adapter check-updates — Check PyPI for plugin updatesevo adapter report <name> — Report a broken/malicious adapterevo notifications list — Show pending update notificationsevo notifications dismiss — Dismiss all notificationsevo notifications check [path] — Force a notification check (ignores 24h cache)evo patterns list — Show patterns in the knowledge baseevo patterns packages — List pattern packages and cache statusevo patterns new <name> — Scaffold a new pattern packageevo patterns validate <path> — Validate a pattern packageevo patterns publish <path> — Publish pattern package to PyPIevo patterns add <package> — Subscribe to a pattern packageevo patterns remove <package> — Unsubscribe from a pattern packageevo patterns block <name> — Block a pattern packageevo patterns unblock <name> — Unblock a pattern packageevo patterns pull [path] — Fetch community patterns from the registryevo patterns push [path] — Share anonymized patterns (requires privacy_level ≥ 1)evo patterns export — Export anonymized pattern digestsevo patterns import <file> — Import community patternsevo history list [path] — Show past run snapshotsevo history show <run> — View a specific run's advisoryevo history diff [r1 r2] — Compare two runsevo history clean --keep N — Delete old snapshotsEvery adapter is assigned a trust badge automatically:
Adapters can be blocked locally (evo adapter block) or globally via the bundled blocklist. Use evo adapter report to flag broken or malicious adapters.
evo init [path] --path cli|hooks|action|all — Guided project setupevo hooks install [path] — Install git hooks for auto-analysisevo hooks uninstall [path] — Remove git hooksevo hooks status [path] — Show hook installation status and configevo watch [path] — Poll for new commits (foreground)evo watch [path] --daemon — Background commit watcherevo setup [path] — Interactive setup assistantevo setup --ui — Open settings page in browserevo config list — Show all settingsevo config set <key> <value> — Set a config valueevo license status — Show current license tierevo license activate <key> — Activate a Pro licenseevo telemetry on|off|status — Manage anonymous usage telemetryEE includes a lightweight notification system that keeps you informed about available adapters, updates, and community patterns. All checks are privacy-respecting — they only read public PyPI metadata and never send data from your machine.
EE scans your repo for known tools (via config files, lockfiles, and import statements) and checks PyPI for matching adapter packages:
evo adapter discover .
# Available adapters (install via pip):
# evo-adapter-datadog v1.0.0 ← Datadog (monitoring)
# evo-adapter-sentry v0.2.0 ← Sentry (error_tracking)
#
# Not yet on PyPI (build your own?):
# evo-adapter-pagerduty ← PagerDuty (incidents)
# Scaffold: evo adapter new pagerduty --family incidents
After evo analyze completes, EE checks for adapter updates and new adapters matching detected tools. Notifications appear at the end of the output:
# After evo analyze output:
Notifications:
Update available: evo-adapter-jenkins 0.1.0 → 0.2.0
Adapter available: evo-adapter-datadog v1.0.0 (detected Datadog in repo)
Run `evo notifications dismiss` to clear.
Manage notifications with:
evo notifications list # View all pending
evo notifications dismiss # Clear all
evo notifications check . # Force check now
Patterns accumulate organically as users analyze repos and share discoveries. EE distributes community patterns through two redundant channels:
evo analyzepip installIf the registry is unavailable, PyPI packages still work. Both channels are checked automatically.
The canonical community pattern package is evo-patterns-community, published using CalVer (e.g. 2026.2.15). It contains aggregated patterns from the community registry and is auto-fetched on every evo analyze.
Pattern packages are pip packages on PyPI containing pure data (no executable code). EE downloads the wheel directly, extracts patterns.json, validates it, and imports relevant patterns automatically — no pip install required.
# Auto-fetch happens on every evo analyze
evo analyze .
# Imported 25 pattern(s) from community registry
# Imported 25 pattern(s) from community packages
# Add a third-party pattern package
evo patterns add evo-patterns-web-security
# Build your own
evo patterns new my-patterns
evo patterns validate evo-patterns-my-patterns
evo patterns publish evo-patterns-my-patterns
Pattern packages are cached at ~/.evo/pattern_cache.json with a 24-hour TTL. Only patterns matching your locally-detected families are imported.
Share your anonymized patterns with the community and pull patterns from others:
# Pull community patterns (always allowed)
evo patterns pull .
# Share your patterns (requires opt-in)
evo config set sync.privacy_level 2
evo patterns push .
The registry (codequal.dev/api/patterns) validates all submissions server-side. Patterns require attestations from 2+ independent instances before they are fully trusted.
Block unwanted pattern packages from being imported:
# Block a package
evo patterns block evo-patterns-untrusted
# Unblock
evo patterns unblock evo-patterns-untrusted
Blocked packages are stored at ~/.evo/pattern_blocklist.json. A bundled blocklist ships with EE for known-bad packages.
All update and notification behavior is configurable:
adapter.check_updates — Enable/disable update notifications (default: true)sync.auto_pull — Auto-pull community patterns on analyze (default: false)sync.privacy_level — Pattern sharing level: 0=off, 1=metadata, 2=anonymized digests (default: 0)sync.registry_url — Pattern registry endpoint (default: https://codequal.dev/api)Set DO_NOT_TRACK=1 in your environment to disable all network checks.
How PyPI discovery works: EE queries the public PyPI JSON API (https://pypi.org/pypi/{package}/json) using Python's stdlib urllib.request. No API keys or authentication needed. Results are cached for 24 hours at ~/.evo/version_cache.json.
Adapters read from external data sources and feed events into the Evolution Engine pipeline. Each adapter produces events that EE processes through its 5-phase analysis. You can build an adapter for any tool — CI systems, monitoring platforms, issue trackers, deployment tools, etc.
Adapters you build and submit are reviewed by the EE team and, if approved, bundled for all users in future releases.
Use the built-in scaffold tool to create a ready-to-publish pip package:
evo adapter new jenkins --family ci
This creates a package directory with:
evo_jenkins/adapter.py — Your adapter class (fill in the logic)pyproject.toml — Package metadata with the EE plugin entry pointtests/ — Test scaffoldingREADME.md — Documentation templateYour adapter must implement the Adapter Contract. The key method is fetch_events(), which yields event dicts:
class JenkinsAdapter:
FAMILY = "ci"
ADAPTER_NAME = "jenkins"
def __init__(self, repo_path, **kwargs):
self.repo_path = repo_path
self.url = kwargs.get("url", "http://localhost:8080")
def detect(self):
"""Return True if this adapter's data source is available."""
# Check for Jenkinsfile, .jenkins config, etc.
return (Path(self.repo_path) / "Jenkinsfile").exists()
def fetch_events(self, since=None, limit=100):
"""Yield event dicts from the data source."""
for build in self._get_builds(since, limit):
yield {
"event_type": "ci_run",
"source_type": "jenkins",
"timestamp": build["timestamp"],
"payload": {
"run_id": build["number"],
"status": build["result"],
"duration_seconds": build["duration"] / 1000,
"trigger": {
"commit_sha": build.get("commit", ""),
},
},
}
# Install your adapter in development mode
cd evo-adapter-jenkins
pip install -e .
# Verify it passes the contract + security scan
evo adapter validate evo_jenkins.JenkinsAdapter --security
# Or run security scan separately
evo adapter security-check evo_jenkins
# Run EE — your adapter will be auto-detected
evo analyze /path/to/repo-with-jenkinsfile
# Build the package
pip install build
python -m build
# Upload to PyPI
pip install twine
twine upload dist/*
Once published, anyone can install it with pip install evo-adapter-jenkins and EE will auto-detect it via the plugin entry point.
Generate a complete prompt for your AI coding assistant:
evo adapter prompt jenkins --family ci -d "Fetch builds from Jenkins REST API"
This produces a detailed prompt with the full adapter contract, examples, and a validation checklist. Paste it into Claude, ChatGPT, Cursor, or any AI tool.
Every adapter must satisfy these requirements to pass evo adapter validate:
FAMILY — One of: ci, testing, dependency, schema, deployment, config, securityADAPTER_NAME — Unique identifier (e.g. "jenkins", "datadog")__init__(self, repo_path, **kwargs) — Constructor. Must accept repo_path as first argument.detect(self) -> bool — Returns True if this adapter's data source is available in the repo.fetch_events(self, since=None, limit=100) -> Iterator[dict] — Yields event dicts.{
"event_type": str, # e.g. "ci_run", "deploy", "alert"
"source_type": str, # matches ADAPTER_NAME
"timestamp": str, # ISO 8601 format
"payload": {
# Family-specific fields
"trigger": {
"commit_sha": str # Git commit that triggered this event
}
}
}
In your pyproject.toml, register the entry point so EE can auto-discover your adapter:
[project.entry-points."evolution.adapters"]
jenkins = "evo_jenkins.adapter:JenkinsAdapter"
Once your adapter passes validation and is published on PyPI:
evo adapter validate passes with no errorsAccepted adapters get a "Community" badge in the adapter catalog and credit in the release notes.