1.1.4RoachNet for macOS
On this page
- Security
- Dev could read and make files outside the projects folder through a link
- A device with many addresses could keep paired Macs out of RoachNet Cluster
- A request meant to stay off your network could reach it through a changing DNS answer
- An OpenCode agent could do more than its access level allowed
- Privacy
- Fixes
- Org: five limits from the Org guide
- Opening the installer
- Upgrade, roll back or remove
- Known issues
- Support, license and attribution
- How this release was built
RoachNet 1.1.4 is a maintenance release for 1.1.3: bug fixes, and five of the limits 1.1.3's Org guide listed. It fixes ways 1.1.3 could lose your work: a RoachArcade library that couldn't be read was saved over, games that share a folder became one game, and Dev dropped unsaved edits and replaced links with plain files. It keeps RoachClaw's local context and Dev's open file away from cloud models unless you allow it, keeps RoachBrain's memories of your local models' replies away from them, asks before RoachArcade's player loads anything from the internet, keeps Dev inside your projects folder, holds OpenCode agents to the access level you give them, closes one of the known limitations 1.1.3's notes listed and narrows another.
Security
Dev could read and make files outside the projects folder through a link
- Severity: Low. It takes a link inside your projects folder, such as one that came with a cloned project, and you opening or making a file through it.
- Affected: RoachNet 1.1.3 and earlier.
- What happened:
- Opening a link in Dev's Explorer read the file it led to, wherever that was, and showed it in the Editor. A file open in the Editor goes to Dev's assist when you ask it something, so its start could reach the model that answers.
- New file and New folder followed links in the path you typed, and made the file or folder wherever they led.
- Save didn't write through an opened link: it replaced the link with a plain file holding your edits, and the file it led to stayed as it was.
- What changed:
- Dev opens a link only when what it leads to is inside the projects folder. Anything else says "path leads outside the projects folder, so Dev doesn't open it."
- Save writes to the file the link leads to, so the link stays a link. It checks again as it saves, so a file that became a link to somewhere else after it opened isn't written through; your edits stay in the Editor.
- New file, New folder and New project make nothing outside the projects folder, links included.
A device with many addresses could keep paired Macs out of RoachNet Cluster
- Severity: Low: availability only, from your local network, with Cluster turned on. Cluster is off by default.
- Affected: RoachNet 1.1.3, where it was listed under known issues, and earlier.
- What happened: 1.1.3 limited how many Cluster handshakes may run at once, per address and in all. A device with many addresses could hold every place, so a Mac you paired couldn't connect while it did. It couldn't pair or read anything.
- What changed:
- 8 of the 32 handshake places are kept for Macs that have connected to this one since RoachNet started (up to 64 are remembered, the oldest dropped first). Other devices share the remaining 24, still at most 4 for one address.
- The listener checks the limits before it starts any work for a connection, and closes a refused one at once.
- A connection has 2 seconds to send its first message. One that says nothing is closed then.
A request meant to stay off your network could reach it through a changing DNS answer
- Severity: Low.
- Affected: RoachNet 1.1.3, where it was listed under known issues, and earlier.
- What happened: two kinds of request must never reach this Mac or your local network: a download a paired device asks for, and a request to an Org agent at an https address (the only kind an admin who isn't the owner can give). RoachNet checked the address's name, and a redirect's, before such a request, and the name was looked up again when the request was sent, so a name whose answer changed in between could still send it here over plain http.
- What changed: a paired device's downloads go over https only, and a request to an Org agent at an https address never follows a redirect to http. An http address is refused before RoachNet connects, with a message that says why. To answer over https, a service on your network would need a certificate for the name.
An OpenCode agent could do more than its access level allowed
- Severity: Low. It takes an OpenCode agent you hired on Read-only or Standard, and something that steers it, such as an issue or comment written for that.
- Affected: RoachNet 1.1.3 and earlier.
- What happened:
- RoachNet gave OpenCode no access level, so an OpenCode agent on Read-only or Standard ran with OpenCode's own defaults: it could edit any file and run any command, as you.
- OpenCode 2 ran the agent's commands in its background service, the one your own OpenCode sessions use, so a command could keep running after its run ended.
- What changed:
- Each run starts OpenCode with a server of its own, which ends with the run, so what the agent starts ends with it too.
- Read-only and Standard reach OpenCode as its own permission rules, the way Claude Code has them. Read-only reads, searches and talks to the Org; Standard also edits files in its working folder and runs
git status,git diff,git logandls. Other commands are refused, and so is any folder outside the working one except the agent's own. A folder's own OpenCode settings can't widen them. - Full is as before, except that OpenCode no longer stops to ask.
- Regression tests cover each level's rules, and that they reach OpenCode from a run and from Test on Hire agent. Checked against OpenCode 2.2.5.
Privacy
- RoachClaw's local context went to cloud models. RoachClaw's context lanes (Vault file names, project names, captured site titles, model and route names) are on until you turn them off, and what they gathered went to whichever model answered, a cloud model included. Now only models on your own machines get it. A new switch, Cloud models too in Settings › RoachClaw › Context, is off by default; when you turn it on, cloud models get the names and counts the lanes allow, never a file's contents. (In 1.1.3 and earlier.)
- Dev's assist sent the open file to cloud models. Dev's assist sent the first 8,000 characters of the open file to whichever model answered, a cloud model included, without asking: when you chose a cloud model, while RoachClaw was still starting, and when a cloud model took over from a local one that failed. Now a cloud model gets the open file only when you turn on Dev's open file too in Settings › RoachClaw › Context, which is off by default. Without it, Dev's assist asks a cloud model without the file and says so, and inline assist, which reads the file, waits for a model on your Mac. (In 1.1.3 and earlier.)
- RoachBrain's memories reached cloud models. Each ask in Dev kept a second memory that held the open file's text, and the memories that matched a prompt went with it to whichever model answered. Dev now keeps one memory of an ask, your request and the reply. A cloud model no longer gets a memory of a conversation with a model on your Mac, or its page in RoachBrain's wiki. A memory also comes in only when its words match what you ask: the tags every saved conversation carries no longer bring the latest ones into every prompt. (In 1.1.3 and earlier.)
- The Vault's excerpts didn't come from the Vault. The two short excerpts RoachClaw adds from Vault files took each file name as a path of its own instead of reading it inside the Vault. They now read only files inside the Vault, never through
..or a link that leads out of it, only the start of a large file, and only for local models. (In 1.1.3 and earlier.) - RoachBrain's files were readable by other accounts on the Mac. RoachBrain wrote its memories and wiki with the usual permissions, so another account on the same Mac could read them. They are now yours alone (files 0600, folders 0700), and an older RoachBrain is tightened the first time 1.1.4 reads it. (In 1.1.3 and earlier.)
- RoachArcade's player loaded EmulatorJS from the internet without asking. By default, playing a ROM in RoachArcade's player loaded EmulatorJS and its cores from
cdn.emulatorjs.org, so that site learned when you played and its code ran in the player. Now the player asks first, with the address shown, and says that others make EmulatorJS and its cores under their own licenses, that the site sees your computer's address, and that the game file stays on this Mac. A yes is kept for that address only. A local EmulatorJS folder, chosen from the same question or set as EmulatorJS data in Settings › Arcade, asks nothing and loads nothing from the internet. (In 1.1.3 and earlier.)
Fixes
- RoachArcade could save an empty library over yours. When
library.jsoncouldn't be read, RoachArcade showed a problem line and kept an empty library, and the next add, import, favorite or settings change saved it over the file: every game, mod profile, collection, cheat and setting was lost. RoachArcade now never saves over a library it couldn't load, and says "RoachArcade won't save over a game library it couldn't load. Move library.json aside to start a new one." The problem line also clears once a change saves. - Games that share a folder became one game. RoachArcade took two games to be the same when they shared their install folder, so Add a Mac game with a second app from Applications replaced the first app's game, Find Mac games kept only the last app it found, and two Windows programs in one folder became one game. The game that was replaced lost its notes, tags, artwork and favorite. A game is now the same as one in your library only by its ROM file or its program, and a game you add again keeps what you gave it.
- Import ES-DE marked every game as Missing file. ES-DE keeps its game lists in its own
gamelistsfolder, apart from the games (in~/ROMsunless you changed it), and RoachArcade looked for the games beside the lists. It now follows ES-DE's own layout and its ROM and media folder settings, and takes the covers ES-DE downloaded. Lists kept beside their games work as before. - RoachArcade, smaller fixes: VoiceOver reads each cheat's switch as a checkbox named for its cheat, with its code as the hint, and Remove and Add say what they act on. Add keeps what you typed when it refuses a cheat. Add ROMs and Import ES-DE read the folder without holding up the window, and say "Looking for games in folder…" while they do.
- Dev dropped unsaved edits. Opening a file again from the Explorer while its tab had unsaved edits replaced them with the file on disk. Its edits now stay. Closing a tab with unsaved edits asks "Close without saving?", with Cancel as the default.
- Dev's Import could copy a folder into itself. Picking the projects folder, or a folder that holds it, copied it into itself until the copy failed or the disk filled. Import now refuses such a folder and says why.
- Dev, smaller fixes: each piece of the shell's output starts on its own line; "Moving shell to …" names the folder the shell goes to, and a folder whose path only starts like the projects folder's is named as outside it; the status line hides while Dev only says it's ready; and New file suggests a folder, not a path inside the open file.
- Files written on Windows in Dev. For a file with Windows line ends (CR LF), Dev counted twice its lines; inserting RoachClaw's answer added a blank line and Mac line ends; and accepting a completion for an inline prompt rewrote every line end in the file. Dev now counts a Windows line end once, and what its AI adds takes the file's own line ends and changes only the prompt's line.
- Save dropped a file's byte-order mark. Some Windows tools start UTF-8 files with a byte-order mark. Dev dropped it when it saved, so saving changed the file's first bytes even when nothing else changed. A file that starts with one keeps it, and a file without one gets none.
- Org budgets: a company's or an agent's monthly budget set on the budgets board didn't reach the company's or the agent's own budget, so the desk's "This month's budget" didn't show it. It does now. Resolving or dismissing a hard stop now also closes its "Budget override" request, which stayed open before. A budget whose amount you change sets a new limit for the month, so it can warn and stop again at the new amount; resolving a stop without changing the amount still lets the month run on.
- Gemini CLI and Cursor CLI agents couldn't run. Their current versions (Gemini CLI 0.66, Cursor CLI 2026.10.22) refuse a run without a prompt in a folder they don't trust, so every run of those agents failed, the Test on Hire agent included. RoachNet now trusts the agent's own folder for its runs, and that folder's MCP servers don't start. Cursor CLI remembers that it trusts the folder.
Org: five limits from the Org guide
1.1.3's Org guide listed what the Org couldn't do yet. 1.1.4 takes on five of them. The webhook door, agents' MCP tools and plan models' tools are off until you turn them on.
- What a run starts ends with the run. A CLI or program agent's run could leave programs it started still running after it ended. Now everything the run's program starts ends with the run, however the run ends: finished, cancelled, timed out or failed. A program that detaches itself on purpose, such as a background service or a container, isn't the run's to end.
- Your skills and MCP tools, for Claude Code and Codex agents and plan models. Use your Claude Code setup (or Use your Codex setup) is on unless you turn it off when you hire the agent. It loads your settings, hooks, plugins and skills, and the agent now uses your skills at every access level. Off runs a clean agent, which is quicker and uses fewer tokens. Each skill has a switch on the agent, and a skill you switch off is refused to that agent. MCP tools have a switch of their own, Use your MCP tools, which is off by default. Off, no MCP server from your setup starts, and a Codex agent also leaves out your plugins and apps, since they can start one. In 1.1.3, an agent with your setup on started your MCP servers without being able to use them. On, the agent starts them, and a Claude Code agent can call their tools on Standard and Full. In RoachClaw chat, a new switch, Let plan models use my tools in RoachClaw chat in Settings › RoachClaw › Subscriptions, lets the models you use through a subscription plan use your skills and MCP servers too. It's off by default.
- Goals on the Org desk. The Goals board adds and edits a company's goals: their level, owner, the goal each sits under, status and description. A new goal starts as planned. A goal can't go under one of its own sub-goals.
- The webhook door. A routine's webhook trigger can take calls from outside your Mac through a door of its own: a second listener on this Mac only (port 38117 unless you choose another), shut until you turn on Open the door on the Routines board. It takes signed triggers only, at most 1 MB a call, 30 calls a minute for one trigger and 120 in all, and shows you every call. RoachNet doesn't put the door on the internet: you point a tunnel of your choosing at its port. RoachNet shows a webhook's secret once; removing the webhook stops its address and secret working.
- A run keeps its CLI's version, and output RoachNet doesn't recognize shows. Each run records the version of the CLI that ran it, read from the CLI's own output or its install, without starting it again. When a CLI sends output its adapter doesn't recognize, after a CLI update for example, the agent says so: its replies still arrive, but usage, cost or tool calls may be missing until RoachNet is updated for that version.
Opening the installer
This build is ad-hoc signed and not Apple-notarized, like 1.1.3. 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). - Upgrade: quit RoachNet and run Setup over the existing install.
~/RoachNet/storage(Vault, settings, models, Org) is kept. - Roll back: not advised. Going back to 1.1.3 brings back every problem fixed here, the ones that lose work included. If you go back anyway, 1.1.3 reads what 1.1.4 saved; RoachArcade forgets a yes you gave the player's question the next time 1.1.3 saves your library.
- After you update:
- A cloud model no longer gets RoachClaw's local context. To give cloud models the names and counts, turn on Cloud models too in Settings › RoachClaw › Context.
- A cloud model no longer gets the file open in Dev. To let cloud models have it, turn on Dev's open file too in Settings › RoachClaw › Context.
- The first time you play a ROM in RoachArcade's player after updating, it asks before it loads EmulatorJS from the internet, unless you've set a local EmulatorJS folder.
- Dev no longer opens a link that leads outside the projects folder. Copy the file into the projects folder to work on it there.
- A paired device's download from an http address is refused, and so is an Org agent's redirect from https to http. Use https.
- If RoachArcade says it couldn't load your library, move
library.jsonaside (it's in~/RoachNet/storage/RoachArcade) to start a new one, or restore it from a backup.
- Remove: quit RoachNet, then remove
~/RoachNet/appand~/RoachNet/runtime. Keep~/RoachNet/storageto keep your data. With Homebrew,brew uninstall --cask roachnetremoves the Setup app;brew uninstall --zap --cask roachnetalso moves all of~/RoachNet, your Vault included, to the Trash.
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. |
| A program that runs as you, an Org agent on Full access included, can still read and change your files, RoachNet's among them. | RoachNet can't make such a program less trusted than you. | Run only programs you trust. |
| 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. |
| Until a paired Mac has connected since RoachNet started, it waits with every other device for a Cluster handshake place. | On a network you share, a device with many addresses can still keep it out. It can't pair or read anything. | Keep Cluster off on networks you share with people you don't trust. |
| 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. | Tell us; a model that fits one Mac never needs the cluster. |
| RoachInference reads text only, and reads Llama, Mistral, Qwen2 and Qwen3 models. | It refuses pictures, audio, video and files, and other architectures (Gemma, Phi or qwen3.5, for example) don't load. | Use a supported model, or an Ollama you run yourself. |
| 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. |
| Gemini CLI and Cursor CLI were run live only briefly. | A CLI update could still change what those two report; the agent says when one sends output RoachNet doesn't recognize. | Tell us. |
| Scripts that call the local API directly (curl, shortcuts) need a token when RoachNet.app started the runtime, and the launch token isn't in any file. | They get 401. | Make a RoachClaw API token in Settings › RoachClaw and send it as Authorization: Bearer …. |
| 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. Please report a security problem by email first, not anywhere public.
- 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. The apps in the DMG were built from exactly the source at tag v1.1.4, and RoachWares tested the build by hand before publishing it, rather than in hosted CI, because a hosted build needs Apple Developer ID and notarization credentials, and RoachNet doesn't have those yet.