ironharness
harness — «упряжь»: впрягаем LLM-агентов в железо.
Агентский харнесс для I/O и прошивок. Два модуля:
- io-core — безопасный I/O-слой для агентов: транспорты (serial, Modbus TCP, MQTT,
файловая песочница), симулятор Modbus, инструменты прошивки ESP32 (esptool: разбор образа
офлайн, flash/erase на живой плате), JSONL-журнал всех операций, реплеер, лимиты
(rate-limit, дедлайны), верификация эффектов (
expect_read), MCP-сервер (19 инструментов). - ironbench — бенчмарк для firmware-агентов: золотые задачи в симуляторах (Wokwi ESP32/MicroPython, далее Renode), агентский цикл поверх LLM API, отчёты pass@k.
Быстрый старт
uv sync # зависимости (+ сам проект editable)
uv run pytest # тесты (без железа: loop:// и симуляторы)
uv run ruff check . # линтер
uv run ironharness-mcp # MCP-сервер (stdio; или: python -m io_core.mcp_server)
Инструменты агента (MCP)
echo · serial_open/write/read/read_line · modbus_open/read/write ·
mqtt_open/publish/subscribe/read · esp_image_info/flash/erase · file_write/read/list/delete
Все операции автоматически пишутся в JSONL-журнал ($IRONHARNESS_HOME/journal.jsonl,
по умолчанию ~/.ironharness/); файловые операции изолированы песочницей
($IRONHARNESS_SANDBOX, по умолчанию ~/.ironharness/sandbox).
Подключение внешнего агента
Любой MCP-совместимый агент (Claude Code, Codex, Cursor, OpenCode…) получает все инструменты io-core одной записью в конфиг — свой цикл агент приносит с собой, ironharness даёт «руки»: транспорты, песочницу, журнал, верификацию.
{
"mcpServers": {
"ironharness": {
"command": "uv",
"args": ["run", "--directory", "/path/to/ironharness", "ironharness-mcp"]
}
}
}
После публикации пакета на PyPI то же самое одной строкой: "command": "uvx", "args": ["ironharness-mcp"].
Для испытаний на ненадёжных линиях есть io_core.faults.FaultyTransport — сценарные
сбои (обрыв, задержка, порча и потеря байтов) поверх любого транспорта, и
io_core.mqtt_sim.MqttSimBroker — мини-брокер MQTT (подмножество) для офлайн-прогонов.
ironbench — бенчмарк firmware-агентов
uv run ironbench list # каталог золотых задач
uv run ironbench run --all # эталонные прогоны (нужен WOKWI_CLI_TOKEN)
uv run ironbench solve --task blink --attempts 3 # LLM-агент решает задачу
uv run ironbench report # pass@k: report.json + report.html
Задачи — ESP32/MicroPython в Wokwi (headless wokwi-cli), Renode, MicroPython unix-port
(бесплатные локальные прогоны) и plant-мишень (замкнутая петля «объект + регулятор» в
Python, оценка по метрикам переходной характеристики: p-regulator, pid-antiwindup,
system-id). У каждой задачи класс (io/data/protocol/fsm/control/resilience) и уровень
1–5; ironbench report показывает профиль модели по классам, а не одно число.
LLM-конфиг — переменные окружения: LLM_BASE_URL (по умолчанию локальный LM Studio),
LLM_MODEL, LLM_API_KEY, LLM_TIMEOUT.
Статус: этапы 0–2 завершены (17 золотых задач на 4 мишенях, агентский цикл, таксономия,
отчёты pass@k + профиль по классам), далее — этап 3 (реальное железо, плата заказана).
План — PLAN.md (локально).
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file ironharness-0.2.0.tar.gz.
File metadata
- Download URL: ironharness-0.2.0.tar.gz
- Upload date:
- Size: 2.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9356580f60e239a77793d13357ac7c1b1486e728ff487bc9c3e7e1a722e509b1
|
|
| MD5 |
b3eb4595ad6584c543dcce2aaed62b88
|
|
| BLAKE2b-256 |
7f6b38cb98bda5240f1a4a8eb0e6a3eb4a305c6ac6a5b8a37201123fde5b7fa4
|