R&D
BIM + AI: An AI-Assisted BIM Copilot
Research & Proof-of-Concept: Agent-Orchestrated BIM Workflows In Development
Overview
Across this portfolio, every project is really a chain of computational-BIM steps. IFC comes in, geometry is rebuilt into native elements, parameters are mapped, schedules and a bill of quantities fall out, disciplines are clash-checked, documents are issued. Today I drive those chains by hand across Revit, Rhino.Inside.Revit, Grasshopper and Solibri. This section explores a single idea: that the same chains can be described once, as tools an AI agent calls in sequence, so the agent runs the workflow end to end while I review at the decision points.
How it works, in plain terms
You do not need to know the internals, and neither do I claim to have written them. The idea is simple: you type what you want in plain language, Claude works out which commands to run, the MCP server passes those commands to Revit, and the result comes straight back to you.
Prompt in, model changes and answers back out. Everything in between is the open-source server doing the talking to Revit.
What one command looks like
An illustrative example of a single instruction becoming actions on the model, using tools that exist in the server today:
Illustrative. tag_all_rooms and create_schedule are real tools in the base server; this shows how the interaction reads, not a captured session.
A working proof of concept
The idea is only credible if a piece of it runs. The cleanest starting point comes from the SNAM project, where decades of gas-network coordinates had to become a Revit model, and where the real difficulty was that field data carried human recording errors. So the first tool is a QA gate that validates a coordinate dataset before any model is built, flagging bad records rather than silently constructing a wrong pipeline. Because this is pure geometry math it needs no Revit connection and runs today in plain Node. Given a deliberately corrupted sample, it reports:
16 rows checked · 15 well-formed points · 4 error(s), 2 warning(s). ✗ [off_route_elbow] Row 8 (P007): elbow lies 1.80 m off the incoming pipe axis, the recorded position doesn't match the route. ✗ [missing_elbow] Row 11 (P010): the route turns 90° here but the point is recorded as a pipe (BARR), not an elbow, a forgotten elbow reading. ✗ [missing_coord] Row 14 (P013): missing/invalid coordinate(s): z. ✗ [duplicate_id] Row 15: duplicate id "P010" (first seen row 11). ! [outlier_jump] Row 16 (P015): coordinate jumps 4930 m from the previous point (493× typical spacing), likely a mis-recorded coordinate. ! [spurious_elbow] Row 15 (P010): recorded as an elbow but the route is effectively straight. BLOCKED, resolve the errors above before building the model.
The off_route_elbow and missing_elbow cases reproduce the exact failures the SNAM case study describes. The point is not the tool in isolation. It is that an agent can now run this check, explain each anomaly in plain language, and ask how to resolve it, as the first reviewed step of an automated "coordinates in, coordinated model out" workflow.
Proposed tools
Around twenty-seven tools, grouped into families, each anchored to a workflow already shown in this portfolio and each following the base project's existing pattern. Complexity is rated LOW (reuses existing logic), MED (real API work), HIGH (needs an in-process bridge or external service).
| Tool | Purpose | Revit API / bridge | Cx | Projects |
|---|---|---|---|---|
| A · IFC interoperability & data-to-model | ||||
| ifc_to_native | IFC DirectShapes into quantifiable native walls/floors/ceilings, carrying their data. | IFC import, DirectShape, Wall/Floor.Create, Rhino.Inside | HIGH | AndoraMASE |
| map_ifc_parameters | Bind IFC property sets to shared parameters on native elements. | Parameter, shared-param file | MED | AndoraMASE |
| reconstruct_from_coordinates | Build a pipe/elbow network from a coordinate table; connect by geometry. | Pipe.Create, MEPCurve, Connector, Rhino.Inside | HIGH | SNAM |
| validate_source_data | QA a dataset before modelling: gaps, off-route elbows, outliers. (built) | read-only, geometry math | MED | SNAM |
| B · Schedules, quantities & cost coding | ||||
| generate_type_schedules | Detect every unique type used and auto-build stratigraphy schedules ("Abaco"). | ViewSchedule.CreateSchedule, CompoundStructure | MED | MASENapoli |
| quantity_takeoff | Material/element takeoff to Excel by WBS or cost code, with totals. | get_material_quantities, ClosedXML | LOW | MASEShusha |
| link_schedule_to_cost | Stamp one shared code onto elements so time and cost stay tied to geometry. | shared params, Parameter.Set | MED | MASE |
| C · QA/QC, model checking & coordination | ||||
| rule_based_clash | Clash test between discipline sets, auto-assigning discipline, size, severity. | ElementIntersectsSolidFilter, BoundingBox | MED | AndoraMASENapoliZNM |
| clash_to_issues | Turn clashes into tracked CDE issues or BCF, status round-tripped. | BCF schema, external ACC/APS API | HIGH | AndoraMASENapoli |
| model_checker | Run a declarative ruleset (naming, params, containment) for pass/fail, Solibri-style. | FilteredElementCollector, geometry | MED | AndoraMASE |
| naming_standard_audit | Check names against a convention; report and optionally auto-fix. | Element.Name, batch_rename | LOW | MASENapoli |
| D · Geometry rationalisation & fabrication | ||||
| run_grasshopper | Execute a named GH definition with inputs, write results back to Revit. The key bridge. | Rhino.Inside.Revit, GH Player | HIGH | ZNMShushaMemorialTour Guillot |
| rationalize_surface | Panelise and plan-check a freeform surface for fabrication via a GH definition. | Rhino.Inside, DirectShape | HIGH | ZNMMemorial |
| planarity_report | Flag non-planar panels; report per-face normal deviation across a surface. | Face, XYZ normals | MED | ZNM |
| structural_frame_from_surface | Generate a hexagrid or diagrid of members and nodes on a host surface. | Rhino.Inside, FamilyInstance, adaptive | HIGH | Shusha |
| E · Façade generation & building performance | ||||
| parametric_facade_generate | Drive a façade GH definition by parameters; instantiate panels as native families. | Rhino.Inside, FamilyInstance | HIGH | Tour Guillot |
| daylight_energy_analysis | sDA, ASE and PV per panel via Ladybug-Honeybee or an external solver. | Rhino.Inside GH, external Radiance/E+ | HIGH | Tour Guillot |
| surrogate_performance_predict | Call a trained ANN surrogate for instant per-panel performance. | external ONNX endpoint | MED | Tour Guillot |
| design_option_evaluate | Sweep parameter sets, score against daylight, energy and cost, rank options. | orchestrates façade, surrogate, takeoff | HIGH | Tour Guillot |
| F · Authoring, documentation & orchestration | ||||
| generate_dynamo_graph | Build a Dynamo .dyn graph from a plain-language description, so Revit automations are authored without hand-wiring nodes. A companion Claude skill writes the graph; this runs it. | DynamoRevit, .dyn JSON | HIGH | NapoliToolkit |
| place_parametric_detail | Place and refresh pre-built line-based detail families that follow host geometry. | FamilyInstance (line-based), detail comps | HIGH | Tour GuillotNapoli |
| generate_construction_docs | Batch views, sheets, viewports and tags for a room or element set. | ViewSheet, Viewport, IndependentTag | MED | NapoliMASE |
| phase_state_manager | Set up existing, demolition and new phases and their views. | Phase, ElementPhaseStatus | MED | MASE |
| point_cloud_fit | Fit planes, levels and walls to a ReCap scan region for existing conditions. | PointCloudInstance, external fitting | HIGH | Andora |
| heritage_condition_tagger | Annotate existing fabric with condition and survey data for HBIM. | Parameter, IndependentTag | LOW | AndoraNapoli |
| workflow_ifc_handover | Composite: validate, ifc_to_native, map params, schedules, audit. | inline workflow pattern | MED | AndoraMASE |
| project_memory | Persist coding systems and coordination state across sessions. | extends store_project_data (SQLite) | LOW | MASEAndora |
How it maps to my projects
The pattern across all eight projects is the same: the copilot never invents the method. Every enhancement wraps a technique I already built and shipped, and makes it callable, sequenced and reviewable by an agent.
Borgo Castello
IFC-only heritage handover rebuilt into native elements, coordinated in Solibri on ACC.
Copilot: workflow_ifc_handover automates the reconstruction; heritage_condition_tagger and point_cloud_fit support the HBIM work.
Nuova Sede MASE
IFC-to-Revit across existing, demolition and new states, schedule and cost on one shared code.
Copilot: phase_state_manager sets up the three states; link_schedule_to_cost keeps time and cost cross-referenced.
Ex-Mercato Ittico
Restoration of Cosenza's market hall; a studio toolkit accelerated the detailing.
Copilot: generate_construction_docs generalises the toolkit; generate_type_schedules reproduces the Abaco.
Zayed National Museum
Fractal mound envelope rationalised for fabrication, no two adjacent faces coplanar.
Copilot: rationalize_surface and planarity_report make the surface-by-surface work a repeatable pass.
SNAM gas network
Spreadsheet coordinates reconstructed into a pipeline model, catching recording errors.
Copilot: validate_source_data (built) formalises the error-catching; reconstruct_from_coordinates wraps the rebuild.
New Shusha Mosque
Freeform form with steel hexagrid dome and diagrid façade, BOQ off the model.
Copilot: structural_frame_from_surface generates the members and nodes; quantity_takeoff reproduces the BOQ.
Patriotic War Memorial
Perforated, doubly-curved GFRC portal reconstructed cleanly to be fabricated.
Copilot: rationalize_surface panelises the canopy; run_grasshopper drives the perforation pattern.
Tour Guillot (thesis)
Six-parameter façade, optimised for daylight and PV through an ANN, translated to auto-updating detail families.
Copilot: the whole thesis becomes one loop: generate, predict, evaluate, detail. The intellectual core of this section.
Roadmap
validate_source_data (done), quantity_takeoff, generate_type_schedules, generate_construction_docs, naming_standard_audit, phase_state_manager, project_memory. Pure Revit API or composition, no bridge.run_grasshopper bridge and generate_dynamo_graph, plus everything they unlock: ifc_to_native, rationalize_surface, rule_based_clash, workflow_ifc_handover, BCF export. Once one command can drive a Grasshopper definition or a Dynamo graph, most of the geometry tools follow.surrogate_performance_predict, design_option_evaluate, daylight_energy_analysis, point_cloud_fit, ACC issue integration. Each needs an external component and a validation loop.Honest scope
This is a research direction, and it is stronger for naming its limits. A few worth stating plainly:
- Copilot, not autopilot. The agent plans and drafts; I review at the decision points. Write operations default to a dry run, and experiments happen on model copies, never production files.
- The pipeline is in-process. Rhino, Grasshopper and Dynamo are reachable precisely because they run inside Revit; workflows that need them outside Revit are out of scope for this architecture.
- Heavy simulation runs offline. Full daylight and energy solves are too slow for an interactive tool, so the design uses a trained surrogate for exploration and reserves full simulation to confirm finalists, the same approach as the Tour Guillot thesis.
- Data governance matters. Confidential models cannot be sent to a cloud model; a serious deployment would use a local or on-premise model. Confidential project detail is withheld here regardless.
The defensible version, in one line: an AI agent that orchestrates the computational-BIM tools I have already built, in-process, with me at the review gate. Everything in the "build today" and "prototype" lanes is reachable now; the rest is labelled honestly as research and vision.