Agent skill

Ato Language

by atopile in atopile/atopile

Reference for the .ato declarative DSL: type system, connection semantics, constraint model, and standard library.

MITAuto-check passed

Install Ato Language

skills CLI
$ npx skills add atopile/atopile --skill ato-language -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install atopile/atopile ato-language --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/atopile/atopile.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/ato-language .claude/skills/ato-language && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
ato-language
GitHub stars
4k
Token cost
~3.5k tokens
SKILL.md length
904 words
Files
2
Skills in repo
19
Repo updated
First seen
Licence
MIT

At a glance

Reference for the .ato declarative DSL: type system, connection semantics, constraint model, and standard library.

  • Works in 8 steps: Everything is a Node in a Graph → Three Block Types → Composition — Children and Instantiation → …
  • Reviewing .ato code
  • SKILL.md covers Quick Start, Core Concepts, Statement Reference and Type System, plus 2 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Ato Language is an agent skill from atopile/atopile. Reference for the .ato declarative DSL: type system, connection semantics, constraint model, and standard library. Use when authoring or reviewing .ato code.

Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `EXTENSION.md`).

The repository describes itself as: Design circuit boards with code! ✨ Get software-like design reuse 🚀, validation, version control and collaboration in hardware; starting with electronics ⚡️. The licence is MIT.

When your agent uses it

  • Reviewing .ato code

Example prompts

  • “/ato-language”

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. Everything is a Node in a Graph
  2. Three Block Types
  3. Composition — Children and Instantiation
  4. Connection — Declaring Electrical Identity
  5. Constraints — Physical Quantities and Assertions
  6. Traits — Behavioral Metadata
  7. Import System
  8. Pragma Feature Flags

What it can do on your machine

Read from SKILL.md and the folder at commit 619eda7. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are ato).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Ato Language loads about 3.5k tokens when it runs. Until then it costs about 44 tokens; SKILL.md has 904 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~44
When it runs · the whole SKILL.md, loaded when a task matches
~3.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from atopile/atopile at commit 619eda7, republished under its MIT licence (© atopile). 904 words, ~3,536 tokens.

Download SKILL.mdSave it as .claude/skills/ato-language/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
ato-language
description
Reference for the `.ato` declarative DSL: type system, connection semantics, constraint model, and standard library. Use when authoring or reviewing `.ato` code.

The ato language

ato is a declarative, constraint-based DSL for describing electronic circuits. There is no control flow, no mutation, and no execution order — you declare what a circuit is, and the compiler + solver resolve it into a valid design.

Quick Start

A minimal complete .ato file:

ato
#pragma experiment("BRIDGE_CONNECT")

import Resistor
import ElectricPower
import Capacitor

module PowerFilter:
    """A simple decoupled power input with a pull-down resistor."""
    power = new ElectricPower
    decoupling_capacitor = new Capacitor
    pulldown_resistor = new Resistor

    power.hv ~> decoupling_capacitor ~> power.lv
    power.hv ~> pulldown_resistor ~> power.lv

    decoupling_capacitor.capacitance = 100nF +/- 20%
    pulldown_resistor.resistance = 100kohm +/- 5%
    assert power.voltage within 3.0V to 3.6V

Validate with ato build from the package directory.

Core Concepts

1. Everything is a Node in a Graph

Every entity (a resistor, a power rail, an I2C bus, a voltage parameter) is a node in a typed graph. Nodes relate to each other through edges: composition (parent–child), connection (same-net), and traits (behavioral metadata). The .ato language is a surface syntax for constructing this graph declaratively.

2. Three Block Types

ato has exactly three ways to define a new type:

KeywordSemanticsTypical Use
moduleA design unit that contains children and connectionsCircuit blocks, subsystems
interfaceA connectable boundary; can be wired with ~Buses, power rails, signals
componentA physical part with footprint/symbolVendor ICs, connectors

All three compile to graph nodes. The distinction controls which traits the compiler attaches (is_module, is_interface) and what operations are legal (by convention, interfaces appear on both sides of ~).

Inheritance uses from:

ato
module MyRegulator from Regulator:
    pass
3. Composition — Children and Instantiation

Types contain children. Inside a block body, new instantiates a child:

ato
module Board:
    power = new ElectricPower      # interface child
    sensor = new BME280            # module child
    caps = new Capacitor[4]        # array of 4 capacitors

