In development · version 0.1.0

Heron AI

A modular, agent-based AI engineering platform for BIM. The user focuses on BIM. Heron AI focuses on everything behind the BIM work.

605fragments in the library
534of them proved against a real model
252agents behind them
51tools the chat can call

Counted on 25 October 2026, straight from the repository rather than typed here — 71 fragments are still draft, meaning they have never met a real model. These numbers move as the work moves.

Heron AI

Say what you want. Get it done, in the model.

Heron AI lets a BIM modeller, BIM coordinator or engineer drive complex Revit automation by describing the work in ordinary language.

“What’s missing before I issue this?”
“Did anything come apart? Check the ductwork.”
“Which unit feeds this? Follow the pipe.”
“Work out the air for this room, then lay out the terminals.”

Behind that sentence, Heron performs the analysis, knowledge retrieval, code generation, validation, testing, execution, logging and learning. The user never has to know C#, the Revit API, MCP, RAG, vector databases, build systems or version compatibility.

It is not a chatbot, a coding assistant, or a plain MCP server. It is a platform that turns a sentence into a checked, reversible, logged change in a real model — or into a straight answer, and nothing else.

What you can ask for 35 skills · 11 areas of Revit

Families 14

  • Build a detail item, a line-based detail or an annotation symbol familyBuilds a 2D family drawn in one view. “make a detail item family” · “build a line based detail component for insulation”
  • Build a duct or pipe fitting family that routing preferences can useBuilds a duct or pipe fitting family. “make a pipe elbow fitting family” · “build a duct fitting family with a lookup table”
  • Build a lighting fixture family with its light source and its power connectorBuilds a lighting fixture. “make a lighting fixture family” · “build a downlight family with a light source”
  • Build a line-based family whose length is set by two clicksBuilds a line-based family - placed with two clicks, its length set by them: a lintel, a skirting, a kerb, a cable ladder run, a pipe rack, a row of brackets along a wall. “make a line based family” · “build a line based lintel family”
  • Build a new family - parametric from sizes, a sketch or a picture, or fixed-size and detailedBuilds a component family in the Family Editor from an empty template. “build a new parametric family” · “make an air terminal family with a duct connector”
  • Build a parametric door or window family in the wall that hosts itBuilds a door or a window. “make a door family” · “build a parametric window family”
  • Build a parametric profile family, and use it in a sweepBuilds a profile family. “make a profile family” · “build a parametric handrail profile family”
  • Build a parametric structural framing or structural column familyBuilds a structural framing family - a beam or a brace of any section - or a structural column, from the framing or column template the modeller opened. “make a structural beam family with a custom section” · “build a steel column family”
  • Build a pattern-based curtain panel that fits every cell of a divided surfaceBuilds a pattern-based panel - the family that fills each cell of a divided surface on a mass and bends to fit it: a glass panel, a solid cladding panel, a panel with a thickness. “make a curtain panel pattern based family” · “build a pattern based panel for a divided surface”
  • Build a tag family - a pipe, duct or equipment tag - with its labels, box and label type, then load itBuilds a tag family. “build a pipe tag family” · “make a tag family for pipes showing system diameter and bottom elevation”
  • Build a wall-, ceiling-, floor-, roof- or face-based familyBuilds a hosted family. “make a wall based family” · “build a ceiling based light fitting family”
  • Build an adaptive component placed by clicking its numbered pointsBuilds an adaptive component. “make an adaptive component family” · “build a two point adaptive family”
  • Delete by id the solids and voids just modelledTakes one or more forms out of the family open in the Family Editor - a void no longer wanted, an extrusion built in the wrong place - by the ids the form tools gave back. “delete this void by its id” · “remove the solid with this id”
  • Replace in-place or loadable families with a loadable one, whatever their hosting, carrying their data acrossSwaps families in a project for one loadable family. “replace the in-place family with the loadable one” · “replace the in-place equipment with the loadable family”

Elements 3

  • Build a building's shell from a planBuilds the shell of a building from a plan the modeller gives, or from a picture once every size is agreed. “build the building from this plan” · “draw the walls of the building on this level”
  • Build a curtain wall with its grid and mullionsBuilds a curtain wall and gives it the grid and the mullions the modeller asks for, and reads back off the wall that they are there. “build a curtain wall with a 1500 grid and 50 by 150 mullions” · “set the curtain wall grid and the mullions”
  • Reinforce concrete columns, beams, footings, slabs and wallsPuts real Revit rebar into concrete members from the values in a structural spec - "4 T16 main bars and T8 links at 150 in these columns, 40 cover" - and reads every bar back off the model. “put 4 T16 main bars and T8 links at 150 in these columns, 40 cover” · “reinforce these beams”

