docs GitHub

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

KeyTypeDefaultWhat it is for
namestringunsetThis box's name: its address is <name>.vyre.run. Set when the Vyre app adds this server to a space.
role'box'\|'local'nonebox for the always-on server, local for a Mac. Decides which modules start.
machine'solo'\|'server'\|'device'noneNot described yet.
projectsDirstringnoneThe 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.
rootsstring[]noneMore folders to look in for projects.
meobjectsee belowWho you are, so memory can tell your own people and domains from everyone else's.
me.domainsstring[]noneDomains that are yours.
me.emailsstring[]noneEmail addresses that are yours. Their domains count as yours too.
transcriptsstring[]noneWhere Claude Code keeps session transcripts. Recall indexes these.
modulesobjectsee belowModules to start or stop against their role.
modules.enablestring[]noneModules to start even where their role says not to.
modules.disablestring[]noneModules never to start.
networkobjectsee networkHow this machine is reached. See Install.
onboardanyunsetOnboarding's own settings.
owner{ id: string }unsetThe 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[] } }noneNot described yet.
computers{ tailnet: { enabled: boolean, tag: string }, [k: string]: any }noneNot described yet.
hooks{ enabled: boolean, port: number, routes: Record<string, { scheme: string, header: string, secret: string, opened?: string }> }noneNot described yet.
theme{ colors?: { dark?: Record<string, string>, light?: Record<string, string> } }unsetYour colours, over the defaults in core/config/theme.js. The box serves them as /theme.css.
app{ root: boolean }noneNot described yet.
term{ keep_hours: number, max?: number, shell?: string }noneTerminals 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' }unsetNot described yet.

network

KeyTypeDefaultWhat it is for
network.addressstringunsetThe https URL the Deck is served at.
network.domainstringunsetThe domain the box's name is under.
network.via'vyre.run'unsetvyre.run for a name under vyre.run, ts.net for the tailnet's own name.
network.portnumberunsetThe port the tailnet listener serves on.
network.boxstringunsetOn a Mac: the address of the box it is paired with.
network.onboardPortnumberunsetThe loopback port onboarding listens on. 7300 when unset, except 7301 on a Mac chosen as server, which never binds 7300.
network.ownerSeenstringunsetWhen the owner was first seen on the tailnet. Written by Vyre.
network.originsstring[]unsetOther 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.

