Resource & Migration Research · 27 October 2026

Replacing LNP Harness with OpenCode + OpenChamber: what it costs in CPU, RAM and work

Measured on this machine, not guessed: a 4 vCPU / 7 GB host already running OpenChamber desktop, three LNP workspaces, and this very agent session. The surprise is that the direct stack is usually lighter than the harness — the heavy part is code-server and the platform layer, not the agent.

Host: 4 vCPU · 7,084 MB RAM · load 1.23 OpenCode v2.0.32 / 2.2.0 source 42 processes · 4,455 MB RSS total

🎯 TL;DR — the numbers

Direct web, one user

220–300 MB

OpenCode server + OpenChamber server, fresh session. Grows to 400–600 MB with long sessions, MCP servers and big contexts.

LNP workspace today

~930 MB

Same two processes plus a code-server tree: 599 MB OpenCode + 526 MB OpenChamber + 1,667 MB code-server across 3–4 workspaces.

Desktop app

~1.6 GB

1,116 MB Electron (13 processes) + 477 MB embedded OpenCode. This is what you are using in this session.

The verdict in one line

Going direct is cheaper per user (≈0.25–0.3 GB instead of ≈0.7–0.95 GB) only if you drop code-server. But LNP is not just a wrapper around the agent — it is your accounts, credits, admin, isolation, backups and preview host. Replacing the agent costs RAM; replacing the platform costs months.

📏 What this machine is running right now

Collected with ps RSS and a 3-second /proc CPU sample on 27 Oct 2026. RSS counts shared pages per process, so group totals overstate real usage; treat them as upper bounds, and compare like with like.

GroupRSSProcsCPU nowNotes
OpenChamber desktop (Electron)1,116 MB13~5%Renderer alone 390 MB; main 193 MB
Embedded OpenCode (desktop)477 MB17.0%10 h uptime, long sessions, MCP servers loaded
LNP control plane (bun src/main.ts)82 MB10.0%Idle; serves UI + API + gateway
Workspace OpenCode servers599 MB40–4.7%103–249 MB each depending on activity
Workspace OpenChamber servers526 MB40–0.3%105–180 MB each
code-server trees1,667 MB19~0%The single biggest consumer by far
Total4,455 MB42—Host has 7,084 MB; 2,361 MB already swapped
Read this before you budget

The 477 MB desktop OpenCode process is a 10-hour session with several MCP servers and a long transcript. A fresh opencode serve measured 103–115 MB in the LNP workspaces. Memory grows with conversation size, loaded tools and open editor state — not with the binary.

💾 Cost per deployment shape

Derived from the measured processes, with realistic headroom. "Active" means one agent turn in flight or a dev server being previewed.

ShapeIdle RAMActive RAMIdle CPUComment
Desktop app, one person1.0–1.3 GB1.6–2.2 GB~0%Electron is the cost, not the agent
Web (OpenChamber + OpenCode), one person220–300 MB400–600 MB0–0.5%Cheapest way to use the same experience
Web + code-server, one person650–800 MB1.0–1.4 GB1–3%What an LNP workspace effectively is
Team of 5, web only1.1–1.5 GB2.0–3.0 GB2–5%One service per user; same host is fine
Team of 10, web only2.2–3.0 GB4.0–6.0 GB5–10%8 GB is the practical floor, 16 GB comfortable
25 users, web only5.5–7.5 GB10–15 GB10–25%Needs idle eviction, not a bigger box alone

Rules of thumb you can actually plan with:

⚙️ CPU: where it actually goes

Idle agent servers are nearly free: 0.0–0.5% of a core, sampled live. The 7% reading belongs to the desktop process mid-turn — one streaming response. CPU is bursty, not steady.

WorkloadObserved / expectedWhy
Idle server, no turn0–0.5% of one coreEvent loop waiting on sockets
Streaming an answer5–15% of one coreToken parsing, SSE, markdown render
Tool-heavy turn (grep, AST, read many)20–60% of one coreChild processes, file I/O
Model build / test suite1–2 full cores per workspaceThe agent's commands, not the agent
code-server indexing0.5–1.5 cores, burstyTypeScript service, extensions, watchers
Electron renderer2–6% steadyChromium compositing and React updates

Concurrency planning: a 4 vCPU box comfortably hosts 6–8 concurrent users doing normal agent work, and far fewer if several run builds or test suites simultaneously. CPU, not RAM, becomes the limit once code-server and builds enter the picture.

💽 Disk and data

PathSize (measured)What it is
/opt/OpenChamber638 MBDesktop app bundle incl. its own OpenCode CLI
~/.config/OpenChamber360 MBDesktop user data, caches, session state
~/.local/share/opencode374 MBSessions, storage, per-project state
~/.cache/opencode5.3 MBnpm plugin cache (grows with plugins)
LNP .runtime1.9 GBopencode 916 MB + code-server 676 MB + openchamber 290 MB

Per-user disk is dominated by cloned repositories and node_modules, not by OpenChamber. Budget 2–10 GB per active workspace and put session transcripts on a retention policy.