HVAC 3

  • Duct a unit to its diffusersConnects each fan coil unit to the supply diffusers of the room in front of it with rigid ductwork. “connect the diffusers to the units” · “duct the diffusers to the fan coil unit”
  • How many air terminals, and whereWorks out how many air terminals a room needs and places them on a sensible grid. “how many diffusers for this room” · “lay out the air terminals”
  • Work out the airflow for this roomWorks out every Space's heating and cooling load and supply airflow from the model itself, shows it for review, and on the modeller's word writes the loads and airflows into the Spaces and their diffusers. “work out the airflow for this room” · “calculate the air for these spaces”

MEP 3

  • Is this still connectedChecks ductwork or pipework already built is still joined end to end, and reports where it is not. “is the ductwork still connected” · “check the connections”
  • Take a pipe or duct round a clashFinds where a pipe or duct hits a beam, a duct or anything handed in, takes that stretch of the run over or under it with a leg at each end, fits the four elbows, and proves the run is joined end to end again. “take this pipe over the beam it clashes with” · “reroute the duct under the beam and fit it”
  • What connects to whatWalks a real system from one element outward and reports what it actually reaches - for when the naming and the tags disagree with the pipework. “what is this connected to” · “trace the system from here”

Views 3

  • Do the grayoutGreys the architectural background and brings the services forward on one view. “do the grayout” · “do the grayout for MEP”
  • Make a view look good - camera, materials, light, render settings, preview and the renderWhat a visualisation artist does to make a Revit view look good, in the order it is done, each step naming the Heron capability that does it, why it is done, and what to look for in the picture afterwards. “make this view look good” · “visualise this view”
  • The builders work layoutSets up the plans and sections a builders work layout is drawn on: the model greyed back and the services hidden, the openings brought forward by view filters, one view template for the plans and one for the sections, the openings in the house family at their depth, dimensioned and tagged. “do the builders work for the layout” · “make the builders work layout”

Firefighting 2

  • Pipe the sprinklers to the mainConnects each sprinkler head to the branch main above it with rigid pipe. “connect the sprinklers to the main” · “pipe the sprinkler heads to the branch line”
  • Sprinkler heads and spacingLays out sprinkler heads to a stated hazard class and spacing, and reports what a beam or column does to the coverage.

QA 2

  • Check the model before it goes out as IFCA sweep of the live model for the things that go wrong in an IFC file and cannot be seen in Revit: an element filed under the wrong storey, one filed under none, an element that arrives as an anonymous proxy or not at all, two objects with one identity, and MEP pieces that leave their system behind. “check the model before I export IFC” · “is anything going to be lost in the IFC”
  • Which of these is missing somethingA QA sweep: which elements have a parameter attached but empty. “which ducts have no system name” · “find the blank parameters”

Reporting 2

  • How many of these are thereAnswers a bare count question with a bare number. “how many ducts are there” · “count the air terminals”
  • What sizes are theseA schedule-style table of sizes and quantities - the shape of answer a modeller reads without translating. “what sizes are the ducts” · “give me a breakdown of the pipe sizes”

Annotation 1

  • Update general notes and keep their numberingChanges the wording of the general notes on a view or a legend and keeps their 1-2-3 numbering, bullets and indents. “update the general notes and keep their numbering” · “update the general notes in the legend and keep the numbering”

Selection 1

  • Show me these on screenPuts what was found into the current selection, so it can be seen rather than described. “select all the ducts” · “highlight them”

Sheets 1

  • Make a drawing set - plans, elevations, schedules and sheetsTurns a modelled building into a set of drawings: a floor plan for every level, its elevations and its schedules, each on a sheet in the title block the modeller names, with the rooms and doors tagged, the plans dimensioned and one look applied to every plan. “make the drawing set for this building” · “create sheets with the floor plans and elevations at 1:50”
Why “how many sprinklers” is not on that list

It used to be, until September 2026. A question about how many must never quietly become an instruction to place — so the counting question went back to the counting skill, where it belongs, and the layout skill now runs only when a layout is actually what was asked for.

What is actually there 51 tools · 45 of them can only look