VariableWhat it doesRead in
VYRE_ACCOUNTS_HOMENot 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_MAXNot described yet.core/spawner/main.js, core/switchboard/index.js
VYRE_ACCOUNT_UID_MINNot described yet.core/spawner/main.js, core/switchboard/index.js
VYRE_ACME_DIRECTORYThe 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_BINNot described yet.core/cli/commands/phone.js
VYRE_AGENT_GIDNot described yet.core/spawner/main.js, core/switchboard/project-access.js
VYRE_AGENT_HOMENot described yet.core/daemon/index.js, core/sessions/spawn.js, core/spawner/main.js
VYRE_AGENT_UIDNot described yet.core/spawner/main.js
VYRE_ALLOW_DIALOGS1: 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_BOXNot described yet.core/config/dialogs.js
VYRE_ALLOW_REAL_TRANSCRIPTS1: a home other than ~/.vyre reads the transcripts in ~/.claude too. Never under tests.core/config/dialogs.js
VYRE_ANDROID_CERT_SHA256Not described yet.core/daemon/app.js
VYRE_API_BASE_URLNot described yet.core/sessions/drivers/openrouter.js
VYRE_API_MODELNot described yet.core/sessions/drivers/openrouter.js
VYRE_APPLE_TEAM_IDNot described yet.core/daemon/app.js
VYRE_APP_URLNot described yet.harness/mcp/design.js
VYRE_BACKUP_SKIP_PROJECTSNot described yet.core/cli/commands/up.js
VYRE_BACKUP_SKIP_TRANSCRIPTSNot described yet.core/cli/commands/up.js
VYRE_BOX_INSTALLERThe installer vyre box add runs on the server, in place of the published one.core/cli/commands/box.js
VYRE_BOX_PROBE_MSHow long vyre box waits for the box's address to answer. Default two minutes.core/cli/commands/box.js
VYRE_CHECK_VIEWSNot described yet.core/cli/view.js
VYRE_CHROMENot described yet.core/previews/thumb.js
VYRE_CHROME_HOST_DIRNot described yet.local/hands-chrome-mac/standalone/cli.mjs, local/hands-chrome-mac/standalone/doctor.js
VYRE_CHROME_NO_COPYNot described yet.local/hands-chrome-mac/standalone/cli.mjs
VYRE_CHROME_TEST_NOFETCHNot described yet.local/hands-chrome-mac/index.js, local/hands-chrome-mac/standalone/harness/frames-suite.mjs
VYRE_CLAUDE_HOMEClaude 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_HOMENot described yet.core/import/formats/index.js
VYRE_COMPUTERS_CAP_ADDExtra Linux capabilities for agent computers, comma separated.core/dockerproxy/main.js
VYRE_COMPUTERS_IMAGEThe container image agent computers run. Default vyre/computer:0.1.core/dockerproxy/main.js
VYRE_COMPUTERS_LABEL_PREFIXThe label prefix that marks Vyre's containers. Default run.vyre.computers.core/dockerproxy/main.js
VYRE_COMPUTERS_NETWORKThe Docker network agent computers join. Default vyre-computers.core/dockerproxy/main.js
VYRE_CORE_DATAvyre-core's data directory (ADR 0040). Default /Library/Application Support/Vyre/data.core/vyre-core/main.js
VYRE_CORE_SOCKETvyre-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_STRICT0 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_DEBUGNot described yet.core/cli/index.js, core/daemon/main.js
VYRE_DEV_ALLOW_LISTENNot described yet.core/daemon/dev-ports.js
VYRE_DOCKER_PROXY_PORTThe port the Docker proxy listens on. Default 2375.core/dockerproxy/main.js
VYRE_DOCUMENTS_PDFNot described yet.core/documents/index.js
VYRE_DRIVE_ACCESSro 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_BINThe 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_HOSTNot described yet.core/computers/egressgate.js
VYRE_EGRESS_GATE_PORTNot described yet.core/computers/egressgate.js
VYRE_EGRESS_GATE_STATUSNot described yet.core/computers/egress.js
VYRE_EGRESS_GATE_STATUS_PORTNot described yet.core/computers/egressgate.js
VYRE_EGRESS_PROXYNot described yet.core/computers/egress.js
VYRE_EGRESS_SOCKETNot described yet.core/computers/egressgate.js
VYRE_EGRESS_UPSTREAMNot described yet.core/computers/egressgate.js
VYRE_FINISH_MSNot described yet.core/daemon/index.js
VYRE_FINISH_POLL_MSNot described yet.core/daemon/index.js
VYRE_FREEZE_FDNot described yet.core/computers/image/computerd/index.js
VYRE_GEMINI_HOMENot described yet.core/import/formats/index.js
VYRE_HANDS_BINAnother build of the Mac hands helper.local/hands-mac/index.js
VYRE_HARNESS_DIRThe 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_BINThe 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_HOMEWhere 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_KEYNot described yet.core/daemon/host-guard.js
VYRE_KERNEL_PROOFNot described yet.core/cli/commands/daemon.js
VYRE_LEGACY_DIRECT_MODELNot described yet.core/sessions/index.js, local/voice/index.js
VYRE_LENT_AGENTNot described yet.core/daemon/lent-service.js
VYRE_LENT_AGENT_ARGSNot described yet.core/daemon/lent-service.js
VYRE_LENT_AGENT_DEVNot described yet.core/daemon/lent-service.js, core/runner/index.js
VYRE_MANAGED_CONTEXTNot described yet.core/switchboard/index.js
VYRE_MCP_FEATURESNot described yet.harness/mcp/server.js
VYRE_MCP_LISTINGNot described yet.harness/mcp/server.js
VYRE_MCP_REF_TOKENSNot described yet.harness/mcp/server.js
VYRE_MODULE_SDKA 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_DIRECTORYNot described yet.core/names/index.js
VYRE_NO_OPENNever open a browser tab from the terminal.core/cli/commands/vault.js
VYRE_NO_TIPSNot described yet.core/cli/index.js
VYRE_NO_UPvyre box add installs Vyre without starting it.core/cli/commands/box.js
VYRE_NO_WATCHDOGNot described yet.core/runner/runner.js
VYRE_NPM_BINThe npm that vyre update installs a release with. Tests point it at a fake.core/cli/commands/update.js
VYRE_OLD_PROJECTS_DIRNot described yet.core/config/index.js
VYRE_ONBOARD_HOSTThe address onboarding listens on. Default 127.0.0.1.core/onboard/loopback.js
VYRE_OPENROUTER_APINot described yet.core/models/index.js
VYRE_OPENROUTER_URLNot described yet.core/sessions/index.js
VYRE_OPEN_BINThe command that opens links. Tests point it at a fake.core/cli/commands/up.js, core/cli/kit.js
VYRE_OTHER_VPN_BINNot described yet.core/network/other-vpn.js
VYRE_OVERLAY_BINNot described yet.local/hands-mac/index.js
VYRE_PACKAGENot described yet.harness/lib/vyre.js
VYRE_PREVIEW_THUMBSNot described yet.core/previews/index.js
VYRE_PROJECT_GIDSNot described yet.core/spawner/main.js
VYRE_PROJECT_GID_MAXNot described yet.core/spawner/main.js
VYRE_PROJECT_GID_MINNot described yet.core/spawner/main.js
VYRE_PUBLISH_DOCKERNot described yet.core/publish/index.js
VYRE_PUB_CTXNot described yet.core/appmods/host-pub.js
VYRE_RECOVERY_CODENot described yet.core/cli/commands/up.js
VYRE_REDUCED_MOTIONNot described yet.core/cli/delight.js
VYRE_RELEASES_APIWhere 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_REPONot described yet.core/update/index.js
VYRE_ROLLOVER_LINKNot described yet.core/switchboard/index.js
VYRE_ROLLOVER_SHEETNot described yet.core/switchboard/index.js
VYRE_SCREEN_BINNot described yet.local/screen-mac/index.js
VYRE_SEAL_DEVNot described yet.core/cli/commands/up.js, core/vault/request.js
VYRE_SEAL_SOFTWARENot 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_UNATTESTEDNot described yet.core/cli/commands/up.js
VYRE_SESSIONS_SDK_DIRNot described yet.core/sessions/config.js, core/spawner/main.js
VYRE_SESSIONS_SDK_INSTALLNot described yet.core/sessions/sdk.js
VYRE_SESSIONS_THREAD_SOCKETNot described yet.core/sessions/config.js
VYRE_SETUP_CODENot described yet.core/relay/index.js
VYRE_SETUP_CODE_ATNot described yet.core/relay/index.js
VYRE_SPAWNER_ALLOWNot described yet.core/spawner/main.js
VYRE_SSE_HEARTBEAT_MSNot described yet.core/daemon/index.js
VYRE_SSH_BINThe ssh binary to run.core/cli/ssh.js
VYRE_STREAM_TEST_HOLDNot described yet.core/stream/group.js
VYRE_SUPERVISORWhat 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_BINThe tailscale binary to run. A path that does not exist means no tailnet.core/link/mac.js, core/link/transport.js
VYRE_TESTNot described yet.core/names/directory.js
VYRE_TEXT_PRUNE_MSHow long a thread's streamed text events are kept before they are pruned.core/switchboard/index.js
VYRE_THREAD_SOCKETSNot described yet.core/daemon/threadsock.js
VYRE_TILE_BINNot described yet.local/sideview/index.js
VYRE_TMPDIRNot described yet.core/files/index.js, core/names/backup.js
VYRE_TMUX_BINNot described yet.core/daemon/peer.js
VYRE_UIDNot described yet.core/spawner/main.js
VYRE_UPDATE_DIRNot described yet.core/update/index.js
VYRE_UPDATE_QUIETNot described yet.core/update/index.js
VYRE_UPDATE_STATENot described yet.core/update/index.js
VYRE_UP_WAIT_MSNot described yet.core/cli/daemonctl.js
VYRE_USER_HOMENot described yet.core/daemon/index.js, core/spawner/main.js
VYRE_WALL_STATUSNot described yet.core/spawner/main.js
VYRE_WATCH_HOMENot described yet.core/spawner/main.js
VYRE_WATCH_NODENot described yet.core/spawner/main.js
VYRE_WATCH_UID_MAXNot described yet.core/spawner/main.js
VYRE_WATCH_UID_MINNot described yet.core/spawner/main.js
VYRE_WATCH_WORKNot described yet.core/watchers/spawner-wall.js
VYRE_WINDOWS_LENDINGNot described yet.core/runner/sandbox.js, core/runner/workspace.js
VYRE_WINK_FORWARDER_BINNot described yet.core/wink/netd.js
VYRE_WINK_NETNot described yet.core/wink/index.js
VYRE_WINK_REAL1: let a test run the real Headscale and tailscaled (test server only).core/wink/control/headscale.js, core/wink/netd.js
VYRE_WINK_TYPED_CODENot described yet.core/wink/index.js
VYRE_WORKNot described yet.core/spawner/main.js, core/switchboard/index.js
VYRE_WORK_DIRNot described yet.core/config/index.js
VYRE_WORK_GIDNot described yet.bin/vyre, core/spawner/main.js
VYRE_WRAPPERWhere 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.

