1.1.2RoachNet for macOS
On this page
- Security
- A folder name could run commands through the Dev pane's shell
- A pack archive could leave links outside the pack's folder and replace its checked files
- An imported theme could copy files from or to outside the themes folder
- Other security fixes
- Privacy: a copied theme carried your Mac account's name
- Fixes
- Opening the installer
- Upgrade, roll back or remove
- Known issues
- Support, license and attribution
- How this release was built
1.1.3 fixes security problems that 1.1.2 has, one of them rated Medium in RoachNet Cluster, and a privacy problem. Use the current release; it installs over 1.1.2 and keeps your data.
RoachNet 1.1.2 is a security and fix release for 1.1.1. It fixes three security problems rated High: a folder name could run commands through the Dev pane's shell, a pack archive could leave links outside the pack's folder and replace its checked files, and an imported theme could copy files from or to outside the themes folder. It also carries the review fixes for 1.1's new features, a privacy fix for copied themes, and fixes for RoachClaw's model states, the guided tour's video, Vault's file cards and offline use.
Security
A folder name could run commands through the Dev pane's shell
- Severity: High. Affected: RoachNet 1.0.4 through 1.1.1 for macOS. Not affected: 1.0.3 and earlier, and the iOS companion.
- What happened: when you open a file, the Dev pane moves the shell it keeps open to that file's folder by typing
cd -- '<folder>'into it. The quoting matched whole characters, so it passed over a'that a combining mark follows, and the shell still read that'as the end of the quote. A folder whose name put a combining mark right after a'could end the quote early, and what followed in the name ran as a command as soon as a file in that folder was opened. - What it took: opening, in the Dev pane, a file in a folder with such a name while the pane's shell was open. A cloned repository or a downloaded archive can hold any folder name.
- What changed: the quoting works a Unicode scalar at a time, so no quote is passed over, and a folder whose name holds a control character or a line separator isn't typed into the shell at all: the shell stays where it is, and the pane says why. The Org pane's Terminal handoff and the RoachTail name's administrator prompt use the same quoting.
A pack archive could leave links outside the pack's folder and replace its checked files
- Severity: High. Affected: RoachNet 1.1.0 and 1.1.1 for macOS, the releases with feature packs.
- What happened: a pack's archive was unpacked with
tarordittostraight into the pack's folder before anything checked it, and the check that ran afterwards couldn't fire. Links in the archive weren't checked at all, so an archive could leave symbolic links that point outside the pack's folder, and it could replace the pack's other files after their checksums had been checked. - What it took: installing a crafted pack, from a manifest address, a manifest body or a local folder. The archive's SHA-256 check doesn't help here, since the manifest that names the archive names its checksum too.
- What changed: a pack archive is read before anything is unpacked, and refused when an entry is absolute, climbs out with
.., is a link or special file, or unpacks to the same place as another entry. ZIP archives are unpacked by RoachNet's own reader, which writes each file to exactly the size the archive declares and checks its CRC-32. A pack is measured before it's unpacked and refused past 64 GB, unpacks into a scratch folder of its own, and is merged into the pack's folder without replacing a file that's already there. RoachSpeech pack archives get the same checks, and a pack the catalog lists must match the catalog's SHA-256.
An imported theme could copy files from or to outside the themes folder
- Severity: High. Affected: RoachNet 1.1.0 and 1.1.1 for macOS, the releases with the theme engine.
- What happened: an imported theme names its background picture, and that name was used as given both for the file to copy and for where to copy it. A name like
../../x.plistcould copy a file from outside the theme into RoachNet's themes folder, or write the copy outside the themes folder. - What it took: importing a crafted theme file.
- What changed: the picture's name must stay inside the theme's own folder for both paths, and the file must be a picture. An import that fails either check is refused before anything is created.
Other security fixes
Most were found in the review of 1.1's new features. They're rated Medium or Low, and they're in 1.1.0 and 1.1.1 unless a line says otherwise.
- Model files: a crafted GGUF file is refused instead of stopping the runtime. Counts and sizes are converted exactly, lengths are checked against the rest of the file, and the metadata's arrays are capped.
- RoachTrace redacts compound credential keys such as
access_token,client_secret,x-api-keyandprivate_keybefore a trace is saved or exported. - RoachClaw Org: scoring a trace needs write access, two approvals sent at once decide only the review stage they were checked against, a one-time join claim works once, and out-of-range numbers are refused instead of stopping the runtime.
- Cluster: a paired Mac can't name a shard path outside the shard folder, and the positions, offsets and counts it sends are range-checked.
- Requests: out-of-range numbers in a model request, such as
1e400fornum_ctx, get a reply instead of stopping the runtime. - Downloads, collections and catalogs hold their size limits while the bytes arrive (since 1.0.6).
- Pack manifests listing more than 4,096 files or a file larger than 1 TB are refused.
- Structured outputs: a JSON schema too wide to follow is refused with a 400.
- RoachArcade's player page escapes its values a Unicode scalar at a time (since 1.0.5); the value that could slip through came from your own Settings.
- Random secrets for Org run tokens, invites and API keys are as long as the code asks for. Each already had about 122 random bits, so this wasn't exploitable.
Privacy: a copied theme carried your Mac account's name
- Duplicating a theme set its author to the Mac account's full name, and exporting it put that name in the file you'd share (1.1.0 and 1.1.1). A copy's author is now "You"; set your own in the theme editor if you want the credit.
- Themes you copied before keep the name they have. Open them in the theme editor to change it before you share them.
Fixes
- Guided tour: the video plays. The installed app looked for it in the wrong place inside its resources and said "The video file isn't in this install" (1.1.0 had the same problem and showed its written guide). The video window opens at the tour's size, centred.
- RoachClaw's model states: RoachClaw no longer says Ready, or shows the default model as active on this Mac, before the model is downloaded. Home, the RoachClaw pane, Dev and the sidebar say Ready, Downloading, Not downloaded yet or Not ready, and Settings › Models calls the default model Default.
- RoachClaw with no model: when the model server can't answer, RoachClaw says so instead of showing the error as its own reply, and Dev's inline assist never offers it as code to insert. A missing model gets a line that says where to download it.
- Vault: a file card's thumbnail stays inside its slot.
- Offline: with RoachNet's catalog out of reach, a failed refresh waits five minutes, doubling up to the usual interval, instead of trying again at every status check. The runtime log moves to
.1before it passes 8 MB. - RoachNet beside Ollama: RoachInference never listens on Ollama's port,
11434, and RoachNet never starts or stops an Ollama. When another program holds36434, RoachInference takes a free loopback port instead. WithROACHNET_INFERENCE_ENGINE=ollama, RoachNet uses the Ollama you already run. - Model downloads from Settings › Models and Setup land where the models are served.
- Model memory: a model that fits the memory budget but not the room left beside busy models gets a 503 instead of being loaded past the budget.
/v1/completionstakes one text prompt; a batch gets a 400. - Cluster: the status probe tries once more when the first connection times out, a request is planned again when a Mac in a split model drops before any reply is sent, and Find Macs Nearby matches added Macs by node ID.
- Packs: a pack installs only when the packs it depends on are installed, and an update no longer leaves a pack on beside a dependency that's off.
- RoachInference: Llama 3.1-style RoPE scaling is applied from a model's metadata, and JSON Schema
anyOfandoneOfkeep every branch that still fits. - RoachTrace, the knowledge catalog and Maps: overlapping trace exports keep every batch, the Math & Problem Solving tier has a book again, and the map no longer shows tiles from a previous set of map archives.
Opening the installer
This build is ad-hoc signed and not Apple-notarized, like 1.1.1. On first launch macOS says RoachNet Setup can't be verified: open System Settings › Privacy & Security and choose Open Anyway for RoachNet Setup. Verify the download first:
shasum -a 256 -c RoachNet-Setup-macOS.dmg.sha256Homebrew: brew tap --force RoachWares/roachnet && brew install --cask roachnet. Already installed with Homebrew: brew upgrade --cask roachnet.
Upgrade, roll back or remove
- Before you update: keep a current backup of
~/RoachNet/storage(Time Machine works). Until you update, don't install packs or import themes from people you don't trust, and don't open files in the Dev pane from repositories or archives you don't trust while its shell is open. - Upgrade: quit RoachNet and run Setup over the existing install.
~/RoachNet/storage(Vault, settings, models, Org) is kept. - Roll back: 1.1.1 and 1.1.2 use the same storage format, but going back brings back every problem fixed here. 1.1.1's installer is withdrawn.
- After you update: look at the packs you installed and the themes you imported, and remove any you don't recognise.
- Remove: quit RoachNet, then remove
~/RoachNet/appand~/RoachNet/runtime. Keep~/RoachNet/storageto keep your data.
Known issues
| Limitation | Impact | Workaround |
|---|---|---|
| Ad-hoc signed, no Developer ID or notarization. | Gatekeeper blocks the first launch of RoachNet Setup. | Open Anyway in Privacy & Security, once. |
| RoachNet Cluster was tested with two RoachNet runtimes on one Mac, not yet across two physical Macs. | Splitting across real Macs may still turn up network issues. | Report them on GitHub; a model that fits one Mac never needs the cluster. |
| On qwen3 8B, RoachInference evaluates prompts at about 68% of Ollama's speed and decodes at about 85%. Speculative decoding isn't in 1.1. | Long prompts on large models take longer than in Ollama. | ROACHNET_INFERENCE_ENGINE=ollama uses an Ollama you run yourself. |
| RoachInference reads Llama, Mistral, Qwen2 and Qwen3 models. Other architectures (Gemma, Phi or qwen3.5, for example) don't load. | The model server says the architecture isn't supported yet. | Use a supported model, or an Ollama you run yourself. |
| Gemini CLI, OpenCode and Cursor CLI agents were built to each tool's documented interface; only Claude Code and Codex were run live. | A CLI update could change what those three report. | Tell us. |
| Plan models need the official Claude Code or Codex CLI, installed and signed in. | claude: and codex: models are listed only when the CLI is there. |
Install and sign in to the CLI, then turn plans on in Settings › RoachClaw › Subscriptions. |
| Scripts that call the local API directly (curl, shortcuts) need a token when RoachNet.app started the runtime. | They get 401. | Make a RoachClaw API token in Settings › RoachClaw and send it as Authorization: Bearer …. |
| The pack, theme and download checks cover what an archive, a theme file or a download says. | They don't defend against another program running as you that changes files in the storage folder. | Keep a backup of ~/RoachNet/storage. |
| Network features (catalogs, maps, archives, updates, model downloads, remote providers) need a connection. | They can't refresh or download offline. | Download content and local models ahead of time. |
| Windows and Linux installers are not shipped. | — | Use an Apple Silicon Mac. |
Support, license and attribution
- Help: Get help
- Releases: every RoachNet release on GitHub
- License: LICENSE · Typefaces: SIL Open Font License texts
How this release was built
These notes match the tagged source and the test results recorded with it. RoachWares built and tested the DMG by hand on its release Mac rather than in hosted CI, because a hosted build needs Apple Developer ID and notarization credentials, and RoachNet doesn't have those yet.