Changelog -- bim-cli

Unreleased

v0.11.0 -- 2026-08-16

bim revit now covers Revit 2024 through 2027, up from 2025-2026. No new verb and no protocol change -- the same commands work against two more Revit years.

Added

Changed

v0.10.2 -- 2026-08-15

Logging moves into the dispatcher. Drivers no longer write log files of their own, and bim.jsonl becomes one central stream carrying what was asked for, what happened, and what the call exercised. No new CLI surface -- the changes are to the local log schema and to a driver pin.

Fixed

Added

Changed

v0.10.1 -- 2026-08-14

A driver-pin patch release. No dispatcher changes -- both commits since v0.10.0 bump a pinned driver to a release that fixes a feature which was fully broken in the version v0.10.0 bundled.

Fixed

v0.10.0 -- 2026-08-13

This release collects the driver-release wave and ships the 11 bim-cli commits accumulated on main since v0.9.0. It is the first release to consume the repo-external bim-pdfv pin (v0.2.0). Two of the CLI changes are measurement- or agent-critical: routed telemetry verbs no longer fold positional file arguments into the verb key (previously roughly 6.4% of telemetry events were silently rejected at ingest, and file paths could cross the wire despite the package doc promising they never do), and describe now answers scoped --driver/--verb help so a caller no longer re-fetches the full 226 KB manifest to learn a verb's args.

Version rationale: bumped to v0.10.0 (minor, not patch) because of new user-visible CLI surface -- scoped describe --driver/--verb with --help routing, unknown-flag rejection with a near-miss hint, and a newer-version notice on failing commands -- plus a wave of driver minor bumps.

Added

Changed

Fixed

Drivers

v0.9.0 -- 2026-08-10

This release ships the 3 fixes accumulated on main since v0.8.0 and bumps the bim-site driver from v0.6.7 to v0.7.0. The driver bump is the headline: site-cli v0.7.0 adds a MassGIS parcel adapter, Miami 21 zoning providers, a frontage verb, and a massing-envelope verb -- new user-visible surface that justifies the minor version increment. It also delivers the retry fix for nfhl-reachable (the FEMA TCP-drop flakiness measured at 1 in 5 runs on a healthy host). The three bim-cli commits are host-hygiene fixes that take effect on the next upgrade.

Version rationale: bumped to v0.9.0 (minor, not patch) because bim-site v0.7.0 exposes new user-visible verbs (frontage, massing-envelope) and new data providers, constituting new user-visible surface per semver convention.

Added

Fixed

v0.8.0 -- 2026-08-09

This release delivers the telemetry v2 client and ships the 8 commits accumulated on main since v0.7.0. Its headline is the client half of telemetry v2 (DIM-901): every dispatched run now populates the new Event fields -- driver, exit_stage, flags, arg_count, out_format, and result_count -- which the worker has accepted since v0.7.0 but which stayed NULL in production until a client shipped them. It also adds a first-run telemetry notice, synthesizes usage hints on bad-args errors, and bumps the bim-pdf renderer to v0.4.0.

Added

Changed

Fixed

v0.7.0 -- 2026-08-02

This release ships the 13 commits accumulated on main since v0.6.0. It adds new revit verbs, changes bim feedback to upload by default (a behaviour change), bundles the faster bim-pdf v0.3.5 renderer, and delivers the acad/sketchup doctor first-run relief plus the structural doctor fix. It supersedes the never-cut v0.6.1 -- that entry documented only the doctor fix and mislabelled a minor release (new verbs) as a patch; no v0.6.1 tag or R2 build was ever produced.

Added

Changed

Fixed

Internals

v0.6.0 -- 2026-08-01

This release ships 30 commits that had accumulated on main since v0.5.0, including the doctor first-run regression fix and the telemetry v2 foundation. It also bumps the bim-google driver pin.

Added

Fixed

Changed

Removed

v0.5.0 -- 2026-07-15