The Heron tab 7 on the ribbon

Everything a person presses, in the order it sits on the ribbon, in the words of the tooltip Revit shows. Changes, Admin and Publish are the permissions, and each one is a padlock you can see across the room — closed, or open.

  • HeronConnect or disconnect this Revit session. Click again to reverse it. Under its arrow: Bridge Status — Show whether the bridge is running, and on which pipe.
  • ChangesWhether Heron may change this model. Click to turn it on or off.
  • AdminWhether Heron may change how this project is set up - project parameters, worksets, global parameters. Click to turn it on or off.
  • PublishWhether Heron may send things out of the model - export, print, save, sync with central. Click to turn it on or off.
  • Ask to KeepWhether Revit shows you each change from a chat and asks Keep or Discard before it is kept. Click to turn it on or off.
  • Free this modelFree the model in front from the chat using it, so another chat can use it now.
  • CompanionOpen the Heron Companion - a page beside Revit that shows the model, the view and what is selected. Under its arrow: Turn Companion off — Switch the Companion page off or on. Heron and the chat keep working either way.
No button for each job

A Revit add-in usually puts a button on the ribbon for every job it does, because pressing the button is how you ask. Heron is the other way round — you say what you want, so there is no button per job. What earns a place on the ribbon is the connection, the switches that decide what Heron may do, and the page that sits beside Revit.

Everything in the list below is called from the chat. It reaches Revit through the bridge, and what it may do there is decided by the padlocks above.

Only looks 45

Reads the model and answers. Changes nothing, ever.

  • heron_capabilitiesList what Heron knows how to do - the jobs it can be asked for, what each one needs, and which of those needs nothing provides yet.
  • heron_checkCheck a drafted standards answer against the clauses it cites.
  • heron_companionOpen the Heron Companion - a page in the user's browser, beside Revit, that shows which model and view are in front and what is selected, live.
  • heron_compatibilityWhich Revit versions Heron's tools actually work on, and how well checked.
  • heron_contextShow what an agent would be given for a request - and what it may not carry.
  • heron_diagnoseCheck everything about Heron at once and say what is wrong.
  • heron_earlier_answersAnswers Heron kept, before D-113, under an id that every project made from the same Revit template shares (fragment-issues 5b-324).
  • heron_fireFire protection design calculations.
  • heron_gapsWhat Heron has been asked to do lately, what failed, and what is slow.
  • heron_hvacHVAC design calculations - loads, supply airflow, ashrae 62.1 outdoor air, psychrometrics, ducts, fans, diffusers, chilled water, unit conversion.
  • heron_lookupWhich capability serves a request in the user's own words.
  • heron_methodThe whole method for a job of several steps.
  • heron_researchSay what Heron does not know about a question, and what an outside answer must carry.
  • heron_research_checkCheck the citations in an answer that came from outside Heron.
  • heron_resolveAsk who can do one named capability - and what to type to run it.
  • heron_run_recordRead back what a change did in full - every element id it added, modified or deleted, and every value it left - a page at a time.
  • heron_standardsAsk each knowledge scope on its own, and say where their answers disagree.
  • heron_versionReport Heron's version, the protocol it speaks, and the version of each connected Revit add-in — and whether all three agree.
  • revit_annotationList the dimensions, tags, text and keynotes in the open Revit model, and find the ones that lie.
  • revit_building_loadsCalculate the heating and cooling load of every MEP Space in the open model (docs/44).
  • revit_edit_tableOpen a table of elements and their parameters in the Companion. Changes nothing - the edited cells are written by the page's Apply, behind the padlock.
  • revit_export_checkSay whether an export of the open Revit model would be worth sending - without exporting anything.
  • revit_familiesList the families and types in the open Revit model, and how many of each are actually placed.
  • revit_groupsList the groups and assemblies in the open Revit model, or - with a category - show which of those elements sit inside one and how many other placements an edit would reach.
  • revit_healthCheck whether Revit is reachable and what model is open.
  • revit_importsList what has been brought into the open Revit model from outside, with linked and imported told apart.
  • revit_levelsList the levels and grids in the open Revit model, and what sits on each level.
  • revit_linksList the linked models in the open Revit model — what is linked, whether each one is loaded, and how many elements each holds.
  • revit_offer_settingsPut a setting's current values in the Companion as a table, without changing anything - the page's Apply writes them, behind the padlock.
  • revit_parametersRead the parameters of every element of one category in the open Revit model.
  • revit_phasesList the phases and design options in the open Revit model, with how many elements sit in each.
  • revit_preview_moveShow what moving elements up or down would do, without changing anything.
  • revit_readAnswer a question about the open Revit model with one of Heron's capabilities that reads.
  • revit_releaseSay this chat is done with a model, so another chat can use it now.
  • revit_roomsList the rooms, MEP spaces and areas in the open Revit model, and the two states that cost real time.
  • revit_schedulesList the schedules in the open Revit model and what governs each of them.
  • revit_sheetsList the sheets in the open Revit model - numbering, titleblocks and revisions.
  • revit_sprinkler_hydraulicsRun the hydraulic calculation of one sprinkler system in the open model (docs/46).
  • revit_sprinkler_layoutPlan sprinklers for the selected Spaces or Rooms and show the layout in the Companion. Places nothing - placing is the panel's Apply, behind the padlock.
  • revit_systemsList the duct and pipe systems in the open Revit model.
  • revit_use_sessionChoose which connected Revit this chat should work with, when more than one is open.
  • revit_use_this_modelMove this chat onto whichever model is now in front in Revit.
  • revit_view_imageTake a picture of a Revit view and look at it - to check what you just did, instead of trusting a count.
  • revit_viewsList the views in the open Revit model, what governs each of them, and what the active view is showing through.
  • revit_worksetsList the worksets in the open Revit model, what is on each, and a sampled reading of who owns what.

