skill
EDA Bridge Standard: one way for an AI to drive every PCB tool
Public Made by Adomby adom
The standard every Adom EDA bridge follows so one AI can drive Altium, KiCad, Fusion 360 and any future PCB tool the same way: shared verb names in tiers, the board model JSON, reply and refusal conventions, and a coverage table of each bridge against the Altium reference.
← Commit history
Fusion bridge 1.12.1 reference: 77 of 182 standard verbs (was 56): set_track_width, remove_items, set_outline, board_shape, board_outline, set_layer_visibility, select_net, run_erc, autoroute and 10 app aliases; coverage regenerated
4 files changed
+379−91
README.md+4−4@@ -42,12 +42,12 @@ verb by verb: [docs/coverage.md](docs/coverage.md). <!-- coverage:start (tools/generate.py writes this) --> | Tier | Verbs | Altium | KiCad | Fusion 360 | |---|---|---|---|---|-| **core** | 60 | 60 | 38 | 20 |-| **native** | 34 | 34 | 23 | 14 |+| **core** | 60 | 60 | 37 | 26 |+| **native** | 34 | 34 | 23 | 16 | | **checks** | 32 | 32 | 7 | 2 |-| **app** | 56 | 56 | 24 | 20 |+| **app** | 56 | 56 | 24 | 33 | | **platform** | 19 | 19 | 0 | 0 |-| standard (all but platform) | 182 | 182 | 92 | 56 |+| standard (all but platform) | 182 | 182 | 91 | 77 | <!-- coverage:end --> The **checks** tier is where the other bridges are furthest behind, and it is the cheapest to close: those verbs are
docs/coverage.md+41−41@@ -1,17 +1,17 @@ # Coverage: every standard verb on each bridge -Reference: Altium bridge 0.2.75. Compared: KiCad bridge 1.0.62, Fusion 360 bridge 1.12.0.+Reference: Altium bridge 0.2.75. Compared: KiCad bridge 1.0.61, Fusion 360 bridge 1.12.1. `exact` is the same job under the same or an equivalent name; `partial` does part of it or does it differently; blank is missing. Generated by `tools/generate.py` from `verbs/coverage.json`; do not edit by hand. | Tier | Verbs | Altium | KiCad | Fusion 360 | |---|---|---|---|---|-| **core** | 60 | 60 | 38 | 20 |-| **native** | 34 | 34 | 23 | 14 |+| **core** | 60 | 60 | 37 | 26 |+| **native** | 34 | 34 | 23 | 16 | | **checks** | 32 | 32 | 7 | 2 |-| **app** | 56 | 56 | 24 | 20 |+| **app** | 56 | 56 | 24 | 33 | | **platform** | 19 | 19 | 0 | 0 |-| standard (all but platform) | 182 | 182 | 92 | 56 |+| standard (all but platform) | 182 | 182 | 91 | 77 | ## core @@ -22,19 +22,19 @@ Read and edit the design. Every bridge provides these: they are how an AI sees a | `add_body` | Put a 3D body on a footprint of a PcbLib: a STEP model, or an extruded box when no step is given. It REPLACES the footprint's existing 3D bodies (a... | | | | `add_models` | Attach one or more PCBLIB footprint models, parameters, comment and description to a SchLib component (Altium's several-footprints-per-symbol mechanism). | | | | `add_symbol_art` | Draw the chip-outline artwork (the chip-thumbnailer polylines adom-symbol baked into the KiCad symbol) into a SchLib component, fitted to its body... | | |-| `apply_silkscreen` | Land a silkscreen plan in one undo step: designators and comments moved, sized and turned (or hidden), free overlay texts and lines added (bottom texts... | `kicad_silk_fields_batch / kicad_silk_text_batch / kicad_silk_graphics_batch` | |-| `board_outline` | Draw the board shape as tracks and arcs on a mechanical layer: the outline a fab house reads from the Gerbers. A board built by script has its shape but... | `kicad_board_outline` | |-| `board_shape` | Redefine the CURRENT board's outline as a wMm x hMm rectangle at (x0Mm, y0Mm) by rewriting the board outline's segments. | `kicad_board_outline` | |+| `apply_silkscreen` | Land a silkscreen plan in one undo step: designators and comments moved, sized and turned (or hidden), free overlay texts and lines added (bottom texts... | `kicad_silk_fields_batch / kicad_silk_text_batch / kicad_silk_graphics_batch` | `fusion_apply_silkscreen` |+| `board_outline` | Draw the board shape as tracks and arcs on a mechanical layer: the outline a fab house reads from the Gerbers. A board built by script has its shape but... | `kicad_board_outline` | `fusion_board_outline` |+| `board_shape` | Redefine the CURRENT board's outline as a wMm x hMm rectangle at (x0Mm, y0Mm) by rewriting the board outline's segments. | `kicad_board_outline` | `fusion_board_shape` | | `board_summary` | One-screen summary of the current board, shaped from one read_board round trip: component counts by side, nets, copper layers actually in use, rule counts. | `kicad_board_summary` | `fusion_board_summary` | | `clone_symbol` | Copy a symbol inside the current SchLib under a new name, all display modes included. | | | | `component_data` | Placement data for one board component, or for all of them: footprint pattern, comment, layer/side, position, rotation, size, pad count and the nets on its... | `kicad_component_data` | `fusion_component_data` | | `component_pins` | Every pad of one board component with its net, position, layer, size and hole. | `kicad_component_pins` | `fusion_component_pins` | | `copper_layers` | Every copper layer Altium can address on the current board (top, mid 1-30, planes 1-16, bottom) with names and visibility. | `kicad_copper_layers` | `fusion_copper_layers` | | `copy_footprint` | Duplicate a footprint inside the current PcbLib under a new name (every primitive replicated). | | |-| `create_footprint` | Create one footprint from a pad list in a PcbLib (the library is created and saved if the path does not exist) and return a proof frame. | `kicad_create_footprint` | |-| `create_symbol` | Create one rectangular symbol from a pin list in a SchLib (the library is created and saved if the path does not exist) and return a proof frame. | `kicad_create_symbol` | |+| `create_footprint` | Create one footprint from a pad list in a PcbLib (the library is created and saved if the path does not exist) and return a proof frame. | `kicad_fp_create` | |+| `create_symbol` | Create one rectangular symbol from a pin list in a SchLib (the library is created and saved if the path does not exist) and return a proof frame. | `kicad_sym_create` | | | `doc_params` | Read or set a sheet's document parameters: the title block (Title, DocumentNumber, Revision, DrawnBy, Author, CompanyName, ...). | | |-| `find_symbol` | Find symbols (or footprints with kind:'footprint') by part of their name across libraries: the given ones, or every installed .SchLib/.PcbLib. | `kicad_find_symbol` | |+| `find_symbol` | Find symbols (or footprints with kind:'footprint') by part of their name across libraries: the given ones, or every installed .SchLib/.PcbLib. | | | | `footprint_primitives` | Geometry dump of one PLACED component: its tracks, arcs, pads (with solder and paste mask expansion in um) and texts in mils with layer ids; other primitive... | `kicad_fp_info` (partial) | | | `layer_stack` | The CURRENT board's stack-up: copper layers in order with copper thickness and the dielectric under each (height, constant, material), and the total... | `kicad_layer_stack` | `fusion_layer_stack` | | `layers` | The current board's layer set with ids, names, kind and whether each is displayed. | | `fusion_layers` |@@ -53,10 +53,10 @@ Read and edit the design. Every bridge provides these: they are how an AI sees a | `read_board` | ONE round trip: components, nets, layers, copper, rules, occupancy, outline. | `kicad_board_summary` (partial) | `fusion_board_info / fusion_get_design_info` (partial) | | `read_rules` | Every design rule on the current board, flat, disabled ones included: name, kind ordinal, enabled, priority, both scope expressions, comment, and Altium's... | `kicad_list_design_rules` | `fusion_read_rules` | | `read_schematic` | Components on the CURRENT schematic sheet (designator, library reference, comment, position, parameters) in one agent round trip. | `kicad_sch_components` (partial) | `fusion_schematic` (partial) |-| `read_symbol` | Read a SchLib component back: description, display-mode count, the pins of mode 0 (designator, name, electrical type), every parameter with its hidden flag,... | `kicad_read_symbol` | |+| `read_symbol` | Read a SchLib component back: description, display-mode count, the pins of mode 0 (designator, name, electrical type), every parameter with its hidden flag,... | `kicad_sym_info` | | | `remove_footprint` | Delete one footprint from the current PcbLib. | | |-| `remove_items` | Delete specific free tracks and vias, given exactly as altium_routing_state returned them. One undo step. | `kicad_remove_route` (partial) | |-| `remove_symbol` | Delete one component from the current SchLib. | `kicad_remove_symbol` | |+| `remove_items` | Delete specific free tracks and vias, given exactly as altium_routing_state returned them. One undo step. | `kicad_remove_route` (partial) | `fusion_remove_items` |+| `remove_symbol` | Delete one component from the current SchLib. | `kicad_sym_delete` | | | `rename_footprint` | Rename a footprint in the current PcbLib. | | | | `rename_symbol` | Rename a component (LibReference) in the current SchLib. | | | | `ripup_nets` | Delete every free track, arc and via on each named net. One undo step. | | `fusion_ripup_nets` |@@ -66,13 +66,13 @@ Read and edit the design. Every bridge provides these: they are how an AI sees a | `sch_connect` | Connect pins of placed parts: a wire stub from each pin's outer end plus a net label (kind label), a power port (kind power: GND-like nets get a ground... | `kicad_sch_wire / kicad_sch_label` (partial) | | | `sch_edit` | Change placed parts on a sheet: move (to x,y mil), moveBy (dx,dy), rotate (degrees), rename (designator), re-comment (comment), delete. One undo step. | `kicad_sch_set_property / kicad_sch_move / kicad_sch_delete` (partial) | | | `sch_place_part` | Place a component from a .SchLib onto an EXISTING sheet at a position, with its library parameters (MPN, Manufacturer, distributor numbers) and its... | `kicad_sch_place_symbol` | |-| `sch_sheet_symbol` | Make a design hierarchical: a sheet symbol on the parent sheet for a child sheet, its entries joined to the parent's nets, and matching ports on the child.... | `kicad_sch_sheet_symbol` | |+| `sch_sheet_symbol` | Make a design hierarchical: a sheet symbol on the parent sheet for a child sheet, its entries joined to the parent's nets, and matching ports on the child.... | `kicad_sch_sheet` (partial) | | | `sch_swap_part` | Replace a placed part with another library part (a different value, package or symbol) at the same place, designator and rotation, keeping its connections:... | `kicad_sch_replace_symbol` (partial) | | | `schematic_data` | Components on a schematic sheet (filePath, else the CURRENT sheet) with their pins (number, name, electrical type), position and orientation. designator... | `kicad_sch_components` (partial) | | | `set_models` | Replace every footprint model on a SchLib component with ONE PCBLIB model (set_params footprint and add_models APPEND, which is how a symbol ends up with two). | | |-| `set_outline` | Reshape the current board's outline (a rectangle with rounded corners, or a polygon). One undo step. | `kicad_board_outline` | |+| `set_outline` | Reshape the current board's outline (a rectangle with rounded corners, or a polygon). One undo step. | `kicad_board_outline` | `fusion_set_outline` | | `set_params` | Set parameters on a SchLib component, optionally its comment, and optionally link a footprint by name. | | |-| `set_track_width` | Set the width of the EXISTING tracks and arcs on nets or a net class (rules only steer new routing). Widen power nets after routing, or thin a net that... | `kicad_modify_track` (partial) | |+| `set_track_width` | Set the width of the EXISTING tracks and arcs on nets or a net class (rules only steer new routing). Widen power nets after routing, or thin a net that... | `kicad_modify_track` (partial) | `fusion_set_track_width` | | `set_visibility` | Show or hide one named parameter on a SchLib component. | | | | `sheet_params` | Write parameters onto PLACED parts on the schematic sheets (the BOM write-back): MPN, Manufacturer, Mouser/DigiKey/LCSC numbers, anything. A missing... | | | | `silk_state` | The silkscreen as it stands: every part's body box, its designator and comment (text, location, size, rotation, shown, Altium's measured box), and the free... | | `fusion_silk_state` |@@ -86,10 +86,10 @@ Wraps the EDA tool's own feature (its DRC, ERC, Gerbers, pours, Update PCB). Eve | Verb | What it does | KiCad | Fusion 360 | |---|---|---|---|-| `add_rule` | Add one SCOPED design rule that set_design_rules' board-wide values cannot express: a net's or class's clearance or width, a length limit, a matched-length... | `kicad_add_rule` | |-| `annotate` | Number every '?' designator (R?, C?, U?) across the project's sheets: the lowest free number per prefix, top-left first on each sheet. dryRun shows the plan. | `kicad_annotate` | |+| `add_rule` | Add one SCOPED design rule that set_design_rules' board-wide values cannot express: a net's or class's clearance or width, a length limit, a matched-length... | `kicad_custom_rules` | |+| `annotate` | Number every '?' designator (R?, C?, U?) across the project's sheets: the lowest free number per prefix, top-left first on each sheet. dryRun shows the plan. | `kicad_sch_annotate` | | | `apply_pours` | Add solid polygon pours from outlines and pour them, each with its own connect style (solid joints or thermal spokes), plus pour keepouts (polygon cutouts);... | `kicad_add_zone / kicad_apply_zone_plan` | `fusion_apply_pours` |-| `autoroute` | Altium's own autorouter (Situs) on the current board: picks a strategy, keeps existing routing locked by default, routes, and answers the unconnected count... | `kicad_autoroute` | |+| `autoroute` | Altium's own autorouter (Situs) on the current board: picks a strategy, keeps existing routing locked by default, routes, and answers the unconnected count... | `kicad_autoroute` | `fusion_autoroute` | | `build_symbol_modes` | Build ONE SchLib component with N display modes (Normal + Alternate 1..N-1) from a symbol_modes spec file on this machine, and return a proof frame. | | | | `cleanup_libs` | Remove the factory-default stray every fresh library carries: Component_1 from the current SchLib and an empty (no pads) PCBComponent_1 from the current PcbLib. | | | | `compile` | Compile a project and return Altium's Messages panel (ERC + connectivity) with counts by class. With no path it compiles Altium's bundled example project. | | |@@ -97,29 +97,29 @@ Wraps the EDA tool's own feature (its DRC, ERC, Gerbers, pours, Update PCB). Eve | `diff_pairs` | Differential pairs on the current board: list them, define one from two nets (replacing a pair of that name), or remove one. Altium's differential-pair... | | | | `export_bom` | Bill of materials export: altium_run_outjob with the assembly OutJob and the 'Folder Structure' medium as defaults. | `kicad_export_bom_csv` (partial) | `fusion_export_bom` | | `export_gerber` | Gerber/drill export: altium_run_outjob with the fabrication OutJob and the 'Folder Structure' medium as defaults. | `kicad_export_gerber` | `fusion_export_gerber` |-| `export_manufacturing` | A project's manufacturing set in one call: Gerbers, NC drill, pick and place (CSV, mm) and the BOM, from an OutJob the bridge writes beside the project... | `kicad_export_manufacturing` | `fusion_export_gerbers / fusion_export_cpl / fusion_export_bom` (partial) |+| `export_manufacturing` | A project's manufacturing set in one call: Gerbers, NC drill, pick and place (CSV, mm) and the BOM, from an OutJob the bridge writes beside the project... | `kicad_export_gerber / kicad_export_pos` (partial) | `fusion_export_gerbers / fusion_export_cpl / fusion_export_bom` (partial) | | `export_pdf` | Every sheet of a project as one PDF, plus on request the board's composite print, Altium's assembly drawings (top and bottom, designators on the parts) and... | `kicad_export_pdf` | | | `export_step` | Headless STEP export of a board. Default lane 'outjob': Altium's own ExportSTEP output run from a throwaway project in %TEMP% that points at the board - no... | `kicad_export_step` | `fusion_export_step` | | `install_library` | Register a library file in Altium's Installed Libraries (IntegratedLibraryManager.InstallLibrary) so its parts appear in the Components panel. | `kicad_install_library` | | | `install_library_bundle` | One-click install of a wiki library bundle (zip of .SchLib/.PcbLib): unpack, register, open the library, prove it with a frame. | `kicad_install_library_bundle` | `fusion_install_library_bundle` | | `list_installed_libraries` | Every library in Altium's Installed Libraries list (read-only). | | |-| `net_classes` | Net classes on the current board: list them with their nets, or make one (replacing a class of that name) with an optional width and clearance rule scoped... | `kicad_net_classes` | `fusion_net_classes` |+| `net_classes` | Net classes on the current board: list them with their nets, or make one (replacing a class of that name) with an optional width and clearance rule scoped... | `kicad_netclasses` | `fusion_net_classes` | | `netlist` | The compiled netlist of a project: every net with its pins (Designator.Pin) across every sheet, the hierarchy resolved; or one net; or compare with the nets... | `kicad_netlist` | `fusion_netlist` | | `panelize` | Step and repeat a board into a manufacturing panel: a new .PcbDoc holding Altium's own embedded board array of the board (rows x cols), with rails, the... | | | | `pcb_report` | Numbers instead of pixels: for a PcbLib, every footprint's pads, pad bounding box, primitive census and 3D bodies; for a board, outline, components with... | `kicad_errors` (partial) | | | `pour_state` | Every polygon pour with the copper it actually poured: filled area per pour and per layer, and the pours that poured nothing. | `kicad_pour_state` | `fusion_pour_state` | | `remove_pours` | Delete polygon pours by net (and layer), or all of them, and the pour keepouts (cutouts) apply_pours made. Tracks and vias are untouched. | `kicad_remove_zone` | `fusion_remove_pours` | | `replicate_layout` | Copy one channel's placement to matching channels: each target keeps its anchor part where it is and every other part takes the source's offset and rotation... | | |-| `repour` | Repour every polygon on the board (Altium's Repour All) and answer the copper after. Runs outside the script engine so scoped rules apply. | `kicad_repour` | `fusion_repour` |+| `repour` | Repour every polygon on the board (Altium's Repour All) and answer the copper after. Runs outside the script engine so scoped rules apply. | `kicad_refill_zones` | `fusion_repour` | | `routing_drc` | Design-rule violations on the current board WITH locations, plus the unrouted (ratsnest) count, as one clean/not-clean answer. | `kicad_routing_validate` (partial) | `fusion_routing_drc` | | `run_drc` | Run the design rule check on a board and read the violation markers back. PCB:DesignRuleCheck opens a MODAL; the bridge clicks 'Run Design Rule Check'... | `kicad_run_drc` | `fusion_run_drc` |-| `run_erc` | Electrical rules check. Same handler as altium_compile: in Altium, compiling the project IS the ERC. | `kicad_run_erc` | |+| `run_erc` | Electrical rules check. Same handler as altium_compile: in Altium, compiling the project IS the ERC. | `kicad_run_erc` | `fusion_run_erc` | | `set_design_rules` | Write a fab's design rules into the current board: clearance, track width, routing via style, hole size, annular ring, hole-to-hole and board-edge clearance... | `kicad_set_design_rules` | `fusion_set_design_rules` | | `silkscreen_prep` | Clean the silkscreen off the copper with Altium's own Tools > Silkscreen Preparation: silk clipped clear of every mask opening (pad) by the board's silk... | | | | `symbol_mode` | Show one display mode (0 = Normal, 1.. = alternates) of the CURRENT SchLib component in the editor and capture a frame. Drives the editor's own mode toggle,... | | | | `teardrops` | Add (or remove) teardrops with Altium's own Tools > Teardrops: on vias and through-hole pads, SMD pads, track width changes and T-junctions, for the whole... | | | | `uninstall_library` | Remove libraries from Altium's Installed Libraries: the inverse of install_library / install_library_bundle. Library files are never touched. | `kicad_uninstall_library` | |-| `update_pcb` | Design > Update PCB Document from the schematic (the engineering change order): parts added, removed or renamed, nets and footprints updated on the board.... | `kicad_update_pcb` | |+| `update_pcb` | Design > Update PCB Document from the schematic (the engineering change order): parts added, removed or renamed, nets and footprints updated on the board.... | `kicad_update_pcb_from_schematic` (partial) | | ## checks @@ -139,7 +139,7 @@ Engineering computed from the board model, not by the tool: one shared engine, s | `copper_balance` | How much of each copper layer is copper (tracks, pads, vias and what Altium actually poured, inside the outline; a plane counts full), and how far apart... | | | | `cross_check` | Compare one schematic sheet's designators with a board's. Altium holds ONE current document, so the verb activates the board, reads it, then activates the... | `kicad_analyze_connections` (partial) | | | `current_capacity` | Will this trace carry the current? For each power net and its current: the narrowest track on every layer it is routed on against the width IPC-2221 needs... | | |-| `fab_check` | Before ordering: the board's fab-relevant minimums measured from the live board (narrowest track, smallest via drill, diameter and annular ring, smallest... | `kicad_fab_check` | |+| `fab_check` | Before ordering: the board's fab-relevant minimums measured from the live board (narrowest track, smallest via drill, diameter and annular ring, smallest... | `kicad_validate_for_fab` | | | `find_space` | Free spots on the board for a part near another (clear of every other part on that side, of that side's tracks and vias, and inside the outline), nearest... | | | | `footprint_from_land_pattern` | Build a complete footprint from the land pattern a datasheet prints: pads numbered the standard way (chip, dual SOIC/TSSOP/DFN, SOT, quad QFP/QFN, BGA), an... | | | | `height_check` | Will it fit the enclosure? Each part's height from its 3D bodies (top and bottom side), the parts over a height limit board-wide or under a lid feature in a... | | |@@ -153,7 +153,7 @@ Engineering computed from the board model, not by the tool: one shared engine, s | `read_sheet_file` | Read a schematic sheet straight from its .SchDoc file, without Altium (it need not be installed or running): every part with its designator, library... | | `fusion_read_sheet_file` | | `return_path` | Where signal tracks lose their reference: for every signal net, the length of track on each layer that runs over no pour or plane copper on either... | | | | `review_board` | Design-review checks (14) over one board read; schematic checks with includeSchematic. | `kicad_lint_board` (partial) | |-| `route_pair` | Route a differential pair as a pair: one centreline from the source pads' midpoint through waypoints to the destination pads' midpoint, each net offset to... | `kicad_route_pair` | |+| `route_pair` | Route a differential pair as a pair: one centreline from the source pads' midpoint through waypoints to the destination pads' midpoint, each net offset to... | `kicad_route_diff_pair` | | | `schematic_review` | Review the schematic before Update PCB: every placed pin (read from the sheet files, with its electrical type) against Altium's compiled netlist. Errors:... | `kicad_sch_check / kicad_design_review / kicad_lint_schematic` (partial) | | | `silk_designators` | Place every reference designator the way assembly houses want: one size, upright, beside its own part, clear of every pad (JLCPCB: 0.15 mm), every other... | | | | `test_board` | Place one footprint, or a ';' list, from the open PcbLib on ONE board: a NEW board (wMm x hMm outline) when pcbPath is new or omitted, APPENDED to the... | | |@@ -172,14 +172,14 @@ Driving the application itself (launch, licence, dialogs, windows, views). Each | `agent_status` | Is the agent loop alive and responsive, in which workspace, and is any loop resident anywhere? Read-only; never starts the agent. | | | | `agent_stop` | Stop the selected instance's resident agent loop (drops a stop file and waits up to 12 s for the heartbeat to go stale). | | | | `animate_view` | Camera/zoom choreography on the current document - native Altium camera commands, animated by Altium itself. | | |-| `check_dialogs` | List every Altium dialog currently open, classified, each with a screenshot (the only way to READ one: Altium paints its dialog text). | | |+| `check_dialogs` | List every Altium dialog currently open, classified, each with a screenshot (the only way to READ one: Altium paints its dialog text). | | `fusion_check_dialogs` | | `close` | Polite close (releases the licence seat). Frees a script engine parked on a breakpoint first (Altium refuses to close over one). discardChanges:true answers... | `kicad_close` | `fusion_stop` | | `close_document` | Close ONE open document by path through its document handle. Never saves. | | `fusion_close_document` | | `connect_workspace` | Open Altium's workspace picker (the 'Not Connected' menu) and return a screenshot with a coordMap. The list is a custom control with no UIA children, so the... | | | | `demo` | The tour. Default: one background beat per call with a screenshot. live:true = the narrated FOREGROUND show: ab caption + document + in-bridge camera... | `kicad_demo` | `fusion_demo` | | `describe` | This list - the bridge's verbs and schemas for ab's Verbs tab. | `kicad_describe` | `fusion_describe` | | `diagnostics` | Bridge-side facts for a bug report: environment variables, every Altium install found, Altium's windows, the agent status block and the cache directory. | `kicad_diagnostics` | |-| `dialog_log` | What the standing dialog reaper (and the bridge's own recoveries) pressed, newest last: nuisance boxes, script-error boxes, discarded save prompts, silent... | | |+| `dialog_log` | What the standing dialog reaper (and the bridge's own recoveries) pressed, newest last: nuisance boxes, script-error boxes, discarded save prompts, silent... | | `fusion_dialog_log` | | `dismiss_dialogs` | Press one named button (default OK) on the detected Altium dialogs through UIA - no cursor, no focus steal. titles narrows it to dialogs whose title... | `kicad_dismiss_dialogs` | `fusion_dismiss_dialogs` | | `ensure_licensed` | One call to get a usable Altium: launch if needed, then claim a seat (Use License via UIA). Optional escalations: sign out to force a seat release, or start... | | | | `eval` | Run a DelphiScript snippet inside Altium (optional Var block, then Begin ... End;) on the CURRENT document, or on filePath opened first. | | |@@ -191,34 +191,34 @@ Driving the application itself (launch, licence, dialogs, windows, views). Each | `instances` | Every running Altium (Designer + Designer Develop can run together). | | | | `launch` | Start Altium (the newest numbered install, or the one install names) and wait for its main window, then hand the user's own window back. Answers... | `kicad_launch` | `fusion_launch` | | `license` | Drive the License Management page (UIA first - no cursor, no foreground). | | |-| `license_status` | Plain-language answer to 'what Altium licence am I on?': the state from the window title plus a capture of the License Management page. | | |-| `list_commands` | Search Altium's process-launcher catalog (about 1,100 Server:Command entries parsed from the install's System/*.rcs files) by text and/or server. | | |-| `open_document` | Open a document or project by path through the agent and show it without focusing it. An already-open document is activated, not reloaded. | `kicad_open_board / kicad_open_schematic` (partial) | |+| `license_status` | Plain-language answer to 'what Altium licence am I on?': the state from the window title plus a capture of the License Management page. | | `fusion_license_status` |+| `list_commands` | Search Altium's process-launcher catalog (about 1,100 Server:Command entries parsed from the install's System/*.rcs files) by text and/or server. | | `fusion_list_commands` |+| `open_document` | Open a document or project by path through the agent and show it without focusing it. An already-open document is activated, not reloaded. | `kicad_open_board / kicad_open_schematic` (partial) | `fusion_open_document` | | `open_project` | Open a project (.PrjPcb / .PrjScr / .PrjMbd / .PrjHar / .LibPkg) by path. Same handler as altium_open_document. | | | | `panel` | Activate a docked panel TAB (SCH Library, PCB Library, Components, Projects, Properties) in the BACKGROUND - the 'ganged-up view' needs the right panels in... | | | | `progress` | The bridge's timing book: phases in flight right now (percent/ETA blocks ab paints on the taskbar), measured phase history and per-verb run statistics. | `kicad_progress` | | | `readiness` | The one-call gate: is Altium installed, running, licensed, and is the resident agent alive? Answers with Altium closed and never touches the script engine. | `kicad_readiness` | `fusion_readiness` |-| `run_command` | Run an Altium process (Server:Command) through the agent, on the CURRENT document or on filePath opened first. | | |-| `run_script` | One shot: run a procedure of YOUR OWN .PrjScr through Altium's -R command line. Only for when the agent is NOT resident. | | |-| `save` | Save the focused document, or open filePath first and save that (WorkspaceManager:SaveObject on the focused document). | `kicad_save` | |+| `run_command` | Run an Altium process (Server:Command) through the agent, on the CURRENT document or on filePath opened first. | | `fusion_run_command` |+| `run_script` | One shot: run a procedure of YOUR OWN .PrjScr through Altium's -R command line. Only for when the agent is NOT resident. | | `fusion_run_script` |+| `save` | Save the focused document, or open filePath first and save that (WorkspaceManager:SaveObject on the focused document). | `kicad_save_board` (partial) | `fusion_save` | | `sch_zoom` | Find parts on a sheet: select them (everything else deselected), frame the view on them and return a proof frame. The schematic half of cross-probing (the... | | |-| `select_net` | Select one net as a whole on the current board (tracks, arcs, vias, pads, pours) and nothing else, optionally framing it; no net clears the selection. | `kicad_select_net` | |-| `selection` | What the user has selected in the current board (components with position mm, rotation, side, footprint, size) or sheet (components with location mils and... | `kicad_selection` | |+| `select_net` | Select one net as a whole on the current board (tracks, arcs, vias, pads, pours) and nothing else, optionally framing it; no net clears the selection. | `kicad_select_net` | `fusion_select_net` |+| `selection` | What the user has selected in the current board (components with position mm, rotation, side, footprint, size) or sheet (components with location mils and... | `kicad_get_selection` | | | `selftest_script_error` | Regression test for the script-error safety net (from 0.2.23): makes the agent raise a REAL DelphiScript runtime error on purpose and checks that the bridge... | | |-| `set_layer_visibility` | Show or hide one layer of the current board (by layer id) and refresh the view and the layer tabs. | | |+| `set_layer_visibility` | Show or hide one layer of the current board (by layer id) and refresh the view and the layer tabs. | | `fusion_set_layer_visibility` | | `setup_trial` | Onboarding state machine: from nothing to a working trial. Each call reports the stage it found (install / launch / signin / done) and the ONE next action;... | | | | `show_2d_board` | Open a .PcbDoc, switch to 2D, zoom to fit, and return a proof frame. With no filePath it opens the bundled Bluetooth Sentinel board. | `kicad_show_2d_board` | `fusion_show_2d_board` | | `show_3d_board` | Open a .PcbDoc, switch to 3D, zoom to fit, and return a proof frame. With no filePath it opens the bundled Bluetooth Sentinel board. | `kicad_show_3d_board` | `fusion_show_3d_board` |-| `show_3d_chip` | Open a PcbLib member in the footprint editor in 3D, zoom to fit, and capture a proof frame of the part's 3D body. | `kicad_show_3d_chip` | |+| `show_3d_chip` | Open a PcbLib member in the footprint editor in 3D, zoom to fit, and capture a proof frame of the part's 3D body. | `kicad_show_3d_chip` | `fusion_show_3d_chip` | | `show_footprint` | Open a PcbLib member in the footprint editor in 2D, zoom to fit, and capture a proof frame. | `kicad_show_footprint` | `fusion_show_footprint` | | `show_library` | Open a .SchLib or .PcbLib (kind taken from the extension), select its first component, return a proof frame and the component names. | `kicad_show_library` | `fusion_show_library` | | `show_project` | Open a project (.PrjPcb) through the agent and return a proof frame of Altium's main window. With no filePath it opens Altium's bundled example project... | `kicad_show_project` | `fusion_show_project` | | `show_schematic` | Open a .SchDoc, zoom to fit, and return a proof frame. With no filePath it opens the bundled Bluetooth Sentinel top sheet. | `kicad_show_schematic` | `fusion_show_schematic` | | `show_symbol` | Open a SchLib member in the Symbol editor and capture a background proof. | `kicad_show_symbol` | `fusion_show_symbol` | | `signin` | Report-only alias of altium_signin_status: it does NOT sign anyone in. Signing in to Altium is a browser flow only the human can complete. | | `fusion_signin` |-| `signin_status` | Account and Altium 365 workspace connection as Altium's own UI reports it: licence state from the title, and whether the workspace menu reads 'Not Connected'. | | |+| `signin_status` | Account and Altium 365 workspace connection as Altium's own UI reports it: licence state from the title, and whether the workspace menu reads 'Not Connected'. | | `fusion_signin_status` | | `state` | The whole picture in one call: licence state, windows, dialogs, a screenshot of every main/dialog window, and the agent's logical state (focused document,... | `kicad_state` | `fusion_state` |-| `status` | Is Altium running, licensed, and is the resident agent alive? | `kicad_status` | |+| `status` | Is Altium running, licensed, and is the resident agent alive? | `kicad_status` | `fusion_status` | | `uninstall` | Remove the bridge's own cache directory (agent workspaces, rendered agent scripts, the Altium 365 token file). Altium Designer and the user's designs are... | `kicad_uninstall` | `fusion_uninstall` | | `window_info` | Altium's top-level windows plus any open dialogs, without screenshots. The cheap way to ask 'is a modal blocking the engine?'. | `kicad_window_info` | | | `zoom_to` | Frame the PCB view on a rectangle, a part (or several) or a whole net, with a margin. | | `fusion_zoom_to` |
reference/fusion360-1.12.1.jsonadded+228@@ -0,0 +1,228 @@+{+ "bridge": "fusion360",+ "version": "1.12.1",+ "verbs": [+ "fusion_account",+ "fusion_action_ledger",+ "fusion_activate_document",+ "fusion_addin_status",+ "fusion_alerts",+ "fusion_apply_fusion_update",+ "fusion_apply_pours",+ "fusion_apply_silkscreen",+ "fusion_aps_browse",+ "fusion_aps_create_folder",+ "fusion_aps_download",+ "fusion_aps_file_info",+ "fusion_aps_forget_browser",+ "fusion_aps_get",+ "fusion_aps_get_browser",+ "fusion_aps_open",+ "fusion_aps_recent",+ "fusion_aps_search",+ "fusion_aps_set_browser",+ "fusion_aps_set_client_id",+ "fusion_aps_signin",+ "fusion_aps_status",+ "fusion_aps_upload",+ "fusion_aps_versions",+ "fusion_assembly_bom",+ "fusion_attach_3d_package",+ "fusion_autoroute",+ "fusion_bind_library_3d",+ "fusion_board_bom",+ "fusion_board_info",+ "fusion_board_outline",+ "fusion_board_seed",+ "fusion_board_shape",+ "fusion_board_source",+ "fusion_board_stackup",+ "fusion_board_summary",+ "fusion_bodies",+ "fusion_build_library_3d",+ "fusion_cancel_run",+ "fusion_capture_library_views",+ "fusion_change_pours",+ "fusion_check_dialogs",+ "fusion_check_recovery",+ "fusion_claim_seat",+ "fusion_cleanup_cloud_files",+ "fusion_close_all_documents",+ "fusion_close_document",+ "fusion_close_window",+ "fusion_component_data",+ "fusion_component_pins",+ "fusion_copper_layers",+ "fusion_create_cloud_folder",+ "fusion_create_library",+ "fusion_delete_cloud_file",+ "fusion_demo",+ "fusion_demo_progress",+ "fusion_describe",+ "fusion_detect_layers",+ "fusion_dialog_log",+ "fusion_dismiss_blocking_dialogs",+ "fusion_dismiss_dialogs",+ "fusion_document_info",+ "fusion_eagle_import_status",+ "fusion_electron_pan",+ "fusion_electron_run",+ "fusion_electron_select",+ "fusion_electron_zoom",+ "fusion_electronics_query",+ "fusion_execute_text_command",+ "fusion_export_3mf",+ "fusion_export_board_image",+ "fusion_export_bom",+ "fusion_export_cloud_file",+ "fusion_export_cpl",+ "fusion_export_dwg",+ "fusion_export_dxf",+ "fusion_export_eagle_source",+ "fusion_export_f3d",+ "fusion_export_fbx",+ "fusion_export_gerber",+ "fusion_export_gerbers",+ "fusion_export_iges",+ "fusion_export_lbr",+ "fusion_export_obj",+ "fusion_export_optimized_glb",+ "fusion_export_sat",+ "fusion_export_skp",+ "fusion_export_source",+ "fusion_export_step",+ "fusion_export_stl",+ "fusion_export_usdz",+ "fusion_fetch_optimized_glb",+ "fusion_generate_package",+ "fusion_get_app_state",+ "fusion_get_design_info",+ "fusion_get_parameters",+ "fusion_get_preferences",+ "fusion_import_electronics",+ "fusion_import_step",+ "fusion_inspect_bodies",+ "fusion_install",+ "fusion_install_fusion",+ "fusion_install_library_bundle",+ "fusion_interactive",+ "fusion_kill",+ "fusion_launch",+ "fusion_layer_stack",+ "fusion_layers",+ "fusion_layers_in_use",+ "fusion_library_manager",+ "fusion_library_parts",+ "fusion_license_status",+ "fusion_list_cloud_files",+ "fusion_list_cloud_projects",+ "fusion_list_commands",+ "fusion_list_designators",+ "fusion_list_nets",+ "fusion_list_text_commands",+ "fusion_live_feed",+ "fusion_make_3d_package",+ "fusion_make_showcase_project",+ "fusion_make_test_project",+ "fusion_managed_library_create",+ "fusion_managed_library_link",+ "fusion_managed_library_pull",+ "fusion_managed_library_push",+ "fusion_managed_library_unlink",+ "fusion_mcp_call",+ "fusion_mcp_enable",+ "fusion_mcp_resources",+ "fusion_mcp_status",+ "fusion_mcp_tools",+ "fusion_move_parts",+ "fusion_narrate",+ "fusion_net_classes",+ "fusion_net_connections",+ "fusion_netlist",+ "fusion_new_electronics_from_eagle",+ "fusion_notify_owner",+ "fusion_open_board",+ "fusion_open_by_urn",+ "fusion_open_by_urn_note",+ "fusion_open_cloud_file",+ "fusion_open_design",+ "fusion_open_document",+ "fusion_open_electronics",+ "fusion_open_lbr",+ "fusion_open_schematic",+ "fusion_physical_properties",+ "fusion_place_vias",+ "fusion_plan_library_import",+ "fusion_plan_route",+ "fusion_pour_state",+ "fusion_preflight_lbr",+ "fusion_prefs_close",+ "fusion_prefs_open",+ "fusion_prewarm",+ "fusion_prove_result",+ "fusion_read_rules",+ "fusion_read_sheet_file",+ "fusion_readiness",+ "fusion_release_seat",+ "fusion_remove_items",+ "fusion_remove_pours",+ "fusion_repour",+ "fusion_reset_workspace",+ "fusion_resolve_seat_dialog",+ "fusion_restart_for_addin",+ "fusion_ripup_nets",+ "fusion_route_net",+ "fusion_routing_drc",+ "fusion_routing_state",+ "fusion_rules_by_kind",+ "fusion_run_command",+ "fusion_run_drc",+ "fusion_run_erc",+ "fusion_run_modeling_script",+ "fusion_run_script",+ "fusion_save",+ "fusion_save_document",+ "fusion_save_to_cloud",+ "fusion_schematic",+ "fusion_schematic_plan",+ "fusion_schematic_run",+ "fusion_screenshot_fusion",+ "fusion_search_cloud_files",+ "fusion_select_net",+ "fusion_set_auto_update",+ "fusion_set_design_rules",+ "fusion_set_driving_badge",+ "fusion_set_layer_visibility",+ "fusion_set_outline",+ "fusion_set_parameter",+ "fusion_set_preference",+ "fusion_set_seat_takeover",+ "fusion_set_track_width",+ "fusion_set_window_sizing",+ "fusion_show_2d_board",+ "fusion_show_3d_board",+ "fusion_show_3d_chip",+ "fusion_show_3d_package",+ "fusion_show_attributes",+ "fusion_show_footprint",+ "fusion_show_library",+ "fusion_show_project",+ "fusion_show_schematic",+ "fusion_show_symbol",+ "fusion_signin",+ "fusion_signin_2fa",+ "fusion_signin_status",+ "fusion_silk_state",+ "fusion_start",+ "fusion_state",+ "fusion_status",+ "fusion_stop",+ "fusion_take_screenshot",+ "fusion_uninstall",+ "fusion_verb_times",+ "fusion_view",+ "fusion_walk_cloud_tree",+ "fusion_web_signin",+ "fusion_zoom_to"+ ]+}
verbs/coverage.json+106−46@@ -4,8 +4,8 @@ "version": "0.2.75" }, "compared": {- "kicad": "1.0.62",- "fusion360": "1.12.0"+ "kicad": "1.0.61",+ "fusion360": "1.12.1" }, "tiers": { "core": "Read and edit the design. Every bridge provides these: they are how an AI sees and changes a board.",@@ -44,7 +44,10 @@ "verb": "kicad_silk_fields_batch / kicad_silk_text_batch / kicad_silk_graphics_batch", "match": "exact" },- "fusion360": null+ "fusion360": {+ "verb": "fusion_apply_silkscreen",+ "match": "exact"+ } }, { "name": "board_outline",@@ -54,7 +57,10 @@ "verb": "kicad_board_outline", "match": "exact" },- "fusion360": null+ "fusion360": {+ "verb": "fusion_board_outline",+ "match": "exact"+ } }, { "name": "board_shape",@@ -64,7 +70,10 @@ "verb": "kicad_board_outline", "match": "exact" },- "fusion360": null+ "fusion360": {+ "verb": "fusion_board_shape",+ "match": "exact"+ } }, { "name": "board_summary",@@ -137,7 +146,7 @@ "tier": "core", "altium": "altium_create_footprint", "kicad": {- "verb": "kicad_create_footprint",+ "verb": "kicad_fp_create", "match": "exact" }, "fusion360": null@@ -147,7 +156,7 @@ "tier": "core", "altium": "altium_create_symbol", "kicad": {- "verb": "kicad_create_symbol",+ "verb": "kicad_sym_create", "match": "exact" }, "fusion360": null@@ -163,10 +172,7 @@ "name": "find_symbol", "tier": "core", "altium": "altium_find_symbol",- "kicad": {- "verb": "kicad_find_symbol",- "match": "exact"- },+ "kicad": null, "fusion360": null }, {@@ -372,7 +378,7 @@ "tier": "core", "altium": "altium_read_symbol", "kicad": {- "verb": "kicad_read_symbol",+ "verb": "kicad_sym_info", "match": "exact" }, "fusion360": null@@ -392,14 +398,17 @@ "verb": "kicad_remove_route", "match": "partial" },- "fusion360": null+ "fusion360": {+ "verb": "fusion_remove_items",+ "match": "exact"+ } }, { "name": "remove_symbol", "tier": "core", "altium": "altium_remove_symbol", "kicad": {- "verb": "kicad_remove_symbol",+ "verb": "kicad_sym_delete", "match": "exact" }, "fusion360": null@@ -502,8 +511,8 @@ "tier": "core", "altium": "altium_sch_sheet_symbol", "kicad": {- "verb": "kicad_sch_sheet_symbol",- "match": "exact"+ "verb": "kicad_sch_sheet",+ "match": "partial" }, "fusion360": null },@@ -542,7 +551,10 @@ "verb": "kicad_board_outline", "match": "exact" },- "fusion360": null+ "fusion360": {+ "verb": "fusion_set_outline",+ "match": "exact"+ } }, { "name": "set_params",@@ -559,7 +571,10 @@ "verb": "kicad_modify_track", "match": "partial" },- "fusion360": null+ "fusion360": {+ "verb": "fusion_set_track_width",+ "match": "exact"+ } }, { "name": "set_visibility",@@ -614,7 +629,7 @@ "tier": "native", "altium": "altium_add_rule", "kicad": {- "verb": "kicad_add_rule",+ "verb": "kicad_custom_rules", "match": "exact" }, "fusion360": null@@ -624,7 +639,7 @@ "tier": "native", "altium": "altium_annotate", "kicad": {- "verb": "kicad_annotate",+ "verb": "kicad_sch_annotate", "match": "exact" }, "fusion360": null@@ -650,7 +665,10 @@ "verb": "kicad_autoroute", "match": "exact" },- "fusion360": null+ "fusion360": {+ "verb": "fusion_autoroute",+ "match": "exact"+ } }, { "name": "build_symbol_modes",@@ -718,8 +736,8 @@ "tier": "native", "altium": "altium_export_manufacturing", "kicad": {- "verb": "kicad_export_manufacturing",- "match": "exact"+ "verb": "kicad_export_gerber / kicad_export_pos",+ "match": "partial" }, "fusion360": { "verb": "fusion_export_gerbers / fusion_export_cpl / fusion_export_bom",@@ -784,7 +802,7 @@ "tier": "native", "altium": "altium_net_classes", "kicad": {- "verb": "kicad_net_classes",+ "verb": "kicad_netclasses", "match": "exact" }, "fusion360": {@@ -860,7 +878,7 @@ "tier": "native", "altium": "altium_repour", "kicad": {- "verb": "kicad_repour",+ "verb": "kicad_refill_zones", "match": "exact" }, "fusion360": {@@ -902,7 +920,10 @@ "verb": "kicad_run_erc", "match": "exact" },- "fusion360": null+ "fusion360": {+ "verb": "fusion_run_erc",+ "match": "exact"+ } }, { "name": "set_design_rules",@@ -953,8 +974,8 @@ "tier": "native", "altium": "altium_update_pcb", "kicad": {- "verb": "kicad_update_pcb",- "match": "exact"+ "verb": "kicad_update_pcb_from_schematic",+ "match": "partial" }, "fusion360": null },@@ -1056,7 +1077,7 @@ "tier": "checks", "altium": "altium_fab_check", "kicad": {- "verb": "kicad_fab_check",+ "verb": "kicad_validate_for_fab", "match": "exact" }, "fusion360": null@@ -1166,7 +1187,7 @@ "tier": "checks", "altium": "altium_route_pair", "kicad": {- "verb": "kicad_route_pair",+ "verb": "kicad_route_diff_pair", "match": "exact" }, "fusion360": null@@ -1259,7 +1280,10 @@ "tier": "app", "altium": "altium_check_dialogs", "kicad": null,- "fusion360": null+ "fusion360": {+ "verb": "fusion_check_dialogs",+ "match": "exact"+ } }, { "name": "close",@@ -1332,7 +1356,10 @@ "tier": "app", "altium": "altium_dialog_log", "kicad": null,- "fusion360": null+ "fusion360": {+ "verb": "fusion_dialog_log",+ "match": "exact"+ } }, { "name": "dismiss_dialogs",@@ -1431,14 +1458,20 @@ "tier": "app", "altium": "altium_license_status", "kicad": null,- "fusion360": null+ "fusion360": {+ "verb": "fusion_license_status",+ "match": "exact"+ } }, { "name": "list_commands", "tier": "app", "altium": "altium_list_commands", "kicad": null,- "fusion360": null+ "fusion360": {+ "verb": "fusion_list_commands",+ "match": "exact"+ } }, { "name": "open_document",@@ -1448,7 +1481,10 @@ "verb": "kicad_open_board / kicad_open_schematic", "match": "partial" },- "fusion360": null+ "fusion360": {+ "verb": "fusion_open_document",+ "match": "exact"+ } }, { "name": "open_project",@@ -1492,24 +1528,33 @@ "tier": "app", "altium": "altium_run_command", "kicad": null,- "fusion360": null+ "fusion360": {+ "verb": "fusion_run_command",+ "match": "exact"+ } }, { "name": "run_script", "tier": "app", "altium": "altium_run_script", "kicad": null,- "fusion360": null+ "fusion360": {+ "verb": "fusion_run_script",+ "match": "exact"+ } }, { "name": "save", "tier": "app", "altium": "altium_save", "kicad": {- "verb": "kicad_save",- "match": "exact"+ "verb": "kicad_save_board",+ "match": "partial" },- "fusion360": null+ "fusion360": {+ "verb": "fusion_save",+ "match": "exact"+ } }, { "name": "sch_zoom",@@ -1526,14 +1571,17 @@ "verb": "kicad_select_net", "match": "exact" },- "fusion360": null+ "fusion360": {+ "verb": "fusion_select_net",+ "match": "exact"+ } }, { "name": "selection", "tier": "app", "altium": "altium_selection", "kicad": {- "verb": "kicad_selection",+ "verb": "kicad_get_selection", "match": "exact" }, "fusion360": null@@ -1550,7 +1598,10 @@ "tier": "app", "altium": "altium_set_layer_visibility", "kicad": null,- "fusion360": null+ "fusion360": {+ "verb": "fusion_set_layer_visibility",+ "match": "exact"+ } }, { "name": "setup_trial",@@ -1593,7 +1644,10 @@ "verb": "kicad_show_3d_chip", "match": "exact" },- "fusion360": null+ "fusion360": {+ "verb": "fusion_show_3d_chip",+ "match": "exact"+ } }, { "name": "show_footprint",@@ -1675,7 +1729,10 @@ "tier": "app", "altium": "altium_signin_status", "kicad": null,- "fusion360": null+ "fusion360": {+ "verb": "fusion_signin_status",+ "match": "exact"+ } }, { "name": "state",@@ -1698,7 +1755,10 @@ "verb": "kicad_status", "match": "exact" },- "fusion360": null+ "fusion360": {+ "verb": "fusion_status",+ "match": "exact"+ } }, { "name": "uninstall",