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-lane: propose physical_properties, preferences, select_items, cancel_run (agreed by altium-lane, kicad-lane) and their equivalents
2 files changed
+151
tools/equivalents/fusion360.json+19@@ -514,5 +514,24 @@ "fusion_edit_pours", "partial", "minimum width, clearance, thermals, rank and orphans, refilled and read back (net and layer name a pour when it is the only one there); a pour's net cannot be moved in place (a polygon belongs to its signal)"+ ],+ "physical_properties": [+ "fusion_physical_properties",+ "exact"+ ],+ "preferences": [+ "fusion_preferences",+ "exact",+ "Fusion's appearance and navigation settings, applied live with no restart"+ ],+ "select_items": [+ "fusion_select_items",+ "partial",+ "parts by designator; verified is always false, since Fusion does not report its electronics selection back"+ ],+ "cancel_run": [+ "fusion_cancel_run",+ "partial",+ "library imports (fusion_create_library, fusion_install_library_bundle): the only long jobs that stop between steps" ] }
tools/proposed/fusion-lane.json+132@@ -510,5 +510,137 @@ "standard-lane", "altium-lane" ]+ },+ {+ "name": "physical_properties",+ "tier": "native",+ "summary": "Per component: volume, mass, density, surface area and centre of mass, from the tool's own materials. A tool with no materials or part masses answers unsupported with the reason. Read only.",+ "input": {+ "names": "[component name] (default every component)",+ "accuracy": "low|medium|high|veryhigh, default low"+ },+ "output": {+ "count": "int",+ "properties": "{name: {volume_cm3, mass_kg, density, area_cm2, center_of_mass}}"+ },+ "hint": "bodies gives each part's box on the board; this gives what it weighs.",+ "pitfalls": [+ "Mass is only as good as the material on the part."+ ],+ "related": [+ "bodies",+ "component_data"+ ],+ "example": {+ "names": [+ "Enclosure"+ ]+ },+ "longRunning": false,+ "timeoutSeconds": 120,+ "proposedBy": "fusion-lane",+ "since": "0.30.14",+ "agreedBy": [+ "altium-lane",+ "kicad-lane"+ ]+ },+ {+ "name": "preferences",+ "tier": "app",+ "summary": "Read the tool's own settings, or change them with set. Reports per key what was applied; a setting that cannot change while the tool runs is refused by name.",+ "input": {+ "set": "{key: value} (omit to read)"+ },+ "output": {+ "current": "{key: value}",+ "applied": "{key: {ok, requested}} (with set)"+ },+ "hint": "Read first: the keys differ per tool.",+ "pitfalls": [+ "Some tools write settings back on exit, so set may need the tool closed."+ ],+ "related": [+ "tool_update"+ ],+ "example": {+ "set": {+ "lengthUnit": "mm"+ }+ },+ "longRunning": false,+ "timeoutSeconds": 30,+ "proposedBy": "fusion-lane",+ "since": "0.30.14",+ "agreedBy": [+ "altium-lane",+ "kicad-lane"+ ]+ },+ {+ "name": "select_items",+ "tier": "app",+ "summary": "Select parts in the open schematic or board by designator, or clear the selection. verified says whether the tool could read the selection back.",+ "input": {+ "refs": "[designator]",+ "clear": "bool"+ },+ "output": {+ "selected": "[ref]",+ "failed": "[{ref, error}]",+ "verified": "bool"+ },+ "hint": "select_net selects one net; sch_zoom also frames the view; selection reads what the user selected.",+ "pitfalls": [+ "A tool that cannot report its selection answers verified:false: look at the view."+ ],+ "related": [+ "select_net",+ "sch_zoom",+ "selection"+ ],+ "example": {+ "refs": [+ "R1",+ "R2"+ ]+ },+ "longRunning": false,+ "timeoutSeconds": 30,+ "proposedBy": "fusion-lane",+ "since": "0.30.14",+ "agreedBy": [+ "altium-lane",+ "kicad-lane"+ ]+ },+ {+ "name": "cancel_run",+ "tier": "app",+ "summary": "Stop a long job the bridge started. Cooperative, not a kill: the job finishes the step it is on and keeps what is done. With nothing to stop it answers cancelRequested:false and says why.",+ "input": {+ "runId": "str (default the latest run in flight)"+ },+ "output": {+ "cancelRequested": "bool",+ "runId": "str",+ "stage": "str at the time of the request"+ },+ "hint": "Poll the job's own status verb to see it stop.",+ "pitfalls": [+ "Which jobs can stop differs per bridge: Fusion's library imports, KiCad's autoroute, Altium's multi-step verbs between steps."+ ],+ "related": [+ "status"+ ],+ "example": {},+ "longRunning": false,+ "timeoutSeconds": 30,+ "proposedBy": "fusion-lane",+ "since": "0.30.14",+ "agreedBy": [+ "altium-lane",+ "kicad-lane"+ ] } ]