Docs
/
what you can do

Hardware

<!-- GENERATED by ops/tools/skill-sync — do not edit by hand. Run pnpm skills:sync. -->

<!-- GENERATED by ops/tools/skill-sync — do not edit by hand. Run pnpm skills:sync. -->

Hardware — what you can do

/admin/d/hardware · pillar apps

Idea to reality for hardware — design PCBs with AI, edit them live, and export a package a fab house accepts.

Tabs

Every one is a real URL. A tab with its own section below carries a real job.

TabPathGroupWhat it is for
circuit/admin/circuit--
circuit-agent/admin/circuit-agent--
arduino-ide/admin/arduino--
arduino-agent/admin/arduino-agent--

Tools an agent can call here

These are live page capabilities: they exist only while that surface is open, and they call the page's own mutators, so a change made through one is a change the operator can see. A tool missing from this list is not callable — reach for the API or an adapter instead.

Source: hardware/circuit/CircuitGallery.jsx

What the page tells an agent about itself:

The user is browsing their circuit boards. Call list_boards before referring to one by name. Opening or creating a board grants a much deeper set of design tools on the editor page.
ToolArgsDoes
list_boardsList the user's circuit boards: name, description, tags, component/net counts, and whether each is a fork.
open_boardboardOpen one of the boards in the editor. Pass its id (from list_boards); an exact unique name also works. Ambiguous names are refused with the candidates rather than guessed.
create_boardname templateIdCreate a new circuit board from a starter template and open it. Templates: blank-2layer, blinky, voltage-divider, 555-timer, arduino-blinky, arduino-button, esp32-i2c-sensor.
fork_boardboardFork one of the boards — an independent copy of its files you can change without touching the original.

hardware:circuit-editor — Circuit board: …

Source: hardware/circuit/model/useCircuitCapabilities.js

What the page tells an agent about itself:

The user is editing ONE circuit board in Leumas Circuit Studio (tscircuit). Always call get_board_overview before reasoning about or changing the board, and list_components before referring to a designator. Prefer the structured tools (add_component / patch_component / layout_edit) over edit_source — they normalize footprints and auto-place parts so components never overlap. After any change, call validate_board: it is free, instant, and catches dangling nets and bad footprints before the user sees a broken render. Component positions are in millimetres. Only these element types are valid at source level: resistor, capacitor, led, chip, pushbutton, pinheader, transistor, diode. run_autoroute and run_drc need the tscircuit CLI on the SERVER. When one answers {unavailable, reason}, report that reason as written — it is a fact about this install, not a failure of the board, and the user cannot fix it by changing the design. To build a WHOLE PRODUCT rather than a board — an enclosure and firmware too, cross-checked against each other — call start_invention with the user's sentence, then poll check_invention. It takes three to four minutes and walks six gated stages, so never expect one call to finish it. It produces a NEW project and does not touch the board that is open; open_invented_board is a fork, not a move.
ToolArgsDoes
get_board_overviewRead the open circuit board: name, physical size and layer count, how many components/nets/traces it has, which pipeline phase it is in, and whether it has finished rendering. Call this FIRST before reasoning about or changing the board.
list_componentsList every component on the board with its designator, kind, value, footprint placement and board position in mm. Use before moving, rotating or patching anything so you refer to real designators.
get_sourceRead the board's tscircuit source (index.circuit.tsx) verbatim. Use when you need to reason about or rewrite the actual JSX.
get_bomRead the bill of materials and the netlist for the board as last designed.
check_inventionrunIdRead the progress of an invention run started with start_invention: which of the six stages have finished, what each produced, and the five cross-discipline interface checks. Poll this — a full run takes three to four minutes.
design_boardtemplateId specDesign the whole board from a structured spec or a starter template, REPLACING the current source. Templates: blank-2layer, blinky, voltage-divider, 555-timer, arduino-blinky, arduino-button, esp32-i2c-sensor. Prefer add_component/edit_source for incremental changes — this overwrites everything.
add_componenttype name footprint propsAdd ONE component to the board. type must be one of: resistor, capacitor, led, chip, pushbutton, pinheader, transistor, diode. For a dev board, sensor or module use type "chip" with props.manufacturerPartNumber and a pinrow<N> footprint — that is how tscircuit models them; a <sensor/> element would be invalid.
patch_componentname footprint propsChange an existing component's props (resistance, capacitance, footprint, part number…) without touching the rest of the board.
layout_editoperation componentName componentNames firstComponentName secondComponentName dxMm dyMm deltaDeg axis mode spacingMmMove, rotate, align, distribute or swap components on the board. Positions are in mm; call list_components first to see where things are.
edit_sourcesourceReplace the board's tscircuit source outright. Use for changes the structured tools cannot express. Always call get_source first and return the COMPLETE new file, not a fragment.
validate_boardStructurally validate the current source — duplicate designators, dangling nets, unresolvable footprints. Free and instant; run it after any edit.
run_autorouteRoute the board's nets automatically. Needs the tscircuit CLI on the server; when it is absent this answers {unavailable, reason} and nothing was routed. Note that a wide supply net should be a POUR rather than routed traces — routing a 24+ pin rail can produce no copper at all.
run_drcRun the design-rule check — tsci's validators plus a full build with DRC on. Needs the tscircuit CLI on the server; when it is absent this answers {unavailable, reason}.
start_inventionbriefTurn one sentence into a whole product — a board, an enclosure sized around the measured board, firmware written against the board's netlist, and five cross-discipline checks that they agree. Returns a runId in milliseconds; poll check_invention, because the run itself takes three to four minutes. It creates a NEW project and does NOT modify the board that is open.
open_invented_boardcircuitIrId nameOpen the board an invention run designed, as a new project in Circuit Studio. Pass the circuitIrId from check_invention's artifacts. This is a FORK, not a move — the stored design stays what the interface checks ran against — and calling it twice returns the same project rather than a second copy.
add_part_from_bankquery componentTypeSearch the Arduino component knowledge bank (180 real boards, sensors, modules and displays) and add the best match to the board. Use for real hardware by name — "add a DHT22", "add an ESP32-CAM". Returns the alternatives it did not pick so you can choose again.
set_previewviewSwitch the live preview between the pcb, schematic and cad (3D) views so the user sees what you are talking about.
export_fab_packageBuild and download the manufacturing package (Gerbers, drill, BOM, pick-and-place, 3D model, source) for this board. The board must have finished rendering.

