Skip to main content

AI-powered design review for KiCad schematics

Project description

                            ██████╗ ███████╗██╗   ██╗██╗      ██████╗ 
                            ██╔══██╗██╔════╝██║   ██║██║     ██╔═══██╗
                            ██████╔╝█████╗  ██║   ██║██║     ██║   ██║
                            ██╔══██╗██╔══╝  ╚██╗ ██╔╝██║     ██║   ██║
                            ██║  ██║███████╗ ╚████╔╝ ███████╗╚██████╔╝
                            ╚═╝  ╚═╝╚══════╝  ╚═══╝  ╚══════╝ ╚═════╝ 

Version Python License

Review your hardware before it reviews your wallet.

AI-powered design review for KiCad schematics

What is Revlo?

Revlo is a command-line tool that catches electrical engineering mistakes in KiCad schematics before they become expensive PCB respins. Point it at a .kicad_sch file and get back actionable findings -- missing decoupling caps, wrong pull-up values, unterminated pins, power rail issues -- all verified against real datasheet specifications pulled automatically from the internet.

Revlo is currently an alpha-stage schematic review tool. The implemented runtime focuses on KiCad schematics, datasheet enrichment, terminal-first review workflows, and interactive Ask Mode.

Features

  • KiCad 6/7/8/9 Parser -- Extracts components, nets, connectivity, power symbols, and properties from .kicad_sch files
  • Hierarchical Sub-sheet Support -- Recursively parses sub-sheets and resolves cross-sheet nets with instance-aware references
  • Ground-Truth Connectivity via kicad-cli -- Uses KiCad's exported netlist when available, with automatic fallback to parser-derived connectivity
  • Datasheet Intelligence -- Automatically fetches component datasheets, extracts specs with AI, and caches results locally
  • Comprehensive EE Review -- Revlo reviews your design across decoupling, pull-ups, unused pins, reset circuits, clock/oscillator, signal integrity, power rails, grounding, ESD, and thermal concerns
  • Confidence-Scored Findings -- Every finding includes a 0.0-1.0 confidence score so you can prioritize what matters
  • Interactive TUI Browser -- Browse and filter findings in a full-screen terminal UI with severity highlighting
  • Ask Mode -- Interactive chat with live access to your schematic via built-in tools
  • Deterministic Rule Engine -- Built-in checks for power connectivity, decoupling, I2C pull-ups, library hygiene, and BOM coverage run without LLM calls
  • Custom Rule Packs -- Project-local JSON rule packs execute alongside built-in checks with additive or override modes
  • Review Profiles -- Built-in profiles (generic, MCU board, sensor node, power supply) tune prompts and severity weighting
  • Baseline & Waiver Tracking -- Save baselines, classify findings as new/existing/waived/resolved across reviews
  • Schematic Diff Review -- Compare two schematic revisions and tag change-driven findings
  • CI Integration -- Non-interactive check command with severity/category thresholds and versioned JSON policy output
  • Sign-Off Reports -- Export stakeholder-ready packets that separate unresolved issues from accepted risk
  • Investigation Mode -- Focus Ask Mode on a specific finding with expanded tools: decoupling, power tree, reset chain, boot straps, interface bundles, and constraint analysis
  • Branded CLI Output -- Progress bars, colour-coded severity cards, and a summary line at a glance
  • Review History -- Every review and conversation is saved automatically; re-open past reviews without re-running
  • JSON & Markdown Export -- Pipe structured output into your CI/CD pipeline or generate human-readable reports

Quick Start

Install

pip install revlo-cli

Or with uv:

uv tool install revlo-cli

First Review

export OPENAI_API_KEY="sk-proj-..."
revlo review path/to/schematic.kicad_sch

That's it. Revlo parses the schematic, fetches datasheets, runs the AI review, and launches the interactive TUI.

Requirements

  • Python 3.11+
  • An OPENAI_API_KEY (default provider) or ANTHROPIC_API_KEY for review and datasheet extraction
  • KiCad schematic in modern .kicad_sch format

Optional:

  • kicad-cli installed for more accurate net connectivity
  • MOUSER_API_KEY and FARNELL_API_KEY for broader automatic datasheet lookup

