Finishing a Development Branch
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
Full workflow to add support for a new Eufy Security device type (cameras, locks, sensors, and other devices) across eufy-security-client and homebridge-eufy-security.
$ npx skills add homebridge-plugins/homebridge-eufy --skill new-device-support -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install homebridge-plugins/homebridge-eufy new-device-support --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/homebridge-plugins/homebridge-eufy.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/new-device-support .claude/skills/new-device-support && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "new-device-support" agent skill from https://github.com/homebridge-plugins/homebridge-eufy/tree/master/.claude/skills/new-device-support into .claude/skills/new-device-support/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "new-device-support", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/homebridge-plugins/homebridge-eufy/tree/master/.claude/skills/new-device-supportType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add homebridge-plugins/homebridge-eufy --skill new-device-support -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install homebridge-plugins/homebridge-eufy new-device-support --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/homebridge-plugins/homebridge-eufy.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/new-device-support .agents/skills/new-device-support && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "new-device-support" agent skill from https://github.com/homebridge-plugins/homebridge-eufy/tree/master/.claude/skills/new-device-support into .agents/skills/new-device-support/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "new-device-support", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add homebridge-plugins/homebridge-eufy --skill new-device-support -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install homebridge-plugins/homebridge-eufy new-device-support --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/homebridge-plugins/homebridge-eufy.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/new-device-support .cursor/skills/new-device-support && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "new-device-support" agent skill from https://github.com/homebridge-plugins/homebridge-eufy/tree/master/.claude/skills/new-device-support into .cursor/skills/new-device-support/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "new-device-support", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/homebridge-plugins/homebridge-eufy.git --path .claude/skills/new-device-support--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add homebridge-plugins/homebridge-eufy --skill new-device-support -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install homebridge-plugins/homebridge-eufy new-device-support --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/homebridge-plugins/homebridge-eufy.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/new-device-support .gemini/skills/new-device-support && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "new-device-support" agent skill from https://github.com/homebridge-plugins/homebridge-eufy/tree/master/.claude/skills/new-device-support into .gemini/skills/new-device-support/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "new-device-support", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install homebridge-plugins/homebridge-eufy new-device-supportInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add homebridge-plugins/homebridge-eufy --skill new-device-support -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/homebridge-plugins/homebridge-eufy.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/new-device-support .github/skills/new-device-support && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "new-device-support" agent skill from https://github.com/homebridge-plugins/homebridge-eufy/tree/master/.claude/skills/new-device-support into .github/skills/new-device-support/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "new-device-support", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add homebridge-plugins/homebridge-eufy --skill new-device-support -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install homebridge-plugins/homebridge-eufy new-device-support --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/homebridge-plugins/homebridge-eufy.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/new-device-support .opencode/skills/new-device-support && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "new-device-support" agent skill from https://github.com/homebridge-plugins/homebridge-eufy/tree/master/.claude/skills/new-device-support into .opencode/skills/new-device-support/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "new-device-support", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
new-device-supportFull workflow to add support for a new Eufy Security device type (cameras, locks, sensors, and other devices) across eufy-security-client and homebridge-eufy-security.
New Device Support is an agent skill from homebridge-plugins/homebridge-eufy. Full workflow to add support for a new Eufy Security device type (cameras, locks, sensors, and other devices) across eufy-security-client and homebridge-eufy-security. Covers exploration, implementation, build verification, and git/PR creation.
Its SKILL.md is about 4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files.
It sits in Development. It works with Git. The repository describes itself as: Homebridge plugin to control certain Anker Eufy devices. The licence is Apache-2.0.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 8eed8b0. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
gitghnodeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
New Device Support loads about 4k tokens when it runs. Until then it costs about 66 tokens; SKILL.md has 1,753 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from homebridge-plugins/homebridge-eufy at commit 8eed8b0, republished under its Apache-2.0 licence (© homebridge-plugins). 1,753 words, ~3,962 tokens.
.claude/skills/new-device-support/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.You are adding support for a new device type to the eufy-security ecosystem. The user will provide a GitHub issue URL or device details (model name, model number like T86P2, device type number like 111). They may also provide raw device properties JSON.
Use $ARGUMENTS for the issue URL or device details.
gh pr list --repo bropat/eufy-security-client --state all --search "<model> OR <device-type-number>" --limit 10node homebridge-eufy-security/.claude/skills/new-device-support/check-device.mjs <type-number> [--pr-search <model>]node homebridge-eufy-security/.claude/skills/new-device-support/map-properties.mjs /tmp/<device>-raw-props.json --closestparam_type to its CommandType/ParamType enum name, matching property constants, and which existing device types use them. It also outputs a suggested DeviceProperties block. The --closest flag ranks existing devices by property overlap to identify the best base device.CAMERA_4G_S330)Create a detailed plan covering all files that need changes. The plan must be based on the actual raw device properties — never guess which properties a device supports.
Before planning file changes, identify the device category — this determines which classification methods and accessory classes apply:
CameraAccessory in the plugin. Classification methods: isCamera(), and optionally isDoorbell(), isFloodLight(), isIndoorCamera(), isPanAndTiltCamera(), isOutdoorPanAndTiltCamera(), isSoloCameras(), etc. Note: isSoloCameras() is a composite method that includes outdoor PTZ, wall light cams, and other standalone camera types.CameraAccessory. Classification: isWallLightCam(). This category is heavily referenced in station.ts (50+ references) for livestream, talkback, property handling, and command routing — expect substantial station.ts changes.CameraAccessory. Classification: isGarageCamera(). Has dedicated property variants (e.g. DeviceWatermarkGarageCameraProperty, DeviceMotionDetectionSensitivityGarageCameraProperty). Also has isGarageCameraBySn() for serial number matching.LockAccessory. Classification methods: isLock(), isLockWifi(), isLockBle(), isLockWifiVideo(), etc. Locks have many specialized type guard methods (e.g. isLockWifiT8531(), isLockWifiR10()) — check existing patterns carefully. Locks may require changes in three additional layers beyond this skill's primary scope — flag these to the user:src/mqtt/ — MQTT protocol for lock communicationsrc/p2p/session.ts — P2P session initialization uses Device.isLockWifi() and Device.isLockWifiNoFinger() for lock sequence generationsrc/http/station.ts — lock-specific routing at station levelEntrySensorAccessory or MotionSensorAccessory. Classification: isSensor(), isEntrySensor(), isMotionSensor(). Note: isSensor() is static-only — no public instance method exists.SmartDropAccessory. Classification: isSmartDrop(). Also has isSmartDropBySn() for serial number matching.isSmartSafe().isSmartTrack().isKeyPad().WATER_FREEZE_SENSOR_* in DeviceType enum.SIREN_SENSOR_* in DeviceType enum.src/accessories/, a new classification method, and a new if block in register_device(). Flag this to the user — it's a significantly larger task.src/http/types.ts — 6 locations:ENUM_NAME = <number>, //<model> in numeric orderstates field: Add <number>: "<Display Name> (<Model>)" inside the states object in numeric order. WARNING: This is one of the most commonly forgotten steps. Missing this label causes the device to display as a raw number in downstream UIs (see upstream PR #828 where 5 device types had missing labels).[DeviceType.ENUM_NAME] block. Always starts with ...GenericDeviceProperties. Map each raw param_type to its corresponding PropertyName.* property constant. Base on the closest existing device but only include properties that match the raw data.[DeviceType.ENUM_NAME] block if device can act as its own station (solo cameras, integrated devices). Use ...BaseStationProperties plus station-specific properties.[DeviceType.ENUM_NAME] array. Commands depend on device capabilities (livestream, talkback, pan/tilt, download, snooze, preset positions, calibrate, alarm).[DeviceType.ENUM_NAME] array if device has station properties. Typically [CommandName.StationReboot, CommandName.StationTriggerAlarmSound].src/http/device.ts — Classification methods:Add the new device type to all applicable static classification methods. There are two kinds:
Broad classification methods (add device to these as applicable):
isCamera() — if it's a camera/doorbell/floodlighthasBattery() — if battery-powered (critical — omitting this means no battery service in HomeKit)isPanAndTiltCamera() — if has PTZisOutdoorPanAndTiltCamera() — if outdoor PTZ (included by isSoloCameras())isSoloCameras() — composite method aggregating solo/standalone camera typesisFloodLight(), isIndoorCamera(), isDoorbell(), isWallLightCam(), isGarageCamera() — as applicableisLock(), isLockWifi(), isLockBle(), isLockWifiNoFinger() — if it's a lock variantisSensor(), isEntrySensor(), isMotionSensor() — if it's a sensorisSmartDrop(), isSmartSafe(), isSmartTrack(), isKeyPad() — as applicableNote: Not all broad methods have public instance counterparts (e.g. isSensor() is static-only). Don't create instance methods where none exist for the pattern.
isSupported() check: After adding to DeviceProperties map, Device.isSupported(type) automatically returns true (it checks DeviceProperties[type] !== undefined). This is the foundation of device registration — if DeviceProperties entry is missing, the device is silently unsupported regardless of all other registrations.
Add a new dedicated type guard method (static + instance pair):
static isNewDevice(type: number): boolean {
//<Model>
return DeviceType.ENUM_NAME == type;
}
public isNewDevice(): boolean {
return Device.isNewDevice(this.rawDevice.device_type);
}Update serial number checks if applicable (all are static-only, no instance methods):
isIntegratedDeviceBySn() — add sn.startsWith("<model>") if the device is integrated/standaloneisSoloCameraBySn() — add sn.startsWith("<model>") if it's a solo cameraisSmartDropBySn() — add if it's a SmartDrop variantisGarageCameraBySn() — add if it's a garage camera variantisFloodlightBySn() — add if it's a floodlight variantsrc/http/station.ts:isIntegratedDevice() — if the device is standalone or can pair as its own station, it may already be covered by isSoloCameras(), isFloodLight(), etc. Only add explicit check if needed.src/push/service.ts:docs/supported_devices.md:Add an entry in the correct table section:
|  | <Display Name> (<Model>) | :wrench: | Firmware: <version> |Use :wrench: for initial support.
src/platform.ts — register_device():Verify the new device type is handled by register_device(). This method uses independent if blocks (not else if) to map device types to accessory classes. If the device is a camera, it falls through to the camera path. If it's a lock, sensor, or SmartDrop, it hits those specific checks. If it's a new category that doesn't match any existing check, the device won't get an accessory — flag this to the user.
homebridge-ui/public/utils/device-images.js:Add a case in the getImage() switch:
case <type_number>: return '<image_large>.png';eufy-security-client/docs/_media/ (small + large)homebridge-eufy-security/homebridge-ui/public/assets/devices/ (large only)Execute the plan. Key implementation notes:
map-properties.mjs (Phase 1) as the primary guide. Many property constants have large variant families (e.g. DeviceMotionDetection* has 40+ variants, DeviceFloodlightLight* has 12+, DeviceVideoRecordingQuality* has 11+). When multiple constants match the same param_type, pick the variant used by the closest existing device — check the "Used by DeviceTypes" column in the script output and the --closest flag results.custom_* keys that never appear in raw device data (they're populated at runtime). The script detects these and marks them with ⚠ companion. Always include them — omitting a companion breaks functionality silently. Key pairs: DeviceRTSPStream → DeviceRTSPStreamUrl, DeviceWifiRSSI → DeviceWifiSignalLevel, DeviceCellularRSSI → DeviceCellularSignalLevel.if chains, maintain numeric ordering by device type number.DeviceAudioRecordingProperty, DeviceAudioRecordingStarlight4gLTEProperty). Match the closest existing device.After implementing all changes, run the post-implementation verification script:
node homebridge-eufy-security/.claude/skills/new-device-support/verify-device.mjs <ENUM_NAME>This automatically checks all required registration points and reports PASS/FAIL:
DeviceType enum definitionGenericTypeProperty statesDeviceProperties mapDeviceCommands mapStationProperties map (if device acts as its own station — reported as WARN if missing)StationCommands map (if device has station properties — reported as WARN if missing)docs/supported_devices.md entry (reported as WARN if missing)*BySn serial number methods (reported as WARN if missing — not all devices need these)The script exits with code 1 if any required checks fail. A device type that is defined in the enum but missing from DeviceProperties will silently fall back to GenericDeviceProperties with only ~3 basic properties (name, model, serial). This is the most common implementation error — see upstream issue #853 where LOCK_85V0 was added to the enum but never registered in the lookup maps.
Run build and lint for both repos. Note: eufy-security-client lint may fail due to a pre-existing jiti library issue unrelated to our changes — the TypeScript build succeeding is sufficient validation.
Follow CLAUDE.md Git Workflow for commit messages, branch naming, and PR body format. This skill creates two PRs across repos:
package-lock.json)git fetch upstream && git checkout develop && git merge upstream/developgit checkout -b feat/<device-slug>src/http/types.ts, src/http/device.ts, src/push/service.ts, docs/supported_devices.mdgh pr create --repo bropat/eufy-security-client --base develop \
--head lenoxys:feat/<device-slug> \
--title "feat: add <Device Name> (<Model>, type <number>) support" \
--body-file /tmp/pr-body-<branch>.mdgit checkout -b feat/<device-slug>homebridge-ui/public/utils/device-images.js + any added imagegh pr create --base beta-<current-version> \
--title "feat: add <Device Name> (<Model>) image" \
--body-file /tmp/pr-body-<branch>.mdAfter both PRs are created, update both bodies so they reference each other.
© homebridge-plugins, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 3 other files in .claude/skills/new-device-support of homebridge-plugins/homebridge-eufy.
Open the folder on GitHubat commit 8eed8b0
New Device Support next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| New Device Support this skillhomebridge-plugins/homebridge-eufy | 223 | — | ~4k | Automated safety check: Pass | Apache-2.0 | |
| Finishing a Development Branchobra/superpowers | 297k | 5 repos | ~1.9k | Automated safety check: Pass | MIT | |
| Code Review ChecklistshareAI-lab/learn-claude-code | 78k | 5 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Code Design Rationale Investigatorcursor/plugins | 10k | 9 repos | ~2.6k | Automated safety check: Pass | None | |
| Contributor-First PR MergeHKUDS/OpenHarness | 16k | 1 repos | ~847 | Automated safety check: Pass | MIT | |
| Finishing A Development Branchfarm-fe/farm | 5.6k | 34 repos | ~1.8k | Automated safety check: Pass | MIT |
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
shareAI-lab/learn-claude-code
Reviews code against a five-part checklist covering security, correctness, performance, maintainability and testing, and reports findings in a fixed format.
cursor/plugins
Digs into why code is shaped the way it is by checking git history, pull requests and connected tools in parallel, then reporting a cited read on the tradeoffs.
HKUDS/OpenHarness
Merges external GitHub pull requests while keeping the original author credited, and fixes conflicts after the merge instead of rewriting the contribution.
farm-fe/farm
A skill your agent uses when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for…
TryGhost/Ghost
Moves a package from another TryGhost repository into Ghost as an internal workspace package while keeping its Git history, with checkpoints for the steps that need an administrator.
homebridge-plugins/homebridge-eufy
Execute code changes following an approved plan or direct user instructions.
homebridge-plugins/homebridge-eufy
Build a precise, step-by-step action plan before making any code changes.
homebridge-plugins/homebridge-eufy
Verify that code changes are correct, safe, and ready to ship.
homebridge-plugins/homebridge-eufy
Triage a GitHub issue using diagnostics archives and logs. An agent skill from homebridge-plugins/homebridge-eufy.
homebridge-plugins/homebridge-eufy
Answer quick architectural questions, debug mini-issues, explore the codebase, and help improve skills and workflows.
Works with
Categories
Full workflow to add support for a new Eufy Security device type (cameras, locks, sensors, and other devices) across eufy-security-client and homebridge-eufy-security. New Device Support is an agent skill from homebridge-plugins/homebridge-eufy. Full workflow to add support for a new Eufy Security device type (cameras, locks, sensors, and other devices) across eufy-security-client and homebridge-eufy-security.
New Device Support fits situations like: development work in your project.
Run `npx skills add homebridge-plugins/homebridge-eufy --skill new-device-support -a claude-code`. Or copy the skill folder (.claude/skills/new-device-support in homebridge-plugins/homebridge-eufy) into .claude/skills/new-device-support in your project. Claude Code loads it when a task matches its description.
Run `npx skills add homebridge-plugins/homebridge-eufy --skill new-device-support -a codex`. Or copy the skill folder (.claude/skills/new-device-support in homebridge-plugins/homebridge-eufy) into .agents/skills/new-device-support in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add homebridge-plugins/homebridge-eufy --skill new-device-support -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/new-device-support, .gemini/skills/new-device-support, .github/skills/new-device-support and .opencode/skills/new-device-support in your project.
Going by SKILL.md and its folder, New Device Support needs JavaScript for the scripts in its folder and the command-line tools its instructions call (git, gh and node). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
New Device Support is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with New Device Support: Finishing a Development Branch (obra/superpowers, 297k stars), Code Review Checklist (shareAI-lab/learn-claude-code, 78k stars), Code Design Rationale Investigator (cursor/plugins, 10k stars) and Contributor-First PR Merge (HKUDS/OpenHarness, 16k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
homebridge-plugins (a GitHub organization) maintains it in homebridge-plugins/homebridge-eufy, which has 223 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on October 9, 2026.
Source: homebridge-plugins/homebridge-eufy on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.