bim lives on your Windows PC. Your AI assistant uses it to work with your files — Revit models, PDFs, spreadsheets, site data — instead of you doing it by hand.
Works with Claude Code, Cursor, Codex, and any tool with a terminal — no MCP server needed. Supports Revit 2024, 2025, and 2026.
Describe the work to your AI assistant. It installs bim, runs the commands, and reports back. You never open a terminal.
How it works →Install bim-cli on this Windows machine and then use it.
Step 1 — install. Run this exactly:
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "iwr -useb https://bimcli.com/install.ps1 | iex"
The installer is per-user (no admin), idempotent, and prints `BIM_INSTALLED_OK <version> <path>` as its final line on success.
Step 2 — refresh PATH in your current session:
bash: export PATH="$PATH:$LOCALAPPDATA/bim-cli"
pwsh: $env:Path += ";$env:LOCALAPPDATA\bim-cli"
Step 3 — orient:
bim doctor --json # environment readiness; each failed check has a fix field
bim describe --json # full driver/verb/arg schema; each driver has a docs URL
Fetch the docs URL for any driver you plan to use before issuing commands.
Calling convention: `bim <format> <verb> [args]`. stdout is JSON, stderr is human.
Error envelope: `{"ok":false,"error":{"kind":"...","message":"...","hint":"..."}}`.
Exit codes: 0 ok · 1 generic · 2 usage · 3 not-found · 4 permission · 5 conflict.
After describe + doctor, summarize what's installed and wait for my task.
bim is a program your AI assistant runs on your Windows PC to do real work in your apps and files — Revit, PDFs, Excel, Google Sheets, site data, images, Rhino, Blender, and energy simulation. It installs per-user in one line, no admin rights and no account. After install, nothing leaves your machine unless you ask it to.
Paste the prompt from the panel above into any AI coding tool that can run shell commands. It handles the download, verification, and PATH setup — no decisions required from you.
"Pull the flood zone for our project site and write it to a spreadsheet." "Bulk-set the Assembly Code parameter on all structural walls from this Excel file." "Shrink this PDF sheet set before I send it to the client." Plain language is fine.
It calls the right driver, shows you the result as structured data, and asks what's next. If something needs your attention first — Revit not open, file in the wrong place — it tells you exactly what to do.
A flood-zone lookup piped straight into a spreadsheet.
bim describe --json is the authoritative source for every verb, arg, and schema. The pages below are human-readable summaries.
Work with PDFs — extract element data, split and merge sheet sets, reduce file size, embed structured data for archiving. Handles the font encoding and element tagging that Revit's PDF export produces.
bim pdf info <file> — metadata, page count, XMP, has_bim_tagsbim pdf marked <file> — extract BIM element tags (ElementIds) with page boundsbim pdf text <file> — text with coordinates; ToUnicode CMap decodedbim pdf page split/collect/merge — split combined exports, collect by disciplinebim pdf optimize <file> — reduce file size without re-renderingbim pdf package <file> metadata.json — embed BIM JSON as PDF/A-3 associated filebim pdf viewer <file> — local browser viewer; click element → Revit zooms to itDrive Revit while it's open: export sheets to PDF with BIM data, read schedules, write parameters across hundreds of elements, list warnings, and run arbitrary Revit API logic. The kind of work that takes a half-hour for someone fluent in visual scripting, and a full afternoon by hand.
bim revit export --all-sheets --bim --output ./output/ — export sheets to PDF; --bim adds 6 JSON sidecars (elements, marks, rooms, levels, properties, views)bim revit status — running instance, add-in state, open model, portbim revit exec "<C#>" — run arbitrary C# against the live Revit APIbim revit sheets list — all sheets with number, name, disciplinebim revit schedule export <name> — export a named schedule as rowsbim revit warnings list — model warnings with element IDs and descriptionsbim revit param set --by Mark — write parameters from stdinConvert, annotate, compare, and inspect images. Handles site photos from phones (HEIC), renderings, and drawing scans. Useful anywhere a pipeline produces or consumes image files.
bim image info <file> — format, dimensions, color model, EXIF presencebim image convert --in --out — convert between PNG, JPG, TIFF, BMP, HEICbim image resize --in --out [--max-edge] [--auto-orient] — resize and fix orientationbim image exif read/strip/set — GPS, datetime, make/model as JSONbim image annotate --in --out --ops JSON — draw rects, lines, arrows, textbim image diff --a --b [--fail-over] — pixel-level comparisonbim image to-pdf --out [--page-size] files... — wrap images as PDF pagesPull site data for any address — flood zones, school districts, zoning, brownfield status, transit access, satellite imagery, and more. No account, no key. Each query hits a public REST API and returns structured JSON.
bim site flood lookup --address "..." --geocode — FEMA NFHL flood zone + BFEbim site flood map --address "..." --out FILE — PNG flood map with basemapbim site school lookup --address "..." --geocode — NCES school district at locationbim site zoning lookup --address "..." --geocode — zoning districtbim site satellite map --lat <f> --lon <f> — dated satellite imagerybim site assess --address "..." — 29-layer site report in one callRead and write Excel files. The connective layer between Revit schedules, site data outputs, and any spreadsheet-based workflow. Accepts piped input from other drivers; output can be piped forward.
bim excel write <file.xlsx> — write rows from stdin to a sheet; auto-detects dates, pivot on any columnbim excel read <file.xlsx> — stream rows; header row becomes object keysbim excel sheets <file.xlsx> — list all sheets with row/column countsbim excel info <file.xlsx> — column names, inferred types, sample valuesRead and write Google Sheets and Docs. One-time browser sign-in; every subsequent call is silent. Push Revit schedules or site data directly to a shared sheet without copy-paste.
bim google login — one-time sign-in; browser opens, token cachedbim google sheets read --spreadsheet <id-or-url> — stream rowsbim google sheets append --spreadsheet <id-or-url> — append rows from stdinbim google sheets write --spreadsheet <id-or-url> --range <A1:Z100> — overwrite a rangebim google docs read --doc <id-or-url> — plain text with word/char countsbim google docs append --doc <id-or-url> --text "..." — append to end of documentDrive Rhino 6 while it's open. Run scripts, inspect the session, and control the application from a terminal — the same pattern as the Revit driver, against Rhino's RhinoScript and RhinoCommon APIs.
bim rhino instances — list live Rhino sessionsbim rhino status — running state, active documentbim rhino exec --code "..." — run a script against the live sessionbim rhino install — install the pluginConvert 3D files headlessly (FBX, glTF/GLB, OBJ, USD, BLEND) or drive a live Blender session over TCP. IFC read/write via Bonsai. One install command downloads and manages Blender 4.5 LTS — no manual Blender setup required.
bim blender install — download managed Blender 4.5.10 LTS (~395 MB)bim blender install --component bonsai — add IFC support via Bonsaibim blender convert --in model.ifc --out model.glb — headless conversionbim blender launch + bim blender exec --code "..." — live co-editingRun whole-building energy simulations and PHIUS CORE 2024 compliance checks from the command line. Accepts gbXML and OpenStudio .osm files. One install command downloads NREL OpenStudio CLI — no manual setup.
bim energy install — download NREL OpenStudio CLI (required dependency)bim energy run --in model.gbxml — simulate; returns EUI, annual kWh, peak kW, end usesbim energy phius.check --in model.gbxml — PHIUS CORE 2024 compliance; pass/fail per criterionbim energy doctor — check OpenStudio CLI and EnergyPlus installEach page has a copy-pasteable agent prompt, the exact commands with expected output, and a bim scenario run test you can run to verify the installed binary matches the page.
Every command reads stdin and writes stdout as JSON. Drivers compose with standard pipes.
bim revit export --all-sheets --bim --output output/
bim pdf marked drawings.pdf | bim pdf viewer drawings.pdf
bim pdf info drawings.pdf && bim pdf optimize drawings.pdf
bim revit schedule export "Door Schedule" | bim excel write doors.xlsx
bim excel read params.xlsx | bim revit param set --by Mark
bim pdf marked drawings.pdf | bim excel write takeoff.xlsx --pivot category
bim revit warnings list | bim excel write audit.xlsx
bim site flood lookup --address "..." --geocode | bim revit param set --by Mark
bim revit schedule export Sheets | bim google sheets append --spreadsheet <id> --with-header
bim revit warnings list | bim google sheets append --spreadsheet <id> --with-header
bim google docs read --doc <id> | bim revit param set --by Mark
bim site flood lookup --by-element revit — inject flood zone per Revit element by locationbim google drive upload — upload files to Google Drive from the pipeline%LOCALAPPDATA%\bim-cli\