bim-acad -- new AutoCAD driver (v0.1.0)

New driver bim-acad, pinned from HelloHowAreYouHaveANiceDay/autocad-cli @ v0.1.0 and vendored into drivers/. It drives the headless AutoCAD Core Console (accoreconsole.exe) on a local AutoCAD 2025/2026 install -- no GUI, no add-in DLL. Verbs: info (layers/layouts/blocks/entity counts/extents), extract (model-space entities as NDJSON), convert (DWG<->DXF version-targeted, or print to PDF via the built-in DWG To PDF.pc3 plotter; --dry-run/--yes), and exec (arbitrary .scr/AutoLISP). Results are read from LISP-written side-car files; accoreconsole's UTF-16 stdout redirect is never parsed. bim acad ... routes to it.

bim-linear -- remove redundant in-repo source (now a pinned driver)

bim-linear graduated to its own repo (HelloHowAreYouHaveANiceDay/bim-linear) and is fetched as a pinned driver via driver-pins.json (@ v0.1.0), like every other driver. The now-redundant in-repo source cmd/bim-linear/ and its duplicate cross-compile steps in release.yml + release-local.ps1 are removed; the pinned release asset is the single source. Runtime behaviour of bim linear is unchanged -- the manifest entry, driver docs, and vendored drivers/bim-linear.exe are all retained.

bim pdf bim.validate -- now validates canonical bim-pdf-1.0 packages (DIM-469)

Bumps bim-pdf driver to v0.3.4. The validator now accepts packages produced by bim blender ifc.export-pdf: elements.json in canonical bim-pdf-1.0 format (bim-pdf, meta, source, class_registry, elements) passes elements_schema and join_resolves checks. Profile field now returns "bim-pdf-1.0" for canonical packages. Legacy v2 and flat-array formats still accepted.

bim ifc info -- offline IFC metadata reader (DIM-436)

New in-repo driver bim-ifc (cmd/bim-ifc). Reads IFC (ISO-10303-21) files at the STEP/header level without requiring a running Blender session.

bim ifc info <file.ifc> prints: schema version (IFC2X3, IFC4, IFC4X3), MVD / view definition, project/site/building names, units, and per-type entity counts. --json flag emits the same data as structured JSON.

The bim ifc alias is updated: info, describe, doctor, and version route to the new offline driver; all other verbs (render, import, etc.) still delegate to bim blender ifc.

v0.4.5 -- 2026-06-28

bim sketchup -- new driver (SketchUp Make 2017 + Pro)

bim sketchup ships as a pinned driver (sketchup-cli v0.1.0). It uses the same TCP bridge pattern as bim revit: a Ruby extension (bim_bridge.rb) listens on port 15700 inside the SketchUp process; the Go CLI speaks JSON-RPC to it over loopback.

Targets SketchUp Make 2017 by default (free, no account needed). Pro/2026 is supported with --year or --url override but requires a Trimble subscription.

Verbs: launch, close, exec, open, export, status, doctor, install, setup.

v0.4.6 -- 2026-06-30

oauthr v0.3.0 -- hardened control-plane auth; ships as pinned driver

