License
ajat is commercial software from Climakers. Operational commands such as export, report, diff, search, import, rule, and invoke require a valid license. Setup and diagnostic commands (config, doctor, license, support, tree, version, completion, and help) run without one.
License management is done with the license command group. This is the first dependency to validate on a new machine before you start any inventory, export, or governance-review workflow.
Buy ajat and compare all commercial editions on store.climakers.com/ajat, the Climakers storefront on Lemon Squeezy. The license is tied to the machine where it is activated.
Where licenses live
Licenses are AES-256-GCM-encrypted with a machine-derived key and stored in the platform’s standard user configuration directory:
| Platform | Path |
|---|---|
| macOS | ~/Library/Application Support/ajat/license.bin |
| Linux | ~/.config/ajat/license.bin |
Print the resolved path with:
ajat license whereBecause the encryption key is bound to the machine, copying license.bin from one device to another does not work — you have to deactivate the old machine and re-activate on the new one.
License files are machine-bound by design. Do not treat license.bin as a
portable secret you can hand to another workstation; treat it as an on-device
activation record. To move a seat, deactivate here and activate there.
license activate
Activates ajat with either a purchased license key or a local offline license file.
LemonSqueezy-issued key (recommended)
After purchase you receive a UUID v4 license key. Activate it with --license-key:
ajat license activate --license-key 38b1460a-5104-4067-a91d-77b872934d51This calls the LemonSqueezy API to register this machine and writes the encrypted license file locally.
Offline license file (partner deals, air-gapped sites)
For environments without internet access, Climakers support can issue a pre-activated license file. Import it with --license-file:
ajat license activate --license-file ./acme-ajat-license.binThe file must be issued for this exact machine — the encryption key is derived from your hardware ID, so files generated for a different machine will refuse to decrypt.
If an existing license is already active, pass --force to replace it, or run
ajat license deactivate first. If your current license is expired and you
have a renewed (different) key, you do not need to deactivate — running
ajat license activate --license-key <new-key> replaces the expired local
file with the newly activated license automatically.
After activation, validate the result immediately:
ajat license validateVariants
ajat is sold as five commercial editions. Installed LemonSqueezy licenses are validated automatically before each non-exempt command, but an online API validation is not triggered on every command. For online licenses, an API validation happens when either threshold below is reached, whichever comes first.
| Variant | Use case | Validation cadence |
|---|---|---|
| Trial | 14-day evaluation, full features | every 2 days / 50 commands |
| Solo | Single user, commercial use | every 7 days / 50 commands |
| Team | Multi-seat team license | every 10 days / 100 commands |
| CI/CD Automation | CI/CD pipelines only | stateless 4-hour daily window |
| Enterprise | Organization-wide inventory, export retention, and governance reviews | every 14 days / 100 commands |
If the machine is offline when an API validation becomes due, ajat falls back to local validation and continues operating normally. The API check is retried on a later command when connectivity returns. Run ajat license validate --force when you want to force the online status check immediately.
CI/CD Automation variant
This variant is required when running ajat from a CI/CD pipeline. It:
- Rejects use outside a recognized CI environment (detected via the
CI/GITHUB_ACTIONS/GITLAB_CI/ … environment variables and a non-interactive stdin). - Validates statelessly via a SHA-256-hash schedule over the license key and current weekday. This avoids hammering the LemonSqueezy API on every pipeline run while still validating at least once per week.
If you try to use a CI/CD license on an interactive desktop, ajat returns a LicenseCICDEnvironmentRequiredError with a hint to pick a different variant. Conversely, desktop variants are intended for interactive use rather than pipelines.
Buy or compare the Trial, Solo, Team, CI/CD Automation, and Enterprise editions at store.climakers.com/ajat. The Trial is a free 14-day full-feature evaluation.
license list
Displays the stored license details known to the local installation.
ajat license list # default table output
ajat license list --format yaml # YAML
ajat license list --format json # JSON
ajat license list --format csv # CSV (single row)Aliases: ls, show, status, info.
The output shows type, status, variant, customer, masked key, expiration, activation usage, command count since last validation, and the last successful validation timestamp. The license key is always masked in output, and sensitive fields such as activation limits are excluded, so the summary is safe to paste into a support case.
license where
Shows the location of the encrypted license file on disk.
ajat license whereUseful when you need to confirm the active machine-specific license location before backup, restore, or support work.
license validate
Runs the same license check that gated commands perform, without executing any destructive operation.
ajat license validate # run the gate against local state
ajat license validate --force # force an immediate LemonSqueezy API call--force is useful after activating a new license or troubleshooting a network issue — it skips the local thresholds and validates against the store immediately. Local (offline) licenses are always checked without network access.
Typical reasons to run license validate:
- immediately after activating a new machine
- before a recurring export or reporting pipeline starts
- after restoring a machine from backup or after profile migration
- when a previous activation was deactivated or may have expired
license deactivate
Releases the seat: it calls the API and removes the local file.
ajat license deactivate # calls the API and removes the local file
ajat license deactivate --force # remove the local file even when API deactivation fails--force is the escape hatch when the API rejects deactivation — for example the instance was already removed remotely (404), or the license has reached a terminal state like expired or disabled (400). The activation slot on the remote side is either already free or no longer usable, so the local file is the only thing left to clean up.
Run this before retiring a machine, rebuilding it, or intentionally moving the operational seat to another workstation. Clean deactivation is safer than leaving stale activations behind and discovering the problem during the next emergency export.
Backing up and restoring a license
The encrypted license file is bound to your machine. To protect against disk loss or OS reinstall, take a backup with license export and restore it later with license import.
# Back up the current license
ajat license export --file ~/backup/ajat-license.bin
ajat license export --file ~/backup/ajat-license.bin --overwrite
# Restore the backup later
ajat license import --file ~/backup/ajat-license.bin
ajat license import --file ~/backup/ajat-license.bin --force # over an existing licenseBecause the encryption key is derived from hardware identifiers, the backup file can only be imported back on the same machine that exported it. Move-to-another-machine workflows require deactivating the old machine and re-activating with --license-key on the new one.
When importing with --force over an existing local license, the current command count and last-validation timestamp are preserved if they are higher than the imported values. This prevents resetting enforcement counters through an export/import cycle.
Treat exported license files as sensitive machine-bound assets. Store them in the same protected locations you use for other operational secrets and backup materials.
Privacy
The LemonSqueezy validation request carries only your license key and the per-machine activation ID. No Jira data, command output, automation rule content, inventory report, or organization topology leaves your machine.
Recommended operator flow
For a new machine or runner, the safest sequence is:
- activate the license with
ajat license activate - confirm the activation with
ajat license validate - record the installed location with
ajat license where - run
ajat doctorto validate the full workstation state - export a backup copy with
ajat license exportwhen the machine becomes part of a production workflow
This keeps activation, verification, diagnostics, and recoverability tied together instead of treating licensing as a one-time setup detail.
Need help?
If license activation or validation fails:
- re-run
ajat license validate - confirm the installed file location with
ajat license where - run
ajat doctor - generate a support bundle with
ajat support --output support-bundle.txt
Include the output of ajat license list and ajat license where when you contact support@climakers.com. The full license agreement is available on the License Terms page, and the diagnostic workflow is documented on the Support page.