Skip to content

Historical record

This page records what happened on a date, with its observed failures and limits. It is not a requirement for the current implementation. Current behaviour is in Status.

Packing 0.5.2 without the Agent clients ​

Updated 2026-11-01. The user compared the 275 MB 0.5.1 tarball with two projects that distribute simply: servers-connect publishes a wheel of only its own code from a GitHub Release, and magpie drives about 70 Agents that the person installs. Their conclusion was that Rho should not bundle Agent clients, and they asked to optimize how the current source is packed and distributed.

What the 0.5.1 tarball carried ​

The accepted 0.5.1 stage held 676 MB of production dependencies. Two were each one platform's native Agent client, measured at the same versions in the Plugins workspace:

PackageSizeReached by
@openai/codex-darwin-arm64 0.164.0338 MBCodex conversations, which named no executable; the external relay
@anthropic-ai/claude-agent-sdk-darwin-arm64 0.3.310261 MBOnly the external relay; in-app Claude conversations already ran claude from PATH
Core, Rho dist, all Plugins codeabout 16 MB—

Both are optional platform dependencies of the ACP adapters (@agentclientprotocol/codex-acp 2.3.0 and claude-agent-acp 0.97.0). They were packed because the stage installed optional dependencies, and they also tied the tarball to darwin-arm64. These two families were the only optional packages in the production tree. Both adapters already accept an executable: CODEX_PATH and CLAUDE_CODE_EXECUTABLE.

Changes by owner ​

Plugins. Agent 0.4.24 gives both adapters the selected executable, else the one named in the environment, else claude or codex on PATH. This applies to conversations in Rho and to the external relay (rho --acp, rho-agent-acp). Before the adapter starts, the executable is looked up. A missing client fails the message with "Codex was not found on PATH (codex). Install it, or select its executable." The relay writes the same line and exits 1. The pack script adds Notebook and Skills; Notebook's runner.R and runner.py are its only files outside dist and are scanned like dist. Annotations now accepts Documents 0.4.8 and 0.4.9 as its optional peer.

Rho. --codex, RHO_CODEX or codex on PATH selects Codex, as --claude, RHO_CLAUDE or claude already selected Claude Code. The packer installs with --omit=optional and refuses a package that still contains a native Agent client. It writes SHA256SUMS and records agentClients: { bundled: false } in the composition. Its plugin list must equal the runtime selection after the build. The installed smoke check fails if npm fetched a native client and records the installed size. project.doctor adds an agents check that warns when the default backend's client is missing and names the other client's state. The version is 0.5.2.

What packing the current source found ​

The packer's plugin list stopped at ten owners, while the runtime imports twelve. From the code, a packed application would have reported Notebook and Skills as not installed and built its WebUI without the Notebook views. This was not packed and observed.

Packing did fail on Annotations. It declared Documents 0.4.1 || … || 0.4.7 as an optional peer, but the workspace had run it beside Documents 0.4.9, with both suites passing. The stage bundles Documents 0.4.9, so npm looked for a matching Documents in the registry and failed with E404.

Missing client, before and after ​

The first candidate was installed and run with PATH=/usr/bin:/bin, and a Codex conversation was started as the local person. The turn failed after one second with the problem "ACP connection closed". The Overview showed "Failed · took 1 s" with no reason, and project.doctor had no Agent check. The relay's stderr held spawn codex ENOENT. Before 0.5.2 this could not happen for Codex, because its client was bundled. Without a bundled client, a missing client is now the likeliest failure, and it was the least explained one.

In candidate 2 the turn fails before any adapter process starts (pid null). Opening the conversation shows "Not answered. Codex was not found on PATH (codex). Install it, or select its executable." with Ask again. The doctor reports agents: warn. Claude Code behaves the same way. The Overview still shows a failed answer without its reason; see the open items.

Candidate ​

FieldValue
Artifactrho-workspace-local-0.5.2.tgz, 12,753,572 bytes, 5,095 files (0.5.1: 274,921,791)
SHA-25637d95a2d42041e402c7ceac14db7d6e7ccbee25f7e37d3570f9176149dc639f3
Applicatione55a7028, clean
Pluginsb138a27, clean
Core4f5bed8, the accepted 0.5.1 binary 434a92fc…, digest-checked and not rebuilt
Runtime pluginscontracts 0.4.0, documents 0.4.9, files 0.5.0, r 0.4.1, requirements 0.4.0, tables 0.5.0, media 0.4.0, charts 0.4.0, agent 0.4.24, annotations 0.5.2, console 0.3.0, kernel 0.5.0, skills 0.1.0

The candidate, SHA256SUMS, composition.json and evidence are under work/dist-0.5.2/. Candidate 1 (cd4dea5f…, built from 068fbc76/b7b69fb) is superseded because it did not name a missing client. It is kept in candidate-1-superseded/.

Checks ​

CheckResult
Rho suite269/270; the MCP v2 stdio test was cancelled at its 30 s limit and passes alone in 23 s
Plugins suite165/165; contract checks pass
Offline install, empty npm cache, outside all checkoutsPassed in 3 s; the cache held only the tarball; no native client; 68 MiB installed
Install smokePassed: ready 0.75 s, first render 1.6 s, home at 1440/1024/768/390 px, no Host left
Installed serviceTwelve plugins available, Notebook with its views; doctor plugins: ok
Real Claude conversation, installed8/8: two turns, native permission, browser loss, cancel, transport loss, same-session recovery, restart
Real Codex conversation, installed8/8, the same checks
Relay rho --acp, installedClaude and Codex each answered READY; the process tree ran the person's claude and ~/.npm-global/…/codex

On the first candidate, the first smoke run after a reboot took 5.1 s to first render; two reruns took 1.0 s and 0.9 s. The client checks used Claude Code 2.1.316 and Codex 0.165.0 from PATH, with Westlake HPC deepseek-v4.1-flash. The Codex adapter was written against Codex 0.164.0. Codex printed its own warning that it had no metadata for that model. In the relay probe, the person's Codex also started git-remote-https. Installing Rho downloads nothing, but the person's clients make their own requests.

Not rerun for 0.5.2: install-acceptance.mjs with explicit projects, the frontend, sources and review acceptances, the offline reader, R/Python episodes, and the wrong platform/digest fault cases. 0.5.1 remains the accepted preview. This candidate establishes the packaging change, not that acceptance.

Open items ​

  • Agent's rho.agent-note view is not renderable in the installed application. Its UI entry carries the package version 0.4.24, but the plugin descriptor still says 0.4.19. The two have differed since 0.4.20. Documents differs too (0.4.9 and 0.4.7); its views render through their extensions.
  • The Overview gives a failed answer no reason, still offers "Use this answer", and counts it as Answered.
  • dist/plugin-inventory.json describes ten owners, not Notebook and Skills.
  • The tarball is platform-neutral JavaScript except the bundled darwin-arm64 Core. Addressed by the platforms episode: one Core per platform.
  • No distribution step was taken. At 12 MB, the tarball and SHA256SUMS fit a GitHub Release, installed with npm install --prefix DIR URL and no registry rights. Registry publication with trusted publishing would also need private removed, the @rho-workspace scope, and a choice for Core: per-platform optional packages, as the adapters do, or a separate download.

Rho is developed in the open. Scientific claims need the evidence recorded beside them.