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.
Статус: MVP в активной разработке. Примеры результатов — в reports/: зафиксированные
прогоны бенчмарка (JSON + HTML, отчёт открывается в браузере).
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ironharness-0.3.0.tar.gz.
File metadata
- Download URL: ironharness-0.3.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 |
4daddfe594184752c915efb4bdfe8a420def1937842b32c3a7b0b9ae2e82cf48
|
|
| MD5 |
2c0bdff2038b0b8cb99084879d87a886
|
|
| BLAKE2b-256 |
04298a7274f1b15d7faaee67ec7a0753378a29bfec6e90486c4bdb0f1e545d40
|
File details
Details for the file ironharness-0.3.0-py3-none-any.whl.
File metadata
- Download URL: ironharness-0.3.0-py3-none-any.whl
- Upload date:
- Size: 2.2 MB
- Tags: Python 3
- 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 |
b72694919887c34808ca616075ee824910839928d2d1cbc6ec9c4b2b593d75d4
|
|
| MD5 |
2e0a353b3716da7fe7b3f5e56b7df317
|
|
| BLAKE2b-256 |
b3e598b0ee224f06d015682b1902ac3bc6817df46bd6758ce7d9a96233c07084
|