Does something you see 4

Acts on the session - a selection, a view - and leaves no mark on the model itself.

  • revit_isolate_temporaryIsolate elements in the active Revit view, temporarily - Revit's own Temporary Hide/Isolate - so the user sees only those.
  • revit_reset_temporaryEnd the Temporary Hide/Isolate in the active Revit view - Revit's own Reset Temporary Hide/Isolate - so the view shows what its own settings show again.
  • revit_select_by_categorySelect every element of one or more categories in the open Revit model, so the user can see them highlighted on screen.
  • revit_showShow the user something in Revit.

Can change the model 2

Behind the padlock on the ribbon. Nothing here runs unless Changes is switched on.

  • revit_apply_moveApply the move the user has just approved, after seeing revit_preview_move.
  • revit_changeChange the open Revit model, and keep the change - duplicate a type, rename, change an element's type, set a parameter.
What the chat can and cannot do

Of the 51 tools the chat can call, 45 can only read and answer. 2 can change the model, and not one of them runs unless the padlock on the ribbon is open.

The library behind it 605 fragments · 19 areas of Revit

How the pieces fit 3 words

A fragment is one reusable unit of implementation — C# plus the notes that describe it. It is the thing that actually does the work. A capability is what you want done, named without naming who does it. A skill is what you can ask for in your own words. Skills name capabilities, never fragments — so a fragment can be replaced, split or retired without a single skill changing.

Every area covered 605

