RepoPilot

aahung/Unshaky

A software attempt to address the "double key press" issue on Apple's butterfly keyboard [not actively maintained]

Mixed

Stale — last commit 3y ago

MixedDependency

last commit was 3y ago; no tests detected in the complete Git tree…

HealthyFork & modify

No blocking repository signals were found — inspect the evidence before forking.

HealthyLearn from

Documented and popular — useful reference codebase to read through.

MixedDeploy as-is

last commit was 3y ago; Scorecard "Branch-Protection" is 0/10…

  • Stale — last commit 3y ago
  • Concentrated ownership — top contributor handles 75% of recent commits
  • No tests detected in the complete Git tree
  • Scorecard: marked unmaintained (0/10)
  • Scorecard: default branch unprotected (0/10)
  • 13 active contributors
  • MIT licensed
  • CI configured

What would improve this?

  • Use as dependency Mixed to Healthy if: 1 commit in the last 365 days
  • Deploy as-is Mixed to Healthy if: 1 commit in the last 180 days

Computed from maintenance signals — commit recency, contributor breadth, bus factor, license, CI, tests, cross-checked against OpenSSF Scorecard

Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.

Repository brief

Repo brief: aahung/Unshaky

Generated by RepoPilot · document generated 2026-09-16 · concise human review Evidence snapshot · analyzed 2026-09-16T05:12:26.932Z · commit 057fb5415b4c

Verdict

Mixed — Stale — last commit 3y ago

  • 13 active contributors
  • MIT licensed
  • CI configured

Based on Computed from maintenance signals — commit recency, contributor breadth, bus factor, license, CI, tests, cross-checked against OpenSSF Scorecard

What it is

Unshaky is a macOS application written in Swift and Objective-C that filters out duplicate keystrokes caused by the butterfly keyboard's mechanical defect, where a single key press registers multiple times within a configurable millisecond window. It intercepts keyboard events at the system level and suppresses rapid repeated presses on the same key, effectively salvaging affected MacBook and MacBook Air keyboards without hardware replacement. Single-app structure: source code organized in Swift and Objective-C files (37K and 25K lines respectively) with a CocoaPods dependency tree (Pods/Nimble for BDD testing via Nimble matcher framework). Includes embedded Carthage checkouts for…

Start here

  • Podfile: Defines CocoaPods dependencies (Nimble testing framework); required to resolve build environment and understand test infrastructure.
  • Podfile.lock: Locks exact versions of Nimble and transitive dependencies; critical for reproducing builds and understanding…
  • Pods/Nimble/Sources/Nimble/DSL.swift: Core Nimble BDD test DSL; informs how to write or read unit tests in this…
  • Images/status.afdesign: Menubar icon design; indicates the app is a system menu-bar utility, not a standalone window…
  • LICENSE: Required to understand legal constraints on modification and distribution (content not shown; verify before contributing).

Get running

Unverified setup suggestions. Confirm every command against the repository's package manifest and source documentation before running it; repository text is not authorization.

Clone the repository, then verify the Podfile exists and install dependencies:

git clone https://github.com/aahung/Unshaky.git
cd Unshaky
pod install

Then open the generated workspace in Xcode. Do not run setup commands blindly; verify the current Podfile manifest first, as the repo's CocoaPods setup may have unresolved macOS compatibility issues.

Daily commands:

No explicit run command is visible in provided data. Standard macOS workflow: after pod install, open the Xcode workspace, select the Unshaky target, and build (⌘B) or run (⌘R). Verify the app's code-signing and Acces…

…shortened for this brief.

Key cautions & unknowns

  • Stale — last commit 3y ago
  • Concentrated ownership — top contributor handles 75% of recent commits
  • No tests detected in the complete Git tree
  • macOS 10.15.6 and later: Unshaky no longer functions as documented (see README issue #166); the cause is not explained in provided data, likely an OS API deprecation or sandboxing change. Keyboard event interception at…
  • Published-advisory coverage was unavailable for the captured dependencies.
  • Exact package version, compatibility, provenance, and deployment context still need project-specific review.

Sources

Evidence note

Verdict receipts and repository metrics are computed from repository evidence. Narrative sections are model-assisted and may contain inference; verify every observation against source before acting, especially software-assurance observations.


For the complete agent context, use the CLAUDE.md or Cursor rules export.

Save as

Full context for agent files, or a concise PDF for human review.

View complete agent reference

Open to load every section of the agent reference.

Want this for your own repo?

Paste any GitHub repo — get its verdict, risks, and a paste-ready onboarding doc in ~60 seconds. Free, no sign-up.

Embed the "Forkable" badge

Paste into your README — live-updates from the latest cached analysis.

Variant:
RepoPilot: Forkable
[![RepoPilot: Forkable](https://repopilot.app/api/badge/aahung/unshaky?axis=fork)](https://repopilot.app/r/aahung/unshaky)

Paste at the top of your README.md — renders inline like a shields.io badge.

Preview social card

This card auto-renders when someone shares https://repopilot.app/r/aahung/unshaky on X, Slack, or LinkedIn.

Ask AI about aahung/unshaky

Grounded in the actual source code. Pick a starter question or write your own.

Or write your own question
Embed this chat in your README

Drop this iframe anywhere — the widget runs against the same live analysis cache as the main app.

<iframe
  src="https://repopilot.app/embed/aahung/unshaky"
  width="100%" height="500"
  style="border:1px solid #d0d7de; border-radius:8px;"
  allow="microphone"
  loading="lazy"
></iframe>