Relmio
GitHub?v0.17.1
Browse documentation

Canonical guide · Source docs/local-dashboard.md

Use the local dashboard

After you start Relmio, the local dashboard rediscovers the services Relmio manages on this computer. You can copy verified connection URLs, open a reviewed maintenance action, or start the existing setup wizard.

An installed Relmio command can keep this dashboard running in the background. It does not install an operating-system login service or start at login.

Start the dashboard

Install the published command with Node.js 24 or newer:

npm install --global --ignore-scripts relmio@latest

Then start and open the dashboard:

relmio start
relmio open

You can also run the published package without a global install:

npx --yes --ignore-scripts relmio@latest

That command starts the same persistent owner-scoped dashboard and opens it. Because it does not place relmio on your PATH, repeat the full NPX command for later lifecycle actions:

npx --yes --ignore-scripts relmio@latest start
npx --yes --ignore-scripts relmio@latest status
npx --yes --ignore-scripts relmio@latest open
npx --yes --ignore-scripts relmio@latest stop

From a repository checkout with dependencies installed, run:

npm start

Use the hosted install page when you need the native macOS, Linux, PowerShell, or Command Prompt launcher. A hosted launcher can use a verified temporary Node.js runtime, so it deliberately runs Relmio as a foreground, one-shot process and removes that runtime afterward. It does not install a persistent command. Do not run relmio assistant for this page. That command opens the separate Assistant-only wizard.

Run relmio vps to open the separate VPS setup directly. You can also reach it from Set up the VPS version in the local flow.

Relmio binds the dashboard only to 127.0.0.1. To open it, Relmio creates an owner-only, short-lived handoff file and exchanges its one-time capability for the active tab session. Neither the browser-launch command nor the visible dashboard URL contains that capability.

Manage the dashboard process

CommandResult
relmio startStart the owner-scoped loopback dashboard in the background without opening a browser
relmio statusVerify and report the exact dashboard process without printing its private session value
relmio openStart the dashboard when needed and open its private local page
relmio stopGracefully stop only the Relmio dashboard process

The protected on-disk publication and authenticated health response must name the exact installed Relmio version. A dashboard from another Relmio version is never reported as current or opened by a newer command. Before or after upgrading, use the matching lifecycle form to check and replace it explicitly:

relmio status
relmio stop
relmio start
relmio open

relmio stop remains available only when the prior process has the compatible control protocol, exact recorded process identity, and authenticated control key. Relmio does not delete malformed or incompatible control state to force an upgrade.

These commands do not start, stop, restart, rebuild, recreate, or remove n8n, ngrok, model endpoints, bridges, Assistant companions, or unrelated containers. relmio stop stops only the Relmio dashboard process, verifies the recorded process identity, and uses its separately authenticated loopback control endpoint. It has no PID-only kill fallback.

Running relmio or relmio local starts the dashboard when needed and opens it. relmio vps and relmio assistant open their respective wizard route on the same private dashboard process. If automatic browser opening fails, fix the operating system's default-browser launcher and run relmio open again; Relmio does not print the private session value from a persistent process.

A same-tab reload keeps the temporary wizard capability only in the current tab's clean GET history entry while that Relmio process remains open. The value stays out of browser process arguments and the visible address bar. The private file handoff is single-use and expires after 30 seconds; its independent per-tab transfer is cleared before application startup and expires after 10 seconds. A new tab, copied clean /local address, or bookmark cannot reconnect; use relmio open to create a fresh handoff to the active process.

When you use the VPS route, select Disconnect from VPS as soon as you are finished. The server also closes an authenticated SSH session after 15 minutes of inactivity. An active VPS operation holds a bounded lease, so discovery or an approved install is not interrupted by that idle timer.

Upgrading an older API installation

Relmio 0.14.0 does not show or manage legacy API-key endpoints. Upgrading leaves their containers and credential volumes untouched, so they can remain running. Use the legacy retirement guide to review and stop only an exactly owned endpoint. Dashboard absence is not proof that an old endpoint has stopped.

Read the inventory

Refresh status first forgets abandoned setup drafts, staged replacements, and tester sessions from the dashboard tab. It preserves an active ChatGPT or Codex sign-in helper. It then performs read-only discovery of the local Docker context and versions, Relmio's fixed managed paths, ownership markers, exact Docker objects, network and publication boundaries, Compose state, and generated health checks. This does not change an installed service: it does not install, start, restart, recreate, remove, or execute inside a container.

Relmio 0.14.0 always has these seven rows, even when nothing is installed.

Dashboard serviceVerified connection detailsActions after current attestation
Codex (ChatGPT login)Loopback App Server WebSocket URLSet up when absent; Sign in and Rotate credential when healthy
Codex Chat adapterLoopback HTTP adapter URLSet up when absent; Sign in and Rotate credential when healthy
SuperGrokLoopback SuperGrok Chat Completions URLSet up when absent; sign-in/sign-out guidance and local capability rotation when offered
n8n + ngrokLocal n8n, authenticated ngrok, and loopback inspector URLsSet up when absent; Resume or Review removal only after exact ownership attestation
OpenAI OAuth bridgePrivate http://n8n-openai-oauth:10531/v1Set up, Manage bridge, or Review removal only when offered
SuperGrok for n8nPrivate http://n8n-supergrok:14502/v1Set up, official sign-in/sign-out guidance, or Review removal only when offered
AI Assistant toolsInstalled component state; no saved sandbox keySet up or Review removal only when offered

Copy buttons accept only verified URLs for the selected service. The OAuth bridge works only inside its selected Docker network. Grok Build's healthy container state does not prove that OAuth or live inference is ready.

Use the state and action matrix

An action appears only when the latest inventory returned the exact capability for that service.