Click an area to open its full list. A name shown faded is still draft — it has not met a real model yet.

  • Views · 106add schedule fields, add spot elevations, apply color fill scheme… · 97 proven, 9 still draft
    add schedule fieldsadd spot elevationsapply color fill schemeapply view filterapply view templateapply visual presetassign scope box to viewaudit view filtersclose view tabscolor by parametercompare view templatescopy graphic display optionscopy view filterscreate 3D viewcreate area plancreate assembly viewscreate calloutcreate drafting viewcreate fill patterncreate filled regioncreate legend viewcreate line patterncreate line stylecreate plan viewcreate room elevationscreate section viewcreate view filtercreate view filters by rulecreate view filters by valuecreate view template from viewcreate wall elevationcreate workset 3D viewsdiagnose visibilitydimension element facesdimension family instancesdimension MEP runsduplicate viewduplicate view templateduplicate viewsfind dates in viewsfind overlapping tagsfind schedulesfind unplaced viewsfind untagged elementsfind viewsframe elements in camerahide elementshighlight vs restisolate elementsmove view cut planeopen render dialogopen viewoverride graphics in viewplace view on sheetread graphic overridesread rendered imagesread view scalerefit room elevationsrefresh viewremove tagsremove view filterremove view templaterepoint view referencereport browser organizationreport category overridesreport category visibilityreport color fill schemereport filterable parametersreport linked view usagereport render settingsreport view cut planesreport view filtersreport view referencesreport view settingsreport view template controlreport visual presetreset graphic overridesreset view graphicsset category graphicsset category solid fillset category visibilityset crop box settingsset graphic display optionsset link graphicsset render settingsset section mark visibilityset sun settingsset view cameraset view cropset view crop to shapeset view filter categoriesset view phaseset view propertiesset view rangeset view scaleset view section boxset view template controlset view underlayset view workset visibilityshow analysis heatmapshow elementstag elementstag elements in viewtest view filter matchtransfer view filters between documentstransfer views between documents
  • Elements · 90attach walls, change element type, convert CAD to DirectShape… · 79 proven, 11 still draft
    attach wallschange element typeconvert CAD to DirectShapecope framingcopy elements between documentscreate assemblycreate beam systemcreate ceilingcreate edge sweepscreate floorcreate from room boundariescreate gridscreate linecreate mass floorscreate materialcreate openingcreate partscreate railingcreate rebar bar typecreate rebar cover typecreate rebar hook typecreate roofcreate stairscreate starter materialscreate walldelete elementsdisallow joindivide partsduplicate typeedit railingextract CAD curvesfilter elements by categoryfilter elements by IDfilter elements by typefilter elements in roomflip elementsgroup by assemblygroup elementsjoin geometrylist materialslist rebar typesmatch element typemerge partsmove elements to pointoffset part facespaint facesplace area reinforcementplace beam rebarplace column rebarplace fabric reinforcementplace family instancesplace family on faceplace footing rebarplace hosted familyplace line based familyplace model groupsplace path reinforcementplace structural familyplace wall sweepsread element ownershipremap line stylesrename familyreplace materialreport analytical modelreport host rebarreport joined elementsrotate elements about axisset compound layer widthset curtain wall gridset curtain wall mullionsset element levelset element materialset element worksetset material appearanceset material colourset material propertiesset parts excludedset pin stateset railing typeset rebar coverset rebar view stateset reference plane lengthset wall constraintsslope roof edgesswitch join ordertransfer line styles between documentstransfer materials between documentstransfer object styles between documentsungroup elementsunjoin geometry
  • Families · 65add family connector, add family flip control, add family model text… · 61 proven, 4 still draft
    add family connectoradd family flip controladd family model textadd family parametersadd family shared parametersadd family type parameterarray family formscheck family size tablescombine family formscopy labels from familycreate conceptual formcreate family blendcreate family extrusioncreate family formscreate family freeform solidcreate family host openingcreate family revolutioncreate family sweepcreate family swept blendcreate reference planesdelete family parametersdivide family surfacedraw family detail linesdraw family filled regiondraw family point curvesdraw family symbolic linesextrude between planesextrude polygon between planesfind library familiesflex familylabel family dimensionlabel family radiuslink family form parameterlink family parameterlink nested type parameterload familylock form to planeslock nested family to planesopen family for editingplace adaptive pointsplace nested familyremove family connectorreport family connectorsreport family formsreport family labelsreport family parametersreport family size tablereport family tables in projectreport family templatereport family type catalogreport nested familiesset family categoryset family connector rolesset family form materialset family form subcategoryset family form visibilityset family formulaset family label layoutset family light sourceset family plane referenceset family preview viewset family settingsset family sweep profileset family type valueswrite family size table
  • MEP · 63align MEP elevation, auto size MEP, auto size pipe… · 56 proven, 7 still draft
    align MEP elevationauto size MEPauto size pipecap open pipe endscheck equipment connectorscheck fixture connectivitycheck flow directionconnect air terminalsconnect open endscopy routing preferencescreate ductcreate duct runscreate electrical circuitcreate electrical runcreate fixture branchescreate flex ductcreate flex pipecreate HVAC zonecreate MEP systemcreate MEP system typecreate panel schedulescreate pipecreate pipe segmentcreate wiresdisconnect connectorsfind dead endsfind system islandsfit MEP jointsmeasure available fallmeasure fitting areameasure MEP slopemeasure MEP velocitymeasure run quantitiesoffset MEP sectionplace accessory on runplace MEP fittingread MEP systemread space loadsreport connector loadsreport connectorsreport duct weightreport MEP pressure dropreport panel circuitsreport pipe schedulesreport pipe segmentsreport routing preferencesreport space airflowreport space envelopereport sprinkler layout spacesreport sprinkler networkselect by connection statusselect by electrical circuitselect by insulationselect by MEP systemset air terminal flowset MEP insulationset MEP justificationset MEP sizeset MEP slopeset MEP system typeset routing preferencesplit MEP runtrace connectivity
  • Document · 40acquire coordinates, activate document, copy from link… · 29 proven, 11 still draft
    acquire coordinatesactivate documentcopy from linkcreate family documentcreate levelscreate project documentcreate worksetexport model to NWCextract dates from textimport CADlink fileslist categorieslist linked modelslist worksetsread model file inforeload linksrename worksetreport addin datareport coveragereport design optionsreport external referencesreport geometry complexityreport level elevationsreport material takeoffreport material texturesreport open documentsreport phasesreport project informationreport project unitssave documentset design optionset link path typeset link room boundingset project locationset project unitsset worksharing ownershipswitch active projectsync with centralunload linksupgrade family files
  • Selection · 39create selection filter, find purgeable elements, find unused images… · 35 proven, 4 still draft
    create selection filterfind purgeable elementsfind unused imagesorder elements by positionread selectionselect by categoriesselect by category nameselect by connector sizeselect by design optionselect by familyselect by hostselect by levelselect by materialselect by numeric parameterselect by parameter valueselect by phaseselect by pin stateselect by worksetselect dimensions by valueselect family formsselect from linkselect from saved setselect group membersselect hidden in viewselect in regionselect openingsselect scope boxesselect subcomponentsselect touchingselect typesselect unenclosed roomsselect view templatesselect visible in viewselect with warningsselect without levelset selectionupdate saved setzoom to elementszoom to linked elements
  • Geometry · 37add toposolid subdivision, align elements, array elements… · 32 proven, 5 still draft
    add toposolid subdivisionalign elementsarray elementsarray elements radialcheck obstructionscopy elementscreate toposoliddistribute along runedit slab shapeedit toposolidfillet linesfind nearest elementsmeasure ceiling heightmeasure distancemeasure perimetermeasure room dimensionsmirror elementsmove elementsmove to ray hitoffset elementsplace adaptive componentsplan connection orderprobe around elementsread ceiling gridread room geometryread scope box extentreport areasreport bounding boxreport centroidreport divided surfacesreport door room linksreport element geometryreport locationrotate elementssnap to gridstraighten off axis linestrim extend elements
  • Sheets · 33add revision cloud, align viewports across sheets, center viewports on sheets… · 32 proven, 1 still draft
    add revision cloudalign viewports across sheetscenter viewports on sheetscreate revisioncreate revision numbering sequencecreate revisions from sheet datescreate sheetcreate sheet listcreate sheetsdelete revisiondelete revision numbering sequenceduplicate sheetsedit revisionedit revision numbering sequenceexport sheets to PDFfind sheetsfind sheets by revision or numberlist dates on sheetslist revisionslist sheet setslist sheetslist views on sheetmanage sheet setsmerge revisionplace views on sheetreorder revisionreport sheet title blocksreport viewport typesset print settingsset revision settingsset sheet revisionsset sheet title blockset viewport title line
  • QA · 27audit MEP openings, check category mismatch, check ceiling coordination… · 22 proven, 5 still draft
    audit MEP openingscheck category mismatchcheck ceiling coordinationcheck equipment clearancecheck family standardscheck insulation clearancecheck link coordinatescheck minimum clearancecheck model standardscheck sleeve sizecheck structural supportscheck surface fitcheck valve accessibilitycheck vertical clearancecompare elementscompare modelsdescribe blank parametersfind clashesfind unused definitionsfind unused group typesfind unused materialspropose MEP openingsreport constraintsreport element dependenciesreport element ownershipreport findingsreport mirrored instances
  • Annotation · 24arrange tags, arrange tags to view edges, center room tags… · 21 proven, 3 still draft
    arrange tagsarrange tags to view edgescenter room tagscopy tags to replacementscreate angular dimensioncreate dimensioncreate linear dimensioncreate radial dimensioncreate text notedimension grids and levelsdimension roomsdimension wall openingsforce tag leader lshapemove annotationoffset tags from hostplace detail componentsplace flow arrowsreport keynotesreport spot dimensionsreport tags and targetsreport text typesset text typestack tagstag rooms
  • Parameters · 21add project parameter, assign location data, copy parameter value… · 14 proven, 7 still draft
    add project parameterassign location datacopy parameter valuecreate global parameteredit parameter textedit text valuesexport parameters to CSVimport parameter valuesread element parametersread element tableremove parameter valuerename elementsrenumber sequentialreport embodied carbonreport global parametersreport parameter inventoryreport shared parameter fileset global parameterset parameter values by IDtransfer project parameters between documentswrite element parameters
  • Reporting · 14count by spatial container, count elements, describe elements… · all proven
    count by spatial containercount elementsdescribe elementsfind views showing elementgroup and countmeasure element lengthsmeasure element volumeread element levelread element materialread element phasereport compound structurereport curtain elementsreport curtain wall typesum by group
  • Schedules · 12add schedule combined field, create key schedule, create schedule… · all proven
    add schedule combined fieldcreate key schedulecreate scheduleexport schedule to CSVplace schedule on sheetread schedule contentsremove schedule fieldsreport schedule definitionset schedule appearanceset schedule field totalsset schedule filtersset schedule sort group
  • Rooms · 10create area boundary lines, create room separation lines, place areas… · all proven
    create area boundary linescreate room separation linesplace areasplace room at pointplace roomsreport area volume computationsreport room space dataset area volume computationsset room limitssync spaces with linked rooms
  • Datums · 8add datum leaders, create grid, create radial grids… · all proven
    add datum leaderscreate gridcreate radial gridslist gridsmaximize datum extentsreset datum extentsset datum bubblesset datum extent type
  • Quality · 8check room MEP completeness, find degenerate lines, find duplicate elements… · 7 proven, 1 still draft
    check room MEP completenessfind degenerate linesfind duplicate elementsfind duplicate valuesfind overlapping linesfind unused familiesfind views without templateread model warnings
  • Export · 5export families, export model to IFC, export view image… · 2 proven, 3 still draft
    export familiesexport model to IFCexport view imageexport views to DWGexport views to FBX
  • Levels · 2create level, list levels… · all proven
    create levellist levels
  • Phases · 1set element phase… · all proven
    set element phase

