Troubleshooting
Common issues and how to resolve them.Setup & launch
The app won’t start / the runtime isn’t reachable.- Make sure Node ≥ 20 and
npm installcompleted. - Check the port — another process may hold
:7777. SetPORT=8080. - Attach the host to a running runtime with
BOR_RUNTIME_URL=http://127.0.0.1:7777 npm run v2if you started the runtime separately.
- The Node runtime doesn’t hot-reload. Restart the app (or use
npm run devfor--watchon the classic runtime). A running v2 session keeps the old code until you relaunch.
Provider & models
“No AI provider is configured.”- Finish onboarding, or set
defaultProvider+ the matchingprovidersentry inconfig.json.
- Re-check the key in onboarding or
config.json. For OpenAI-compatible, also check the base URL.
- The model id retired. Pick a current model from the provider’s live docs — ids rotate every few months.
locate_screen_element, browser screenshots).
- Your chosen model must be vision-capable. Switch to one that is.
Commands & the browser
A command “hangs” or seems to never finish.- It doesn’t —
execute_commandreturns within 60 seconds. If a command is still running, it keeps running in the background and BOR follows it withwait_until+read_command_tail. For a dev server, usebackground="true".
cd X && npm … does the wrong thing.
- Commands run through a real bash shell now, so
&&,cd, pipes, and redirects all work. If you’re on an old build where they didn’t, restart on the latest code.
browser_action fails to launch.
- Install the bundled Chromium:
npm run browser:install. BOR falls back to system Chrome (thechromechannel) when possible, otherwise it tells you to install.
- Background commands keep running but are killed on chat cancel or runtime exit. Restart it; or check for it with
lsof -i :PORT.
Computer use
Screen capture is black / clicks do nothing.- Grant macOS permissions: Screen Recording (for capture/locate) and Accessibility (for click/type/key) to the Electron/Terminal host. BOR can open the right pane via
/api/system/permissions/open.
Surfaces
A generated app shows raw${…} or looks broken.
- That’s usually a generated-code issue, not the parser — ask BOR to fix it. The file-write parser is hardened so internal tags and CDATA quirks never corrupt a write; if you ever do see BOR’s internal tags (
<tool_results>etc.) in a file, that’s stripped now — restart on the latest code.
- BOR builds a settings screen inside the surface for any required value. If one’s missing, ask BOR to add the settings UI.
MCP
The marketplace is empty.- It serves a cached catalog and falls back to stale-on-error, so this usually means the very first fetch failed. Click refresh, check connectivity, or override the source with
BOR_MCP_MARKETPLACE_URL.
- Needs a configured provider. If the model genuinely found no match, rephrase the need or browse by category.
- Check
.bor/mcp.json(its path is inGET /api/mcp/installed), confirm the server entry, and that it isn’tdisabled. Restart the presence if a hand-edit didn’t take.
Data & resetting
Start completely fresh (new-user state).- Remove
os-data/,.bor/,.bed-of-roses/, the~/ApplicationsBOR.appwrappers, and~/.bed-of-roses/. Everything regenerates on next launch.
- Remove
os-data/presences/<id>/.bor/.
bor delete <presence_id>(removes its whole data dir).
Still stuck?
- Check the audit log at
os-data/.../logs/audit.jsonl— it records every action BOR took. - Read the relevant concept page: The runtime, Chat loop, Storage & data.