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
standard 0.23.1: simulate noise and monteCarlo (#23)
4 files changed
+10−6
README.md+1@@ -158,6 +158,7 @@ Decisions so far (proposals from the KiCad and Fusion bridges, 2026-10-27; issue ## Status +Version 0.23.1: `simulate` (proposed, #23) takes an optional noise analysis and `monteCarlo` runs (altium-lane, kicad-lane). Version 0.23.0: the engine (0.20.0) compares turned 3D bodies by their rectangles (separating axes), not their axis boxes, in `height_check` and `placement_check`; a body row may give `{cx, cy, w, h, rotation}` or `corners` (kicad-lane #26: 70 false collisions round a 45-degree QFN). Regenerated with fusion-bridge 1.13.19.
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "eda-bridge-standard",- "version": "0.23.0",+ "version": "0.23.1", "type": "skill", "title": "EDA Bridge Standard: one way for an AI to drive every PCB tool", "description": "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.",
verbs/coverage.json+1−1@@ -1,5 +1,5 @@ {- "standard": "0.23.0",+ "standard": "0.23.1", "reference": { "bridge": "altium", "version": "0.2.82"
verbs/standard.json+7−4@@ -1,5 +1,5 @@ {- "standard": "0.23.0",+ "standard": "0.23.1", "reference": { "bridge": "altium", "version": "0.2.82"@@ -8686,14 +8686,16 @@ "summary": "Run a circuit simulation of the design's schematic and return the signals as data: an operating point, a DC sweep, an AC sweep or a transient, with the nets and source currents asked for.", "input": { "schematic": "the design or sheet to simulate (the bridge's own path or id) (required)",- "analysis": "{type: op} | {type: dc, source, start, stop, step} | {type: ac, sweep: dec|oct|lin, points, start, stop} (Hz) | {type: tran, step, stop, start?} (s) | {type: raw, text: \".ac dec 20 10 1meg\"} (a bridge that cannot run raw SPICE refuses it with not_supported); default the analysis the design carries",+ "analysis": "{type: op} | {type: dc, source, start, stop, step} | {type: ac, sweep: dec|oct|lin, points, start, stop} (Hz) | {type: tran, step, stop, start?} (s) | {type: noise, source, output, reference?, sweep: dec|oct|lin, points, start, stop} (Hz: the output and input-referred noise of output against reference, driven from source) | {type: raw, text: \".ac dec 20 10 1meg\"} (a bridge that cannot run raw SPICE refuses it with not_supported); default the analysis the design carries", "probes": "[{net: \"OUT\"} | {current: \"V1\"}]; default every net (a bridge may cap the count)", "sweep": "{parameter, start, stop, step, scale?: \"lin\" | \"dec\" | \"oct\"}: optional; steps a part's value (\"R4\") or a model parameter (\"Q1.BF\"), one run per value; for lin, step is the increment, for dec and oct the points per decade or octave; a bridge may cap the number of runs", "temperatures": "{start, stop, step} (\u00b0C): optional; one run per temperature",+ "monteCarlo": "{runs, distribution?: \"uniform\" | \"gaussian\", seed?, tolerances: {resistor?, capacitor?, inductor?, transistor?, dcSource?, digital?} (%)}: optional; the analysis runs again with every part drawn within its kind's tolerance, each run its own signal; the same seed draws the same values", "points": "int, default 200: a ceiling on the points returned per signal; decimation keeps the first and last points and every extremum (the run itself is not coarsened)" }, "output": {- "signals": "[{signal: \"V(OUT)\", x: [..], y: [..], xUnit: s|Hz|V, yUnit: V|A|dB, phase?: [..] (AC, degrees, unwrapped)}]; an op gives one point per signal; with sweep or temperatures each run is its own signal, with step saying which run it is (\"R4 = 300\", \"T = 85\"), so a reader groups runs by signal + step",+ "signals": "[{signal: \"V(OUT)\", x: [..], y: [..], xUnit: s|Hz|V, yUnit: V|A|dB, phase?: [..] (AC, degrees, unwrapped)}]; an op gives one point per signal; with sweep or temperatures each run is its own signal, with step saying which run it is (\"R4 = 300\", \"T = 85\"), so a reader groups runs by signal + step; a Monte Carlo run's step lists the values drawn (\"R3 = 9038.1, C6 = 1.0004e-10\"), so any run can be reproduced; a noise analysis answers onoise and inoise (yUnit V/rtHz) over frequency",+ "totals": "noise analysis: {onoise, inoise}, the integrated output and input-referred noise in V", "missing": "[probe]: probes the run did not have", "notSimulated": "[ref]: parts the run left out for want of a simulation model, when the sheet is only partly modelled, so a reader knows the result covers only part of the circuit (empty when every part was simulated)", "available": "[signal name]",@@ -8704,7 +8706,8 @@ "simulation_failed carries the simulator's own message: a part without a model, a node with no DC path to ground, or a bad analysis.", "points thins the reply, not the run: a long transient with a tiny step still takes its time.", "A partly modelled sheet still runs and names the parts it left out in notSimulated; a sheet with no modelled parts refuses with no_model.",- "A bridge that cannot sweep refuses sweep or temperatures with not_supported; it never runs once and returns a single trace as if it were the sweep (ngspice has no .step: loop with alter per value)."+ "A bridge that cannot sweep refuses sweep or temperatures with not_supported; it never runs once and returns a single trace as if it were the sweep (ngspice has no .step: loop with alter per value).",+ "A bridge that cannot run a noise analysis or a Monte Carlo (or draw one of its tolerance kinds) refuses with not_supported; it never answers something else in its place." ], "related": [ "export_spice",