VariableWhat it doesRead in
VYRE_AGENTThe 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_KEYThe key that proves a thread's calls come from its agent.core/daemon/client.js, core/switchboard/index.js
VYRE_AGENT_KINDassistant 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_HOMENot described yet.local/hands-chrome-mac/index.js, local/hands-chrome-mac/standalone/runtime.js
VYRE_CHROME_SOCKNot described yet.local/hands-chrome-mac/native-host/host.js, local/hands-chrome-mac/spike/host/host.js
VYRE_CHROME_TESTNot 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_BINThe 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_OWNERThe owner's uid: the only uid vyre-core answers. Required.core/vyre-core/main.js
VYRE_CORE_SERVERNot described yet.core/vyre-core/main.js
VYRE_GH_BINNot described yet.core/github/index.js
VYRE_HUB_CHILDNot described yet.harness/mcp/run.js, harness/mcp/server.js
VYRE_MCP_IDNot described yet.harness/mcp/server.js
VYRE_MCP_KEYNot described yet.harness/mcp/server.js
VYRE_NO_DIALOGS1: 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_PROJECTThe project a thread belongs to, for its brief.harness/hooks/hook.js
VYRE_PROJECTSThe 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_PACNot described yet.core/computers/image/computerd/index.js
VYRE_SCOPE_CWDSThe folders an agent's recall.search is held to, as JSON.core/switchboard/index.js, harness/mcp/server.js
VYRE_SESSIONS_DRIVERNot described yet.core/sessions/config.js, core/team/team-fixture.js
VYRE_SESSIONS_SPAWNERNot described yet.core/sessions/config.js, core/sessions/spawn.js
VYRE_SESSION_SANDBOX_OFFNot described yet.core/daemon/index.js, core/team/team-fixture.js
VYRE_SITE_TEST_CLOCKNot described yet.local/hands-chrome-mac/extension/shared/sk/site-knowledge.js
VYRE_SKILLS_DIRNot described yet.core/sessions/drivers/codex.js, core/sessions/drivers/grok.js
VYRE_SOCKETThe 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_SOCKETNot described yet.core/daemon/index.js, core/spawner/client.js, core/spawner/main.js
VYRE_THREADThe 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

VariableWhat it doesRead in
VYRE_TEST_DIALOGS1: 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_HOSTNot described yet.core/daemon/host-guard.js
VYRE_TEST_HOSTED1: 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_PROOFNot described yet.core/wink/pairing.js
VYRE_TEST_REAL_TAILSCALE1: let a test use the real tailscale binary.core/link/transport.js
VYRE_TEST_SELF_RESERVENot described yet.core/spaces/index.js, core/stream/e2e-step7-vyred.js
VYRE_TEST_START_PAUSE_MSNot described yet.core/switchboard/index.js
VYRE_TEST_UNGATED_RINGNot described yet.core/relay/index.js