Files and Paths¶
This page lists the key files Openbase CLI creates or consumes. App-side
storage is much smaller: the desktop app keeps Electron
state under ~/Library/Application Support/@openbase/coder-desktop, and the
iOS app keeps only its auth token
(Keychain) and backend host list (UserDefaults) on the phone.
Base Directories¶
- Openbase data root:
~/.openbase - Standalone runtime packages:
~/.openbase/packages/standalone/ - Development workspace checkout: wherever you cloned
openbase-coder-workspace(recorded in~/.openbase/installation.json) - Launchd plists (macOS):
~/Library/LaunchAgents - systemd user units (Linux):
~/.config/systemd/user
Desktop App Storage¶
The Electron desktop app keeps its own persistent state (window data, renderer storage) at:
- macOS:
~/Library/Application Support/@openbase/coder-desktop
This survives app reinstalls; machine-onboarding progress lives in
~/.openbase/desktop-onboarding.json instead so wiping the Openbase home
resets onboarding. Remove both when fully uninstalling (see
Uninstall).
Setup-Time Artifacts¶
| Path | Created By | Purpose |
|---|---|---|
~/.openbase/installation.json |
openbase-coder setup |
Stores workspace_path + env_file |
~/.openbase/.env |
openbase-coder setup |
Shared env config and generated secrets, including Openbase's per-session Super Agents posture (SUPER_AGENTS_CODEX_APPROVAL_POLICY=never, SUPER_AGENTS_CODEX_SANDBOX_POLICY=danger-full-access, SUPER_AGENTS_BASE_INSTRUCTIONS_PATH) |
~/.codex/auth.json |
codex login |
Your Codex login; used directly by Openbase Codex sessions and services |
~/.codex/AGENTS.md |
User | Your own Codex instructions; setup leaves this file unchanged |
~/.claude/CLAUDE.md |
User | Your own Claude instructions; setup leaves this file or symlink unchanged |
~/.openbase/instructions/AGENTS.md |
openbase-coder setup, settings API |
Generated Openbase base instructions from instructions/AGENTS.md; delivered per session by super-agents (Codex developer instructions / Claude system prompt), never written into the shared homes. Editable via the console "Openbase base instructions" target |
~/.codex/config.toml |
User | Normal Codex defaults; setup only removes identifiable legacy Openbase MCP and hook entries, with a backup |
~/.codex/openbase.config.toml |
Setup, user | Openbase Codex profile: model, reasoning, permissions, MCP, and session-ID hook; loaded per thread and usable with codex -p openbase |
~/.codex/openbase-cloud.config.toml |
Setup, user | Thread-scoped internal Cloud Codex profile and provider routing |
~/.claude.json |
Claude Code | Shared login and session state; setup migrates only identifiable legacy Openbase MCP entries |
~/.claude/settings.json |
User | Normal Claude settings; setup migrates only the legacy Openbase session-ID hook |
~/.openbase/profiles/claude/settings.json |
Setup, user | Openbase Claude session settings and hooks, supplied through --settings |
~/.openbase/profiles/claude/mcp.json |
Setup | Openbase Claude MCP configuration, supplied per session |
~/.openbase/instructions/VOICE_INSTRUCTIONS.md |
openbase-coder setup |
Generated default direct voice-session instructions |
~/.openbase/instructions/DISPATCHER_INSTRUCTIONS.md |
openbase-coder setup |
Generated default dispatcher-only instructions |
~/.openbase/instructions/SUPER_AGENT_INSTRUCTIONS.md |
openbase-coder setup |
Generated default Super Agent thread instructions |
~/.openbase/sync/ |
Openbase Sync (sync-daemon) |
Daemon configuration (config.toml: role, peer, roots, placement), state and control socket; never synced |
~/.openbase/trash/ |
sync migrate-from-syncthing |
Dated folders holding state moved aside instead of deleted (for example the previous sync's state) |
~/.openbase/skill-sync.json |
Skills settings | Versioned device skill-sharing preference and the source-folder shares it owns; never synced |
~/.openbase/dispatcher-config.json |
openbase-coder setup, openbase-coder defaults, settings API |
Dispatcher runtime settings, including default reasoning and backend-specific model defaults |
~/.openbase/hooks/inject-session-id.sh |
openbase-coder setup |
Bundled SessionStart hook script, registered in the Openbase profiles; supplies session attribution for commits and agent-aware commands |
~/.openbase/packages/standalone/previous |
openbase-coder self-update |
Symlink to the prior release, kept for rollback |
~/.openbase/update-check.json |
openbase-coder self-update / update API |
Cached result of the last update check (no-network status reads) |
~/.openbase/logs/self-update.log |
POST /api/update/apply/ |
Output of UI-triggered detached self-updates |
~/.codex/skills/<skill>/ |
openbase-coder setup, skills auto-link |
Symlink to a workspace-owned skill source under skills/skills/<skill>/, or (with auto-link enabled) to a personal skill under ~/.agents/skills/<skill>/ |
~/.claude/skills/<skill>/ |
openbase-coder setup, skills auto-link |
Symlink to a workspace-owned skill source under skills/skills/<skill>/, or (with auto-link enabled) to a personal skill under ~/.agents/skills/<skill>/ |
~/.openbase/claude-app-index-ledger.json |
sync-workers (Claude app index sync, macOS) |
Ledger of Openbase Claude sessions injected into the Claude desktop app's private session index so they appear in the app (best-effort) |
<workspace>/cli/.venv/ |
openbase-coder setup (development mode) |
CLI and bundled LiveKit worker environment |
~/.openbase/bin/codex |
openbase-coder setup |
Codex CLI installed on demand from GitHub release binaries |
Global Git ignore (core.excludesFile, or ~/.config/git/ignore) |
openbase-coder setup |
Setup appends .signals/ if missing so agent-to-agent signal messages are never committed; a read-only file only produces a warning |
~/.local/bin/openbase-coder |
openbase-coder setup |
User CLI shim; points at the standalone package launcher or the workspace CLI venv (never overwrites a uv tool install-managed script) |
Generated instruction files are rendered from the workspace or bundled
instructions/ directory, record their source template path, and interpolate
template variables such as ${dangerous_confirmation_phrase}. Setup rewrites
~/.openbase/instructions/AGENTS.md (the Openbase base instructions);
shared files under ~/.openbase/instructions are updated when they are already
managed/generated and left alone if they appear to be unrelated custom files.
The dispatcher config is created when missing with default dispatcher reasoning
effort low and default Super Agents reasoning effort high; setup does not
overwrite an existing dispatcher config.
Workspace skills are symlink-installed, not copied, so edits to source skills
are visible to agents immediately. In the console and skills API, skill scopes
are home (personal skills under ~/.agents/skills), codex
(~/.codex/skills), and claude (~/.claude/skills).
Settings → Agents → Skills controls backend symlinking and device skill sharing independently. Backend symlinking adds missing links across ~/.agents/skills, ~/.codex/skills, and ~/.claude/skills; it never overwrites existing skills. Turning it off leaves existing links intact. The routines service scans for new links roughly every five minutes. Device skill sharing adds the personal skill folder and linked source folders as Openbase Sync roots. Turning it off keeps all files and unrelated roots.
Openbase never keeps a separate agent credential: Codex sessions read
~/.codex/auth.json and Claude Code sessions use your own Claude Code login.
The Super Agents MCP entries use the workspace venv MCP executable when
available; otherwise setup records the resolved absolute uv path for the
current machine. Openbase's permission posture is not written into
~/.codex/config.toml or ~/.claude/settings.json; super-agents passes it
per session via profiles and role overrides. The shared Codex app-server has no Openbase model or provider launch overrides.
Project Artifact Directories¶
Agents create these inside a project, workspace, or worktree root. Neither is product state; they are conventions the CLI, console, and loops understand.
| Path | Purpose |
|---|---|
<project>/.reports/ |
Markdown (or image/PDF) reports written for people; discovered by openbase-coder reports and the console Reports page |
<project>/.signals/ |
Messages written for other agents and loops (requests and responses, questions); watched by loop file triggers, never committed (see loops) |
Service Artifacts¶
| Path Pattern | Created By | Purpose |
|---|---|---|
~/.openbase/launchd/<service>.sh |
services install/regenerate |
Launch wrappers |
~/Library/LaunchAgents/com.openbase.coder.<service>.plist |
services install/regenerate (macOS) |
launchd job definitions |
~/.config/systemd/user/com.openbase.coder.<service>.service |
services install/regenerate (Linux) |
systemd user unit definitions |
~/.openbase/logs/<service>.stdout.log |
launchd services | Service stdout logs |
~/.openbase/logs/<service>.stderr.log |
launchd services | Service stderr logs |
<data dir>/logs/<service>.log |
container entrypoint (Docker image, cloud DevSpace) | Service output mirrored from the container console, trimmed to its tail past 4 MiB |
Wrappers for codex-app-server, livekit-agent, and django-cli prefer binaries from
<workspace>/.venv/bin/, then <workspace>/cli/.venv/bin/, then
<workspace>/agent/.venv/bin/
so launchd follows the configured workspace checkout.
Managed services:
livekit-servercodex-app-servercodex-app-server-dispatcherlivekit-agentdjango-cli
On macOS and Linux, codex-app-server listens at
$CODEX_HOME/app-server-control/app-server-control.sock. Openbase pins its
managed server and clients to the shared ~/.codex home; the socket is runtime
state and is never committed. A stale socket is removed only after it is
confirmed not to have a live owner.
codex-app-server-dispatcher is a second instance of the same server,
listening at $CODEX_HOME/app-server-control-dispatcher/app-server-control.sock
(override with OPENBASE_DISPATCHER_APP_SERVER_URL). Only the voice
dispatcher's own conversational thread runs there, so a long-running coding
turn on the shared instance can never make the dispatcher unresponsive.
Super Agent threads stay on the shared instance. If the dispatcher instance
is not running, the dispatcher falls back to the shared socket; setting
OPENBASE_DISPATCHER_DEDICATED_APP_SERVER=0 forces that fallback.
Runtime Data¶
| Path | Written By | Purpose |
|---|---|---|
~/.openbase/db.sqlite3 |
Django migrations/runtime | App DB for local CLI state |
~/.openbase/staticfiles/ |
collectstatic |
Served static assets |
~/.openbase/coder-projects.json |
Session/project APIs | Recent project tracking |
~/.openbase/auth.json |
openbase-coder login |
Access/refresh tokens |
Plugin Data¶
| Path | Written By | Purpose |
|---|---|---|
~/.openbase/plugins/plugins.json |
openbase-coder plugins add/update/remove |
Installed plugin registry |
~/.openbase/plugins/plugin_requirements.txt |
plugin lifecycle commands | Untracked plugin pip requirements ledger |
~/.openbase/plugins/sources/ |
plugins add/update (GitHub sources) |
Local clones used for pinned installs |
~/.openbase/plugins/console/registry.json |
plugin lifecycle commands | Generated console registry metadata |
~/.openbase/plugins/console-assets/<plugin>/<page>/ |
plugin lifecycle commands | Prebuilt static assets for iframe console pages, served at /openbase-plugin-assets/... |
~/.openbase/plugins/site/ |
plugin lifecycle commands (standalone installs) | Stable plugin Python package site dir added to sys.path; survives runtime package upgrades |
~/.openbase/plugins/skills_ownership.json |
plugin lifecycle commands | Ownership map for globally synced skills |
~/.claude/skills/<plugin_id>__<skill_name>/SKILL.md |
plugin lifecycle commands | Plugin-declared global agent skills |
Console and API Routes (Used by iOS)¶
| Route | Used By |
|---|---|
/api/threads/ |
Threads tab |
/api/projects/recent/ |
Threads tab |
/api/git/diff/ and /dashboard/diff |
Diff tab |
/ws/threads/ |
Threads tab global turn updates |
/ws/threads/<thread_id>/ |
Thread detail realtime updates |
Plugin API Routes¶
| Route | Purpose |
|---|---|
/api/plugins/ |
List installed plugins and capabilities |
/api/plugins/<plugin_id>/ |
Show one plugin |
/api/plugins/console-registry/ |
Return generated console registry metadata |
/api/bootstrap/<bootstrapper_name>/ |
Run bootstrapper by name |
/api/plugins/<plugin_id>/... |
Plugin-declared Django URL modules (if provided) |