Guide book · Chapter 3 of 11
Getting the best results from owned bots
Version 1.0 · October 14, 2026
Pick the right tool
Confined. These may review other accounts' code with no extra switch:
- Claude Code: a sandbox, with a read-only checkout and no network.
- Codex: a read-only sandbox. On a Mac, its commands can still read this account's files; the doctor reports what is closed.
- OpenClaw in Docker: only as confined as the owner's container. The repository token stays outside it.
Full rights. The Connector puts no sandbox around Cursor Agent, Cline, Qoder, OpenCode, OpenClaw run directly, or an owner-written template. Each runs with the owner's rights, within its own settings.
- For other accounts' code, even an outside contributor's pull request, use Claude Code or Codex on a personal computer, or OpenClaw in Docker on a server.
- Full-rights bots take such work only with
"allowUnsandboxedNetwork": truein the driver section. Set it only on a spare computer or virtual machine without personal accounts. - Mix tools and models on one Call. One often catches what another misses.
OpenClaw: Docker or direct
On a server, run OpenClaw in Docker; that bot also suits other accounts' code. Run directly, OpenClaw suits the owner's own code on the owner's own computer.
Either way, the whole task arrives as a file, which OpenClaw reads as the message. An OpenClaw build from before that option (--message-file, added in June 2026) still runs directly, with a warning to upgrade: on macOS and Linux it gets the task on the command line, where other programs can read it, and on Windows a long task may be cut.
Docker is set up by hand; the installers run OpenClaw directly.
- Run OpenClaw's gateway in a long-lived container, signed in to a model provider, as OpenClaw's Docker guide shows. It needs Git, sh, common Linux tools, and a writable
/tmpand home folder. - Mount one host folder for the bot, open to the container's user, by default at
/home/node/.openclaw/workspace. Job checkouts go there, beside OpenClaw's AGENTS.md, USER.md and memory files: keep nothing private there. - Run it as a non-root user. Leave out
--privileged, added capabilities, devices, and host PID or user namespaces. Mount no Docker socket, home folder or keys. The Connector does not check this by default. - With the Connector stopped, set the bot's worker.json
"workspace"to that folder. In its driver section, set"runner"to"docker","container"to the namedocker psshows, and"containerWorkspace"to the mount path. - The doctor cannot see inside the container. Check that
docker exec <container> openclaw agent --helplists--message-file, rundocker exec <container> openclaw health, then one small Call.
When OpenClaw runs directly, install its gateway as a service: openclaw gateway install.
Tool by tool
| Tool | Sign in (not a shell variable) | Minimum | Note |
|---|---|---|---|
| Claude Code (macOS) | claude, then sign in | 2.1.257 | |
| Codex | codex login | None; keep current | |
| Cursor Agent | cursor-agent login | None | |
| Cline | cline auth | None | |
| Qoder | qodercli login | None | May edit checkout files without asking; refuses other permission prompts without a Qoder rule |
| OpenClaw | openclaw onboard | None | |
| OpenCode | opencode auth login | 1.18.20 |
- Each bot's settings are in
workers/<tool>/worker.jsonunder~/.deskboton macOS or%LOCALAPPDATA%\Deskboton Windows; Claude Code's folder isclaude. Edit one only with no Call running and the Connector stopped (on macOS,launchctl bootout gui/$(id -u)/dev.deskfleet.connector.<id>; restart it with~/.deskbot/start.command). - Run the doctor with Python 3.11 or newer, from
~/.deskbot/connectoron macOS or%LOCALAPPDATA%\Deskboton Windows:python3 deskbot_worker.py --config <that worker.json> doctor(pythonon Windows). It checks sign-in only for Claude Code, Codex and Cursor Agent; finish with one small Call.
Thinking level
A bot thinks at the level its owner saved for its tool on that computer, for the model it runs, read again for every job. Deskfleet doesn't set it.
- Claude Code follows the level saved for each model with
/effort, a saved cap (maxEffortLevel), and thinking turned off. It doesn't follow the general level that/effortsaved before Claude Code 2.1.251: save a level for the model with/effort. It doesn't follow the default model either: the bot runs the model Claude Code picks for a new session, or the one its driver section names. An organization's override of a level applies to the bot as it does to the owner. Claude Code never savesmax, so a bot thinks at max only when the Connector's service hasCLAUDE_CODE_EFFORT_LEVEL. - Codex follows
model_reasoning_effortin~/.codex/config.toml, and themodelthere unless the driver section sets"model". Cline follows the reasoning level in its provider settings. - OpenCode follows the level its terminal app saved for each model, when it can tell which model the run uses (the bot's own
"model", or the one OpenCode reports) and that model offers the level. A level picked in OpenCode's web or desktop app can't be followed. - OpenClaw uses the level saved for it, unless the driver section sets
"thinking". - Cursor Agent and Qoder get no level from Deskfleet. Cursor keeps its level in its saved model settings, and whether a headless run follows them hasn't been checked; Qoder saves no level.
Models and private code
- To pin a model, set
"model"in the driver section to provider/model, such asanthropic/claude-opus-5: one slash, and only letters, digits, dots, underscores, colons and dashes. Anything else, such asopus[1m], makes the service refuse the bot's heartbeat. - A template names its model in its own command.
- Some free models may train on what a bot sends them: OpenCode Zen says so of Big Pickle during its free period. Check the terms, keep such a bot out of Calls on private repositories, and leave "Review private repositories" off in its Network profile.
Behind a proxy
- On macOS, run the installer and every upgrade from a Terminal where the proxy is set and every tool works. The service keeps that Terminal's PATH, certificate settings and plain proxy addresses, and setup names any it leaves out.
- Cline 3.0.68 ignored
HTTP_PROXYandHTTPS_PROXYin a macOS test, though Cline's docs say it uses them. If Cline cannot reach its provider, route the whole system, for example with a VPN's TUN or "enhanced" mode.