What “proven” means here 534 of 605

A compile is not a proof. A passing test is not a proof. A proof is a recorded run against a named real model, with a negative case and a fingerprint that goes stale the moment the code changes underneath it. 534 fragments have one. 71 do not, and stay marked draft until they do — including every fragment re-authored from Ajmal’s earlier libraries, which arrives here unproven no matter how well it worked where it came from.

How it is built four parts, and only one of them is inside Revit

The four parts 4

  • Heron RevitThe add-in, the ribbon, and everything that touches the Revit API. C#, running inside Revit itself — and deliberately the smallest of the four parts, because it is the only one that can bring Revit down with it.
  • Heron MCPThe controlled bridge between the AI layer and Revit. A named pipe on the same machine — never a network socket.
  • Heron BrainSkills, fragments, retrieval, memory and knowledge. Python, on your own PC.
  • Heron PlatformInstall, update, packages, registry, security. The layer underneath the other three.

What happens when you ask for something 5 steps

  1. You type a sentence“Select all ducts” — in ordinary words, in the chat.
  2. The brain works out what you meantWhich capability this needs, and which fragment currently provides it.
  3. The request crosses the bridgeDown a named pipe that exists only on your machine. No socket, no port, no internet.
  4. Revit does the work on its own threadThrough a single scheduled event — the only safe way to reach the Revit API without bringing Revit down.
  5. You see it on screenThe selection changes, or the answer comes back, and one line goes into the audit log.