Configuration

Revlo reads configuration from a revlo.toml file in the project directory (or any parent). The file is optional -- all settings have sensible defaults.

[llm]
provider = "openai"           # "openai" (default) or "anthropic"
review_model = "gpt-5.4"      # Override the review model
extraction_model = "gpt-5.3"  # Override the datasheet extraction model
ask_model = "gpt-5.4"         # Override the Ask Mode model
datasheet_concurrency = 4     # Max concurrent datasheet fetches

[review]
profile = "generic"           # "generic", "mcu-board", "sensor-node", "power-supply"

You can also set the provider via environment variable:

export REVLO_LLM_PROVIDER="anthropic"   # Switch to Anthropic
export REVLO_REVIEW_MODEL="claude-opus-4-6"  # Override model

Example Output

CLI Progress

██████╗ ███████╗██╗   ██╗██╗      ██████╗
██╔══██╗██╔════╝██║   ██║██║     ██╔═══██╗
██████╔╝█████╗  ██║   ██║██║     ██║   ██║
██╔══██╗██╔══╝  ╚██╗ ██╔╝██║     ██║   ██║
██║  ██║███████╗ ╚████╔╝ ███████╗╚██████╔╝
╚═╝  ╚═╝╚══════╝  ╚═══╝  ╚══════╝ ╚═════╝ v0.1
AI-powered design review for KiCad schematics

■ Parsing schematic...
■ Found 47 components, 38 nets
■ Fetching datasheets... ████████████████████⢕⢕⢕⢕⢕⢕⢕⢕⢕⢕ 12/18
  U1: STM32F103CBT6 (fetched)
  U2: AMS1117-3.3 (cached)
  U3: CH340G (manual PDF)
■ Datasheets: 2 cached, 1 manual, 9 fetched, 0 failed
■ Running review...
Found 3 errors, 5 warnings, 4 suggestions
■ Review saved to .revlo/board-review-20250115T103000.json
■ Launching review browser...

Example Findings

✗ ERROR U1: Missing decoupling capacitors on VDDA
  STM32F103CBT6 pin 13 (VDDA) requires a 1uF + 10nF decoupling capacitor
  pair per datasheet section 6.1.6, but no capacitors are connected to
  the VDDA net.
  Add a 1uF ceramic + 10nF ceramic capacitor between VDDA (pin 13)
  and GND, placed as close to the pin as possible.

▲ WARN  R3: I2C pull-up resistor value too high for 400kHz operation
  R3 (10kΩ) on the I2C_SCL net exceeds the recommended maximum of
  4.7kΩ for Fast-mode (400kHz) I2C. With a bus capacitance of ~50pF,
  the rise time will be approximately 500ns, violating the 300ns spec.
  Replace R3 with a 2.2kΩ or 4.7kΩ resistor to meet I2C Fast-mode
  rise time requirements.

◆ INFO  U1: Unused GPIO pins left floating
  U1 pins PA8, PA11, PA12 (GPIO) are unconnected and not configured
  as inputs with internal pull-ups in the schematic. Floating inputs
  increase power consumption and may cause spurious interrupts.
  Configure unused GPIOs as outputs driven low, or connect to GND/VCC
  via 10kΩ resistors. Alternatively, ensure firmware enables internal
  pull-ups on these pins.

Ask Mode

Press a in the TUI to enter Ask Mode -- an interactive chat with live access to your schematic. Ask complex EE questions and get answers grounded in your actual design.

Schematic Tools

Revlo can actively explore your design using 4 built-in tools:

Tool What it does
lookup_component(ref) Get full component details: pins, nets, properties, datasheet specs
trace_net(net_name) See every component/pin connected to a net
find_unconnected_pins(ref?) Find floating pins, optionally filtered by component
list_power_rails() List all power nets with connection counts

Example

You: Is my reset circuit correct for U1?

Revlo: [looks up U1, traces the NRST net] The STM32F103 datasheet (p.47) requires a 100nF filter cap on NRST. Your circuit has C3 (100nF) to GND and R5 (10k) pull-up to VCC. RC time constant: 10k x 100nF = 1ms -- well above the 20us minimum.

