---
title: Configuration
summary: The settings in config.json with their types and defaults, and the environment variables Vyre reads.
audience: operators, builders
owner: docs
status: stable
generated: scripts/gen-docs-reference
---

# Configuration

> Generated by `scripts/gen-docs-reference` from `core/config/index.js` and every `process.env.VYRE_` read in the shipped code. Do not edit this page: edit the code, then run `npm run docs:ref`.

Vyre keeps everything personal under `VYRE_HOME` (default `~/.vyre`), never in the repository. Settings live in `~/.vyre/config.json`. A missing file is fine: a fresh install has none, and every key has a default. A broken file does not stop vyred; it starts on the defaults and reports the problem.

Onboarding and commands like `vyre name` and `vyre owner` write this file for you. Edit it by hand only for what they do not cover, then restart vyred with `vyre down` and `vyre up`.

## config.json

| Key | Type | Default | What it is for |
| --- | --- | --- | --- |
| `name` | `string` | unset | This box's name: its address is `<name>.vyre.run`. Set when the Vyre app adds this server to a space. |
| `role` | `'box'\|'local'` | none | `box` for the always-on server, `local` for a Mac. Decides which modules start. |
| `machine` | `'solo'\|'server'\|'device'` | none | Not described yet. |
| `projectsDir` | `string` | none | The folder new projects are made in. On a box with a `/work` folder and no projectsDir set, `/work/projects` when the box is new (nothing in `~/Vyre/projects`) or its homes were moved with `projects.move`; otherwise `~/Vyre/projects`. |
| `roots` | `string[]` | none | More folders to look in for projects. |
| `me` | `object` | see below | Who you are, so memory can tell your own people and domains from everyone else's. |
| `me.domains` | `string[]` | none | Domains that are yours. |
| `me.emails` | `string[]` | none | Email addresses that are yours. Their domains count as yours too. |
| `transcripts` | `string[]` | none | Where Claude Code keeps session transcripts. Recall indexes these. |
| `modules` | `object` | see below | Modules to start or stop against their role. |
| `modules.enable` | `string[]` | none | Modules to start even where their role says not to. |
| `modules.disable` | `string[]` | none | Modules never to start. |
| `network` | `object` | see [network](#network) | How this machine is reached. See [Install](../get-started/install.md). |
| `onboard` | `any` | unset | Onboarding's own settings. |
| `owner` | `{ id: string }` | unset | The person's own, non-secret identity. Written only by core/onboard's own startup, never by a tool's input. |
| `glass` | `{ roots?: string[], egress: { enabled: boolean, sites: string[] } }` | none | Not described yet. |
| `computers` | `{ tailnet: { enabled: boolean, tag: string }, [k: string]: any }` | none | Not described yet. |
| `hooks` | `{ enabled: boolean, port: number, routes: Record<string, { scheme: string, header: string, secret: string, opened?: string }> }` | none | Not described yet. |
| `theme` | `{ colors?: { dark?: Record<string, string>, light?: Record<string, string> } }` | unset | Your colours, over the defaults in `core/config/theme.js`. The box serves them as `/theme.css`. |
| `app` | `{ root: boolean }` | none | Not described yet. |
| `term` | `{ keep_hours: number, max?: number, shell?: string }` | none | Terminals in the browser. `keep_hours`: how long a terminal nobody is looking at is kept before it ends (12). `max`: how many may be open at once (8). `shell`: the shell to run, in place of your login shell. |
| `projects` | `{ move?: 'enabled' }` | unset | Not described yet. |

### network

| Key | Type | Default | What it is for |
| --- | --- | --- | --- |
| `network.address` | `string` | unset | The https URL the Deck is served at. |
| `network.domain` | `string` | unset | The domain the box's name is under. |
| `network.via` | `'vyre.run'` | unset | `vyre.run` for a name under vyre.run, `ts.net` for the tailnet's own name. |
| `network.port` | `number` | unset | The port the tailnet listener serves on. |
| `network.box` | `string` | unset | On a Mac: the address of the box it is paired with. |
| `network.onboardPort` | `number` | unset | The loopback port onboarding listens on. 7300 when unset, except 7301 on a Mac chosen as server, which never binds 7300. |
| `network.ownerSeen` | `string` | unset | When the owner was first seen on the tailnet. Written by Vyre. |
| `network.origins` | `string[]` | unset | Other sites whose pages may call this box from the owner's browser, with CORS: Vyre's hosted app. `["https://app.vyre.run"]` when unset; `[]` turns it off. Each call but the reachability probe and the token exchange needs a person session. |

Modules keep their own settings under a key named after them (`vault`, `recall`, `learn`, and so on). Their pages describe them.

## Environment variables

Vyre reads these when they are set. None is needed for normal use.

| Variable | What it does | Read in |
| --- | --- | --- |
| `VYRE_ACCOUNTS_HOME` | Not described yet. | `core/config/index.js`, `core/daemon/index.js`, `core/daemon/ownserver-host.js`, `core/recall/indexer.js`, `core/sessions/index.js`, `core/sessions/spawn.js`, `core/spawner/main.js`, `core/switchboard/index.js` |
| `VYRE_ACCOUNT_UID_MAX` | Not described yet. | `core/spawner/main.js`, `core/switchboard/index.js` |
| `VYRE_ACCOUNT_UID_MIN` | Not described yet. | `core/spawner/main.js`, `core/switchboard/index.js` |
| `VYRE_ACME_DIRECTORY` | The ACME server certificates come from, in place of Let's Encrypt. With it set, Vyre does not wait for DNS. | `core/wink/index.js` |
| `VYRE_ADB_BIN` | Not described yet. | `core/cli/commands/phone.js` |
| `VYRE_AGENT_GID` | Not described yet. | `core/spawner/main.js`, `core/switchboard/project-access.js` |
| `VYRE_AGENT_HOME` | Not described yet. | `core/daemon/index.js`, `core/sessions/spawn.js`, `core/spawner/main.js` |
| `VYRE_AGENT_UID` | Not described yet. | `core/spawner/main.js` |
| `VYRE_ALLOW_DIALOGS` | `1`: a home other than `~/.vyre` that you keep on purpose may raise Touch ID and other prompts. Never under tests; `VYRE_NO_DIALOGS` still wins. | `core/config/dialogs.js`, `core/daemon/index.js` |
| `VYRE_ALLOW_REAL_BOX` | Not described yet. | `core/config/dialogs.js` |
| `VYRE_ALLOW_REAL_TRANSCRIPTS` | `1`: a home other than `~/.vyre` reads the transcripts in `~/.claude` too. Never under tests. | `core/config/dialogs.js` |
| `VYRE_ANDROID_CERT_SHA256` | Not described yet. | `core/daemon/app.js` |
| `VYRE_API_BASE_URL` | Not described yet. | `core/sessions/drivers/openrouter.js` |
| `VYRE_API_MODEL` | Not described yet. | `core/sessions/drivers/openrouter.js` |
| `VYRE_APPLE_TEAM_ID` | Not described yet. | `core/daemon/app.js` |
| `VYRE_APP_URL` | Not described yet. | `harness/mcp/design.js` |
| `VYRE_BACKUP_SKIP_PROJECTS` | Not described yet. | `core/cli/commands/up.js` |
| `VYRE_BACKUP_SKIP_TRANSCRIPTS` | Not described yet. | `core/cli/commands/up.js` |
| `VYRE_BOX_INSTALLER` | The installer `vyre box add` runs on the server, in place of the published one. | `core/cli/commands/box.js` |
| `VYRE_BOX_PROBE_MS` | How long `vyre box` waits for the box's address to answer. Default two minutes. | `core/cli/commands/box.js` |
| `VYRE_CHECK_VIEWS` | Not described yet. | `core/cli/view.js` |
| `VYRE_CHROME` | Not described yet. | `core/previews/thumb.js` |
| `VYRE_CHROME_HOST_DIR` | Not described yet. | `local/hands-chrome-mac/standalone/cli.mjs`, `local/hands-chrome-mac/standalone/doctor.js` |
| `VYRE_CHROME_NO_COPY` | Not described yet. | `local/hands-chrome-mac/standalone/cli.mjs` |
| `VYRE_CHROME_TEST_NOFETCH` | Not described yet. | `local/hands-chrome-mac/index.js`, `local/hands-chrome-mac/standalone/harness/frames-suite.mjs` |
| `VYRE_CLAUDE_HOME` | Claude Code's folder for a home other than `~/.vyre`. Without it such a home uses its own `claude` folder and never reads `~/.claude`. | `core/config/dialogs.js` |
| `VYRE_CODEX_HOME` | Not described yet. | `core/import/formats/index.js` |
| `VYRE_COMPUTERS_CAP_ADD` | Extra Linux capabilities for agent computers, comma separated. | `core/dockerproxy/main.js` |
| `VYRE_COMPUTERS_IMAGE` | The container image agent computers run. Default `vyre/computer:0.1`. | `core/dockerproxy/main.js` |
| `VYRE_COMPUTERS_LABEL_PREFIX` | The label prefix that marks Vyre's containers. Default `run.vyre.computers`. | `core/dockerproxy/main.js` |
| `VYRE_COMPUTERS_NETWORK` | The Docker network agent computers join. Default `vyre-computers`. | `core/dockerproxy/main.js` |
| `VYRE_CORE_DATA` | vyre-core's data directory (ADR 0040). Default `/Library/Application Support/Vyre/data`. | `core/vyre-core/main.js` |
| `VYRE_CORE_SOCKET` | vyre-core's socket. Default `/var/run/vyre/vyre-core.sock`, in a folder root makes and _vyre owns. | `core/vyre-core/main.js` |
| `VYRE_CORE_STRICT` | `0` lets vyre-core start from a tree its owner could write (dev and Linux tests only). On by default on a Mac. | `core/vyre-core/main.js` |
| `VYRE_DEBUG` | Not described yet. | `core/cli/index.js`, `core/daemon/main.js` |
| `VYRE_DEV_ALLOW_LISTEN` | Not described yet. | `core/daemon/dev-ports.js` |
| `VYRE_DOCKER_PROXY_PORT` | The port the Docker proxy listens on. Default 2375. | `core/dockerproxy/main.js` |
| `VYRE_DOCUMENTS_PDF` | Not described yet. | `core/documents/index.js` |
| `VYRE_DRIVE_ACCESS` | `ro` or `rw`: read only by the legacy folder-sharing path in core/files/drive.js, which goes with the mounted Drive (0.3.0). It has no effect on a box: no container mounts `/work` for it any more. | `core/files/drive.js` |
| `VYRE_DTACH_BIN` | The `dtach` binary terminals run under so they outlive a vyred restart. Default `dtach` on the PATH. Empty: plain terminals that end with vyred. | `core/term/dtach.js` |
| `VYRE_EGRESS_GATE_HOST` | Not described yet. | `core/computers/egressgate.js` |
| `VYRE_EGRESS_GATE_PORT` | Not described yet. | `core/computers/egressgate.js` |
| `VYRE_EGRESS_GATE_STATUS` | Not described yet. | `core/computers/egress.js` |
| `VYRE_EGRESS_GATE_STATUS_PORT` | Not described yet. | `core/computers/egressgate.js` |
| `VYRE_EGRESS_PROXY` | Not described yet. | `core/computers/egress.js` |
| `VYRE_EGRESS_SOCKET` | Not described yet. | `core/computers/egressgate.js` |
| `VYRE_EGRESS_UPSTREAM` | Not described yet. | `core/computers/egressgate.js` |
| `VYRE_FINISH_MS` | Not described yet. | `core/daemon/index.js` |
| `VYRE_FINISH_POLL_MS` | Not described yet. | `core/daemon/index.js` |
| `VYRE_FREEZE_FD` | Not described yet. | `core/computers/image/computerd/index.js` |
| `VYRE_GEMINI_HOME` | Not described yet. | `core/import/formats/index.js` |
| `VYRE_HANDS_BIN` | Another build of the Mac hands helper. | `local/hands-mac/index.js` |
| `VYRE_HARNESS_DIR` | The Harness plugin folder threads load. Default the one beside this install. | `core/cli/commands/projects.js`, `core/runner/pipe-home.js`, `core/switchboard/index.js` |
| `VYRE_HEADSCALE_BIN` | The `headscale` binary a space's network control plane runs. Under node --test there is none unless `VYRE_WINK_REAL=1`. | `core/wink/control/headscale.js`, `core/wink/netd.js` |
| `VYRE_HOME` | Where Vyre keeps its data. Default `~/.vyre`. | `core/agents/index.js`, `core/config/dialogs.js`, `core/config/index.js`, `core/daemon/peer.js`, `core/harness/rules.js`, `core/learn/checks.js`, `core/mcpconn/index.js`, `core/pluginagent/index.js`, `core/sessions/index.js`, `core/sessions/spawn.js`, `core/switchboard/index.js`, `harness/lib/vyre.js`, `local/hands-chrome-mac/native-host/host.js`, `local/hands-chrome-mac/native-host/install.js`, `local/hands-chrome-mac/standalone/runtime.js` |
| `VYRE_KERNEL_FILE_KEY` | Not described yet. | `core/daemon/host-guard.js` |
| `VYRE_KERNEL_PROOF` | Not described yet. | `core/cli/commands/daemon.js` |
| `VYRE_LEGACY_DIRECT_MODEL` | Not described yet. | `core/sessions/index.js`, `local/voice/index.js` |
| `VYRE_LENT_AGENT` | Not described yet. | `core/daemon/lent-service.js` |
| `VYRE_LENT_AGENT_ARGS` | Not described yet. | `core/daemon/lent-service.js` |
| `VYRE_LENT_AGENT_DEV` | Not described yet. | `core/daemon/lent-service.js`, `core/runner/index.js` |
| `VYRE_MANAGED_CONTEXT` | Not described yet. | `core/switchboard/index.js` |
| `VYRE_MCP_FEATURES` | Not described yet. | `harness/mcp/server.js` |
| `VYRE_MCP_LISTING` | Not described yet. | `harness/mcp/server.js` |
| `VYRE_MCP_REF_TOKENS` | Not described yet. | `harness/mcp/server.js` |
| `VYRE_MODULE_SDK` | A folder holding the module SDK's testing.js, for a module's own tests made by `vyre module new` before the SDK is on npm. | `core/cli/commands/module.js` |
| `VYRE_NAMES_DIRECTORY` | Not described yet. | `core/names/index.js` |
| `VYRE_NO_OPEN` | Never open a browser tab from the terminal. | `core/cli/commands/vault.js` |
| `VYRE_NO_TIPS` | Not described yet. | `core/cli/index.js` |
| `VYRE_NO_UP` | `vyre box add` installs Vyre without starting it. | `core/cli/commands/box.js` |
| `VYRE_NO_WATCHDOG` | Not described yet. | `core/runner/runner.js` |
| `VYRE_NPM_BIN` | The `npm` that `vyre update` installs a release with. Tests point it at a fake. | `core/cli/commands/update.js` |
| `VYRE_OLD_PROJECTS_DIR` | Not described yet. | `core/config/index.js` |
| `VYRE_ONBOARD_HOST` | The address onboarding listens on. Default `127.0.0.1`. | `core/onboard/loopback.js` |
| `VYRE_OPENROUTER_API` | Not described yet. | `core/models/index.js` |
| `VYRE_OPENROUTER_URL` | Not described yet. | `core/sessions/index.js` |
| `VYRE_OPEN_BIN` | The command that opens links. Tests point it at a fake. | `core/cli/commands/up.js`, `core/cli/kit.js` |
| `VYRE_OTHER_VPN_BIN` | Not described yet. | `core/network/other-vpn.js` |
| `VYRE_OVERLAY_BIN` | Not described yet. | `local/hands-mac/index.js` |
| `VYRE_PACKAGE` | Not described yet. | `harness/lib/vyre.js` |
| `VYRE_PREVIEW_THUMBS` | Not described yet. | `core/previews/index.js` |
| `VYRE_PROJECT_GIDS` | Not described yet. | `core/spawner/main.js` |
| `VYRE_PROJECT_GID_MAX` | Not described yet. | `core/spawner/main.js` |
| `VYRE_PROJECT_GID_MIN` | Not described yet. | `core/spawner/main.js` |
| `VYRE_PUBLISH_DOCKER` | Not described yet. | `core/publish/index.js` |
| `VYRE_PUB_CTX` | Not described yet. | `core/appmods/host-pub.js` |
| `VYRE_RECOVERY_CODE` | Not described yet. | `core/cli/commands/up.js` |
| `VYRE_REDUCED_MOTION` | Not described yet. | `core/cli/delight.js` |
| `VYRE_RELEASES_API` | Where `vyre update` reads releases. Default `https://api.github.com`. Tests point it at a local server. | `core/cli/commands/update.js`, `core/update/index.js` |
| `VYRE_RELEASES_REPO` | Not described yet. | `core/update/index.js` |
| `VYRE_ROLLOVER_LINK` | Not described yet. | `core/switchboard/index.js` |
| `VYRE_ROLLOVER_SHEET` | Not described yet. | `core/switchboard/index.js` |
| `VYRE_SCREEN_BIN` | Not described yet. | `local/screen-mac/index.js` |
| `VYRE_SEAL_DEV` | Not described yet. | `core/cli/commands/up.js`, `core/vault/request.js` |
| `VYRE_SEAL_SOFTWARE` | Not described yet. | `core/cli/commands/up.js`, `core/daemon/index.js`, `core/presence/module.js`, `core/spaces/index.js`, `core/wink/pairing.js` |
| `VYRE_SEAL_UNATTESTED` | Not described yet. | `core/cli/commands/up.js` |
| `VYRE_SESSIONS_SDK_DIR` | Not described yet. | `core/sessions/config.js`, `core/spawner/main.js` |
| `VYRE_SESSIONS_SDK_INSTALL` | Not described yet. | `core/sessions/sdk.js` |
| `VYRE_SESSIONS_THREAD_SOCKET` | Not described yet. | `core/sessions/config.js` |
| `VYRE_SETUP_CODE` | Not described yet. | `core/relay/index.js` |
| `VYRE_SETUP_CODE_AT` | Not described yet. | `core/relay/index.js` |
| `VYRE_SPAWNER_ALLOW` | Not described yet. | `core/spawner/main.js` |
| `VYRE_SSE_HEARTBEAT_MS` | Not described yet. | `core/daemon/index.js` |
| `VYRE_SSH_BIN` | The `ssh` binary to run. | `core/cli/ssh.js` |
| `VYRE_STREAM_TEST_HOLD` | Not described yet. | `core/stream/group.js` |
| `VYRE_SUPERVISOR` | What runs vyred: `docker` inside the box container, which changes how `vyre up` restarts it. | `bin/vyre`, `core/cli/commands/module.js`, `core/cli/commands/up.js`, `core/cli/commands/update.js`, `core/cli/daemonctl.js`, `core/daemon/index.js`, `core/daemon/ownserver-host.js`, `core/switchboard/adopt.js`, `core/switchboard/index.js` |
| `VYRE_TAILSCALE_BIN` | The `tailscale` binary to run. A path that does not exist means no tailnet. | `core/link/mac.js`, `core/link/transport.js` |
| `VYRE_TEST` | Not described yet. | `core/names/directory.js` |
| `VYRE_TEXT_PRUNE_MS` | How long a thread's streamed text events are kept before they are pruned. | `core/switchboard/index.js` |
| `VYRE_THREAD_SOCKETS` | Not described yet. | `core/daemon/threadsock.js` |
| `VYRE_TILE_BIN` | Not described yet. | `local/sideview/index.js` |
| `VYRE_TMPDIR` | Not described yet. | `core/files/index.js`, `core/names/backup.js` |
| `VYRE_TMUX_BIN` | Not described yet. | `core/daemon/peer.js` |
| `VYRE_UID` | Not described yet. | `core/spawner/main.js` |
| `VYRE_UPDATE_DIR` | Not described yet. | `core/update/index.js` |
| `VYRE_UPDATE_QUIET` | Not described yet. | `core/update/index.js` |
| `VYRE_UPDATE_STATE` | Not described yet. | `core/update/index.js` |
| `VYRE_UP_WAIT_MS` | Not described yet. | `core/cli/daemonctl.js` |
| `VYRE_USER_HOME` | Not described yet. | `core/daemon/index.js`, `core/spawner/main.js` |
| `VYRE_WALL_STATUS` | Not described yet. | `core/spawner/main.js` |
| `VYRE_WATCH_HOME` | Not described yet. | `core/spawner/main.js` |
| `VYRE_WATCH_NODE` | Not described yet. | `core/spawner/main.js` |
| `VYRE_WATCH_UID_MAX` | Not described yet. | `core/spawner/main.js` |
| `VYRE_WATCH_UID_MIN` | Not described yet. | `core/spawner/main.js` |
| `VYRE_WATCH_WORK` | Not described yet. | `core/watchers/spawner-wall.js` |
| `VYRE_WINDOWS_LENDING` | Not described yet. | `core/runner/sandbox.js`, `core/runner/workspace.js` |
| `VYRE_WINK_FORWARDER_BIN` | Not described yet. | `core/wink/netd.js` |
| `VYRE_WINK_NET` | Not described yet. | `core/wink/index.js` |
| `VYRE_WINK_REAL` | `1`: let a test run the real Headscale and tailscaled (test server only). | `core/wink/control/headscale.js`, `core/wink/netd.js` |
| `VYRE_WINK_TYPED_CODE` | Not described yet. | `core/wink/index.js` |
| `VYRE_WORK` | Not described yet. | `core/spawner/main.js`, `core/switchboard/index.js` |
| `VYRE_WORK_DIR` | Not described yet. | `core/config/index.js` |
| `VYRE_WORK_GID` | Not described yet. | `bin/vyre`, `core/spawner/main.js` |
| `VYRE_WRAPPER` | Where `vyre box add` puts the `vyre` command on the server. Default `/usr/local/bin/vyre`. | `core/cli/commands/box.js` |

### Set by Vyre

vyred sets these for the threads and helpers it starts, and the Harness reads them there. Setting them by hand is for tests.

| Variable | What it does | Read in |
| --- | --- | --- |
| `VYRE_AGENT` | The agent a thread runs as. | `core/cli/session.js`, `core/mcpconn/index.js`, `core/switchboard/index.js`, `harness/hooks/hook.js`, `harness/mcp/memory-tools.js`, `harness/mcp/server.js` |
| `VYRE_AGENT_KEY` | The key that proves a thread's calls come from its agent. | `core/daemon/client.js`, `core/switchboard/index.js` |
| `VYRE_AGENT_KIND` | `assistant` or `agent`. Only the assistant is offered the tools that drive other threads. | `core/cli/session.js`, `core/switchboard/index.js`, `harness/hooks/hook.js`, `harness/mcp/server.js` |
| `VYRE_CHROME_HOME` | Not described yet. | `local/hands-chrome-mac/index.js`, `local/hands-chrome-mac/standalone/runtime.js` |
| `VYRE_CHROME_SOCK` | Not described yet. | `local/hands-chrome-mac/native-host/host.js`, `local/hands-chrome-mac/spike/host/host.js` |
| `VYRE_CHROME_TEST` | Not described yet. | `local/hands-chrome-mac/extension/shared/sk/site-knowledge.js`, `local/hands-chrome-mac/index.js`, `local/hands-chrome-mac/standalone/runtime.js` |
| `VYRE_CLAUDE_BIN` | The `claude` binary to run. Default `claude` on the PATH. | `core/memory/index.js`, `core/memory/personal/reader.js`, `core/onboard/index.js`, `core/onboard/setup-token.js`, `core/runner/index.js`, `core/switchboard/index.js`, `core/team/team-fixture.js` |
| `VYRE_CORE_OWNER` | The owner's uid: the only uid vyre-core answers. Required. | `core/vyre-core/main.js` |
| `VYRE_CORE_SERVER` | Not described yet. | `core/vyre-core/main.js` |
| `VYRE_GH_BIN` | Not described yet. | `core/github/index.js` |
| `VYRE_HUB_CHILD` | Not described yet. | `harness/mcp/run.js`, `harness/mcp/server.js` |
| `VYRE_MCP_ID` | Not described yet. | `harness/mcp/server.js` |
| `VYRE_MCP_KEY` | Not described yet. | `harness/mcp/server.js` |
| `VYRE_NO_DIALOGS` | `1`: never raise anything on screen (Touch ID, a keychain prompt, a browser tab). | `core/config/dialogs.js`, `core/files/drive.js`, `local/screen-mac/screen.js` |
| `VYRE_PROJECT` | The project a thread belongs to, for its brief. | `harness/hooks/hook.js` |
| `VYRE_PROJECTS` | The projects an agent's thread is limited to, comma separated, or `*` for all of them. | `core/switchboard/index.js`, `harness/hooks/hook.js`, `harness/mcp/memory-tools.js`, `harness/mcp/server.js` |
| `VYRE_PROXY_PAC` | Not described yet. | `core/computers/image/computerd/index.js` |
| `VYRE_SCOPE_CWDS` | The folders an agent's `recall.search` is held to, as JSON. | `core/switchboard/index.js`, `harness/mcp/server.js` |
| `VYRE_SESSIONS_DRIVER` | Not described yet. | `core/sessions/config.js`, `core/team/team-fixture.js` |
| `VYRE_SESSIONS_SPAWNER` | Not described yet. | `core/sessions/config.js`, `core/sessions/spawn.js` |
| `VYRE_SESSION_SANDBOX_OFF` | Not described yet. | `core/daemon/index.js`, `core/team/team-fixture.js` |
| `VYRE_SITE_TEST_CLOCK` | Not described yet. | `local/hands-chrome-mac/extension/shared/sk/site-knowledge.js` |
| `VYRE_SKILLS_DIR` | Not described yet. | `core/sessions/drivers/codex.js`, `core/sessions/drivers/grok.js` |
| `VYRE_SOCKET` | The path of vyred's socket, for Lumen. | `bin/vyre`, `core/cli/daemonctl.js`, `core/cli/index.js`, `core/cli/session.js`, `core/daemon/client.js`, `core/mcpconn/index.js`, `core/switchboard/index.js`, `harness/lib/vyre.js`, `harness/mcp/server.js` |
| `VYRE_SPAWNER_SOCKET` | Not described yet. | `core/daemon/index.js`, `core/spawner/client.js`, `core/spawner/main.js` |
| `VYRE_THREAD` | The session id of a headless thread vyred runs. | `bin/vyre`, `core/cli/daemonctl.js`, `core/cli/index.js`, `core/cli/session.js`, `harness/hooks/hook.js` |

### For tests and development

| Variable | What it does | Read in |
| --- | --- | --- |
| `VYRE_TEST_DIALOGS` | `1`: allow dialogs under tests, for a person at the machine running one test on purpose. | `core/config/dialogs.js`, `core/files/drive.js`, `local/screen-mac/screen.js` |
| `VYRE_TEST_HOST` | Not described yet. | `core/daemon/host-guard.js` |
| `VYRE_TEST_HOSTED` | `1`: for a vyred a test starts over a temp home, count its parent test process as the person's side. Never read for `~/.vyre`. | `core/daemon/host-guard.js`, `core/daemon/peer.js` |
| `VYRE_TEST_PAIR_NO_PROOF` | Not described yet. | `core/wink/pairing.js` |
| `VYRE_TEST_REAL_TAILSCALE` | `1`: let a test use the real tailscale binary. | `core/link/transport.js` |
| `VYRE_TEST_SELF_RESERVE` | Not described yet. | `core/spaces/index.js`, `core/stream/e2e-step7-vyred.js` |
| `VYRE_TEST_START_PAUSE_MS` | Not described yet. | `core/switchboard/index.js` |
| `VYRE_TEST_UNGATED_RING` | Not described yet. | `core/relay/index.js` |