Three kinds of agent 252

  • Tier 1 — service · 169Plain deterministic code. Never calls a language model at all. Runs in about a millisecond.
  • Tier 2 — reasoner · 63One tightly scoped model call with a strict contract. Hundreds of milliseconds.
  • Tier 3 — worker · 20A full agentic loop with tools. Seconds to minutes, and used sparingly.

Roughly two thirds of the agents never call a model at all, and that is deliberate. Once “select all ducts” has a proven fragment, the whole run should be ordinary code — the model is asked what you meant, then gets out of the way. Faster, repeatable, and the same question twice gives the same answer twice.

Why it is safe to point at a real model the part that matters most

Before it can change anything 4

  • Writing is off until you turn it onThere is a padlock button on the Heron ribbon tab. Closed, Heron can read the model and nothing else. It ships closed and stays closed until you open it.
  • It tells you what it is about to do“This will move 247 ducts up by 200 mm. 12 of them are owned by another user and will be skipped. Proceed?” — before anything moves.
  • The preview is the real run, undoneNot a simulation that could be wrong. Heron does the work for real inside a transaction and rolls it back, so what you are shown is what would actually have happened.
  • Seven permission levelsRead, analyse, suggest, execute, modify, publish, admin. The boundary that matters is between the ones that only look and the ones that change something.

