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.
cd ~/.claude/skills
git clone https://github.com/atopile/atopile.git atopile mkdir -p ~/.claude/skills/pyzig
curl -fsSL https://raw.githubusercontent.com/atopile/atopile/HEAD/.claude/skills/pyzig/SKILL.md \
-o ~/.claude/skills/pyzig/SKILL.md pyzig is the Zig↔Python interoperability layer used by Faebryk’s native modules (graph, sexp, faebryk typegraph, …).
There are three distinct layers to keep straight:
src/faebryk/core/zig/__init__.py (build-on-import + .pyi syncing)src/faebryk/core/zig/build.zig (builds pyzig.so + pyzig_sexp.so, generates stubs)src/faebryk/core/zig/src/pyzig/* (wrapper generation + minimal C-API surface)ato dev compile
python -c "import faebryk.core.zig; import faebryk.core.graph"
src/faebryk/core/zig/__init__.py (ZIG_NORECOMPILE, ZIG_RELEASEMODE, lock, stub syncing)src/faebryk/core/zig/build.zig (builds extensions + runs .pyi generator)src/faebryk/core/zig/src/pyzig/pybindings.zig (minimal CPython C-API declarations)src/faebryk/core/zig/src/pyzig/pyzig.zig (wrapper generation helpers)src/faebryk/core/zig/src/pyzig/type_registry.zig (global type-object registry)src/faebryk/core/zig/src/pyzig/pyi.zig (stub generation helpers)src/faebryk/core/zig/src/python/graph/graph_py.zigsrc/faebryk/core/zig/src/python/sexp/sexp_py.zigsrc/faebryk/core/zig/src/python/graph/*src/faebryk/core/zig/src/python/sexp/*src/faebryk/core/zig/src/python/faebryk/* (and friends)wrap_in_python(...) / wrap_in_python_simple(...).PyTypeObjects for the same Zig type (type_registry).__init__ (by default): many “reference” types are not meant to be user-constructed; pyzig often installs an init that raises.__zig_address__() to help debug pointer identity.src/faebryk/core/zig/src/pyzig/*src/faebryk/core/zig/src/python/**ato dev compile (imports faebryk.core.zig; editable installs compile-on-import)ZIG_RELEASEMODE=ReleaseFast|ReleaseSafe|Debug as neededsrc/faebryk/core/zig/gen/** gets updated (this is driven by src/faebryk/core/zig/__init__.py)python -m faebryk.core.graph (GraphView allocation/cleanup stress)ato dev test --llm test/core/solver (heavy user of graph + bindings via many subsystems).destroy() vs tp_dealloc calling .deinit()).free(...) path and document it.tp_dealloc that calls deinit..pyi surface accurate; many callers rely on types for navigation.src/faebryk/core/zig/__init__.py is responsible for:
ZIG_NORECOMPILE=1)pyzig.so and pyzig_sexp.so from src/faebryk/core/zig/zig-out/lib/.pyi files into src/faebryk/core/zig/gen/** (black + ruff)Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Build, debug, and optimize Claude API / Anthropic SDK apps. Apps built with this skill should include prompt caching. Also handles migrating existing Claude API code between Claude model versions (4.5 → 4.6, 4.6 → 4.7, retired-model replacements). TRIGGER when: code imports `anthropic`/`@anthropic-ai/sdk`; user asks for the Claude API, Anthropic SDK, or Managed Agents; user adds/modifies/tunes a C
Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications (examples include websites, landing pages, dashboards, React components, HTML/CSS layouts, or when styling/beautifying any web UI). Generates creative, polished code and UI design that avoids generic AI aesthetics.
Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).
Knowledge and utilities for creating animated GIFs optimized for Slack. Provides constraints, validation tools, and animation concepts. Use when users request animated GIFs for Slack like "make me a GIF of X doing Y for Slack.