Resource & Migration Research · 27 October 2026
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.
220–300 MB
OpenCode server + OpenChamber server, fresh session. Grows to 400–600 MB with long sessions, MCP servers and big contexts.
~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.
~1.6 GB
1,116 MB Electron (13 processes) + 477 MB embedded OpenCode. This is what you are using in this session.
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.
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.
| Group | RSS | Procs | CPU now | Notes |
|---|---|---|---|---|
| OpenChamber desktop (Electron) | 1,116 MB | 13 | ~5% | Renderer alone 390 MB; main 193 MB |
| Embedded OpenCode (desktop) | 477 MB | 1 | 7.0% | 10 h uptime, long sessions, MCP servers loaded |
LNP control plane (bun src/main.ts) | 82 MB | 1 | 0.0% | Idle; serves UI + API + gateway |
| Workspace OpenCode servers | 599 MB | 4 | 0–4.7% | 103–249 MB each depending on activity |
| Workspace OpenChamber servers | 526 MB | 4 | 0–0.3% | 105–180 MB each |
| code-server trees | 1,667 MB | 19 | ~0% | The single biggest consumer by far |
| Total | 4,455 MB | 42 | — | Host has 7,084 MB; 2,361 MB already swapped |
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.
Derived from the measured processes, with realistic headroom. "Active" means one agent turn in flight or a dev server being previewed.
| Shape | Idle RAM | Active RAM | Idle CPU | Comment |
|---|---|---|---|---|
| Desktop app, one person | 1.0–1.3 GB | 1.6–2.2 GB | ~0% | Electron is the cost, not the agent |
| Web (OpenChamber + OpenCode), one person | 220–300 MB | 400–600 MB | 0–0.5% | Cheapest way to use the same experience |
| Web + code-server, one person | 650–800 MB | 1.0–1.4 GB | 1–3% | What an LNP workspace effectively is |
| Team of 5, web only | 1.1–1.5 GB | 2.0–3.0 GB | 2–5% | One service per user; same host is fine |
| Team of 10, web only | 2.2–3.0 GB | 4.0–6.0 GB | 5–10% | 8 GB is the practical floor, 16 GB comfortable |
| 25 users, web only | 5.5–7.5 GB | 10–15 GB | 10–25% | Needs idle eviction, not a bigger box alone |
Rules of thumb you can actually plan with:
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.
| Workload | Observed / expected | Why |
|---|---|---|
| Idle server, no turn | 0–0.5% of one core | Event loop waiting on sockets |
| Streaming an answer | 5–15% of one core | Token parsing, SSE, markdown render |
| Tool-heavy turn (grep, AST, read many) | 20–60% of one core | Child processes, file I/O |
| Model build / test suite | 1–2 full cores per workspace | The agent's commands, not the agent |
| code-server indexing | 0.5–1.5 cores, bursty | TypeScript service, extensions, watchers |
| Electron renderer | 2–6% steady | Chromium 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.
| Path | Size (measured) | What it is |
|---|---|---|
/opt/OpenChamber | 638 MB | Desktop app bundle incl. its own OpenCode CLI |
~/.config/OpenChamber | 360 MB | Desktop user data, caches, session state |
~/.local/share/opencode | 374 MB | Sessions, storage, per-project state |
~/.cache/opencode | 5.3 MB | npm plugin cache (grows with plugins) |
LNP .runtime | 1.9 GB | opencode 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.
Important: your LNP workspaces already run OpenCode and OpenChamber inside. So "switching" is not adding a stack — it is removing the packaging around it.
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.
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 capability | OpenCode / OpenChamber today | Verdict |
|---|---|---|
| Agent loop, tools, streaming | Native, richer than most harnesses | REPLACED |
| Session UI, diffs, terminal, preview | OpenChamber, plus multi-run and walkthroughs | REPLACED |
| Custom tools / prompts / skills | Plugins, custom tools, skills, AGENTS.md, agents, commands | REPLACED |
| Model routing and providers | Config, providers, auto routing in OpenChamber | REPLACED |
| Multi-user login, RBAC, sessions per user | Single instance password / WebAuthn only | REBUILD |
| Credits, billing, quotas, IAP | None | REBUILD |
| Admin panel, user analytics, token accounting | Usage views only; no admin plane | REBUILD |
| Per-project DB, secrets, API keys | OpenCode config + env; no tenant store | REBUILD |
| Workspace isolation / sandbox / limits | None built in (run each instance under its own OS user or container) | REBUILD |
| S3 archive / restore / eviction | None | REBUILD |
| Hosted preview per project | Preview inspector attaches to a dev server you run | PARTIAL |
| Branded mobile app + store billing | Capacitor app exists, no billing | PARTIAL |
| Hosted auth portal, OAuth, magic link | Instance auth only | REBUILD |
| Tunnels, remote access, relay | Built in and better than most | BETTER |
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.
Yes, you can carry over essentially every agent-level customisation you built in LNP — and more, because the surfaces are documented rather than internal.
| Surface | How | Depth |
|---|---|---|
| Instructions / persona | AGENTS.md, project and global | Full |
| Agents, subagents, commands, permissions | opencode.json config | Full |
| Skills and MCP servers | Config + skill folders | Full |
| Providers and models | Config, models.dev, custom base URLs | Full |
| Tools and hooks | @opencode/plugin — JS/TS modules, events, tool.execute.before/after, custom tools, npm or local | Full |
| Keybinds, themes | tui.json / JSON themes with user and project overrides | Full |
| Own frontend | opencode serve + HTTP/SSE + generated clients, --cors | Full |
| Web UI changes | Fork packages/app (SolidJS) — its browser plugin host is private | Fork only |
| Desktop shell | Fork packages/desktop (Electron) | Fork only |
Three layers, lowest cost first:
| Layer | What it changes | Cost |
|---|---|---|
| Theme JSON | All colours, light/dark, VS Code theme import, runtime reload | Hours, zero maintenance |
| Extension SDK | Rail panel, full page, dialog, Work Status widget, file editor, message/session actions, slash commands, custom tool rendering, integrations, local service, browser/git provider | Days, zero maintenance |
| React source | Shell, sidebar, timeline, composer, settings pages, auth, relay, Electron, Capacitor | Weeks, 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.
Put your accounts, credits and admin in your own service, and let OpenChamber be the workspace shell. Two clean patterns:
opencode serve.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.
ps at one moment; shared pages are counted per process, so group sums overstate. PSS would be lower./proc sample plus lifetime averages; agent work is bursty, so single readings are indicative only.ps, /proc/*/stat, du).AGENTS.md and workspace runtime layout in this repository.