bim-oauthr pin bumped from v0.2.0 to v0.3.0 (DIM-220). oauthr now ships as a vendored driver in the bim-cli release zip (fetched from the oauthr repo's GitHub Release at build time) rather than a runtime download. The broken runtime-download path (firstrun.go: empty sha256 pins, wrong version, 404 downloadBase) has been removed; the first-run flow now only drives consent + bim oauthr connect.

All four oauthr-binary resolvers now agree on <drivers>/bim-oauthr.exe (the bim oauthr passthrough, bim doctor's checkOauthr, the bim-linear doctor probe, and the first-run intercept), with PATH and co-install next to bim.exe as fallbacks. bim-oauthr is excluded from format-driver enumeration (listDrivers) since it is a kind: bridge, not a JSON-RPC driver.

bim-google v0.3.5 -- oauthr hardening + drive-proxy fix

bim-google pin bumped to v0.3.5. Includes oauthr control-plane auth hardening (same POST /v1/internal/token contract fix as bim-linear v0.1.0) and a drive-proxy bug fix.

bim-linear v0.1.0 -- included in release zip

bim-linear is now pinned in driver-pins.json (HelloHowAreYouHaveANiceDay/bim-linear @ v0.1.0) and fetched from its GitHub Release at build time. Previously the in-repo cmd/bim-linear was cross-compiled during release.yml; it is now a first-class driver like all others, with its own release asset.

The release workflow's build bim-linear.exe (in-repo driver) step is retained as a fallback for the workflow_dispatch path but the pinned release asset takes precedence in the standard tag-triggered flow.

bim linear graphql auto-starts the oauthr proxy and returns data when OAUTHR_CONTROL_URL is configured; returns kind: auth-required with a bim oauthr connect linear hint otherwise.

bim revit -- element-list, schedule-read, material-query convenience verbs (DIM-203)

Three new builtin alias verbs in bim-revit v0.1.16 (read-only, no transaction):

bim revit -- pdf-view, view-activate convenience verbs (DIM-202)

Two new builtin alias verbs in bim-revit v0.1.14:

bim revit -- rotate, move, location convenience verbs (DIM-201)

Three new builtin alias verbs in bim-revit v0.1.13:

All three accept comma-separated --id lists.

oauthr ships as a pinned driver (was never actually installable)

bim oauthr and the oauthr-backed cloud drivers (e.g. bim linear) could never find the oauthr binary on a normal install: the only install path was a runtime download in internal/oauthr/firstrun.go that was broken three ways -- empty sha256ByPlatform pins (hard-fail), PinnedVersion v0.1.0 (actual 0.2.0), and a downloadBase (oauthr.com/releases) that 404s -- and it installed to a different directory than the bim oauthr passthrough searched.

oauthr now ships like every other driver: pinned in driver-pins.json (bim-oauthr -> HelloHowAreYouHaveANiceDay/oauthr), fetched from the oauthr repo's GitHub Release at bim-cli build time, and vendored into drivers/ as bim-oauthr.exe.

v0.4.4 -- 2026-06-26

bim-code v0.2.1 -- protocol 2.0 (driver was non-functional)

bim-code was a pure-CLI driver, but the dispatcher interrogates drivers via JSON-RPC over stdin (protocol_version "2.0"). So bim code <verb> printed usage and bim doctor reported FAIL code. Re-pinned to code-cli v0.2.1, which rewrites the driver to rpc.Serve like every other driver. Verified through the dispatcher: bim code doctor -> ok:true; check/rules/jurisdictions return data.

v0.4.3 -- 2026-06-26

bim-linear v0.1.0 -- fixes (driver was non-functional in v0.4.2)

End-to-end testing against the live oauthr + Linear API surfaced two bugs that made every bim linear call fail. Both fixed and verified (list, get, exec return real data):

Tooling

v0.4.2 -- 2026-06-25

bim-linear v0.1.0 (new driver)

Linear project management integration using oauthr for credential brokering (no tokens stored locally -- DESIGN.md SS15).

v0.4.1 -- 2026-06-23

bim-code v0.2.0

Expanded NYC Building Code 2022 coverage -- 5 new room-level rules beyond the original light/air pair.

v0.4.0 -- 2026-06-21

bim-code v0.1.0 (new driver)

Building-code compliance checker. Stdin-first, no Revit dependency.

v0.3.7 -- 2026-06-19

bim-revit v0.1.12

bim-google v0.3.4

v0.3.6 -- 2026-06-18

Dispatcher

bim-google v0.3.3

bim-pdf v0.3.3

bim-revit v0.1.11

Telemetry

v0.3.0 — 2026-06-10

bim-energy v0.1.1 (new driver)

Energy modeling and Passive House compliance checking via NREL OpenStudio CLI.

bim feedback --upload

Desire-path feedback can now be uploaded directly from the CLI: bim feedback --upload scrubs all argument values and POSTs to the telemetry worker. Use --dry-run to preview the payload first.

Other

v0.2.9 — 2026-06-09

Opt-in telemetry (off by default)

Anonymous verb-usage telemetry, disabled unless BIM_TELEMETRY=1 is set.

When enabled, one ping is sent per top-level command containing: verb shape, version, OS family, success flag, error kind, and latency bucket. No IP addresses, identifiers, arguments, file paths, or sub-day timestamps are ever collected. DO_NOT_TRACK=true always overrides. See bimcli.com/privacy for the full schema.

v0.2.7 — 2026-06-01

bim-site v0.6.6

v0.2.6 — 2026-05-31

bim-google v0.1.1

bim-site v0.6.5


v0.2.5 — 2026-05-29

Dispatcher: agent-friendly output (breaking)

All non-streaming verb responses are now flat JSON objects. The {"jsonrpc":"2.0","id":1,"result":{…}} wrapper is stripped by the dispatcher before printing — agents receive the inner result directly.

Error responses now use the canonical flat envelope ({"ok":false,"error":{"kind":"…","message":"…","hint":"…"}}) instead of the raw JSON-RPC error object. Streaming verbs (output: ndjson / binary) pass through untouched.

Dispatcher: structured input types

New arg types available in driver manifests:

bim-blender v0.2.0

bim-revit v0.1.8

bim-rhino v0.1.2


v0.2.4 — 2026-05-26

v0.2.3-1 — 2026-05-25

v0.2.3 — 2026-05-25

bim-blender v0.1.0 — Blender TCP bridge driver

New driver: bim blender — connects to a running Blender instance via the Python bridge addon (JSON-RPC 2.0 over TCP). Supports launch, instances, exec, convert, kill, doctor.

bim-google v0.1.0 — Google Workspace driver

New driver: bim google — Docs, Sheets, Drive, and OAuth session management via gws.exe.

bim-site v0.6.4

bim-pdfv bug fixes


v0.2.1 — 2026-05-11

bim-pdfv v0.1.0 — native PDF viewer, new session driver

New driver: bim pdfv — a native PDF viewer (Rust + PDFium + egui) that exposes an agent-driven control surface via JSON-RPC 2.0 named pipes. First session-kind driver in bim-cli.

bim pdfv open --file drawings.pdf --layout left    # open viewer, returns pid + pipe name
bim pdfv open --file code.pdf     --layout right   # side-by-side
bim pdfv search --pid <N> --pattern "28-302"       # search + auto-navigate + highlight
bim pdfv navigate --pid <N> --page 96              # go to page (0-indexed)
bim pdfv highlight --pid <N> --page 96 --bboxes "[[72,425,542,438]]"
bim pdfv fit --pid <N>                             # fit page width to window
bim pdfv render --pid <N> --out frame.png          # snapshot current view to PNG
bim pdfv state --pid <N>                           # current page, scale, highlights
bim pdfv instances                                  # list all running viewers with PIDs

Key properties:

Runtime dependency: pdfium.dll (7 MB) ships alongside bim-pdfv.exe in the drivers/ directory.

v0.2.0 — 2026-05-08

bim-site v0.6.3 — NYC layer pack, global satellite imagery, rate-limit propagation

7 new NYC verbs (all no-key, all wired into assess): e-designation, stormwater-flood, building-history, brownfield, coastal, special-district, subway. NYC assess now returns 23 layers.

satellite.map — new first-class global imagery verb. Works for any coordinate worldwide with no parcel registry required. Supports Esri Wayback dated imagery (193 snapshots 2014→2026, monthly), live World_Imagery, and optional parcel outline overlay where registry coverage exists.

parcel.map improvements: --satellite flag and --wayback-date YYYY-MM-DD for dated Esri Wayback imagery.

airport.lookup fix: Overpass query now searches (node; way; relation) with out center; — previously only found node-type airports, missing JFK, LGA, EWR and all other polygon airports.

Rate-limit propagation: assess response gains throttle_hint with affected_layers, retry_after_secs, and exact retry commands when any layer is rate-limited. Individual verbs surface retry_after_secs and throttle_source in error.data. Agents can check structured fields rather than parsing error strings.

pkg/rpcData struct additions

rpc.Data gains two new optional fields:

These fields are omitempty — no change to existing response shapes.

v0.1.9 — 2026-05-07

bim-pdf v0.3.0 — PDF-BIM v2 spec

bim pdf package now produces conformant PDF-BIM v2 files.

Every packaged PDF gets:

New verb: bim pdf bim validate <file> — checks all three spec layers and reports conformance:

bim pdf bim validate drawings.pdf
{"ok":true,"result":{"profile":"v2","checks":{"af_present":true,"pdfbim_xmp":true,"elements_attachment":true,"marks_attachment":true,"elements_schema":true,"marks_schema":true,"join_resolves":true}}}

Reports profile: "v2" (conformant), "legacy-v1" (old packages without /AF), or "unknown".

Marks bounds are now CTM-correct. The walker tracks q/Q/cm operators; element bounding boxes are device-space coordinates. Fixes latent misplacement on PDFs that apply viewport transforms (rotated/scaled detail callouts).

Backward compatible. Old packages (no /AF, no XMP marker) continue to open in the viewer and are reported as legacy-v1 by the validator.

CI fix

Scenario tests pdf-archive-pdfa3 and pdf-shrink-batch were checking for result.outputFile — corrected to result.path (field was renamed in v0.2.1).

v0.1.8 — 2026-05-07

bim-site v0.6.0 — Taichung, Taiwan

bim site assess now supports Taiwan addresses with automatic country detection — no flag or config change needed. Any address containing Chinese characters or Taiwan city/county keywords routes through the Taiwan layer stack; all US functionality is unchanged.

Geocoding: Nominatim OSM is the default — no API keys. Set BIM_SITE_TGOS_APPID + BIM_SITE_TGOS_APIKEY for house-number precision via TGOS (free registration at api.tgos.tw).

Taiwan layer stack: elevation (Open-Meteo SRTM), faults (GSMMA), seismic (Taiwan Building Code static zone), school (OSM Overpass 1 km), parcel (NLSC Open API + Nominatim reverse), zoning (luz.tcd.gov.tw cache-backed PIP), flood (NCDR registry-routed), airport/historic/transit (OSM/Transitland, global).

luz.tcd.gov.tw zoning: On first call per county, downloads all zone polygons from the National Development Council (Taiwan), caches locally (30-day TTL), answers subsequent queries via point-in-polygon. Geo-IP accessible from Taiwan. No API key required.

New optional env vars: BIM_SITE_TGOS_APPID, BIM_SITE_TGOS_APIKEY, BIM_SITE_CACHE_DIR.

Example:

bim site assess --address "台中市西屯區市政路200號"

No breaking changes

All US verbs unchanged. Global layer (airport/historic/transit) jurisdiction tag changed from "federal" to "global" in JSON output (cosmetic).

v0.1.7 — 2026-05-06

v0.1.6 — 2026-05-06

v0.1.5 — 2026-05-06

bim-site v0.4.0

bim-pdf v0.2.0

Killer composition (new)

bim site assess --address "4720 Center Blvd, Long Island City, NY 11109" > assess.json
bim site flood map --lat 40.7461 --lon -73.9570 --out flood.png
bim site school map --lat 40.7461 --lon -73.9570 --out school.png
bim pdf report --data assess.json --flood-map flood.png --school-map school.png --out report.pdf

v0.1.4 — 2026-05-04

v0.1.3 — 2026-05-04

v0.1.2 — 2026-04-30

v0.1.1 — 2026-04-30

v0.0.10 — 2026-04-30