ACP Console · v0.22

The whole cluster, one browser tab.

The Arkane Control Plane Console is served by gw-admin itself — no agent, no sidecar, no external stack. Login is TLS on :9443; the password is checked by Argon2id inside a net-free auth cell, and the session is an HttpOnly, Secure, SameSite=Strict cookie carrying one of three roles: viewer, operator, admin. Every write runs the same order — CSRF token, server-side role check, audit entry first — before anything happens.

01 · Five tabs

Overview, cells, topology, deploy, secrets.

Overview greets you with the cluster at a glance. Cells lists every cell — system cells badged apart from apps, replica groups collapsed into one row with an honest aggregate status and a rollout button. Topology draws the cluster as a band, with the net-outbound line making visible which cells can even reach the network. Deploy and Secrets are below.

acp console · https://arkane:9443 · cells
overview │ cells │ topology │ deploy │ secrets                    admin@arkane

  gw-admin      [system]  running   control plane · healer
  gw-public     [system]  running   reachable: 2 of 2
  keystore      [system]  running   net-free
  inference ×2  [app]     running   replica group   [ rollout ]
  persistence   [system]  running   WAL mirrored

logs ▹ drawer · every write: CSRF → RBAC → audit-first

A rollout from this button is the same code path as arkctl cell rollout — one replica at a time, ready-gated, the group never at zero.

02 · Deploy

Diff first, apply second.

Paste a manifest and the console shows you a diff preview that mutates nothing — what would spawn, what would change. Invalid input is refused with a readable reason, fail-closed; manifests that grant capabilities are deliberately rejected here and belong to arkctl apply. Only then: apply — CSRF-gated, role-checked (operator or admin), hash-chain audited before the first spawn.

deploy · diff preview
+ spawn  inference ×2   image blake3:9c41… · replica group
~ update tool-echo      heap 8192 → 16384 KiB
2 ops · nothing applied yet

✗ refused: manifest grants capabilities — use arkctl apply (fail-closed by design)
03 · Secrets & audit

An inventory that cannot leak.

The secrets tab lists names and grants — structurally never a value. There is no reveal button to forget to disable: the API that serves the tab has no code path that returns a secret's bytes. Reading the inventory at all is admin-only.

Everything else is accounted for the same way: five failed logins return 429, and every accepted write becomes a block in the Blake3 audit chain, tied to the acting user's digest. The console is a client of the same RPCs arkctl speaks — no privileged side door.

secrets · admin view
db-password      granted → persistence
api-token        granted → gw-mcp
values: not retrievable — the endpoint does not exist

Where credentials actually live: a net-free keystore cell, key material RAM-only, injected per call by the gateway — the app never holds them. The audit chain, verified offline →