StateWhat Relmio provedWhat you can do
CheckingA new inventory is runningWait; all actions are disabled
HealthyOwnership, boundary, expected resources, and generated health checks passedUse only the actions shown for that service
StoppedThe exact owned service exists but is not runningResume the owned n8n stack when offered, or review an offered removal
Needs recoveryManaged evidence is incomplete or runtime state is mixedUse only an explicitly attested recovery action; otherwise inspect without changing anything
UnavailableRelmio could not prove a safe stateNo setup or maintenance action is available for that row
StaleThe last verified snapshot is more than five minutes oldRefresh status before using any action
Not configuredNo Relmio-managed installation exists at the fixed pathSelect Set up to open the four-step wizard

Refreshing inventory and refreshing a bridge credential are different actions. Refresh status only reads. Refresh credential opens the bridge's existing sign-in, ownership, review, and confirmation flow before it changes the owned sidecar credential.

Manage bridge opens the two bridge maintenance controls. Update bridge runtime is separate from credential refresh. Use it after installing a Relmio release with a bridge compatibility fix, because changing the local package does not update the running container. The action preserves the existing OAuth credential, bridge identity, and selected Docker network. It rebuilds and verifies only the owned sidecar. Read the summary, select the separate confirmation checkbox, then choose Update bridge runtime. The button remains disabled until confirmation. The update does not require another ChatGPT sign-in. Apply sign-in to owned bridge remains a credential-only action and does not install a newer runtime.

Keep credentials separate

The dashboard returns sanitized state and allowlisted URLs. It never returns a stored ChatGPT session, OAuth token, local client credential, ngrok token, Basic Auth password, n8n encryption key, or Assistant runner secret.

  • A local endpoint capability or Chat Adapter bearer appears once after setup or rotation. Relmio stores its verifier, not the raw replacement. Save the displayed value before leaving the result screen.
  • The OAuth bridge credential stays server-managed. The dashboard can open its separately confirmed refresh flow, but it cannot reveal the saved token.
  • The Assistant sandbox key and settings appear once after setup. Dashboard refresh reports only whether the component is configured.
  • Returning to the dashboard clears pending plans, confirmations, sign-in links, and one-time result values. Copy any value you need before returning.

Distinguish Codex sign-in from the local bearer

The two Codex credentials have different jobs:

  • ChatGPT device sign-in authorizes Codex inside its isolated container.
  • The App Server capability or Chat Adapter bearer authorizes your client to connect to the local Relmio endpoint.

Selecting Sign in on a healthy Codex row opens installed-endpoint management. It does not claim that the saved ChatGPT sign-in or local client credential is valid, and it does not start a browser sign-in by itself. Start a fresh device-code sign-in there only when you need one.

Rotating the local credential does not refresh ChatGPT sign-in. Repeating ChatGPT sign-in does not replace the App Server capability or Chat Adapter bearer.

Keep provider accounts explicit

Relmio's Codex targets use the official Codex App Server. Codex owns the ChatGPT OAuth flow, stores the active credential, and refreshes it. Each Codex target has one active ChatGPT account. Changing accounts requires an explicit sign-out and a new sign-in; Relmio does not pool accounts.

The experimental SuperGrok adapter uses the pinned official Grok CLI for fresh OAuth/device sign-in and sign-out in its own private volume. The direct HTTP handler reads only that runtime's marked session to call xAI's documented CLI chat proxy. It does not inspect another app's credentials, import tokens, replay browser cookies, or accept an xAI API key. The CLI remains the sole credential writer; the HTTP handler never consumes refresh tokens.

Local apps use /v1/chat/completions with a freshly discovered model and a separate Relmio client bearer. grok-build remains a legacy routing alias. n8n executes its own tools and returns matching results. The legacy simple /chat request shape remains available through the direct transport. Browser bundles must not hold the local bearer or call it directly.

Relmio never changes accounts automatically after a 401, 403, or 429, rate-limit, or quota response. It reports the failure and waits for the account owner to act. The dashboard may report that a credential is configured, but it never returns or re-shows a stored secret.

Preserve n8n operator ownership

For the OAuth bridge and Assistant tools, the selected n8n container and Docker network remain operator-owned. Dashboard inventory rechecks their exact identity, network membership, and health before reporting the companion as healthy. It does not edit n8n configuration, execute inside n8n, or stop, restart, rebuild, recreate, or change the network membership of n8n.

Bridge runtime updates, credential refreshes, and companion removal target only the separately owned Relmio project after another review and confirmation. The n8n + ngrok row is a different option: that whole disposable stack is Relmio-owned and has its own resume and removal checks.

On native Windows, inventory verifies the existing owner-only ACLs without repairing them. Before a managed action changes Docker state, Relmio checks the ACLs again and stops before the mutation if they have drifted.

Add another connection

Select Add connection to open the same four-step setup flow:

  1. Choose a connection.
  2. Review its network and credential boundary.
  3. Install only after entering the required credential and confirming the current plan.
  4. Ready shows verified connection details and any one-time value.

Use Back to dashboard when you are done. The dashboard then runs a fresh inventory. It does not reuse the previous setup plan.

Provider controls

Relmio 0.14.0 separates Runtime health, Provider readiness, and Inventory freshness. A healthy container does not establish that its provider account is signed in or entitled to a model. Stale inventory preserves the last observed truth while disabling maintenance actions.

The four OAuth entries show Provider-managed · not inspected. Guidance buttons do not claim a sign-in or sign-out occurred. Rotating a local capability does not change the provider session. No API-key profile controls are present.

The experimental SuperGrok adapter serves both local apps and n8n through Chat Completions without a ChatGPT credential. Windows live checks covered n8n Chat, Assistant tool use, and a Calculator workflow. Those checks do not establish the same results on a production VPS.