Install the CLI
Detects your OS, drops espctl into your PATH. macOS and Linux share the same script.
$curl -fsSL https://esphome.cloud/espctl/install.sh | shFrom zero to working: one command installs the CLI, one logs in with your preview token, one verifies the environment. Everything after is your agent driving ESP32 builds.
Detects your OS, drops espctl into your PATH. macOS and Linux share the same script.
$curl -fsSL https://esphome.cloud/espctl/install.sh | shSaves to ~/.config/espctl/credentials.json. espctl build picks it up automatically.
$espctl login --token <your-preview-token>doctor surfaces env, project config, and login status in one pass.
$espctl doctor[ok] default-idf-version: DEFAULT_IDF_VERSION=v5.3.1[ok] project-config: .espctl.toml is valid[ok] login: logged in to https://esphome.cloudAll checks passed.
Each client gets four things: install, MCP config, a copy-ready prompt, and honest capability boundaries.
Codex, Claude Code, and OpenCode share one capability boundary but keep distinct entry paths.
Install commands, MCP config, and starter prompts live in the same operating zone.
Available capabilities and preview-only paths stay split so users do not have to infer risk.
Terminal native
Install + first command
cargo install --git https://github.com/ff4415/aegis.git espctl --locked
espctl doctorCodex MCP config
[mcp_servers.espctl]
command = "espctl"
args = ["mcp", "serve"]
cwd = "/path/to/your/esp-idf/project"
[mcp_servers.espctl.env]
CONTROL_BASE_URL = "https://esphome.cloud"
MCP_AUTH_SECRET = "<preview-token>"Starter prompt
Use espctl to initialize an ESP32-S3 project, pin ESP-IDF v5.3.1, run doctor, then prepare a remote build. If preview access is not configured, stop at the next concrete command I should run.Current status
What works today
Preview lane
The page has to stay honest. What works today should be stated plainly, and preview features should stay labeled as preview.
Skills, doctor, ports, flash, and monitor remain the stable operating surface.
Remote build still needs preview access and should not blur into the public baseline.
Prebuilt binaries are meant to ship through GitHub Releases. Until that lands, source install remains the most reliable path.
Prebuilt binaries belong on GitHub Releases for clean downloads and version history.
Until binaries are fully covered, source install remains the most reliable entry.
Public downloads and remote build permissions are different tracks and should stay separate.
Binary asset
espctl-aarch64-apple-darwin.tar.gz / espctl-x86_64-apple-darwin.tar.gz
Choose the Apple Silicon or Intel archive by CPU.
Grab the binary directly
curl -fL https://esphome.cloud/espctl/espctl-aarch64-apple-darwin.tar.gz \
| tar xz -C /usr/local/bin espctlRemote build is still a preview lane. Public downloads and public remote access are not the same thing.
Repo and docs
If you want to inspect the source and the real command surface first, go straight to the aegis repo. This page is here to make agent onboarding, capability boundaries, and release path obvious.