Skip to content

Remote-only (client) install: connect to a remote assistant/stack #486

Description

@itlackey

Summary

Support installing OpenPalm as a client only — no local stack — and connecting to an assistant running on another computer or container. Also covers the PWA install path (same app, connection-management-only mode).

Plan

Implemented as part of the UI Runtime Modes refactor. See docs/technical/ui-runtime-modes-plan.md for the full design.

Architecture decisions (resolved)

  • Connection management moves to /connections (new route, no longer under /admin). All modes — host, browser, PWA — can reach it without host admin auth.
  • ConnectionEntry model replaces the old endpoint model. Adds a kind field (local-opencode | remote-opencode | openpalm-client-api). endpoints.json is not renamed.
  • pwa-static host mode is the client-only install. The same SvelteKit build; capabilities hide host controls. No local assistant/guardian containers started. UI is the only process.
  • Auth: Guardian Basic auth matching the OpenCode implementation. Coordinated with Guardian: mTLS adapter auth + keep authn/authz seams generic  #435 — no parallel credential mechanism.
  • Connection config: stored in endpoints.json under OP_HOME/config/. Credentials remain file-based secrets (knowledge/secrets/), consistent with the existing secret boundary.
  • Connection status: surfaced in the /connections UI and in the chat empty state.
  • Wizard deep-link: after a "set up later" install, landing at /connections/new is the default when no connection is configured.

What a client-only install exposes

  • /connections — add/switch/manage remote assistants
  • /chat — when an active connection is established
  • /api/runtime — public, returns hostMode: 'pwa-static' and connection-scoped capabilities
  • No host lifecycle, no Docker, no /api/host/*

What a remote assistant exposes for clients to attach to

The Guardian /oc/* ingress (existing). The openpalm-client-api connection kind (preferred for mobile/PWA) routes through Guardian. The remote-opencode kind connects to a raw OpenCode instance directly (dev/advanced only).

Implementation

  • Phase 2 of the runtime modes plan: routes/connections/, /api/connections/*, internal model rename
  • Phase 6: PWA manifest + service worker enabling the installable client-only mode

Open questions (resolved)

  • What does a remote stack expose for a client to attach to? → Guardian /oc/* ingress
  • How is the remote endpoint authenticated? → Guardian Basic auth; aligned with Guardian: mTLS adapter auth + keep authn/authz seams generic  #435 Bearer seam
  • Should a client-only install skip seeding assistant/guardian compose services? → Yes. pwa-static host mode starts no containers.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions