{"id":51618347,"url":"https://github.com/nilp0inter/sleepwalker","last_synced_at":"2026-07-12T16:31:04.780Z","repository":{"id":369409335,"uuid":"1289331393","full_name":"nilp0inter/sleepwalker","owner":"nilp0inter","description":null,"archived":false,"fork":false,"pushed_at":"2026-07-05T06:08:04.000Z","size":192,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-05T08:06:14.876Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nilp0inter.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-07-04T16:01:14.000Z","updated_at":"2026-07-05T06:08:08.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nilp0inter/sleepwalker","commit_stats":null,"previous_names":["nilp0inter/sleepwalker"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/nilp0inter/sleepwalker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nilp0inter%2Fsleepwalker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nilp0inter%2Fsleepwalker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nilp0inter%2Fsleepwalker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nilp0inter%2Fsleepwalker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nilp0inter","download_url":"https://codeload.github.com/nilp0inter/sleepwalker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nilp0inter%2Fsleepwalker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35396896,"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-12T02:00:06.386Z","response_time":87,"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":[],"created_at":"2026-07-12T16:31:04.662Z","updated_at":"2026-07-12T16:31:04.773Z","avatar_url":"https://github.com/nilp0inter.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# sleepwalker\n\nAn open-source hardware HID injector built to be embedded into larger automation\nprojects and extended by the community.\n\n## Why\n\nReal-world automation eventually hits the wall that headless APIs cannot\ncross: any interface that lives below the OS API layer. The only honest way\nto drive those surfaces is to impersonate a physical keyboard and mouse at\nthe USB HID level. `sleepwalker` exists to make that primitive open, safe,\nand usable from code.\n\n## What it is\n\nA small, focused FOSS stack:\n\n- **A tiny ESP32-S3 firmware** that exposes a BLE-only control surface and\n  emits USB HID reports. The firmware stays intentionally dumb — it receives\n  framed commands and produces HID output, nothing more.\n- **A Kotlin library** (`sleepwalker-core`) that is the real product. It owns\n  the protocol, the BLE transport, and a two-tier API:\n  - a **low-level surface** that mirrors raw HID primitives (key down/up,\n    mouse button, motion, scroll), and\n  - a **high-level surface** that hides the keymap problem — the caller says\n    \"the target host runs this OS with this layout, type this text,\" and the\n    library resolves glyphs, modifiers, and dead keys into the right HID\n    sequence.\n- **A reference Android app** (`sleepwalker-app`) that demonstrates the\n  library and serves as a working example for integrators.\n\nThe split is deliberate: the firmware remains minimal and auditable; the\nlibrary carries the intelligence and is the surface other projects build\nagainst.\n\n## Goals\n\n- Provide a minimal, auditable primitive for impersonating physical input\n  devices at the USB HID level.\n- Keep the firmware small enough to audit by hand and stable enough to forget.\n- Make the Kotlin library the friendliest possible on-ramp — a consumer\n  should be able to type a string or click a button in a handful of lines.\n- Treat safety as a first-class concern: explicit arm/disarm, kill,\n  release-all, and human gates, never silent injection.\n- Reproduce the entire stack — firmware, library, app, and the host used to\n  verify HID output — from source with Nix, so anyone can build on it.\n\n## Non-goals\n\n- Not a stealth input device, not a Red Team tool, not an HID attack\n  framework. The threat model assumes the operator owns or is authorized to\n  drive the target host.\n- Not a general-purpose BLE HID stack — the surface is scoped to what an\n  automation agent actually needs.\n- Not a closed appliance. The reference app exists to demonstrate the\n  library; the library is the product.\n\n## Status\n\nEarly. The keyboard path is proven end-to-end against physical hardware; the\nmouse surface, the high-level API, and the keymap-resolution layer are the\nactive design frontier.\n\n## License\n\nMIT. See [`LICENSE`](LICENSE).\n\n## Development\n\nThis project is designed for autonomous iteration by a coding agent. The\nrepository provides deterministic build, flash, and verification commands\n(all prefixed `sleepwalker-*`) that an agent can compose into a closed loop:\nbuild firmware and APK, flash devices, inject HID commands, observe results\non a sacrificial NixOS host, and produce structured artifacts for pass/fail\ndiagnosis. See `AGENTS.md` for the full agent-facing interface.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnilp0inter%2Fsleepwalker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnilp0inter%2Fsleepwalker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnilp0inter%2Fsleepwalker/lists"}