Toggle extended thinking with t for deeper analysis on complex questions.

TUI Keyboard Shortcuts

Key Action
Up/Down or j/k Navigate findings
e Filter: errors only
w Filter: warnings only
s Filter: suggestions only
f Filter: show all
a Enter Ask Mode
t Toggle extended thinking (in Ask Mode)
m Export markdown report
o Open datasheet PDF
Esc Exit Ask Mode
q Quit

Review History

Revlo saves every review and Ask Mode conversation automatically.

# List past reviews for a schematic
revlo history board.kicad_sch

# Re-open last review in TUI (no re-run needed)
revlo open board.kicad_sch

# Load a specific past review
revlo history board.kicad_sch --load 2

How It Works

  .kicad_sch file
       │
       ▼
 ┌─────────────┐
 │   Parser    │  Extract components, nets, connectivity,
 │             │  hierarchical sub-sheets, power symbols
 └──────┬──────┘
        │
        ▼
 ┌─────────────┐
 │  Datasheet  │  Resolve MPN → fetch PDF → extract specs
 │  Pipeline   │  (normalize, cache, smart page selection)
 └──────┬──────┘
        │
        ▼
 ┌─────────────┐
 │  Chunker    │  Split into IC-context + power-rail chunks
 └──────┬──────┘
        │
        ▼
 ┌─────────────┐
 │  EE Review  │  AI reviews each chunk against
 │  Engine     │  domain-specific checklists + datasheet specs
 └──────┬──────┘
        │
        ▼
 ┌─────────────┐
 │  Output     │  TUI browser, CLI cards, JSON, Markdown
 └──────┬──────┘
        │
        ▼
 ┌─────────────┐
 │  Ask Mode   │  Interactive chat with schematic tools
 │  (optional) │  Extended thinking for deep EE analysis
 └─────────────┘

Current Scope

Revlo's implemented review path is schematic-first:

  • Fully implemented: schematic parsing, datasheet enrichment, AI review, TUI browsing, Ask Mode, review history
  • Not yet implemented as a live runtime path: PCB layout review from .kicad_pcb, BOM lifecycle analysis, web upload flow

The review engine currently uses a direct Claude API workflow over structured schematic chunks rather than a live multi-agent orchestration layer.

Datasheet Intelligence

Revlo automatically fetches and analyzes component datasheets to make reviews more accurate. It resolves datasheet PDFs in this order:

  1. Schematic-embedded URL -- If your KiCad component has a Datasheet property, Revlo validates it with a HEAD request and downloads it directly.
  2. Mouser API -- Searches by manufacturer part number using the Mouser Search API.
  3. Farnell/Element14 API -- Falls back to the Farnell Product Search API.
  4. Manual PDF -- If all automated sources fail, you can drop a PDF into the datasheets/ directory next to your schematic.

API Keys (Optional)

Mouser and Farnell lookups require free API keys. Without them, Revlo still works using schematic-embedded URLs and manual PDFs.

# Get a free key at https://www.mouser.com/api-hub/
export MOUSER_API_KEY="your-mouser-api-key"

# Get a free key at https://partner.element14.com/
export FARNELL_API_KEY="your-farnell-api-key"

You can also add these to a .env file in the project root -- Revlo loads it automatically via python-dotenv.

Manual PDF Fallback

If a datasheet can't be fetched (e.g. vendor blocks programmatic downloads), place the PDF in the datasheets/ directory next to your schematic. Revlo matches PDFs by manufacturer part number:

my-project/
  board.kicad_sch
  datasheets/
    MSPM0G3507SPTR.pdf      # matched by MPN substring
    www.ti.com/              # or in vendor subdirectory
      mspm0g3507.pdf

Caching

Downloaded datasheets and extracted specs are cached in datasheets/cache.json with a 90-day TTL. Delete the cache file to force re-fetching.

CLI Reference

# Full review with interactive TUI (default)
revlo review board.kicad_sch

# CLI output only (no TUI)
revlo review board.kicad_sch --no-tui

