This documentation is for the federal deployments of Devin. Back to Devin Docs
Where the license lives
The bundled Desktop agent and the standalone CLI read the same file. Install it before first launch; see Install → Step 4. Desktop users can also install a license in Devin settings: the bundled agent validates the file offline, refuses to overwrite a file owned by another user, and records a
license_installed audit event. On Windows, when the license file is owned by an administrator, a standard user cannot replace it from Desktop (the install is refused with LIC001); an administrator can. Lock down C:\ProgramData\Devin\ before placing the file.
Issue a license from the portal
- Sign in to the portal and open your Team page. The Air-gapped licenses section shows how many seats are used, the entitlement period, and the default license duration.
- Click Generate license.
- Enter a label (for example the hostname or the user’s name), the assignee email, and the duration in days. The duration defaults to your entitlement’s default and is capped both by your entitlement’s maximum and by the end of the entitlement period; the review step shows the projected expiry date.
- Confirm. The portal reports License generated and offers Download license file. The download is the signed
.devin-onprem-licensefile; transfer it to the air-gapped host by your approved media process.
What the file contains
The file is a single JSON Web Token in compact form (header.payload.signature), signed with EdDSA (Ed25519). The header’s kid names the public key that signed it; the product ships every environment’s public key, so nothing is fetched at validation time. Claims:
Validation checks the signature against the embedded key selected by
kid, the nbf/exp window with a 24-hour clock-skew allowance in each direction, and the product claim.
Inspect a license
Check the key ID
Decode the JWT header and readkid. This one-liner works on both Linux and macOS: it converts base64url to base64 and pads it, because the BSD base64 shipped with macOS silently truncates unpadded input.
A different
kid, or an empty result, means the file is not a license issued for this product, or it was corrupted in transfer.
Check the seat, account, and expiry
devin auth status works even when the license is missing or invalid, so you can use it to diagnose:
Identity is the local attribution identity (OS user name plus git config user.email); it is recorded in the audit log and is independent of the license. If the file cannot be validated, the last line is instead License: INVALID — LIC00X: <reason>.
The license check in devin airgap doctor reports the same seat, account, and expiry, and turns to warn within 30 days of expiry.
Startup and revalidation behavior
-
On every start, the CLI validates the license and prints one line to stderr:
If the license expires within 30 days, a
Warning: license expires in N day(s)line follows. - Long-running processes (Desktop’s bundled agent, the CLI REPL) re-verify the file at most once an hour, before starting a new session or turn. In-flight work is never interrupted.
-
A license expired for more than 24 hours blocks new sessions and turns. In Desktop, the chat panel shows ACP error
-32019 license_invalid; the specificLIC00Xcause is in View → Output → Devin ACP. - Failures are not cached: installing a renewed file takes effect on the next turn without restarting.
-
A few commands run without a valid license so you can repair a host:
devin auth status,devin airgap doctor,devin doctor,devin diagnostics,devin models validate, anddevin version.
Renew or replace a license
- Generate a new license for the same seat holder from the portal (see above). If the seat is already in use, ask your support team to revoke the old license first.
-
Copy the new file over the existing one at
/etc/devin/license.devin-onprem-license(or the path inDEVIN_LICENSE_FILE). Keep the file owned by the account that runs Devin, or by root with read access for that account. On Windows the default path isC:\ProgramData\Devin\license.devin-onprem-license; replace the file from an elevated session. -
Confirm:
Error codes
All license failures are printed asLIC00X: <message>, followed by the path that was checked and how to override it.
The complete catalog across all namespaces is in Error codes.

