the signals and their derived score are provisional and subject to change.
validate manually before sharing.
5a910bc7b39374e10fd379779913b6b6d0b82c7745b6daf87b1c4 weeks agoAmp-Thread-ID: https://ampcode.com/threads/T-01a02bb1-3bb2-77d3-8f1b-1fa484bd54bf84aa1ed5b5e51 month agoAmp-Thread-ID: https://ampcode.com/threads/T-01a0330c-8cc9-7399-b94e-8812c1a92c43185bdbbd83021 month agoAmp-Thread-ID: https://ampcode.com/threads/T-01a0330c-8cc9-7399-b94e-8812c1a92c43d4be8bba74711 month agoAmp-Thread-ID: https://ampcode.com/threads/T-01a0330c-8cc9-7399-b94e-8812c1a92c430832c06988ef1 month agoAmp-Thread-ID: https://ampcode.com/threads/T-01a0330c-8cc9-7399-b94e-8812c1a92c4341b2408f9e1b1 month agoAmp-Thread-ID: https://ampcode.com/threads/T-01a0330c-8cc9-7399-b94e-8812c1a92c43fa3586a137481 month agoAmp-Thread-ID: https://ampcode.com/threads/T-01a0330c-8cc9-7399-b94e-8812c1a92c43676dabfc01901 month agoAmp-Thread-ID: https://ampcode.com/threads/T-01a0330c-8cc9-7399-b94e-8812c1a92c4399d40c2017c01 month agoAmp-Thread-ID: https://ampcode.com/threads/T-01a0330c-8cc9-7399-b94e-8812c1a92c438eae54bf56a71 month agoAmp-Thread-ID: https://ampcode.com/threads/T-01a0330c-8cc9-7399-b94e-8812c1a92c43279d7caf3dba1 month agoAmp-Thread-ID: https://ampcode.com/threads/T-01a0330c-8cc9-7399-b94e-8812c1a92c4362a603d0ab511 month agoAmp-Thread-ID: https://ampcode.com/threads/T-01a03346-aa3a-7660-9a04-9adb7cab0551a3bf5b29e6cb1 month agoAmp-Thread-ID: https://ampcode.com/threads/T-01a0330c-8cc9-7399-b94e-8812c1a92c433878f033f34e1 month agoAmp-Thread-ID: https://ampcode.com/threads/T-01a02cd7-def5-7778-afdb-3262980d079c2f459d7aea451 month agoAmp-Thread-ID: https://ampcode.com/threads/T-01a02cd7-def5-7778-afdb-3262980d079c1dcb25cb841a1 month agoAmp-Thread-ID: https://ampcode.com/threads/T-01a02cd7-def5-7778-afdb-3262980d079c08060a73b8c21 month agoAmp-Thread-ID: https://ampcode.com/threads/T-01a02bff-cf57-713a-b091-25965ff8f43302fd22127a041 month agoAmp-Thread-ID: https://ampcode.com/threads/T-01a023ae-8a69-7052-8f56-0d05647f031170b191fba2b21 month agoAmp-Thread-ID: https://ampcode.com/threads/T-01a023ae-8a69-7052-8f56-0d05647f0311866531b7eb282 months agoCo-authored-by: Claude Fable 5 <noreply@anthropic.com>c2c6750813082 months agoAmp-Thread-ID: https://ampcode.com/threads/T-01a006d0-e537-70c8-9384-cc4e1138ac9e195692782e182 months agoCo-authored-by: Claude Fable 5 <noreply@anthropic.com>013ca9ef4fdb2 months agoCo-authored-by: Claude Fable 5 <noreply@anthropic.com>d2dd124fe9bc2 months agoCo-authored-by: Claude Fable 5 <noreply@anthropic.com>df61c7e04af52 months agoCo-authored-by: Claude Fable 5 <noreply@anthropic.com># openlogi-desktop — the settings app
The GPUI + gpui-component window users actually open: device gallery, per-device
panels, Settings, pairing. It is one of three processes in the bundle and the
only one with a settings UI.
This file is the crate's contract and map. Read
[`.agents/rules/gui.md`](../../.agents/rules/gui.md) before GUI work: it loads the
upstream GPUI skills and lists OpenLogi integration constraints. Workspace
standards and checks are in the root [`AGENTS.md`](../../AGENTS.md).
## The# openlogi-hidpp — HID++ protocol, hard fork
This crate started as a vendored copy of the 0BSD `hidpp` crate
(<https://github.com/lus/logy>) but **is a hard fork, not a tracked vendor copy**.
Upstream is provenance, not a merge target: no change here needs to preserve
upstream diffability, and nothing has to be re-derivable from a future upstream
release. Restructure freely, add dependencies, add derive macros, rename types,
resplit modules across files. "Upstream does it this way" is **not** an argument# OpenLogi — Agent Guide
OpenLogi is a native, local-first alternative to Logitech Options+ written in Rust:
button remapping, DPI, SmartShift, and per-app profiles for Logitech HID++ devices
(Bolt/Unifying receiver, Bluetooth-direct, wired) — no account, no telemetry, plain-TOML
config. macOS and Linux are first-class; Windows is a young but shipping port.
Dual-licensed MIT/Apache-2.0; the `design/` brand assets are proprietary.
The developer handbook (toolchain, packaging, release pipeline) is
[docs# xtask — build, packaging, and CI tooling
- `xtask/README.md` is the contract for this crate — module layout mirrors the CLI
hierarchy, `xshell` for short-lived external tools (`cargo`, `create-dmg`, `codesign`,
`nfpm`), `std::process::Command` only for real process control, crates (not shell-outs)
for structured data, no thin wrappers around tools that already own a task. Read it
before adding a command.
- xtask is linted like product code: the workspace `clippy::pedantic` +
`unwrap_used`/`# openlogi-ipc — the wire format is append-only
The GUI and agent speak tarpc over bincode on an `interprocess` local socket
(`openlogi-ipc/src/ipc.rs`). bincode encodes the enum **variant index** and
tarpc encodes the **method order**, so the wire format is positional:
- Service methods are append-only; never reorder or remove. `protocol_version` must
remain method 0 forever — the takeover handshake probes it across versions.
- serde enums that cross the IPC boundary are append-only too. serde enco# openlogi-hook — OS input capture
The event-tap crate: CGEventTap on macOS, evdev+uinput on Linux, WH_MOUSE_LL
on Windows. Cross-platform cfg discipline is
[`.agents/rules/cross-platform.md`](../../.agents/rules/cross-platform.md), and
the macOS FFI contract is
[`.agents/rules/objc-ffi.md`](../../.agents/rules/objc-ffi.md); this file is the
crate's own load-bearing behavior.
- macOS: the CGEventTap freeze-hazard state machine is load-bearing. The tap must
self-disable when Accessibility is revoked, o# openlogi-hid — the host-side HID backend
The `HidBackend` implementation for this machine: `async-hid` transport, the
Windows composite channel, macOS Input Monitoring, the on-disk probe cache,
plus `host`, which supplies it to `openlogi-device`'s entry points.
The layer's contract — the `HidBackend` seam, the device-kind vocabularies,
enumeration grace — is [`crates/openlogi-device/AGENTS.md`](../openlogi-device/AGENTS.md);
read it before changing this crate. Serde types here ride the IPC wire
([# openlogi-device / openlogi-hid — the HID++ device layer
This guide covers the two-crate seam; it lives here because `openlogi-device`
owns the layer. `crates/openlogi-hid/AGENTS.md` points back here.
- The HID++ layer is split at `openlogi_device::backend::HidBackend`.
`openlogi-device` holds everything that knows the protocol and nothing about
a host — enumeration policy, the probe, the write layer, sessions, pairing —
and is handed a backend. `openlogi-hid` is the backend for this machine
@AGENTS.md
@AGENTS.md
@AGENTS.md
@AGENTS.md
@AGENTS.md
@AGENTS.md
@AGENTS.md
@AGENTS.md
---
name: diagnosing-openlogi-devices
description: "Diagnoses OpenLogi HID/HID++ failures across enumeration, open, probe, IPC, and UI layers. Use for missing devices, failed opens or pairing, stale inventory, disconnect/reconnect failures, unsupported controls, or CLI/GUI disagreement."
---
# Diagnose OpenLogi Devices
Find the first failing layer before proposing a permission change or code fix.
## Establish the observation
1. Record the app/agent/CLI versions, OS, installation source, and active profi---
name: openlogi-macos-permissions
description: Decide whether a macOS problem is a privacy-permission (TCC) problem, and act on it correctly. Use when triaging a report that no devices appear / the GUI is empty while `openlogi list` works / "Failed to open device" / "Pairing failed" on macOS; when a user asks which permission OpenLogi needs or why they were never prompted; when reasoning about Input Monitoring, Accessibility, kTCCServiceListenEvent, kTCCServiceAccessibility, code-signing identity, respon---
name: verifying-openlogi-changes
description: "Plans regression proofs and runs OpenLogi verification based on the diff, affected packages, host OS, and work stage. Use when planning a bug fix, after repository changes, when reviewing test coverage, or before an authorized commit or push."
---
# Verify OpenLogi Changes
Use the smallest check that can disprove the change, then apply the required final gate.
## Classify before running checks
1. Inspect `git status --short`, staged and unstaged diffs, ---
name: ast-grep
description: Guide for writing ast-grep rules to perform structural code search and analysis. Use when users need to search codebases using Abstract Syntax Tree (AST) patterns, find specific code structures, or perform complex code queries that go beyond simple text search. This skill should be used when users ask to search for code patterns, find specific language constructs, or locate code with particular structural characteristics.
---
# ast-grep Code Search
## Overview
This skill h---
name: testing-openlogi-ui
description: "Verifies OpenLogi native UI with focused GPUI tests, the component gallery, and mock-agent workflows. Use when changing or testing desktop, overlay, shared controls, theme, scale, localization, or UI interactions."
---
# Test OpenLogi UI
Choose evidence that proves the affected behavior, then inspect the rendered result.
## Choose the test surface
1. Read [GUI integration rules](../../../.agents/rules/gui.md) and load
[gpui-kit](../gpui-kit/SKILL.md). For v---
name: gpui-kit-design-guides
description: The normative Design Guides for GPUI Kit desktop applications. Read in full before designing or changing any screen, layout, spacing, visual hierarchy, color, density, component choice, interaction state, overlay, motion, data-heavy view, or interface copy in a GPUI Kit (gpui-kit / gpui-component) application, and before reviewing UI work for design quality. Also use when asked what the design rules are, or whether a UI decision follows them.
---
# GPUI Kit Des---
name: contributing-device-fixtures
description: "Guides OpenLogi device-fixture capture, privacy review, and offline verification with fixture contribute and verify. Use when recording device profiles or HID++ cassettes, contributing hardware fixtures, or reviewing fixture corpus changes."
---
# Contribute Device Fixtures
Produce a sanitized, verifiable fixture without treating replay as proof of hardware correctness.
## Prepare the capture
1. Read the [fixture architecture and recording workflow](.---
name: gpui-kit
description: 'How to build desktop applications with GPUI Kit, the Rust framework published as the gpui-kit crate (GPUI plus gpui_kit::component, gpui_kit::base, gpui_kit::assets). Use when setting up a gpui-kit app, choosing or using a component (Button, Input, Select, Dialog, Sheet, Tabs, Sidebar, List, DataTable, Tree, Chart, etc.), handling component state, theming, or window overlays, and for GPUI mechanics: actions and keybindings, async tasks, contexts, custom elements, entities, enone