While it is working 3

  • Everything it changes is one Ctrl+ZEvery modifying operation runs inside exactly one transaction group, named after what you asked for. Your undo stack reads “Heron: Move ducts 200 mm up” — one entry, not two hundred.
  • Revit tells you it is still aliveRevit runs one thing at a time on the thread that also draws the screen, so while Heron works Revit is genuinely frozen — and a frozen application with no explanation reads as a crash. A banner counts the seconds and says whether Heron is reading or changing, which is the real question.
  • A runaway script cannot take Revit downA fragment that recursed forever used to end Revit and the unsaved model with it. Now it comes back as an ordinary error with Revit still running. Proved in front of Revit on 16 September 2026.

Where your data goes 3

  • The part inside Revit opens no connectionsNo sockets, listening on no ports. It speaks over a named pipe to another process on the same machine, and that is the only way out of it. An IT department can be told that accurately, and check it.
  • Models never leave your machineRevit and family files are refused by file extension before they are even opened. Documents can be indexed; models and families go nowhere.
  • It will not invent a standardAny claim about ISO 19650, QCS, Ashghal or a company standard has to cite an indexed source document. No source, no claim — an uncited standards answer is treated as a bug, not as a low-confidence answer.

Where it actually stands version 0.1.0 · not released

What has been proved, and on which Revit honestly

Every row here is a thing somebody watched happen in front of a real Revit, on a named date. Nothing on this page is called proven because it compiled.

  • The bridgeProven in Revit 2020 and 2024. One button connects; the thread hop counted 5,844 elements in a live 2024 model and 3,167 in 2020; “select all ducts” found four and highlighted them in both. With two Revits open it refused to guess, and stopped when the chosen one closed.
  • The first writeMeasured on one release. On 17 October 2026, three ducts in a copy of Autodesk’s MEP sample moved +200.0000 mm each in Revit 2024, read back two ways; a pinned duct beside them did not move; and one Ctrl+Z put them back. A forced failure mid-move and the other rails are still owed.
  • Keep or Discard, and the safety railsRun in Revit 2024 and 2027 on 18 October 2026, on the owner’s laptop, with Keep, Discard, Esc and Undo pressed by hand. The faults it found were logged, not hidden.
  • A fragment cannot end RevitProved in front of Revit on 16 September 2026. A runaway recursion comes back as a finding, with Revit still running.
  • The fragment libraryMostly proven, the rest draft. A draft is not “unwritten” — it is not proven as it stands: either new, or sent back when its code changed. The split is counted straight from the repository at the top of this page.
  • The skillsAll 35 are still draft. A skill is what you can ask for in your own words; none of them has yet been proved end to end against a real model.

How it is put together the short answer

  • HostA Claude Code plugin — skills, subagents, the MCP server and the Revit add-in.
  • Revit support2020 to the latest release, and every future one. Declared support and tested releases are two different lists, and heron_compatibility tells them apart rather than blurring them.
  • LanguagesC# for everything that touches Revit. Python for the brain and the MCP side.
  • TransportNamed pipes. The add-in is the server, and it is local-only by construction — not by configuration.
  • Revit threadingOne ExternalEvent, one request queue, one handler. The rule the Revit API actually imposes, obeyed in one place.
  • Generated codeC# compiled at run time inside Revit’s process. No fragment is production-compiled yet, so today every one — proven included — is compiled when it runs.
  • Licence and distributionApache 2.0, free and open source on public GitHub.
Please do not install this yet

The repository is public only so the work is open. It is still not finished. I will announce it on LinkedIn and here on this site when it is ready to install. Until then, feel free to read and follow along.

Programmers and AI engineers — your thoughts are very welcome. Please read the code and share your suggestions, ideas or corrections through an Issue or a Discussion. That help is what I am asking for now, not installs.

Open on purpose

Read the code and tell me what is wrong

Heron AI is public because the work should be open, not because it is finished. If you build Revit tools, write AI systems, or can simply see where this is going to break — that is the help worth having right now.

Looking for an MEP BIM Coordinator?

Doha, Qatar · transferable QID with NOC · able to join within days.