eero-cli

Experimental

Manage an eero mesh network from the shell.

GitHub repo → self-hosted · run from source
CLI
terminal tool, not an MCP server
Py 3.12+
runtime
MIT
open source

WHAT IT DOES

eero-cli is a tiny terminal CLI for managing devices on an eero mesh network from a real shell. It wraps eero-api (the most actively maintained reverse-engineered Python client) and adds a two-step, non-interactive SMS/email auth flow that survives across separate shell invocations, filtered device listing, profile and schedule management, and single or bulk device blocking. The two-step auth is deliberately non-interactive so it works in wrappers that cannot drive an interactive prompt, like a scripted setup or an agent's shell.

Status: experimental. eero has no public API; this rides on a reverse-engineered library, so behavior can change when eero changes their backend. It is a CLI, not an MCP server, so there is no AI-client config block.

INSTALL

Not published to a package index. Install straight from the GitHub repo with pipx, or from a local clone. Requires Python 3.12+ (inherited from eero-api).

$ pipx install git+https://github.com/solomonneas/eero-cli
 
# or, from a clone
$ pipx install .

FIRST-TIME AUTH

The eero API uses a two-step SMS/email login. Both halves are non-interactive so they work in any wrapper that cannot drive an interactive prompt.

# step 1: trigger the SMS / email
$ eero auth +15551234567 # phone
$ eero auth you@example.com # or email
 
# step 2: after the code arrives, within 30 minutes
$ eero auth --code 123456

Session token is written to ~/.config/eero/session.json (mode 0600). Re-run eero auth any time to start over.

COMMANDS

Auth

eero auth <phone|email>
Step 1: trigger the SMS or email login code (non-interactive).
eero auth --code 123456
Step 2: verify the code within 30 minutes. Session token written to ~/.config/eero/session.json (mode 0600).

Devices

eero devices
List everything on the network.
eero devices --filter / --search
Regex over nickname/hostname, or plain-text over name, host, manufacturer, MAC, IP, URL.
eero devices --mac / --online / --offline
Filter by MAC prefix, or by current connection state.

Profiles

eero profiles --devices
List profiles and the devices assigned to each.
eero profile-create / profile-assign
Create a dedicated profile, then assign devices to it.
eero profile-schedule / profile-block-apps
Set profile-level pause schedules (start/end/days) and block apps.

Blocking

eero block <mac-or-id> [--unblock]
Block or unblock a device. Works on currently online devices.
eero block-cleanup <regex> [-y]
Bulk-block matching offline devices; --include-online widens the net.

WHAT IT CANNOT DO

The eero REST and GraphQL APIs do not expose any mutating operation that removes an offline device. This was verified end-to-end: the documented delete and forget calls return 404 or silently no-op, and none of the 215 GraphQL mutations in the eero web admin match a forget/delete/remove-device shape. To actually forget a stale device, use the eero mobile app (or just wait, eero auto-culls truly stale entries after about 30 days). The README documents the full investigation so you do not have to repeat it.