eero-cli

Active

Your eero mesh only bends to a phone app, so blocking a device or fencing a kid's TV means tapping through screens you cannot script. eero-cli hands the network to your shell: non-interactive SMS auth, filtered device listing, profiles and schedules, and single or bulk blocking, all runnable from a terminal or an agent.

11 commandsPython 3.12+--json readsread-only statuswraps eero-apiMIT

See it work

one question, the tools it calls, the answer

representative session · shell + eero-cli
I just swapped my router shelf around. Which devices are offline junk starting bc:24, and clear them out.
eero devices --mac 'BC:24' --offline --json
[ {"name":"bc2411-old-ap","mac":"BC:24:11:AA:03:19","ip":"192.0.2.44","online":false}, {"name":"bc2411-test-plug","mac":"BC:24:11:AA:07:5C","ip":"192.0.2.61","online":false} ]
eero block-cleanup '^bc24' -y
matched 2 offline devices, skipped 0 already blocked blocked bc2411-old-ap blocked bc2411-test-plug
Two stale bc:24 devices, both offline, now blocked. Heads up: eero has no working forget-device API, so these stay listed until you tap Forget in the app or eero auto-culls them after ~30 days.

Representative session. Illustrative values, RFC 5737 addresses. Your session token stays on the box.

What it does

eero-cli is a small terminal CLI for managing devices on an eero mesh network from a real shell instead of the mobile app. It exists because eero ships no public API and no desktop control surface, so any scripted or agent-driven network task means tapping through a phone. It differs from the raw reverse-engineered libraries by adding a two-step, non-interactive SMS or email auth flow that survives across separate shell invocations, regex and MAC-prefix device filtering, profile and schedule management, single and bulk blocking, and honest documentation of the operations eero's backend silently refuses. It wraps eero-api, the most actively maintained reverse-engineered Python client, and every read command supports --json for scripting.

Capabilities

11 commands across four groups

Auth1 command
Two-step non-interactive SMS or email login; token written to ~/.config/eero/session.json at mode 0600.
Devices3 commands
List, rename, and filter devices by regex, MAC prefix, or online/offline state, with --json output.
Blocking2 commands
Block or unblock a single device, or bulk-block matching offline devices with block-cleanup.
Profiles5 commands
Create profiles, assign devices, set bedtime pause schedules, and block apps at the profile level.
Statusread-only
eero status reports auth state, account, and visible networks; --json exits 1 when signed out.
Full reference on GitHub →

Set it up

pipx install git+https://github.com/lidless-labs/eero-cli

No env vars. Session token is stored at ~/.config/eero/session.json (mode 0600); re-run eero auth to reset. Requires Python 3.12+.

[ shield ]

Destructive commands refuse to guess when a name or MAC matches more than one device, so a fuzzy match never blocks the wrong host. block-cleanup defaults to offline-only, skips already-blocked devices, and prompts before acting unless you pass -y. eero status and every --json read are strictly read-only. The README documents, verified end-to-end, that eero's backend exposes no working way to delete an offline device, so the CLI never pretends to.

11
commands
Py 3.12+
runtime
1
read-only status
MIT
license