Relmio
GitHub?v0.17.4
Browse documentation

Canonical guide · Source docs/reference.md

Reference

Installed dashboard commands

These commands manage the current operating-system account's Relmio dashboard on 127.0.0.1. They do not manage n8n, ngrok, Relmio companions, or installed endpoints.

CommandBehavior
relmio startStart the owner-scoped dashboard without opening a browser.
relmio statusInspect the owner-scoped dashboard and print its current state.
relmio openStart the dashboard if needed, then open its private local page.
relmio stopAsk the verified owner-scoped dashboard to stop.

relmio stop stops only the Relmio dashboard process. It never stops or changes n8n, ngrok, a Relmio companion, or an installed endpoint. The commands do not print the dashboard's control or browser credential. The dashboard never returns or re-shows a stored secret.

The hosted install-page launchers still run a foreground one-shot wizard from their temporary runtime. Use the installed package when you want the persistent dashboard lifecycle above.

Chat Adapter test commands

The experimental Chat Adapter is a loopback-only, Relmio-specific POST /chat service for trusted local backends or development servers. It is not OpenAI /v1 and it rejects browser Origin headers.

Set the endpoint, then read the one-time credential without typing the literal credential into shell history:

export RELMIO_CHAT_BASE_URL="http://127.0.0.1:14501"
read -r -s RELMIO_CHAT_CLIENT_CREDENTIAL
printf '\n'

Start a conversation:

printf 'Authorization: Bearer %s\n' "$RELMIO_CHAT_CLIENT_CREDENTIAL" |
  curl --fail-with-body --silent --show-error \
    --request POST "$RELMIO_CHAT_BASE_URL/chat" \
    --header @- \
    --header "Content-Type: application/json" \
    --data '{"input":"Reply with exactly: adapter works"}'

Stream a conversation and inspect its explicit terminal state:

printf 'Authorization: Bearer %s\n' "$RELMIO_CHAT_CLIENT_CREDENTIAL" |
  curl --no-buffer --fail-with-body --silent --show-error \
    --request POST "$RELMIO_CHAT_BASE_URL/chat" \
    --header @- \
    --header "Accept: text/event-stream" \
    --header "Content-Type: application/json" \
    --data '{"input":"What is love? Answer conversationally."}'

The event order is start, progress, zero or more delta events, then one terminal. Only terminal: completed is success. A failed terminal is preceded by a redacted error event and must not be treated as a partial answer.

Copy the returned conversationId, then send a continuation:

export RELMIO_CONVERSATION_ID="CONVERSATION_ID_FROM_THE_PREVIOUS_RESPONSE"
printf 'Authorization: Bearer %s\n' "$RELMIO_CHAT_CLIENT_CREDENTIAL" |
  curl --fail-with-body --silent --show-error \
    --request POST "$RELMIO_CHAT_BASE_URL/chat" \
    --header @- \
    --header "Content-Type: application/json" \
    --data "{\"input\":\"Continue with one short sentence.\",\"conversationId\":\"$RELMIO_CONVERSATION_ID\"}"

Unset the shell credential when finished:

unset RELMIO_CHAT_CLIENT_CREDENTIAL

Raw Codex App Server command

The raw Codex App Server transport is JSON-RPC over WebSocket, experimental, and high-trust. It is for trusted native clients only; it is not an OpenAI-compatible /v1 endpoint. Read the one-time local capability into a named environment variable rather than placing it in the command:

read -r -s RELMIO_CODEX_CLIENT_CREDENTIAL
printf '\n'
codex --remote ws://127.0.0.1:14500 \
  --remote-auth-token-env RELMIO_CODEX_CLIENT_CREDENTIAL
unset RELMIO_CODEX_CLIENT_CREDENTIAL

Keep that capability private. A trusted Codex client can control the isolated container and may be able to recover its ChatGPT session credential.

Local wizard tester API

The browser never contacts the adapter directly. While the local wizard is running, its same-origin, X-Setup-Token protected APIs are:

MethodRoutePurpose
POST/api/local/chat-test/keyIssue one ephemeral RSA-OAEP public key
POST/api/local/chat-test/messageSend encrypted credential and one bounded chat turn
POST/api/local/chat-test/resetInvalidate the tester key and clear the browser transcript

The local proxy accepts only a literal http://127.0.0.1:PORT adapter base URL and appends /chat itself.