Install
$ agentstack add skill-mawildoer-atopile-agent-skill-layout-relinking ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Layout Relinking
When you rename a component in .ato code, its atopile_address in the .kicad_pcb becomes stale. On the next build, atopile can no longer match the placed footprint to the renamed component, so the component loses its placement (moved to origin, unrouted).
> Critical: relink BEFORE building. If you build with stale addresses, atopile orphans the old placements and creates new unplaced footprints. Relinking after that means recovering from backups.
The Underlying Concept
Each footprint in the .kicad_pcb carries an atopile_address property — the dot-path of instance names from the build entry point down to that component. If Board has charger = new BQ25756Charger and BQ25756Charger has _richg = new Resistor, the address is charger._richg. Renaming any instance in that chain changes the address; relinking rewrites the stored address to match the new path so the placement is preserved.
Helper Scripts
This workflow relies on two small scripts that operate on the .kicad_pcb. Many projects vendor them under tools/; if yours doesn't, they're trivial to write (parse the s-expression / KiCad file, read or rewrite the atopile_address property on each footprint):
- list-addresses — print every
atopile_addressin a.kicad_pcb(optionally with the footprint each maps to). - rename-address — rewrite one address prefix to another. Should be prefix-aware: renaming a parent catches all children automatically.
The commands below assume tools/layout-list-addresses.py and tools/layout-rename-address.py. Substitute your project's equivalents.
Workflow
- Make your .ato changes (renames, submodule extraction, etc.) — do NOT build yet.
- Examine what changed:
``bash git diff -- "*.ato" ``
- List current PCB addresses:
``bash python tools/layout-list-addresses.py ``
- Figure out the mapping. Construct new paths from the module hierarchy in the
.atosource. The address path is the chain of instance names from the build entry point down.
Note: the LSP tools (get_hover, get_definition, get_references) do NOT provide atopile_address paths. Use git diff and the .ato source to determine mappings.
- Relink each renamed component:
``bash python tools/layout-rename-address.py "old.path" "new.path" `` A prefix-aware tool renames all children of a renamed parent in one call.
- Now run
ato build— addresses match, placements preserved.
- Verify:
``bash python tools/layout-list-addresses.py ``
Examples
Extracting a submodule — moving charger.richg into charger._sense._shunt:
python tools/layout-rename-address.py "charger.richg" "charger._sense._shunt"
Renaming a parent module (catches all children):
python tools/layout-rename-address.py "charger.acov_div" "charger._acov_divider"
# Renames charger.acov_div.chain.resistors[0], [1], etc. automatically
Tips
- Back up the
.kicad_pcb(or rely on a tool that writes a.bakon first modification) before bulk renames — restore withcp file.bak file. - A "no matches" result means the old path is wrong — check for typos against the address listing.
- List addresses with the mapped footprint to confirm which physical part each address points to.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: mawildoer
- Source: mawildoer/atopile-agent-skill
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.