How Faebryk's TypeGraph works (GraphView + Zig edges), how to traverse/resolve references, and how FabLL types/traits map onto edge types. Use when working with TypeGraph traversal, edge types, or building type-aware queries.
cd ~/.claude/skills
git clone https://github.com/atopile/atopile.git atopile mkdir -p ~/.claude/skills/faebryk
curl -fsSL https://raw.githubusercontent.com/atopile/atopile/HEAD/.claude/skills/faebryk/SKILL.md \
-o ~/.claude/skills/faebryk/SKILL.md The Faebryk core here is the TypeGraph + edge types implemented in Zig and exposed to Python via faebryk.core.faebrykpy.
Source-of-truth for API + behavior:
src/faebryk/core/faebrykpy.py (Python-facing wrapper + type-safe EdgeTrait.traverse)src/faebryk/core/zig/gen/faebryk/typegraph.pyi (public stubbed API surface)src/faebryk/core/zig/src/faebryk/* (Zig implementation)import faebryk.core.faebrykpy as fbrk
import faebryk.core.graph as graph
g = graph.GraphView.create()
tg = fbrk.TypeGraph.create(g=g)
src/faebryk/core/faebrykpy.py (re-exports + EdgeTraversal + type-safe EdgeTrait.traverse)src/faebryk/core/zig/gen/faebryk/typegraph.pyi (TypeGraph stub)faebrykpy.py):
EdgeComposition (parent/child structure)EdgeTrait / Trait (trait attachment)EdgePointer (references)EdgeInterfaceConnection (interface connections)EdgeOperand (solver operand wiring)EdgeType / EdgeNext (type graph plumbing)Linker (used by compiler/linking stages)src/faebryk/core/node.py (binds Python classes into the TypeGraph; uses composition/trait edges)src/atopile/compiler/* (creates and links TypeGraphs)src/faebryk/core/solver/* (operand edges and instance traversal)src/atopile/build_steps.py (visits type/instance edges for PCB/layout features)TypeGraph is created against a GraphView:
import faebryk.core.graph as graph
import faebryk.core.faebrykpy as fbrk
g = graph.GraphView.create()
tg = fbrk.TypeGraph.create(g=g)
TypeGraph.ensure_child_reference(..., path=[...]) uses EdgeTraversal items to walk references through the type graph.src/faebryk/core/zig/src/faebryk/* (edges, typegraph internals).ato dev compile (imports faebryk.core.zig).src/faebryk/core/faebrykpy.py (example: type-safe EdgeTrait.traverse).ato dev test --llm test/compiler/test_typegraph.py -qato dev test --llm test/compiler/test_runtime.py -qato dev test --llm test/core/zig/test_interface_pathfinder.py -qfaebryk.core.faebrykpy (so callers get Python helpers, not just raw generated types).EdgeTrait.traverse(trait_type=SomeTrait) over stringly-typed trait_type_name=....You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior. Explores user intent, requirements and design before implementation.
Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup
Use when receiving code review feedback, before implementing suggestions, especially if feedback seems unclear or technically questionable - requires technical rigor and verification, not performative agreement or blind implementation
Use when completing tasks, implementing major features, or before merging to verify work meets requirements
Use when starting feature work that needs isolation from current workspace or before executing implementation plans - ensures an isolated workspace exists via native tools or git worktree fallback
Use when starting any conversation - establishes how to find and use skills, requiring skill invocation before ANY response including clarifying questions