hardware:arduino-ide

Source: hardware/model/useArduinoCapabilities.js

What the page tells an agent about itself:

The user is in the Arduino IDE, editing the firmware for one project. Always call get_sketch_overview before reasoning about or changing the sketch, and get_sketch_source before editing it — edit_sketch_source replaces the WHOLE file, so a partial send destroys the rest. After any edit, call compile_sketch and read the log before saying it works. upload_sketch writes to real hardware; only call it when the user asked to upload or flash. If a build tool reports that arduino-cli is unavailable, say so plainly — this server cannot compile, and editing is still fine.
ToolArgsDoes
get_sketch_overviewRead the open Arduino project: its name, the sketch file, how long the source is, the selected board and serial port, whether there are unsaved changes, whether arduino-cli is available, and the tail of the last build. Call this FIRST before reasoning about or changing the firmware.
get_sketch_sourceRead the full source of the open .ino sketch. Do this before editing it — edit_sketch_source replaces the whole file.
list_arduino_hardwareList the boards this IDE can target, the starter templates available, and the serial ports currently detected on the machine (with whatever board was identified on each).
read_serial_outputRead what the board has printed to the serial monitor since it was opened. Only works while the monitor is running — call show_serial_monitor first.
edit_sketch_sourcesourceReplace the whole .ino sketch with new source and save it. Read get_sketch_source first and send the COMPLETE file back — this is not a patch. Does not compile; call compile_sketch after.
apply_sketch_templatetemplateIdReplace the sketch with one of the starter templates (see list_arduino_hardware). This DISCARDS the current source.
set_arduino_targetboard portChoose which board to compile for and/or which serial port to upload to. Both are optional; pass only what you want to change.
compile_sketchCompile the open sketch for the selected board. Saves first if there are unsaved changes. Returns the tail of the build log — read it before claiming success.
upload_sketchCompile and flash the sketch onto the physically connected board on the selected port. This changes real hardware — only call it when the user has asked to upload or flash.
open_arduino_projectprojectIdOpen one of the user's Arduino projects in the IDE, so the sketch on screen is the one being discussed.
show_serial_monitoropenOpen or close the serial monitor on the selected port, so the user can watch what the board prints.

What this domain owns

Its verb is Open.

Entity kinds: workspace.project

Source .claude/skills/leumas-studio/reference/domains/hardware.md (no-git)markdownjson
Generated from the Leumas repository. Every page cites the file it came from.leumas.techllms.txt