Harnesses

OpenBot

A desktop app that hosts CLI agents. Its state lives in Electron userData and every run mode is refused.
IDopenbot14 / 1411 paths · env + project
Harness

OpenBot

  • openbot

Desktop app that hosts CLI agents. One SQLite database and no headless mode.

Invoke
no headless mode
Models
no listing
MCP
sqlite · openbot
Agents file
none stable
Inferred 0 / 11

Access

GetgetHarness("openbot")
CLIharnesses paths openbot --json
Tryopenbot in the explorer

OpenBot is a desktop app by nightly-labs, not a CLI. It hosts Codex, Claude Code, Grok and other CLIs as persistent agents. There's no headless mode, so every run mode is refused. Ask for --version? You'd start the app instead. The registry reports null rather than probe.

Its state lives in Electron's userData directory. On Linux, that's ~/.config/OpenBot/, unless XDG_CONFIG_HOME moves it. The openbot.db database holds agents, conversations, routines and MCP servers. I like having one source of truth here. The servers live in projection_mcp_servers, and the registry can sync them. OpenBot reads the table whenever it starts an agent, so a sync needs no restart.

OpenBot reads your skills from ~/.agents/skills/. That's the folder Codex's skills sync uses, so syncing Codex covers OpenBot. It leaves out skills the hosted CLI already loads. Skills made in the app live in local-skills/ under userData, with an immutable directory for each revision.

Each agent has a workspace under ~/OpenBot/Agents/<agent-id>/. Its rules live in AGENTS.md at the workspace root. Older workspaces keep CLAUDE.md. There's no single user file for agents sync to update. The hosted CLI still reads its own user instructions.

OpenBot sets OPENBOT_AGENT_PROCESS=1 on every CLI it starts. A hosted CLI with its own marker takes precedence. Codex sets none, so a Codex agent detects as openbot. On Linux, an AppImage install can show a hollow dot in harnesses detect. The openbot command is on PATH only with the Nix package.

Capabilities and invocation

  • mcp: yes
  • vision: yes
  • audio: no
  • video: no
  • tools: yes
  • streaming: yes

No non-interactive invocation is recorded, so invoke() rejects before spawning anything and every invocation mode reports false.

Paths

Templates as the registry stores them. ~, ${HOME}, ${TMPDIR} and %VAR% expand in resolve(); entries tagged with a platform are dropped on the others. Open in the explorer to see them expanded for a home directory of your choice.

PathsgetHarness("openbot")11 templates · 4 groups

config

  • ~/.config/OpenBot/userofficiallinux

    Settings sit in openbot-*-v1.json files here. --user-data-dir moves the whole directory.

  • ~/Library/Application Support/OpenBot/userofficialdarwin

    Settings sit in openbot-*-v1.json files here. --user-data-dir moves the whole directory.

  • %APPDATA%/OpenBot/userofficialwin32

    Settings sit in openbot-*-v1.json files here. --user-data-dir moves the whole directory.

sessions

  • ~/.config/OpenBot/openbot.dbdataofficiallinux

    Agents, conversations, routines and MCP servers, all in one SQLite database.

  • ~/Library/Application Support/OpenBot/openbot.dbdataofficialdarwin

    Agents, conversations, routines and MCP servers, all in one SQLite database.

  • %APPDATA%/OpenBot/openbot.dbdataofficialwin32

    Agents, conversations, routines and MCP servers, all in one SQLite database.

instructions

  • ~/OpenBot/Agents/<agent-id>/AGENTS.mduserofficialall

    Each agent's own rules, edited from its settings. An older workspace keeps CLAUDE.md.

skills

  • ~/.agents/skills/userofficialall

    The one folder it reads for your own skills, minus any the provider CLI already loads. Codex's skills sync links it.

  • ~/.config/OpenBot/local-skills/dataofficiallinux

    Skills made inside the app, one immutable directory per revision.

  • ~/Library/Application Support/OpenBot/local-skills/dataofficialdarwin

    Skills made inside the app, one immutable directory per revision.

  • %APPDATA%/OpenBot/local-skills/dataofficialwin32

    Skills made inside the app, one immutable directory per revision.

Empty

commandspromptTemplateshookstempThat is not the same as the feature being missing.

Env overrides

Variables the harness reads to move a root. The path is the default while the variable is unset; resolve() applies a set one to temp.

EnvenvOverrides1 variables
  • XDG_CONFIG_HOME~/.configconfig · sessions · skills · linux

    Electron's appData on Linux. --user-data-dir still wins.

MCP servers

FilemcpConfigs3 files
  • ~/.config/OpenBot/openbot.dbuser · sqlite · openbot · projection_mcp_servers
  • ~/Library/Application Support/OpenBot/openbot.dbuser · sqlite · openbot · projection_mcp_servers
  • %APPDATA%/OpenBot/openbot.dbuser · sqlite · openbot · projection_mcp_servers

Detection

CalldetectHarness()env, then project

envVars

  • OPENBOT_AGENT_PROCESS

projectMarkers

Persistence

  • SQLite - openbot.db is the source of truth: an append-only event log plus projection tables. (official)
  • JSON - Small preference and state files beside it. (official)

No stable user-scope instructions file, so syncAgentsFiles skips this harness.