Skip to content

Fix inaccurate claims across site, README and SECURITY.md - #12

Merged
LucaGerlich merged 3 commits into
mainfrom
fix/app-store-claim
Aug 18, 2026
Merged

Fix inaccurate claims across site, README and SECURITY.md#12
LucaGerlich merged 3 commits into
mainfrom
fix/app-store-claim

Conversation

@LucaGerlich

@LucaGerlich LucaGerlich commented Aug 18, 2026

Copy link
Copy Markdown
Owner

Three claims were wrong or overstated. All are public, and two sit exactly where a skeptical reader lands.

1. The App Store claim was false

The FAQ said sandboxed apps cannot read HID devices, so this cannot exist on the App Store. OctoKeys ships per-keyboard input source switching on the Mac App Store today, using Input Monitoring. The premise is simply wrong.

Now it says what is true: InputPilot is not sandboxed and reads USB vendor and product IDs through IOHIDManager, which is what lets it tell two keyboards of the same model apart; the sandbox constrains rather than forbids this; direct distribution means no review cycle, free, and auditable.

2. The privacy claim was overstated — the important one

The site, README and SECURITY.md all said "No key code … exists anywhere in the app — not in memory".

That is not what the code does. HIDKeyboardMonitor.handleInputValue reads the HID usage and holds it in a local to compute isModifierUsage(usage):

let usage = IOHIDElementGetUsage(element)
onEvent?(makeActiveDevice(from: device), .keyDown(isModifier: isModifierUsage(usage)))

It now states precisely that: the usage code is read only to decide whether the key was a modifier, then discarded — never stored, logged or transmitted, and no character or text derived from it.

This is the single most important claim the project makes, on an app requesting the same permission a keylogger requests. The precise version survives someone reading the source; the loose version was close enough to be tempting and wrong enough to be caught.

3. "About 4,000 lines" was unmeasured

Actual app source is 3,249 lines excluding tests. Now says 3,200, and points readers at the 15-line callback they actually want to check.

Also

The comparison FAQ now names autokbisw, OctoKeys and Input Source Pro, with the real difference: explicit per-device assignment rather than remembering the last source used.

Verified: JSON-LD still parses, 7 schema FAQ entries matching 7 visible ones.

The FAQ asserted that sandboxed apps cannot read HID devices and therefore
this cannot exist on the App Store. OctoKeys ships per-keyboard input source
switching on the Mac App Store today, so the claim is wrong. On a launch
thread that gets corrected in public within minutes, and a factual error in
your own FAQ is expensive for an app asking for keyboard access.

The answer now states what is actually true: InputPilot is not sandboxed and
uses IOKit HID directly; the sandbox constrains but does not forbid this;
distributing outside the store means no review cycle, free, and auditable.

The comparison answer now names OctoKeys alongside autokbisw and Input Source
Pro, and says plainly what differs — explicit per-device assignment rather
than last-used memory, open source, free. Naming the closest competitor
yourself reads as confidence; being corrected reads as sloppiness.
Copilot AI lite review requested due to automatic review settings August 18, 2026 21:24

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the public FAQ (both visible HTML and the JSON-LD FAQPage schema) to correct an inaccurate App Store claim and to explicitly name relevant prior art/competitors, improving factual accuracy and credibility around Input Monitoring permission requests.

Changes:

  • Rewrote the “Why is it not on the App Store?” answer to reflect the actual relationship between sandboxing, HID access, and input-source switching, and explicitly mentions OctoKeys as proof of feasibility.
  • Expanded the “How is this different…” answer to include OctoKeys and clarify InputPilot’s differentiator (explicit per-device assignment vs. “last used” behavior), plus “open source” and “free.”
  • Kept JSON-LD FAQ entries aligned with the visible FAQ content (same questions/answers mirrored in both places).

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Two overstatements found by auditing the copy against the code:

The site, README and SECURITY.md all said no key code exists anywhere in
the app, 'not in memory'. HIDKeyboardMonitor.handleInputValue does read the
HID usage — it has to, to decide whether the key was a modifier — and holds
it in a local until the callback returns. The claim as written was false.
It now says what actually happens: the usage code is read only to compute
that boolean, then discarded, never stored, logged or transmitted, and no
character or text is derived from it.

This is the single most important claim in the project, on an app that asks
for the same permission a keylogger asks for. The precise version survives
scrutiny; the loose version was close enough to be tempting and wrong enough
to be caught, which would have cost more than the claim ever bought.

Also: 'about 4,000 lines' was measured — the app is 3,249 lines excluding
tests, so the figure is now 3,200 and points at the 15-line callback that
readers actually want to check.
@LucaGerlich LucaGerlich changed the title Correct the App Store claim and name prior art Fix inaccurate claims across site, README and SECURITY.md Aug 18, 2026
websiteURL was intentionally blank while no site existed; the row is hidden
when empty. inputpilot.lucagerlich.dev is live, so show it.
@LucaGerlich

Copy link
Copy Markdown
Owner Author

Two additions since the description above:

  • Removes 2,479 lines of Playwright artifacts (.playwright-mcp/) that an earlier git add -A had committed before the gitignore rule existed. They are ignored going forward.
  • Fills in AboutInfo.websiteURL with the now-live site, so the About screen links to it. Ships with the next release.

@LucaGerlich
LucaGerlich merged commit 7574e1a into main Aug 18, 2026
1 check passed
@LucaGerlich
LucaGerlich deleted the fix/app-store-claim branch August 18, 2026 21:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants