Skip to content

Configuration

Almost everything in APX is configured from the panel and kept in the core’s database. What’s left for files and environment variables is the machine-level part: where the home folder is, who can reach the core, and a few switches.

APX keeps all its state in one folder: ~/.apx/v2 unless APX_HOME says otherwise. It sits inside APX v1’s ~/.apx, and v2 never writes v1’s files there.

  • Directory~/.apx/v2/
    • apx.db everything the core holds: agents, threads, tasks, routines, memory, settings (SQLite)
    • core.env who can reach the core: host, port, token, public address
    • secrets.json secret values, when secrets are kept in a file (mode 600)
    • secrets.index.json names and dates only, when they’re in the macOS Keychain
    • Directoryskills/ your global skills, one folder with a SKILL.md each
      • …
    • Directoryextensions/ installed extensions
      • …
    • Directoryprofiles/ secretary profiles you added
      • …
    • Directoryprojects/ APX’s side of each project: projects without a folder elsewhere, widgets
      • …
    • Directorywork/ where agents work in chats outside any project
      • …
    • Directoryjobs/ background jobs’ output
      • …
    • Directorymedia/ uploads, sent files and generated media, by date
      • …
    • Directorychannels/ per-channel data, such as a WhatsApp session
      • …
    • Directorybrowser/ the headless Chrome’s shared profile
      • …
    • Directorymodels/ local models you installed, such as voice dictation
      • …
    • Directorylogs/ core.log when the core runs as a service on macOS or Windows
      • …
    • Directoryapp/ the installed bundle, on a server: versions/ and the current link
      • …

Your projects themselves stay where they are: a project is a folder with AGENTS.md and/or .apc/, and APX reads and writes its agents, memory and skills there (Projects).

<home>/core.env says how the core is exposed. apx expose, Settings › Connections › Devices and the desktop app’s first run write it; the core, the apx command and the desktop app read it. It’s a plain KEY=VALUE file, readable only by you (mode 600), and only these keys count:

KeyWhat it sets
APX_HOSTThe address the core listens on.
APX_PORTIts port.
APX_TOKENThe core’s token.
APX_PUBLIC_URLThe address other devices use, first in the pairing QR.
APX_ALLOWED_ORIGINSExtra web origins allowed to call the core.

The process environment always wins over the file. The core reads it when it starts, so a change needs a restart.

VariableDefaultWhat it does
APX_HOME~/.apx/v2The home folder.
APX_PORT7440The core’s port.
APX_HOST127.0.0.1The address it listens on. Anything other than loopback needs APX_TOKEN, or the core refuses to start.
APX_TOKENnoneThe core’s token. Without one, the core only accepts this computer.
APX_PUBLIC_URLnoneThe address devices reach this core on from outside (a VPS or a Tailscale name). It goes first in a pairing QR.
APX_ALLOWED_ORIGINSnoneExtra origins allowed to call the core, comma separated.
APX_SECRETSKeychain on macOS, file elsewherefile keeps secrets in <home>/secrets.json on macOS too.
APX_UPDATESonoff stops looking for a newer APX.
APX_RELEASESagentprojectcontext/apxThe GitHub repository whose releases announce a newer bundle. off stops it.
APX_APP~/.apx/v2/appWhere the install script puts the bundle (its versions and current).
APX_AGENT_NAMEa random oneHome’s name on a fresh install.
APX_LLM_TIMEOUT_MS45000How long the core waits for the first byte of a model’s answer.
APX_IMESSAGEonoff hides the iMessage tools (Mac only).
APX_HEADLESSonoff: no headless Chrome when no desktop app lends a browser.
APX_CHROMEfound on its ownThe Chrome, Chromium or Edge binary for the headless browser.
APX_RUNTIME_SKILLSon for the default homeon or off: keep APX’s skills current in Claude Code, Codex, Cursor and ~/.agents at every start. A core with its own APX_HOME doesn’t, unless this says on.
APX_WEB_DISTthe workspace buildThe built panel to serve.
APX_V1_URLhttp://127.0.0.1:7430APX v1’s daemon, only for the read-only import.
APX_V1_HOME~/.apxAPX v1’s folder, only for the read-only import.
CLAUDE_CONFIG_DIR~/.claudeWhere Claude Code keeps your sessions (read to list and resume them).
CODEX_HOME~/.codexWhere Codex keeps your sessions.
APX_SUPERVISEDset by supervisors1 when something starts the core again after it exits to update (pnpm app and the service set it).

These four add one OpenAI-compatible provider, first in the list: a local server, a gateway, anything that speaks that API. You can also add providers from the panel (Models).

VariableDefaultWhat it does
APX_LLM_BASE_URLnoneThe provider’s base URL. Setting it adds the provider.
APX_LLM_KEY_REFenv:APX_LLM_KEYWhere its key comes from: secret://<name> or env:<VAR>.
APX_LLM_KEYnoneThe key, when the reference is the default.
APX_LLM_MODELSasks the providerA fixed, comma-separated model list, for servers that can’t list theirs.
VariableDefaultWhat it does
APX_URLhttp://127.0.0.1:7440The core apx talks to.
APX_TOKENthe one in core.envThe token it presents.
APX_CHANNEL_TOKENnoneA Telegram bot’s token, for apx channels add.
APX_CLIENT_TOKENnoneAn outside app’s token, for apx mcp.
VariableDefaultWhat it does
APX_URLhttp://127.0.0.1:7440The local core it opens.
APX_CONNECTIONasks on first runlocal skips the first-run question and uses this computer’s core.
APX_DESKTOP_DATAthe system’s app data folderA separate data folder: its own browser sessions and its own single-instance lock.
APX_WEB_URLhttp://127.0.0.1:7441The panel’s dev server, tried first when running from a checkout.
PortWhat
7440The core: the panel, the protocol and /health. Change it with APX_PORT.
7441The panel’s dev server (pnpm --filter @apx/web dev), only when working on APX.
7430APX v1’s daemon. v2 doesn’t use it, so both can run side by side.
443Where apx expose tailscale publishes the core inside your tailnet (tailscale serve).

APX never puts a secret’s value in a prompt, a log or a config file. Settings and agents refer to secrets by name (secret://gemini) and the core resolves them only where they’re used.

  • macOS: values go to your login Keychain, under the service apx2 for the default home. <home>/secrets.index.json only lists names and dates.
  • Linux, Windows, or APX_SECRETS=file: values go to <home>/secrets.json, readable only by you.

Manage them in Resources › Variables (global or per project; a project’s value wins over a global one), or with apx secrets (the value always on stdin).

Open Settings with ⌘, or from your account menu. The sections, by group:

GroupSectionWhat you set there
GeneralAccountYour name, about you, your agents’ language, your time zone.
AppearanceMode, style, font, width and language (below).
ModelsEngines and modelsProviders and their keys, sign-ins, which models exist.
External sessionsThe Claude Code and Codex CLIs on this machine.
RouterThe fallback chain and the rules that pick a model.
MemoryMemory mode, skill picker, compaction.
VoicesEngines that turn voice notes into text and speak replies.
ImagesImage engines, tried in order.
AgentsAgentsEach agent’s model and browser profile.
ProfileYour secretary’s profile and its routines.
ChannelsTelegram, WhatsApp, Discord, Slack and the rest.
InterruptionsDaily cap, quiet hours, where notices go.
ConnectionsDevicesWho can reach this APX, pairing, paired devices, push.
API tokensTokens for outside apps.
EnvironmentBrowserImport your sessions into APX’s browser.
DesktopQuick chat shortcut, start with the computer, computer use.
AdvancedThe core’s version, code_sha, uptime, services and RAM usage.
Settings, Appearance section: interface font, transcript width, mode, style and languageSettings, Appearance section: interface font, transcript width, mode, style and language
Settings › Appearance

Settings › Appearance has:

  • Mode: Light or Dark. The first time it follows your system.
  • Style: Minimal (v2’s look) or Classic v1 (v1’s green and type).
  • Interface font: System or Mono, for menus, sidebars and panels.
  • Transcript width: Narrow, Medium or Wide, the maximum width of the chat and the composer.
  • Language: English or Spanish. It follows your browser’s language until you pick one, and applies only on that device.

Mode and language are also in the account menu. Your agents’ language is a separate setting, in Settings › Account.