The agent handoff pattern

An AI agent running outside Revit triggers an export, receives structured data, and produces a deliverable — without a human sitting at the Revit workstation. This is what makes bim-pdf different from every other Revit tool.

The problem with in-Revit AI tools

Most Revit AI tools run inside Revit: a plugin, a dockable panel, a chat window. They're useful for interactive sessions. They require Revit to be open, a human present, and the interaction to happen inside the Revit UI.

The agent handoff pattern is different. The agent lives outside Revit — in Claude Code, a script, a CI pipeline, or a scheduled job. It calls bim-cli to do the Revit work, receives structured output, and continues without any GUI interaction.

A concrete example: permit submittal prep

The agent receives a task: "Prepare the A-series sheets for permit submission. Generate a submittal log with sheet list, door count, and egress notes."

Step 1 — export the drawing set with BIM data

bim revit export --sheet "A-101,A-102,A-201,A-202" --bim --output ./output/permit
output/permit/
  A-101.pdf               First Floor Plan
  A-101.elements.json
  A-101.rooms.json
  A-101.properties.json
  A-102.pdf               Second Floor Plan
  A-102.elements.json
  ...

Revit does not need to stay open after this command completes.

Step 2 — read the structured data

The agent reads elements.json for each sheet to count doors and check required parameters:

cat output/permit/A-101.elements.json | jq '[.[] | select(.category=="Doors")] | length'
# 14

cat output/permit/A-101.elements.json | jq '[.[] | select(.category=="Doors") | {mark, family, level}]'
[
  {"mark": "D-01", "family": "Single-Flush", "level": "Level 1"},
  {"mark": "D-02", "family": "Single-Flush", "level": "Level 1"},
  ...
]

Step 3 — read room data for egress

cat output/permit/A-101.rooms.json | jq '[.[] | select(.area_sf < 500) | {name, number, area_sf}]'

Step 4 — generate the submittal log

The agent writes submittal_log.md:

## Permit Submittal — A-Series
### Sheet List
| Sheet | Title | Pages |
|---|---|---|
| A-101 | First Floor Plan | 1 |
| A-102 | Second Floor Plan | 1 |

### Door Count
- Total doors: 27 (14 on A-101, 13 on A-102)
- All doors have Mark parameter set

### Rooms
- 12 rooms on First Floor Plan
- Average area: 342 sf

Step 5 — deliver

The agent has: the PDF set in output/permit/, a structured submittal log, and any flagged issues. No human sat at Revit during any of this.

Why this pattern is different

Every Revit tool that exists today requires a human in the loop at the Revit step. ProSheets, pyRevit, Dynamo scripts — all require someone to click, configure, and wait.

bim-cli's export is a CLI call. That means:

The PDF is the escalator. The sidecars are the stairs. Both come out of one command.

The bim-pdf format

The sidecars follow the bim-pdf format spec. Each sidecar has a defined schema. An agent reading elements.json on any bim-pdf export gets the same structure, regardless of model complexity.

The PDF itself opens normally in Acrobat, Bluebeam, or any viewer. The BIM data is a separate layer. Nothing is lost for recipients without bim tooling.

Install

iwr -useb https://bimcli.com/install.ps1 | iex