.claude/skills/atopile-skills/SKILL.md
How to write and maintain `.claude/skills/*/SKILL.md` files: source-of-truth-first process, verification steps, and conventions.
npx skillsauth add atopile/atopile atopile-skillsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill describes the process for maintaining the skill documentation under .claude/skills/*/SKILL.md.
The goal is that future LLM edits stay accurate, actionable, and grounded in the repo (not vibes).
When updating any skill:
## Quick Start that actually runs in this repo.A good skill doc is:
rg over memory: look for imports, entrypoints, and key classes/functions.Use this hierarchy:
Examples:
src/faebryk/core/solver/README.md + src/faebryk/core/solver/symbolic/invariants.pysrc/faebryk/core/zig/src/graph/graph.zig + src/faebryk/core/zig/src/python/graph/graph_py.zig + generated stubstools/library/gen_F.py is the source-of-truth for _F.pyCommon failure modes in skill docs:
atopile/src/... vs src/...)lsp_server.py vs imaginary server.py)Rule: if you can’t prove it from the repo, either remove it or label it as a hypothesis with a pointer to where to verify.
## Quick StartQuick Start should be:
src/.../something.zigGood patterns:
ato build, ato dev test --llm)GraphView.create() / TypeGraph.create(...))name and description.src/, tools/, and test/ path exists (exclude generated build outputs).rg check).Prefer this ordering:
## Quick Start## Relevant Files## Dependants (Call Sites)## How to Work With / Develop / Test## Best Practices / ## Invariants (when applicable)Keep the doc concise and “repo-local”: avoid external links unless they’re stable standards docs.
development
How the Faebryk parameter solver works (Sets/Literals, Parameters, Expressions), the core invariants enforced during mutation, and practical workflows for debugging and extending the solver. Use when implementing or modifying constraint solving, parameter bounds, or debugging expression simplification.
development
# SEXP Benchmark Strategy ## Goal Measure and improve S-expression pipeline performance with a focus on: - Throughput per stage - Peak memory per stage - End-to-end behavior on realistic KiCad PCB inputs ## Pipeline Stages Benchmark these layers separately: - `tokenizer` - `ast` - `parser` (typed decode) - `encode` (typed encode to raw SEXP) - `pretty` (formatting) ## Dataset Dimensions Use a matrix over: - `depth`: shallow vs deep nesting - `size`: small, medium, large Recommended size buck
development
How the Zig S-expression engine and typed KiCad models work, how they are exposed to Python (pyzig_sexp), and the invariants around parsing, formatting, and freeing. Use when working with KiCad file parsing, S-expression generation, or layout sync.
tools
How the Zig↔Python binding layer works (pyzig), including build-on-import, wrapper generation patterns, ownership rules, and where to add new exported APIs. Use when adding Zig-Python bindings, modifying native extensions, or debugging C-API interactions.