➖ Delta vs LNP Harness

Important: your LNP workspaces already run OpenCode and OpenChamber inside. So "switching" is not adding a stack — it is removing the packaging around it.

LNP HARNESS (measured, per workspace) control plane 82 MB ── shared ├─ opencode serve 103–249 MB ├─ openchamber serve 105–180 MB ├─ code-server tree 400–450 MB ← biggest single cost └─ workspace isolation / container overhead DIRECT (same machine, no harness) opencode serve 103–250 MB openchamber serve 105–180 MB (code-server optional) 400–450 MB DELTA per user, code-server dropped: ≈ −0.45 GB RAM, −0.5–1.5 cores of bursts DELTA per user, code-server kept: ≈ ±0, but −82 MB control plane total

Same agent, same UI, less packaging. The saving comes from code-server and containers, not from the agent.

What you add by going direct: nothing in RAM, but everything LNP was doing for you disappears — see the next section.

🧩 Feature parity: what you must rebuild

This is the part that decides whether the move is worth it. OpenCode + OpenChamber replace the agent and the workspace UI. They do not replace a multi-tenant product.

LNP capabilityOpenCode / OpenChamber todayVerdict
Agent loop, tools, streamingNative, richer than most harnessesREPLACED
Session UI, diffs, terminal, previewOpenChamber, plus multi-run and walkthroughsREPLACED
Custom tools / prompts / skillsPlugins, custom tools, skills, AGENTS.md, agents, commandsREPLACED
Model routing and providersConfig, providers, auto routing in OpenChamberREPLACED
Multi-user login, RBAC, sessions per userSingle instance password / WebAuthn onlyREBUILD
Credits, billing, quotas, IAPNoneREBUILD
Admin panel, user analytics, token accountingUsage views only; no admin planeREBUILD
Per-project DB, secrets, API keysOpenCode config + env; no tenant storeREBUILD
Workspace isolation / sandbox / limitsNone built in (run each instance under its own OS user or container)REBUILD
S3 archive / restore / evictionNoneREBUILD
Hosted preview per projectPreview inspector attaches to a dev server you runPARTIAL
Branded mobile app + store billingCapacitor app exists, no billingPARTIAL
Hosted auth portal, OAuth, magic linkInstance auth onlyREBUILD
Tunnels, remote access, relayBuilt in and better than mostBETTER
The honest trade

For a single team on one server, direct use is strictly better: less RAM, fewer moving parts, more features. For a public product with accounts and billing, you are not removing LNP — you are re-implementing its control plane around a better agent. Budget months, not days, for auth + billing + admin + isolation + backups.

🔧 Customising OpenCode A-to-Z

Yes, you can carry over essentially every agent-level customisation you built in LNP — and more, because the surfaces are documented rather than internal.

SurfaceHowDepth
Instructions / personaAGENTS.md, project and globalFull
Agents, subagents, commands, permissionsopencode.json configFull
Skills and MCP serversConfig + skill foldersFull
Providers and modelsConfig, models.dev, custom base URLsFull
Tools and hooks@opencode/plugin — JS/TS modules, events, tool.execute.before/after, custom tools, npm or localFull
Keybinds, themestui.json / JSON themes with user and project overridesFull
Own frontendopencode serve + HTTP/SSE + generated clients, --corsFull
Web UI changesFork packages/app (SolidJS) — its browser plugin host is privateFork only
Desktop shellFork packages/desktop (Electron)Fork only

What does not come across from LNP

🎨 Customising OpenChamber

Three layers, lowest cost first:

LayerWhat it changesCost
Theme JSONAll colours, light/dark, VS Code theme import, runtime reloadHours, zero maintenance
Extension SDKRail panel, full page, dialog, Work Status widget, file editor, message/session actions, slash commands, custom tool rendering, integrations, local service, browser/git providerDays, zero maintenance
React sourceShell, sidebar, timeline, composer, settings pages, auth, relay, Electron, CapacitorWeeks, permanent merges

The boundary is hard: extensions live in sandboxed iframes and cannot touch host DOM, CSS or React state. So "add a thing beside what exists" is an extension; "change how what exists looks" is React.

If you keep a product layer

Put your accounts, credits and admin in your own service, and let OpenChamber be the workspace shell. Two clean patterns:

  1. Reverse proxy in front — your auth gateway issues a session cookie, OpenChamber runs with its own password behind it, one instance per tenant.
  2. Extension as the bridge — an SDK extension calls your billing/usage API, shows quota in a rail panel and a Work Status section, without forking React.

🚀 Recommended migration path

Option A — Team / self-hosted (do this if you are the main user)

Option B — Product with accounts (do not throw LNP away)

Option C — Replace everything (only with months of runway)

Cheapest immediate win, regardless of path

Three workspaces on this host spend 1,667 MB on code-server and 1,125 MB on agent + UI. Turning code-server off by default frees more memory than every other optimisation combined, and costs no customisation.

⚠️ Caveats and sources

Sources