Portal v0.31.0 — Browser-approved agent connect and pack lifecycle control
Connecting a local agent no longer moves an API key by hand: the installer opens a browser approval, you approve the connection on a consent page, and per-client keys are written straight into your agent's config. The secret never touches the clipboard, shell history, or a process argument. Alongside it, operators get real control over the pack catalog, a WCAG AA contrast pass, and a set of security and reliability fixes.
Agent connect
- Device-flow connect over browser approval. The installer opens an RFC 8628 device grant, you approve on a consent page, and per-client keys land directly in each client's config — the copy-the-key step is gone. Keys are minted per client and delivered once, under a row lock.
- Thirteen MCP clients configured out of the box, each in its own format: Claude Code, Claude Desktop, Cursor, Gemini CLI, Codex CLI, OpenClaw, OpenCode, Windsurf, Pi, Copilot CLI, Zed, Hermes, and Goose.
Packs
- An operator-run catalog. Delete a pack or a single version, revoke trust on a version, and auto-remove versions no runner has advertised for a set number of days.
- Retired is not unknown. A runner still lagging on a version a security fix retired now reads as retired and points at the upgrade, instead of posing as an unknown pack asking to be trusted — approving that would have re-authorized the vulnerable bytes.
- Nomad 0.2.0 adds deployment control (list, pause, resume, fail), metadata-filtered discovery, node-pool and CSI plugin reads, and one uniform TLS path for its API calls.
Security
- Argument flag-injection fixed in five pack actions that could read a leading-dash value as a command flag; their vulnerable versions are retired.
- Environment reads gated. Three actions that dump container or process environment — where secrets like database passwords live — now require approval.
Accessibility
- Essential text across every marketing and console page is raised to WCAG AA contrast, kept there by a new automated check.
Operability
- The runner CLI reloads the daemon on its own after a pack install, update, or uninstall, and
emisar doctorgains color output and a service-supervisor state check. - Under-permissioned roles now get a clean denial instead of a server error on detail routes.
Upgrading
Self-hosted runners: rename the config key auth_key_env to enrollment_key_env (one line) and re-mint any enrollment keys that were never used. Already-connected runners are unaffected.
The portal is the hosted control plane, so there's no portal binary to download. The runner and MCP bridge ship as signed binaries — each with a SHA256SUMS and SLSA-3 build provenance — on their own releases, runner-v0.14.0 and mcp-v0.4.0. The verification recipe lives at emisar.dev/trust.