Children are accessed via dot-notation: sensor.power.voltage, caps[0].capacitance.

4. Connection — Declaring Electrical Identity

The wire operator ~ declares that two interfaces are the same net/bus. It is bidirectional and requires matching types:

ato
power_3v3 ~ sensor.power          # ElectricPower ~ ElectricPower
i2c_bus ~ sensor.i2c              # I2C ~ I2C

The bridge operator ~> (requires #pragma experiment("BRIDGE_CONNECT")) inserts a component in series. The component must carry the can_bridge trait which defines its in/out mapping:

ato
power_5v ~> regulator ~> power_3v3
i2c.scl.line ~> pullup ~> power.hv
5. Constraints — Physical Quantities and Assertions

Values in ato carry units and tolerances. The solver uses these to select real parts.

Assignment binds a value to a parameter:

ato
power.voltage = 3.3V +/- 5%
resistor.resistance = 10kohm +/- 10%
i2c.frequency = 400kHz
i2c.address = 0x48

Assertions declare constraints the solver must satisfy:

ato
assert power.voltage within 3.0V to 3.6V
assert i2c.frequency <= 400kHz
assert sensor.i2c.address is 0x50

Three value forms exist:

  • Exact: 3.3V
  • Bilateral tolerance: 10kohm +/- 5%
  • Bounded range: 3.0V to 3.6V
6. Traits — Behavioral Metadata

Traits attach capabilities or metadata to nodes. They are not children — they use trait edges in the graph.

ato
#pragma experiment("TRAITS")

import has_part_removed
import is_atomic_part

module Placeholder:
    trait has_part_removed          # mark as non-physical placeholder
    trait is_atomic_part            # user-defined part with footprint

Key built-in traits:

TraitEffect
can_bridgeEnables use with ~> operator (defines in/out pin mapping)
has_part_removedNo physical part placed (symbolic node)
is_atomic_partUser-defined part with manufacturer, partnumber, footprint
has_datasheetAttaches a datasheet reference
has_designator_prefixSets PCB designator (R, C, U, etc.)
7. Import System

Bare imports resolve to standard library types (1 line per import):

ato
import ElectricPower
import I2C
import Resistor

Path imports resolve to types defined in other .ato files (1 line per import):

ato
from "atopile/vendor-part/vendor-part.ato" import Vendor_Part
8. Pragma Feature Flags

Experimental syntax is gated behind pragmas (file top, before imports):

ato
#pragma experiment("BRIDGE_CONNECT")     # ~> operator
#pragma experiment("FOR_LOOP")           # for loops
#pragma experiment("TRAITS")             # trait keyword
#pragma experiment("MODULE_TEMPLATING")  # new Foo<p=v>
#pragma experiment("INSTANCE_TRAITS")    # traits on instances

Using gated syntax without the pragma is a compile error.

Statement Reference

Every statement inside a block body is one of:

StatementSyntaxPurpose
assignname = value or name = new TypeBind a value or instantiate a child
connecta ~ bWire two interfaces together
bridgea ~> b ~> cInsert bridgeable components in series
assertassert expr <op> exprDeclare a constraint
retypename -> NewTypeReplace an inherited child's type
pinpin VCCDeclare a physical pin
signalsignal resetDeclare an electrical signal
traittrait TraitNameAttach a trait
importimport TypeImport a type
forfor x in arr:Iterate over an array (pragma-gated)
string"""..."""Documentation string
passpassEmpty placeholder

Statements within a block are order-independent — the compiler resolves the full graph, not a sequence of operations.

Show full SKILL.md (355 more words)Show less

Type System

Interfaces (connectable with ~ or ~>)
TypeChildren / ParametersPurpose
Electrical(single node)Raw electrical connection point
ElectricPower.hv, .lv (Electrical); .voltage, .max_currentPower rails
ElectricLogic.line (Electrical), .reference (ElectricPower)Digital signals with voltage context
ElectricSignal.line (Electrical), .reference (ElectricPower)Analog signals
I2C.scl, .sda (ElectricLogic); .frequency, .addressI2C bus
SPI.sclk, .mosi, .miso (ElectricLogic); .frequencySPI bus
UART / UART_Base.tx, .rx (ElectricLogic); flow control linesSerial
I2Saudio data bus linesDigital audio
DifferentialPair.p, .nDifferential signals
USB2_0 / USB3 / USB2_0_IFUSB data + powerUSB interfaces
CAN_TTLCAN bus linesCAN bus
SWD / JTAGdebug linesDebug interfaces
Ethernet / HDMI / RS232 / PDM / XtalIF / MultiSPIprotocol-specificOther protocols
Modules (instantiable with new)
TypeChildren / ParametersDesignator
Resistor.unnamed[0..1]; .resistance, .max_powerR
Capacitor.unnamed[0..1], .power; .capacitance, .max_voltage, .temperature_coefficientC
CapacitorPolarizedpolarized variant of CapacitorC
Inductor.unnamed[0..1]; .inductanceL
Fuse.unnamed[0..1]; .trip_current, .fuse_typeF
Diode.anode, .cathode; .forward_voltage, .currentD
LED.diode; .brightness, .colorD
MOSFET.source, .gate, .drain; .channel_type, .gate_source_threshold_voltageQ
BJT.emitter, .base, .collector; .doping_typeQ
Regulator / AdjustableRegulator.power_in, .power_out—
Crystal.unnamed[0..1], .gnd; .frequency, .load_capacitanceXTAL
Crystal_Oscillatoroscillator module—
ResistorVoltageDividervoltage divider circuit—
FilterElectricalRCRC filter—
Net.part_of (Electrical)—
TestPoint.contact; .pad_size, .pad_typeTP
MountingHole / NetTiemechanical—
SPIFlashSPI flash memory—
Traits (attachable with trait)

has_part_removed, is_atomic_part, can_bridge, can_bridge_by_name, has_datasheet, has_designator_prefix, has_doc_string, has_net_name_affix, has_net_name_suggestion, has_package_requirements, has_single_electric_reference, is_auto_generated, requires_external_usage

Units and Literals

SI-prefixed units: V, mV | A, mA | ohm, kohm, Mohm | F, uF, nF, pF | Hz, kHz, MHz, GHz | s, ms | W, mW

Number formats: decimal (3.3), scientific (1e-6), hex (0x48), binary (0b1010), underscore-separated (1_000_000)

Booleans: True, False

Invariants

  1. Type-safe connections: ~ and ~> should connect matching interface types. ElectricPower ~ I2C is a type mismatch (enforcement is being strengthened).
  2. Pragma gates syntax: using ~>, for, trait, or <> without the matching pragma is a compile error.
  3. Tolerances on passives: resistance = 10kohm (zero tolerance) matches no real parts. Always use +/- N%.
  4. ElectricLogic needs a reference: logic signals require a power reference for voltage context. Set signal.reference ~ power_rail.
  5. Order independence: statements within a block are not sequentially executed. The solver resolves the full graph.
  6. No procedural logic: no if, while, return, functions, classes, or exceptions.

© atopile, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in .claude/skills/ato-language of atopile/atopile.

  • SKILL.md
  • EXTENSION.md

Open the folder on GitHubat commit 619eda7

Compare with similar skills

Ato Language next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Ato Language compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Ato Language this skillatopile/atopile4k—~3.5kAutomated safety check: PassMIT
ConnectComposioHQ/awesome-claude-skills77k3 repos~987Automated safety check: PassNone
Node Connectopenclaw/openclaw392k—~1.6kAutomated safety check: PassMIT
Semantic Liststhedaviddias/Front-End-Checklist74k—~504Automated safety check: PassMIT
Dsl Vm Reversesickn33/agentic-awesome-skills47k1 repos~2.4kAutomated safety check: PassMIT
Openwork Connectdifferent-ai/openwork24k—~370Automated safety check: PassCustom licence

Similar skills

  • Connect

    ComposioHQ/awesome-claude-skills

    Connect Claude to any app. An agent skill from ComposioHQ/awesome-claude-skills.

    77k GitHub starsUsed in 3 repos~987 tokens
    Productivity & AutomationAuto-check passed
  • Node Connect

    openclaw/openclaw

    Diagnose OpenClaw Control UI browser and native Android, iOS, or macOS node connection failures across route, auth, pairing, QR/setup-code, and reconnect states.

    392k GitHub stars~1.6k tokensUpdated today
    MobileAuto-check passed
  • Semantic Lists

    thedaviddias/Front-End-Checklist

    A skill your agent uses when reviewing rendered HTML, interactive components, or design-system patterns related to Use semantic list elements.

    74k GitHub stars~504 tokensUpdated 3 days ago
    Frontend & DesignAuto-check passed
  • Dsl Vm Reverse

    sickn33/agentic-awesome-skills

    Reverse JavaScript-based custom DSL/VM interpreters and risk-control engines: identify IIFE/switch-based opcode dispatch, extract opcode tables, and capture runtime semantics.

    47k GitHub starsUsed in 1 repo~2.4k tokens
    SecurityAuto-check passed
  • Openwork Connect

    different-ai/openwork

    Search and use the skills, MCP connections, and connected services available through the user's OpenWork organization.

    24k GitHub stars~370 tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Semantic Versioning

    sickn33/agentic-awesome-skills

    Automate versioning and changelog generation using semantic versioning principles.

    47k GitHub starsUsed in 1 repo~2.6k tokens
    DevelopmentAuto-check passed

More from atopile/atopile

All 19 skills in this repo
  • Compiler

    atopile/atopile

    How the atopile compiler builds and links TypeGraphs from .ato (ANTLR front-end → AST → TypeGraph → Linker → DeferredExecutor), plus the key invariants and test entrypoints.

    4k GitHub stars~1k tokensUpdated 3 mo ago
    Auto-check passed
  • Domain Layer

    atopile/atopile

    Instructions for electronics-specific logic and build processes: netlists, PCBs, build steps, and exporters.

    4k GitHub stars~791 tokensUpdated 3 mo ago
    Auto-check passed
  • Fabll

    atopile/atopile

    How FabLL (faebryk.core.node) maps Python node/trait declarations into the TypeGraph + instance graph, including field/trait invariants and instantiation patterns.

    4k GitHub stars~1.1k tokensUpdated 3 mo ago
    Auto-check passed
  • Faebryk

    atopile/atopile

    How Faebryk's TypeGraph works (GraphView + Zig edges), how to traverse/resolve references, and how FabLL types/traits map onto edge types.

    4k GitHub stars~861 tokensUpdated 3 mo ago
    Auto-check passed
  • Graph

    atopile/atopile

    How the Zig-backed instance graph works (GraphView/NodeReference/EdgeReference), the real Python API surface, and the invariants around allocation, attributes, and cleanup.

    4k GitHub stars~952 tokensUpdated 3 mo ago
    Auto-check passed
  • Library

    atopile/atopile

    How the Faebryk component library is structured, how F.py is generated, and the conventions/invariants for adding new library modules.

    4k GitHub stars~714 tokensUpdated 3 mo ago
    Auto-check passed

Questions about Ato Language

What does Ato Language do?

Reference for the .ato declarative DSL: type system, connection semantics, constraint model, and standard library. Ato Language is an agent skill from atopile/atopile.ato declarative DSL: type system, connection semantics, constraint model, and standard library.

When should I use Ato Language?

Ato Language fits situations like: reviewing .ato code.

How do I install Ato Language in Claude Code?

Run `npx skills add atopile/atopile --skill ato-language -a claude-code`. Or copy the skill folder (.claude/skills/ato-language in atopile/atopile) into .claude/skills/ato-language in your project. Claude Code loads it when a task matches its description.

How do I install Ato Language in Codex?

Run `npx skills add atopile/atopile --skill ato-language -a codex`. Or copy the skill folder (.claude/skills/ato-language in atopile/atopile) into .agents/skills/ato-language in your project. Codex loads it when a task matches its description.

Can I use Ato Language in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add atopile/atopile --skill ato-language -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ato-language, .gemini/skills/ato-language, .github/skills/ato-language and .opencode/skills/ato-language in your project.

What does Ato Language need to run?

SKILL.md names no scripts, command-line tools or credentials: Ato Language is instructions for the agent only.

Does Ato Language access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Ato Language safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Ato Language use?

Ato Language is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Ato Language use?

About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Ato Language?

Skills that share tags, products or a category with Ato Language: Connect (ComposioHQ/awesome-claude-skills, 77k stars), Node Connect (openclaw/openclaw, 392k stars), Semantic Lists (thedaviddias/Front-End-Checklist, 74k stars) and Dsl Vm Reverse (sickn33/agentic-awesome-skills, 47k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Ato Language?

atopile (a GitHub organization) maintains it in atopile/atopile, which has 3,979 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on June 13, 2026.

Source: atopile/atopile on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.