{"id":51339616,"url":"https://github.com/semcod/hillm","last_synced_at":"2026-07-02T06:04:34.990Z","repository":{"id":363647782,"uuid":"1263134997","full_name":"semcod/hillm","owner":"semcod","description":"Hardware Interface LLM — control displays, cameras, audio, USB, serial, Modbus, and more.","archived":false,"fork":false,"pushed_at":"2026-06-18T11:24:30.000Z","size":334,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-18T12:28:21.734Z","etag":null,"topics":["automation","hardware","iot","llm","mcp","modbus","python","semcod","serial","usb"],"latest_commit_sha":null,"homepage":"https://semcod.github.io/hillm/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/semcod.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-08T16:52:04.000Z","updated_at":"2026-06-18T12:11:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/semcod/hillm","commit_stats":null,"previous_names":["semcod/hillm"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/semcod/hillm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Fhillm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Fhillm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Fhillm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Fhillm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/semcod","download_url":"https://codeload.github.com/semcod/hillm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Fhillm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35035001,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-02T02:00:06.368Z","response_time":173,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","hardware","iot","llm","mcp","modbus","python","semcod","serial","usb"],"created_at":"2026-07-02T06:04:34.398Z","updated_at":"2026-07-02T06:04:34.984Z","avatar_url":"https://github.com/semcod.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# hillm — Hardware Interface LLM\n\n\n## AI Cost Tracking\n\n![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.1.3-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)\n![AI Cost](https://img.shields.io/badge/AI%20Cost-$0.72-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-2.3h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)\n\n- 🤖 **LLM usage:** $0.7176 (2 commits)\n- 👤 **Human dev:** ~$228 (2.3h @ $100/h, 30min dedup)\n\nGenerated on 2026-06-09 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)\n\n---\n\nControl platform hardware through a unified registry and transport layer:\n\n- **Displays / HDMI** — `xrandr`, `wlr-randr`\n- **Cameras** — V4L (`/dev/video*`)\n- **Audio** — microphones / speakers via PulseAudio\n- **Input** — keyboard / mouse discovery (`/dev/input`)\n- **USB** — `lsusb` enumeration\n- **Serial / RS232 / RS485** — `pyserial`\n- **Modbus RTU/TCP** — `pymodbus`\n- **MQTT / HTTP** — network device gateways\n\nPairs with:\n\n| Package | Role |\n|---------|------|\n| [`gillm`](../gillm/) | GUI / IDE keyboard injection |\n| [`tillm`](../tillm/) | Shell LLM clients (aider, codex, …) |\n| **`hillm`** | Physical devices and field interfaces |\n\n## Install\n\n```bash\ncd /home/tom/github/semcod/hillm\nmake install-dev          # uv sync + control layer (recommended)\ncp examples/env.example .env   # HILLM_DRY_RUN=1 for safe local dev\nmake install-transports   # + serial/modbus/mqtt\nmake help                 # all targets\n```\n\nOr manually:\n\n```bash\nuv sync --all-packages --extra dev   # recommended (workspace + dev tools)\n# pip fallback:\npip install -e \".[dev]\"\nbash packages/install-dev.sh         # editable *2hillm adapters\npip install -e \".[serial,modbus,mqtt]\"   # optional transports\n```\n\n## CLI\n\n```bash\nhillm devices\nhillm scan\nhillm read --device camera-usb --dry-run\nhillm write --device actuator-relay --value 1 --register coil:0 --dry-run\nhillm actuate --device display-primary --action on\nhillm status --ecosystem\n```\n\n## DSL / integrations\n\n```bash\n# DSL — hardware verbs dry-run by default\ndsl2hillm HEALTH\ndsl2hillm 'READ DEVICE sensor-temp'\n\n# URI — dry-run by default; --live for real hardware\nuri2hillm HEALTH\nuri2hillm 'READ DEVICE sensor-temp'\nuri2hillm 'hillm://cmd/READ?device=camera-usb\u0026dry_run=true'\n\n# NLP — --apply is dry-run by default\nnlp2hillm \"read temperature from serial\"\nnlp2hillm \"read temperature from serial\" --apply\nnlp2hillm \"read temperature from serial\" --apply --live\n\n# REST (port 8218)\nrest2hillm --port 8218\ncurl -X POST http://127.0.0.1:8218/v1/dsl -d HEALTH\n\n# nlp2uri: pip install nlp2uri[hillm]\nuri2hillm 'hillm://cmd/HEALTH'\n```\n\nDry-run policy per adapter: [docs/control-layer.md](docs/control-layer.md#dry-run-policy).\n\n## Architecture\n\n```\nhillm (core)\n  registry.py      — device catalog + aliases + suggest_device_ids()\n  resolve.py       — NL keywords → device id (shared by nlp2hillm)\n  project_env.py   — .env bootstrap + apply_execution_policy()\n  controller.py    — read / write / actuate / connect\n  transports/      — serial, modbus, mqtt, display, v4l, audio, usb, …\n  compat.py        — Koru backend + tool registry exports\n\npackages/\n  dsl2hillm        — CQRS bus (single mutation point)\n  uri2hillm        — hillm:// URI + DSL shorthand\n  nlp2hillm        — NL → DSL (--apply dry-run default)\n  cli2hillm        — shell passthrough\n  mcp2hillm        — MCP tools\n  rest2hillm       — REST API (:8218)\n```\n\n## Examples\n\nRunnable smoke scripts in [examples/](examples/) — full index: [examples/README.md](examples/README.md).\n\n```bash\nbash packages/install-dev.sh\ncp examples/env.example .env    # optional\nbash examples/run-all-dry-run.sh\nmake test-examples\n```\n\n| Category | Scripts |\n|----------|---------|\n| **CLI** | [devices](examples/cli/devices.sh) · [scan](examples/cli/scan.sh) · [read dry-run](examples/cli/read-dry-run.sh) · [status ecosystem](examples/cli/status-ecosystem.sh) · [status mouse](examples/cli/status-mouse-dry-run.sh) |\n| **DSL** | [smoke](examples/dsl/run-smoke.sh) · [read sensor-temp](examples/dsl/read-sensor-temp.sh) · [devices usb](examples/dsl/devices-usb.sh) |\n| **NLP** | [temperature](examples/nlp2hillm/to-dsl-temperature.sh) · [mouse port PL](examples/nlp2hillm/to-dsl-mouse-port-pl.sh) · [apply live temp](examples/nlp2hillm/apply-temperature-live.sh) · [check serial](examples/nlp2hillm/check-serial-env.sh) |\n| **URI** | [dispatch](examples/control-layer/uri-dispatch.sh) · [shorthand read](examples/control-layer/uri-shorthand-read.sh) · [decode](examples/control-layer/uri-decode-sensor.sh) |\n| **Devices** | [display](examples/devices/display/status.sh) · [camera](examples/devices/camera/capture-dry-run.sh) · [mouse live](examples/devices/input/mouse-status-live.sh) · [sensor temp](examples/devices/sensor/temp-read-dry-run.sh) · [serial resolve](examples/devices/sensor/temp-resolve-address.sh) |\n\n## Tests\n\n```bash\nmake test              # core + control layer (70+ tests)\nmake test-examples     # examples/**/*.sh smoke (40+ scripts)\nmake examples          # bash examples/run-all-dry-run.sh\n```\n\n## Documentation\n\n| Doc | Content |\n|-----|---------|\n| [docs/README.md](docs/README.md) | Documentation index |\n| [docs/configuration.md](docs/configuration.md) | Env vars, install profiles, ports |\n| [docs/control-layer.md](docs/control-layer.md) | `*2hillm` adapters (DSL, URI, REST, MCP) |\n| [packages/README.md](packages/README.md) | Control layer package matrix |\n| [examples/README.md](examples/README.md) | Runnable smoke scripts |\n| [CHANGELOG.md](CHANGELOG.md) | Release history |\n| [TODO.md](TODO.md) | Roadmap and open items |\n\n## Environment\n\n| Variable | Purpose |\n|----------|---------|\n| `HILLM_DRY_RUN` | Force dry-run transport globally |\n| `OPENROUTER_API_KEY` | Enable LLM mapping in `nlp2hillm` (via litellm) |\n| `LLM_MODEL` | OpenRouter model (default: `openrouter/qwen/qwen3-coder-next`) |\n| `HILLM_MODBUS_HOST` | Default Modbus TCP host |\n| `HILLM_MQTT_URL` | Default MQTT broker URL |\n| `HILLM_\u003cDEVICE\u003e_ADDRESS` | Per-device address override |\n\n## License\n\nLicensed under Apache-2.0.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsemcod%2Fhillm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsemcod%2Fhillm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsemcod%2Fhillm/lists"}