This guide covers common issues and their solutions when using Visor.
For in-depth debugging techniques including JavaScript expression debugging, Liquid template inspection, and OpenTelemetry tracing, see the Debugging Guide.
# Enable debug mode for detailed output
visor --check all --debug
# Validate configuration before running
visor validate --config .visor.yamlSymptoms: Visor runs but uses default configuration instead of your custom config.
Solutions:
- Ensure your config file is named
.visor.yaml(with leading dot) in the project root - Explicitly specify the config path:
visor --config path/to/.visor.yaml - Check for YAML syntax errors:
visor validate --config .visor.yaml
Symptoms: PR comments work but GitHub Check runs are missing.
Solutions:
- Verify workflow permissions include
checks: write:permissions: contents: read pull-requests: write issues: write checks: write
- For fork PRs, check runs require
pull_request_targettrigger - see Fork PR Support - Ensure
create-check: 'true'in action inputs (default) - Check action logs for permission errors (403)
Symptoms: Check runs exist but no inline annotations on PR files.
Solutions:
- Confirm the check uses
schema: code-review - Ensure issues include
fileandlineproperties - Verify the file paths match the PR diff (relative paths from repo root)
Symptoms: Checks fail with API errors or return no results.
Solutions:
- Verify API key is set correctly:
GOOGLE_API_KEYfor GeminiANTHROPIC_API_KEYfor ClaudeOPENAI_API_KEYfor OpenAI
- Check API key permissions and quotas
- Enable debug mode to see full API responses:
--debug - For rate limiting, reduce
--max-parallelismor add delays between checks
Symptoms: Resource not accessible by integration errors for fork PRs.
Cause: GitHub restricts write permissions for workflows triggered by fork PRs.
Solutions:
- Accept comment-only mode: Visor automatically falls back to PR comments
- Enable full fork support: Use
pull_request_targettrigger (see GITHUB_CHECKS.md)
Symptoms: Configuration fails to load remote URLs in extends field.
Solutions:
- Allow specific URL patterns:
--allowed-remote-patterns "https://github.com/,https://raw.githubusercontent.com/" - Or disable remote extends entirely:
--no-remote-extends - Check network connectivity and URL accessibility
Symptoms: Checks fail with timeout messages.
Solutions:
- Increase timeout:
--timeout 300000(5 minutes in ms) - Reduce check complexity or split into smaller checks
- Check for slow network or API responses
- See Timeouts Guide for detailed configuration
Symptoms: outputs is undefined or Cannot read property errors.
Solutions:
- Ensure
depends_onis set for checks that need outputs from other checks:steps: my-check: type: command depends_on: [previous-check] # Required to access outputs exec: echo "{{ outputs['previous-check'] }}"
- Use optional chaining for safe access:
outputs?.['check-name']?.property - Debug output structure with the
log()function - see Debugging Guide
Symptoms: Check with forEach: true runs once instead of iterating.
Solutions:
- Ensure the output is an array (not a single object)
- Use
transform_jsto convert output to array format if needed - Debug with
log()to inspect the actual output structure
Required permissions for full functionality:
permissions:
contents: read # Read repository content
pull-requests: write # Post PR comments
issues: write # Post issue comments
checks: write # Create check runs and annotations| Variable | Purpose |
|---|---|
VISOR_TELEMETRY_ENABLED |
Enable OpenTelemetry tracing |
VISOR_TELEMETRY_SINK |
Trace output: file, otlp, or console |
DEBUG=1 or VERBOSE=1 |
Enable verbose internal logging |
VISOR_NOBROWSER=true |
Skip auto-opening browser (CI/headless) |
Different verbosity levels for troubleshooting:
# Standard verbose mode
visor --check all --verbose
# Full debug mode (includes AI interactions)
visor --check all --debug
# Debug mode in GitHub Action
- uses: probelabs/visor@v1
with:
debug: 'true'Always validate your configuration before running:
# Validate config syntax and schema
visor validate --config .visor.yaml
# Test locally with a specific check
visor --check security --config .visor.yaml --output table- Debugging Guide - Comprehensive debugging techniques
- Configuration Reference - Full configuration options
- GitHub Checks Integration - Check runs and annotations
- Telemetry Setup - OpenTelemetry tracing
- Timeouts Guide - Timeout configuration