Skip to main content

About daemon-config.json

Use daemon-config.json to configure a self-hosted Cosmos daemon without repeating command-line flags. Auggie loads it automatically when you run auggie daemon; restart the daemon after changing it.
daemon-config.json requires Auggie 1.x. If you currently run Auggie 0.x, follow Migrate from Auggie 0.x.
For installation and authentication, see Self-Hosted Environments. See Workspaces and Isolation and Daemon Pools for related setup.

Quickstart

Create .augment/daemon-config.json in your workspace with only the settings you want to change. This configuration gives the daemon a recognizable name and limits it to 125 concurrent sessions:
Start Auggie from the workspace:
This file sets only the daemon name and concurrency limit. Other effective values can still come from higher- or lower-precedence configuration, persisted daemon state, indexing permissions, or defaults.
daemon-config.json uses strict JSON, so inline comments and trailing commas are not supported. Keep explanations outside the JSON document, as shown above.

Example

The following example configures a pooled team daemon with repository discovery, one additional repository, isolated-worktree behavior, and file logging. Replace the pool ID and paths before using it, or omit settings that do not apply to your environment.
  • allowIndexing: true enables indexing for eligible configured workspaces. Review the indexing permission behavior before enabling it.
  • gitCredentialMode: "none" disables daemon-provided Git credentials. Review Git credential mode before selecting another mode.
  • Set noWorktreePull to true to base new worktrees on local HEAD instead of the latest fetched upstream commit.
  • Omit poolId if the daemon should not join a pool. Use spaceId instead to assign a standalone daemon to a Space.
  • vmId and newVmId are intentionally omitted so Auggie can reuse the persisted daemon identity.

Generate Configuration from Flags

Auggie can convert explicitly supplied daemon flags into daemon-config.json fields. These actions run offline and exit without starting the daemon.

Preview Generated JSON

Use --config-print to print strict JSON to standard output:
Only flags supplied in that command are included. Existing configuration values and parser defaults are not copied, and relative paths are converted to absolute paths from the invocation directory. The one-shot --new-vm-id action is omitted with a warning because persisting it would request a new identity on every launch.

Write a Configuration File

Use --config-write=scope to write the generated configuration directly: For example:
Use the --config-write=project or --config-write=local equals-sign syntax. An explicit --workspace selects the destination workspace; otherwise Auggie uses the current Git root or current directory.
Writing configuration replaces the entire destination file; it does not merge with existing content. Auggie asks for confirmation before replacing an existing file in an interactive terminal and refuses the replacement when confirmation is unavailable. Use --config-print and merge manually when you need to preserve existing settings.

Configuration File Locations

Daemon configuration follows the same file hierarchy described in Hierarchical Settings File, using daemon-specific filenames. The scope locations are the same, but merge behavior differs: use the precedence and replacement rules documented on this page for daemon-config.json. Auggie checks four configuration scopes on every daemon start: Configuration files are optional. Project and local files are resolved from an explicit --workspace path, otherwise from the current Git root or current directory. A workspace value inside the file changes the daemon’s primary workspace but does not relocate config discovery.

Precedence and daemon-specific merging

daemon-config.json uses the same file-scope order as settings.json: managed, local project, project, then global. The key precedence difference is that explicit daemon CLI flags sit above every file and can override managed daemon configuration, while managed settings.json values are locked and cannot be overridden by users. The formats also merge differently: Keep these daemon-specific rules in mind:
  • Missing keys inherit from lower-precedence scopes. Set a key to null to mask a lower value.
  • Arrays and objects are replaced, not combined or deep-merged. For example, a local addWorkspaces array replaces the project array.
  • worktreeDir falls back to its value in settings.json when it is absent from CLI flags and every daemon config scope.
  • allowIndexing is enable-only at the command line. Effective config true or --allow-indexing enables it; there is no CLI disable flag.
  • vmId cannot be combined with newVmId, and poolId cannot be combined with spaceId. When changing a configuration-only value, set the old key to null in the higher scope.
  • For persisted pool or Space membership, null only masks a lower config value. Use poolId: "" or spaceId: "" to actively clear existing membership.

