This documentation is for the federal deployments of Devin. Back to Devin Docs
File locations
Files you author
These are the machine-wide inputs. Each has a default path and an environment variable that overrides it; the variable must be set in the environment the agent starts from (see API key environment variables for how to do that for Desktop).
The defaults are the same on macOS and Linux. On Windows the license, models file, and auth file default to
C:\ProgramData\Devin\ (license.devin-onprem-license, models.json, auth.json), the machine-wide policy file is C:\ProgramData\Devin\system.json, and the override variables are the same; lock the folder down before placing files in it. The CLI reads these files and never writes to them, so you can manage them with your configuration-management tooling and make them read-only.
Per-user state written by the CLI
The CLI follows the XDG base-directory layout on both macOS and Linux (it does not use~/Library for its own state). XDG_CONFIG_HOME and XDG_DATA_HOME are honored when set.
cli-federal is the product subdirectory used by the air-gapped build; it keeps this state separate from any standard Devin CLI install on the same machine, which uses cli.
On Windows the CLI does not read XDG_* variables. It keeps the same files under %APPDATA%\devin\, and its cache under %LOCALAPPDATA%\devin\:
Desktop-specific state
The Desktop application is isolated from any other Devin Desktop or Windsurf install on the same machine:
The symlink is created at Desktop startup only if nothing exists at
~/.devin-airgap-config/devin/config.json. If a regular file is already there, Desktop leaves it alone and the bundled agent uses that file instead of the shared one; the Devin ACP output channel logs a WARNING: … is a regular file, not a symlink line. Delete the file and restart Desktop to restore the link.
On Windows there is no symlink. Desktop’s bundled agent and the CLI share %APPDATA%\devin\config.json directly, and Desktop does not load the user’s %APPDATA%\devin\mcp_config.json. Desktop user data is in %APPDATA%\Devin - Airgap\.
Only ~/.devin-airgap-config/ and ~/.devin-airgap/ are safe to delete for a clean-slate reinstall. ~/.config/devin/ and ~/.local/share/devin/ also belong to the standalone CLI.
Audit log
The air-gapped CLI writes a local, append-only, structured audit log. It is always on (there is no toggle), does not exist in any other Devin build, and is written to the workstation for your own review and SIEM ingestion.Location and rotation
Ship rotated files to your SIEM before they age out if you need unbounded retention. Because the CLI only ever appends and never rewrites existing lines, a standard file-tailing collector (for example a Splunk universal forwarder or Filebeat input on
audit*.jsonl) is sufficient.
Redaction guarantees
Events carry paths and metadata only. The log never contains prompts, model responses, code, file contents, secret values, API keys, or full shell command lines: for shell tools only the program name (the first token) is recorded.Envelope (schema version 1)
Every line carries this envelope; per-event fields are flattened alongside it.
Configure your parser to ignore unknown fields and unknown
event values: new fields and event types may be added without a schema_version bump.
Event types
session_start
Emitted when an agent session begins (new or resumed root session).
session_end
Emitted when the session ends or the agent shuts down.
session_start is paired with exactly one session_end for the same session_id on clean exit. The CLI runs the agent in a child process that it terminates on teardown, so the parent process records the child session’s session_end (reason other) when the session finishes. A session killed by SIGKILL or power loss cannot write a final event; treat a session_start with no matching session_end as an abnormal termination.
tool_call
Emitted after each tool the agent executes.
file_read and file_write
Emitted in addition to tool_call, once per path in the tool’s resolved permission scope. They describe the access the tool was scoped to, not verified I/O: a tool approved with read scope over several paths emits a file_read per path even if it touched only some of them, and the events are emitted whether or not the tool call succeeded.
model_call
Emitted after each inference request to a model endpoint from your models file.
Token fields are omitted when the endpoint does not report usage.
auth
actor object
Identity attribution is the OS user, the local git identity, and (when SSO is configured) the identity from the validated ID token. Fields are omitted when unavailable.
The SSO fields are present on every
auth event that has a validated token at hand (sso_login, sso_refresh, sso_logout, sso_login_denied), on sso_revalidation_failed for the login the process validated (or, when it validated none, the login still in the token cache), and on session_start and identity_resolved for the login the running process validated at startup. tool_call, file_read, file_write, and model_call carry no actor; attribute them through session_id to their session_start.
sso_groups records each user’s IdP group memberships on the local machine. The audit directory and files are owner-only; include them in your data-handling review if group names are sensitive in your environment.Diagnostics report
devin diagnostics writes a redacted, plain-text report you can review before sending it to Cognition support. It contains only versions, configuration shape (whether each file exists and parses), model names, whether each API-key variable is set, and audit-log statistics; it never contains prompts, code, file contents, secret values, endpoint URLs, or environment-variable values.
--output <path> to choose the file name. The report is written owner-only (0600). See Troubleshooting for what to include in a support request.