# JSON output to stdout
revlo review board.kicad_sch --json

# Save markdown report to file
revlo review board.kicad_sch --output report.md

# Skip datasheet enrichment (faster, less accurate)
revlo review board.kicad_sch --skip-datasheet

# Filter low-confidence findings
revlo review board.kicad_sch --min-confidence 0.7

# Use a faster model instead of the default Opus review
revlo review board.kicad_sch --model sonnet

# Verbose output (show debug info)
revlo review board.kicad_sch --verbose

# Re-open last review without re-running
revlo open board.kicad_sch

# List past reviews for a schematic
revlo history board.kicad_sch

# Load a specific past review in the TUI
revlo history board.kicad_sch --load 2

# Export sign-off report for stakeholders
revlo review board.kicad_sch --signoff signoff-packet.md

# Use a review profile tuned for MCU boards
revlo review board.kicad_sch --profile mcu-board

# Compare against a previous revision (diff review)
revlo review board.kicad_sch --compare-to board-v1.kicad_sch

# Provide a BOM for sourcing checks
revlo review board.kicad_sch --bom board-bom.csv

# Non-interactive CI check with severity threshold
revlo check board.kicad_sch --fail-on error --policy-json > results.json

CI Integration

Use revlo check with --policy-json to emit a versioned JSON schema (v1) that downstream tooling can parse reliably. The exit code reflects the --fail-on policy:

# Fail CI on errors, write versioned JSON to results.json
revlo check board.kicad_sch --policy-json --fail-on error --output results.json

# Or pipe to stdout -- exit code 2 means policy violation
revlo check board.kicad_sch --policy-json --fail-on error > results.json
echo "Exit code: $?"

The JSON output includes schema_version, finding IDs (stable SHA-256 fingerprints), severity, category, confidence, source type, baseline classification, evidence, and review metadata.

Custom Rule Packs

Create a revlo-rules.json file next to your schematic to add project-specific checks:

{
  "schema_version": 1,
  "name": "my-project-rules",
  "additive": true,
  "rules": [
    {
      "id": "no-0201-passives",
      "title": "0201 passives not allowed",
      "severity": "warning",
      "category": "library_hygiene",
      "remediation": "Use 0402 or larger package sizes for manufacturability.",
      "conditions": [
        {"field": "value_contains", "operator": "contains", "value": "0201"}
      ]
    }
  ]
}

Set "additive": false to replace built-in rules entirely with your custom pack.

Development

Setup

cd backend && uv sync

Run Tests

cd backend && uv run pytest tests/ -v

Note: if the full suite fails, check for missing test fixtures first. The CLI/TUI tests depend on local schematic fixtures in backend/tests/fixtures/.

Lint

cd backend && uv run ruff check revlo/

Verify Install

cd backend && uv run python -c "from revlo.parser import parse_schematic; print('OK')"

License

Apache 2.0 -- see LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

revlo_cli-0.3.0.tar.gz (111.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

revlo_cli-0.3.0-py3-none-any.whl (144.3 kB view details)

Uploaded Python 3

File details

Details for the file revlo_cli-0.3.0.tar.gz.

File metadata

  • Download URL: revlo_cli-0.3.0.tar.gz
  • Upload date:
  • Size: 111.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for revlo_cli-0.3.0.tar.gz
Algorithm Hash digest
SHA256 8486e1bd4c72b3e4f85dfc29b4c7af9d5159b911633748d07bd8cb8ab6b0230c
MD5 4de3843ce11cd29200aad0c1684d72f3
BLAKE2b-256 a084c96bfb2c95e52c4b05d90e7600fbf5aac5dcf72ebb6a1f117f420b19366c

See more details on using hashes here.

File details

Details for the file revlo_cli-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: revlo_cli-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 144.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for revlo_cli-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a46f7fa50c5f61b507519fddb04c7ef7b929ea1d159707c07cfb64b0923b617b
MD5 9670ebef7105986e64e4146a6528fefe
BLAKE2b-256 38b6b09b06f53a59d79774e516e26c0605f5271ccdf9e9c49fe960e256cbd7f6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page