- name: Security Quality Gate run: | #!/bin/bash set -e RESULTS_DIR="esprit_runs/$(ls -t esprit_runs | head -1)" VULNS_FILE="$RESULTS_DIR/vulnerabilities.json" if [ ! -f "$VULNS_FILE" ]; then echo "No vulnerabilities file found" exit 0 fi CRITICAL=$(jq '[.[] | select(.severity=="critical")] | length' "$VULNS_FILE") HIGH=$(jq '[.[] | select(.severity=="high")] | length' "$VULNS_FILE") echo "Found $CRITICAL critical and $HIGH high severity vulnerabilities" # Fail on any critical if [ $CRITICAL -gt 0 ]; then echo "❌ FAIL: Critical vulnerabilities found" exit 1 fi # Fail on more than 5 high severity if [ $HIGH -gt 5 ]; then echo "❌ FAIL: Too many high severity vulnerabilities ($HIGH > 5)" exit 1 fi echo "✅ PASS: Security quality gate passed"
# Store token as secretexport ESPRIT_TOKEN="your-subscription-token"# Login non-interactivelyecho "$ESPRIT_TOKEN" | esprit provider login esprit# Set modelexport ESPRIT_LLM="esprit/claude-4.5-sonnet"
# Configure via environment variablesexport ESPRIT_LLM="openai/gpt-5"export LLM_API_KEY="sk-..."# Or use provider-specific variablesexport OPENAI_API_KEY="sk-..."export ESPRIT_LLM="openai/gpt-5"
# Public models (no auth required)export ESPRIT_LLM="opencode/kimi-k2.5-free"# Or with API key for premium modelsexport OPENCODE_API_KEY="oc_..."export ESPRIT_LLM="opencode/gpt-5-pro"
# OAuth login (interactive - do once)esprit provider login antigravity# Use in CI with stored credentialsexport ESPRIT_LLM="antigravity/gpt-5-mini"
From esprit/interface/main.py:590-730, non-interactive mode auto-selects configuration:
if non_interactive: # Auto-select the first available model in non-interactive mode selected_model = available_models[0][0] os.environ["ESPRIT_LLM"] = selected_model Config.save_current() current_model = selected_model console.print(f"[dim]Auto-selected model: {current_model}[/]")
In non-interactive mode, Esprit automatically selects the first available model if none is configured.
# Ensure Docker socket is mountedvolumes: - /var/run/docker.sock:/var/run/docker.sock# Or use Docker-in-Dockerservices: - docker:dindenvironment: DOCKER_HOST: tcp://docker:2375
If provider login fails:
# Verify environment variablesecho "ESPRIT_LLM: $ESPRIT_LLM"echo "LLM_API_KEY: ${LLM_API_KEY:0:10}..."# Test provider connectivityesprit provider status# Use direct API key as fallbackexport LLM_API_KEY="$BACKUP_API_KEY"
If scans time out in CI:
# Use quick mode for CIesprit scan . --scan-mode quick# Or increase timeout (if pipeline allows)timeout 30m esprit scan . --scan-mode standard# Split large repos into multiple targetsesprit scan ./service-a ./service-b ./service-c
If results directory is empty:
# Check logscat esprit_runs/*/logs/main.log# Verify Docker is runningdocker ps# Check disk spacedf -h# Run with verbose outputesprit scan . -n 2>&1 | tee scan.log