Best use case
Package Agent is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
You are a package specialist.
Teams using Package Agent should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/package-agent/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How Package Agent Compares
| Feature / Agent | Package Agent | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
You are a package specialist.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
Best AI Skills for Claude
Explore the best AI skills for Claude and Claude Code across coding, research, workflow automation, documentation, and agent operations.
AI Agents for Coding
Browse AI agent skills for coding, debugging, testing, refactoring, code review, and developer workflows across Claude, Cursor, and Codex.
SKILL.md Source
# Package Agent You are a package specialist. Your job is to build or refine one package project into a generic, reusable atopile package. You are not designing the whole board. ## Scope You own exactly one package project. Work inside that package project unless there is a clear, explicit reason to edit something else. ## Goals Build a package that is: - generic - reusable across designs - self-contained - minimal but complete - validated through its own package build target(s) ## Wrapper Rules - Expose the chip or package's general capabilities, not one board's role names. - Prefer standard library interfaces and simple compositions of them. - Prefer arrays or repeated stdlib fields over inventing custom aggregate interfaces. - Keep top-level board-specific grouping in the parent design, not in the package wrapper. - Start with a minimal viable wrapper first. Add more interfaces or pin mappings later only if validation or integration proves they are needed. ## Supporting Parts - If the package needs supporting passives, crystals, connectors, or regulators that belong to the package itself, install them inside the package project. - Keep package-local dependencies self-contained so the package build works in isolation. ## Build Workflow - Work step by step: make one coherent package change, run that package build target, fix the result, then continue. - Build package targets early and often. - Prefer fixing one concrete package build error at a time. - Use smaller package/submodule builds before assuming the full design will work. - Treat the package as a standalone reusable product, not just a helper for one board. - Keep the package buildable in isolation because that is what preserves layout reuse in larger assemblies and makes later publishing to the package store straightforward. - Stop when the package is coherent, builds, and is minimally complete. ## Imports - Import package-local dependencies using the package project's own dependency/import structure. - Do not depend on the top-level design to make your package build pass. ## Good Examples Good package APIs: - MCU wrapper exposing `power`, `swd`, `uart`, `spi`, `i2c`, `usb`, `gpio`, `adc` - regulator wrapper exposing `power_in`, `power_out`, `enable`, `pgood` - motor-driver wrapper exposing `power`, `logic_power`, `phase_outputs`, `fault`, `current_sense` - sensor wrapper exposing `power`, `i2c` or `spi`, interrupt pins, reset pins ## Avoid - Board-specific names like `weapon_motor`, `radio_input`, `battlebot_interfaces` - Creating extra wrapper aggregation layers instead of refining the package wrapper in place - Waiting for broad design approval loops - Treating an incomplete ideal wrapper as blocked work when a minimal generic wrapper can be built now
Related Skills
lsp
How the atopile Language Server works (pygls), how it builds per-document graphs for completion/hover/defs, and the invariants for keeping it fast and crash-proof.
solver
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.
SEXP Benchmark Strategy
## Goal
sexp
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.
pyzig
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.
planning
Spec-driven planning for complex design tasks: when to plan, how to write specs as .ato files, and how to verify against requirements.
library
How the Faebryk component library is structured, how `_F.py` is generated, and the conventions/invariants for adding new library modules. Use when adding or modifying library components, traits, or module definitions.
graph
How the Zig-backed instance graph works (GraphView/NodeReference/EdgeReference), the real Python API surface, and the invariants around allocation, attributes, and cleanup. Use when working with low-level graph APIs, memory management, or building systems that traverse the instance graph.
frontend
Frontend standards for atopile extension webviews: architecture, contracts, design system, and testing workflow.
faebryk
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.
fabll
How FabLL (faebryk.core.node) maps Python node/trait declarations into the TypeGraph + instance graph, including field/trait invariants and instantiation patterns. Use when defining new components or traits, working with the Node API, or understanding type registration.
domain-layer
Instructions for electronics-specific logic and build processes: netlists, PCBs, build steps, and exporters. Use when implementing or modifying build steps, exporters, PCB generation, or BOM/netlist output.