Path resolution

workspace, addWorkspaces, worktreeDir, and logFile accept absolute paths or ~-prefixed home paths. Other relative paths resolve from the directory containing the config file—not the workspace root. For example, ../../repo-b in /srv/repo-a/.augment/daemon-config.json resolves to /srv/repo-b.
Use absolute paths in machine-specific global or managed configuration.

Configuration reference

Every key is optional. Any supported key may be set to null to mask a lower-precedence value.

Repository discovery

See Workspaces and isolation for layouts and behavior. In daemon-config.json, set discoverWorkspaces.enabled to true or false; when enabled, optional depth must be from 1 through 5 and defaults to 1. Discovery is refused at the user’s home directory or a filesystem root. The daemon advertises up to 64 additional workspaces; overflow entries are dropped with a warning.

Workspace isolation

See Workspace isolation for requirements and behavior. worktreeDir controls where isolated worktrees are stored. By default, new worktrees use the latest fetched commit from the tracked upstream; set noWorktreePull to true to use local HEAD instead. Existing worktrees are not changed.

Git Credential Mode

gitCredentialMode controls whether the daemon provides Git credentials to child-agent Git operations:
  • none disables daemon-provided Git credentials.
  • user-oauth uses the daemon user’s GitHub OAuth access and is supported on macOS and Linux.
  • github-app uses GitHub App access available to the daemon.
The configuration stores only the selected policy, not tokens or other credential material. An explicit --git-credential-mode flag overrides configured values for that launch.
Project configuration is treated as user-approved policy and can enable credential access for child sessions. Review gitCredentialMode before starting a daemon from a repository you do not trust.

Indexing and Indexing Permissions

Set allowIndexing to enable indexing for configured workspaces that do not already have an explicit indexing permission:
Auggie evaluates indexing permissions separately for each eligible workspace:
  • Paths covered by indexingDenyDirs in settings.json, stored deny decisions, and the home-directory hard block remain disabled. allowIndexing does not override them.
  • Paths covered by indexingAllowDirs or a stored allow decision can be indexed without allowIndexing.
  • Eligible paths without an allow or deny rule are indexed only when effective config allowIndexing is true or the daemon starts with --allow-indexing.
  • Git worktrees inherit the indexing permission of their main repository.
  • When the daemon starts interactively without allowIndexing, it may prompt to save allow decisions for unruled workspaces. Non-interactive startup does not prompt, so those workspaces remain disabled.
indexingAllowDirs and indexingDenyDirs belong in settings.json, not daemon-config.json. Their hierarchy and merge behavior are described in Hierarchical Settings File. Stored decisions are written to ~/.augment/indexing-permissions.json by default. To revoke a stored allow, remove the relevant entry, ensure the path is not enabled by allowIndexing or indexingAllowDirs, and restart the daemon. There is no --no-allow-indexing flag. To disable a configured value, change the file that enables it or mask a lower-scope value with null in a higher-precedence file.
A committed project configuration applies to everyone who starts a daemon from that workspace. Review allowIndexing and gitCredentialMode before committing it, and never place credentials or secrets in a daemon configuration file.

Local overrides

Keep shared defaults in .augment/daemon-config.json. Add .augment/daemon-config.local.json to .gitignore and use it for personal overrides:

Override configuration for one launch

Explicit flags override file values. For example, auggie daemon --max-agents 125 --log-level debug. An explicit --pool-id or --space-id also clears the configured alternative for that launch. Run auggie daemon --help for the full reference.

Validation

Auggie validates config at startup. Malformed JSON, invalid known values, forbidden global or managed vmId, and conflicting option pairs stop startup; unknown keys produce warnings and are ignored. A global or managed workspace is accepted with a warning because it affects every daemon on the machine.

See also