
LevelShifter
gusmanb/logicanalyzer
24 channel, 100Msps logic analyzer hardware and software
Agents that design hardware, and prove it. Prompt-first workstation (Matter, Board, Silicon) on Nemotron + Nebius Token Factory and Sandboxes. Open-source pip package, CLI and MCP server. Live demo, no sign-up.
Fault strapping pin is an open-source printed circuit board by hash066, from the hash066/siliconsmith repository on GitHub, published under the Apache-2.0 licence. It is a 2-layer board of 48 × 36 mm with 21 parts on 13 nets, routed with 180 tracks and 81 vias.
Its parts include 7 resistors, 6 capacitors, 4 ICs, 2 connectors and 1 diode. It belongs with the ESP32 boards of this library.
Agents that design hardware, and prove it.
Click the animation to watch the full demo video on YouTube.
Try it, no sign-up · Watch the demo · Use it from your agent · Feedback on Nebius · Model comparison
Hardwright is a workstation for people who make hardware: describe a heat sink, a sensor board or a slow loop in plain words, and a Nemotron agent builds it. Every claim it makes has to pass a checker it cannot argue with, so you get a part, a board or an instruction you can open in a real tool, plus the evidence for it. It also ships as an open-source Python package, command-line tool and MCP server so any coding agent can use the same checkers.
Built for the Nebius x NVIDIA Global AI Hackathon (Coding and Agentic Engineering) · Apache-2.0
pip install "hardwright[matter] @ git+https://github.com/hash066/siliconsmith#subdirectory=engine"
claude mcp add hardwright -- hardwright mcp # or: codex mcp add ... / Cursor / VS Code (see /connect)
hardwright board check --template fault_gpio12_vs_gpio14 # exit 1: the firmware uses a boot-strapping pinThe idea: an AI may say what it likes, but it may only claim what a deterministic verifier returned. Each workbench ends in something you can open in a real tool, and each result carries the tool, the version and the verdict behind it.
| Workbench | You say | You get | Verified by |
|---|---|---|---|
| Board | "A battery ESP32 sensor board with a BME280 and USB-C charging; check it against its firmware." | A routed 2-layer KiCad board you can zoom, a schematic, a report card, Gerbers, KiCad file, BOM, pick-and-place. The wrong pin is marked on the pad. | Five netlist checks (B1 to B5: well formed, electrical rules, bus rules, firmware pins vs netlist and boot-strapping hazards, battery estimate), KiCad 7 design-rule check, the autorouter's completion |
| Matter | "A heat sink for a 5 W chip, 40 mm square, under 70 C." | A 3D part coloured by temperature, a printable STL, and a side-by-side with plain fins that use the same material | A finite-volume solver validated on analytic cases, an independent finite-element solver, printability rules, equal-material baselines (M1 to M5) |
| Silicon | "Make this loop faster with a custom RISC-V instruction." | A new instruction written live: Verilog, C intrinsic, rewritten kernel, a circuit view of the hardware, a waveform on real operand pairs, a before/after loop | Verilator lint, 1,000,000 test vectors, a Yosys SAT proof for every possible input, whole-program output check, cycle count and area |
Around them: a chat agent (Nemotron 3 Ultra, Super and Nano on Nebius Token Factory, with native tool calling) that performs actions in the app and reports what it spent; projects (each workbench is a folder of projects with its own chat and settings); a Workflow tab that shows every project as connected steps with their real status; a Verified-by ledger on every Proof tab; one-click zip of a project; and $0.50 of demo credit per visitor from a $25 pool.
| Matter | Board |
|---|---|
| Board, catching a mistake | Silicon |
Everything below ran for real and is reproducible; numbers are from the run logs and the test suites.
docs/EVALUATION.md.citation_checked flag. 2 layers, 0.2 mm tracks, 0.15 mm clearance.The hardwright package (in engine/, Apache-2.0) is offline and free: no model, no network, no API key. Every check answers pass, fail or unknown;
only pass is a claim.
import hardwright as hw
hw.board_check(template="fault_gpio12_vs_gpio14")["passed"] # False (B4)
hw.board_fix_pin(template="fault_gpio12_vs_gpio14", function="wake_btn", pin="GPIO14")["passed"] # True
hw.matter_simulate(power_w=5, stl_path="heat-sink.stl")["peak_c"]MCP tools: board_templates, board_get_template, board_check, board_fix_pin, board_parts, matter_simulate. Verified with the official MCP Python client.
Setup lines for Claude Code, Codex, Cursor, VS Code and Claude Desktop: hardwright mcp --setup or https://siliconsmith.vercel.app/connect.
flowchart LR
you([You]) --> web["Next.js app<br/>Vercel"]
agentx([Claude Code · Cursor · Codex]) -- MCP --> pkg
term([Terminal]) -- CLI --> pkg
pkg["hardwright package<br/>offline CLI + MCP server"] --> chk
web -- "/api proxy" --> api["Python API host<br/>FastAPI on Vercel"]
api --> chk["Deterministic checkers<br/>board B1 to B5 · Matter solvers · evidence ids"]
web -- "chat agent" --> nem
api --> nem["Nemotron on Nebius Token Factory<br/>Ultra · Super · Nano · tool calling"]
api --> sbx
subgraph sbx ["Token Factory Sandboxes"]
base["siliconsmith-base<br/>Verilator · Yosys · RISC-V GCC"]
kicad["siliconsmith-kicad<br/>KiCad 7 · Java · Freerouting"]
end
classDef box fill:#101827,stroke:#3d63d9,color:#fff;
class web,api,chk,nem,pkg box;sequenceDiagram
autonumber
actor U as You
participant A as Nemotron agent
participant C as Checker (no model)
participant G as Post-check
U->>A: Is this board OK to send to fab?
A->>C: board_check(template)
C-->>A: pass / fail / unknown + evidence ids
A->>G: Draft answer with its claims
G-->>G: Every claim needs an evidence id. Invented commands or runs are flagged
G-->>U: Answer citing board:fault_gpio12_vs_gpio14#B4
Note over C,U: Only a pass counts as a claim. Unknown never does.flowchart TD
p["Prompt: make this loop faster"] --> u["Nemotron Ultra<br/>proposes one custom RISC-V instruction"]
u --> s["Nemotron Super<br/>writes the Verilog, the C intrinsic, the rewritten kernel"]
s --> l1["Lint"]
subgraph box ["Token Factory Sandbox"]
l1 --> l2["One million test vectors"] --> l3["Formal proof (Yosys SAT) for every input"] --> l4["Whole-program output match"] --> l5["Cycles and area"]
end
l5 --> ok["Verified instruction:<br/>RTL, intrinsic, report, evidence ids"]
l1 -. fail .-> n["Nemotron Nano<br/>triages the log"]
l2 -. fail .-> n
l3 -. counterexample .-> n
l4 -. fail .-> n
n --> r["Super repairs"] --> l1part:esp32.gpio12.strapping, board:fault_gpio12_vs_gpio14#B4, run:...). The agent's
answers are post-checked: an invented command or a claimed run that did not happen is flagged.evidence/ holds three verified instructions that anyone can re-check with no model: siliconsmith verify-entry dot4-tinymaix.Requirements: Python 3.11+, Node 22, and for the full pipelines Linux or WSL2.
pip install -e "engine[matter,dev]" # the checkers, CLI and MCP server
pytest engine/tests/test_hardwright_pkg.py # package, CLI and MCP tests (no toolchain needed)
cd web && npm install && npm run dev # the app; the hosted API is used unless LOCAL_PYTHON_API is set
# the full engine (Silicon search, KiCad layout) needs the toolchain:
sudo bash scripts/setup-toolchain.sh # Verilator, Yosys, nextpnr, RISC-V GCC
pip install -e "engine[all]" && cp .env.example .env.local # NEBIUS_API_KEY, NEBIUS_PROJECT_ID
siliconsmith accelerate w1 --backend contree # the full Silicon search, every candidate in a Token Factory Sandbox
python -m siliconsmith.board.layout.build_sandbox_image # build the KiCad Sandbox image (once)Deploy notes, the Sandbox image recipes and every gotcha we hit are in docs/HANDOFF_LATEST.md and docs/feedback.md.
engine/hardwright/ the open-source package: Python API, CLI, MCP server
engine/siliconsmith/ board/ (checker, layout, Sandbox routing), matter/ (solver), live/ (live Silicon), search, ladder, backends
engine/tests/ 640 tests engine/scripts/ build_boards.py (precomputes the template boards)
web/ the app (Next.js) web/public/boards/ the routed template boards
workloads/ hw/ firmware/ real kernels (TinyMaix, Monocypher), PicoRV32 SoC, runtime
evidence/ verified instructions (re-checkable without a model)
docs/ EVALUATION.md (strict evaluation), HANDOFF_LATEST.md, plans, feedback.md, video.md, devpost.mdCommercial custom-instruction flows (Andes, Cadence Tensilica) build the processor after a human decides the instruction; research agents (CHIA, LACE) implement a described extension; AI circuit-design tools (Flux Copilot and others) generate a design without a verifier that can refuse it. Hardwright puts a deterministic verifier between the model and every claim, across chips (formal proof), boards (KiCad rules plus firmware-versus-datasheet checks) and matter (two independent solvers), and ends each in a file you can open elsewhere.
Apache-2.0. Vendored or adapted code keeps its license: PicoRV32 (ISC), TinyMaix (Apache-2.0), Monocypher (BSD-2-Clause or CC0-1.0), KiCad footprints and symbols (CC-BY-SA 4.0 with the library exception) and Freerouting (GPL-3.0, used only as a separate program inside the Sandbox image, never linked or redistributed here).
| Qty | Value | Footprint | References |
|---|---|---|---|
| 3 | 10u | Capacitor_SMD:C_0603_1608Metric | C101, C102, C103 |
| 2 | 4.7k | Resistor_SMD:R_0603_1608Metric | R1, R2 |
| 2 | 4u7 | Capacitor_SMD:C_0603_1608Metric | C105, C106 |
| 2 | 5.1k | Resistor_SMD:R_0603_1608Metric | R5, R6 |
| 1 | 100n | Capacitor_SMD:C_0603_1608Metric | C104 |
| 1 | 10k | Resistor_SMD:R_0603_1608Metric | R3 |
| 1 | 2k | Resistor_SMD:R_0603_1608Metric | R7 |
| 1 | 330 | Resistor_SMD:R_0603_1608Metric | R4 |
| 1 | BME280-class humidity/pressure/temperature sensor | Package_LGA:Bosch_LGA-8_2.5x2.5mm_P0.65mm_ClockwisePinNumbering | U3 |
| 1 | ESP32-WROOM-32-class module | RF_Module:ESP32-WROOM-32 | U1 |
| 1 | Generic 3.3 V LDO (reference class, author-defined values) | Package_TO_SOT_SMD:SOT-23 | U2 |
| 1 | LED (placeholder) | LED_SMD:LED_0603_1608Metric | D1 |
| 1 | Li-ion cell connector (placeholder) | Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_Vertical | J2 |
| 1 | MCP73831-class single-cell Li-ion charger (SOT-23-5) | Package_TO_SOT_SMD:SOT-23-5 | U5 |
| 1 | Push button (placeholder) | Button_Switch_SMD:SW_SPST_TL3342 | SW1 |
| 1 | USB-C receptacle, power only (placeholder) | Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12 | J1 |
It measures 48 × 36 mm and has 2 copper layers, 1.6 mm thick.
21 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the hash066/siliconsmith repository on GitHub, at the commit this page was made from: the board is web/public/boards/fault_strapping_pin/routed.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the Apache-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

gusmanb/logicanalyzer
24 channel, 100Msps logic analyzer hardware and software

mntmn/amiga2000-gfxcard
MNT VA2000, an Open Source Amiga 2/3/4000 Graphics Card (Zorro II/III), written in Verilog


hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

drandyhaas/KiCadRoutingTools
A set of Python/Rust tools to aid routing in KiCad

Arrow-air/project-quiver
Project Quiver documentation, designs, and project artifacts.

