3. See it

Draw the board, and get a picture of a netlist that has no drawing.

A finding names a net. Nobody thinks about a board as a list of net names, so at some point you need a picture. There are two different situations here and they need different answers.

If your design carries its own geometry, the tool draws that geometry, and the picture is the one your CAD tool would draw. If your design is a netlist, there is no geometry to draw, because a netlist records what is connected and never records where anything sits. In that case the tool computes a layout from the connections.

The tutorial board is the second case. gateway.edn is an EDIF netlist.

Draw a netlist

$ agni render designs/gateway/gateway.edn --layout layered -o gateway.svg
note: reading gateway.edn with sheets from gateway.kicad_sch and board geometry from gateway.kicad_pcb (declared by designs/gateway/design.yaml). Pass --as-named for the file alone.
layout "layered": 19 nodes, 15 nets, 56 segments, 95 crossings, edge length 20826
wrote gateway.svg (sheet "netlist graph", 19 placements, 15 wires)

The line it prints is a quality report on the drawing, not on your board. crossings counts wires that cross each other, and crossings are what mainly make a generated schematic hard to follow.

This is a drawing of your netlist, not a reproduction of your schematic. Parts sit where the layout algorithm put them. It is for following connectivity, not for review of the drawing itself.

Compare it against the faithful drawing further down. Same board, same nets, and a completely different picture, because one was drawn by a person and the other was solved for.

Pick a layout

There are five, and which one reads best depends entirely on the board. Rather than guess:

$ agni render designs/gateway/gateway.edn --compare
layout      nodes  nets  segments  crossings  bends  edge-length  stress  truth-residual
force       19     15    56        43         0      9052         0.346   0.997
grid        19     15    56        133        0      7798         0.486   0.978
layered     19     15    56        95         0      20826        0.582   0.960
orthogonal  19     15    84        104        28     9200         0.457   0.961
stress      19     15    56        73         0      7218         0.457   0.961

For this board force has by far the fewest crossings and grid is the worst by that measure, while stress draws the most compact picture by edge length. orthogonal is the only one that bends wires into right angles, which is what a schematic normally looks like, at the cost of more segments and more crossings.

Lower stress means the drawn distances better match how far apart things actually are in the connection graph. There is no single winner. Render the two or three that score well and look at them.

Faithful geometry

When the design does carry geometry, drop --layout and you get the design’s own drawing. The tutorial board ships a KiCad view of itself for exactly this:

$ agni render designs/gateway/gateway.kicad_sch --symbol-path designs/gateway/symbols -o gateway.svg
wrote gateway.svg (sheet "Sample Board", 19 placements, 56 wires)

That is placements and wires read out of the file rather than computed, so the result is the drawing somebody drew. Faithful is the default. --layout is what you reach for when there is nothing to be faithful to.

The same board, twice

gateway.edn and gateway.kicad_sch are two views of one design, which raises the obvious question of whether they still agree. Ask directly:

$ agni diff designs/gateway/gateway.edn designs/gateway/gateway.kicad_sch \
  --symbol-path designs/gateway/symbols
diff designs/gateway/gateway.edn -> designs/gateway/gateway.kicad_sch

Components: +0  -0  ~0
Nets:       new 0  deleted 0  renamed 0  hard 0  soft 0

Zero net changes. The two readers converged on the same netlist, and the whole engine rests on that premise: analysis runs over one internal representation, so the format you started from stops mattering once the file is read.

This is also the practical way to check a CAD migration. Export from the old tool and the new one, diff the two, and an empty net delta is real evidence the design survived the move.

In the browser

agni open serves one design and prints the URL that shows it:

agni open designs/gateway/gateway.edn

It picks a free port on loopback, so it will not collide with anything you already have running, and it serves only this design and the project around it. The URL it prints goes straight to the board rather than to a file browser.

It needs the viewer’s built assets, and it does not carry them. From a repo checkout they sit in ./web after make ui, which is the default, and that is why every other command on this page works here and this one may not. Anywhere else, point at them once:

agni open designs/gateway/gateway.edn --web-dir /path/to/web

AGNI_WEB_DIR and a web_dir: line in agni.yaml do the same thing without repeating the flag, and the error names all three if you get it wrong.

The viewer pans and zooms, and its panels run the same checks the CLI runs, over the same catalog, so the findings you saw in rung 2 appear against the drawing rather than as a list. Later rungs add tiers to that catalog, and the viewer picks them up the same way the CLI does.

agni open also prints a ready-made agni check command pointed at the server it just started, which is what rung 11 uses to turn a report’s subjects into links.

For several designs at once, or for a server other people reach, agni serve takes a mount per folder. It has to be told where the viewer’s own assets are, which agni open works out for itself.

Next

Your names, where the tool stops being generic and starts knowing your team’s conventions.