Updating ajat
ajat update installs the newest release your license includes, from inside the tool. After the first installation you no longer download a package for every release: one command checks, downloads, verifies and installs.
Available from ajat v1.0.4. If ajat update answers “unknown command”, install v1.0.4 or later once from your order page; every later release then arrives through update.
ajat update --check # report only; changes nothing
ajat update # Linux
sudo ajat update # macOSAliases: upgrade, self-update
The update is downloaded from Climakers using your activated license, verified against the SHA-256 checksum produced when the release was built, and installed in place of the running binary. Only your license credentials are sent, and only to Climakers; no GitHub account or other access is needed.
Flags
| Flag | What it does |
|---|---|
--check | Report whether a newer release exists; change nothing |
--version | Install this release tag, for example v1.0.3 — also how you go back to an older one |
--yes | Install without the confirmation prompt (required in CI and scripts) |
--force | Ask again instead of using the 6-hour check cache, reinstall the same version, or install the macOS package when the running binary is not /usr/local/bin/ajat |
--format | text (default) or json for scripts |
Updating on macOS
On macOS the update is the same signed, notarized .pkg you installed from, applied with Apple’s installer. Installing a package needs administrator rights, so run:
sudo ajat update$ sudo ajat update
Password:
Update ajat v1.0.3 to the latest version? [y/N] y
→ Updating ajat v1.0.3 → v1.0.4 (ajat-v1.0.4-darwin-universal.pkg, 10.3 MB)
✓ downloaded and checksum verified
✓ installed to /usr/local/bin/ajat
✅ Updated ajat to v1.0.4What sudo does, and does not do:
- It only runs Apple’s installer. The package installs one file,
/usr/local/bin/ajat, and records a receipt you can list withpkgutil --pkgs | grep climakers. - Your license and settings stay yours. Under
sudo, ajat reads your license from your own home folder and writes nothing there, so no file changes owner. - Forgetting
sudois harmless. The command stops before downloading anything and prints the exact command to run. - No Gatekeeper prompt. The package is notarized by Apple.
- One installation location. If
ajatruns from somewhere other than/usr/local/bin(for example a copy in your home folder), the update refuses, because the package would leave that copy unchanged. Remove the other copy, or pass--forceto install to/usr/local/binanyway.
Check the result with ajat --version.
Updating on Linux
ajat updateThe binary is replaced in place with a single atomic rename, so it is never half-written, and a ajat command that is already running keeps using the old binary until it exits.
The update never uses sudo on Linux. The directory that holds ajat must be writable by you. If you installed into /usr/local/bin as root, install once more into a directory you own, such as ~/.local/bin (see Installation and First-Time Setup); later updates then work without sudo.
Windows has no published release, so update reports it as unsupported.
Your subscription and older versions
While your subscription is active, every new release is included. After it ends you keep the version you have, and you can still install any release published before the end date:
$ ajat update
❌ Error: your subscription ended on 2026-06-01; this release was published after that
Hint: The last version your license includes is v1.0.3: run 'ajat update --version v1.0.3'. Renew your subscription to receive every new release.Offline (local) licenses update too, as long as the license file was issued signed. The update service verifies that signature without any store account, and such licenses download from Climakers’ release storage. A license file issued before signing existed is refused with “this local license is not signed”: ask for a reissued file and activate it with ajat license activate --license-file <path>. See License.
Checks, limits and CI
--checkanswers from a local cache for 6 hours. Add--forceto ask again, for example right after a release was announced.- Requests are limited per license (5 installs per hour). Normal use — a check a day and one install per release — never reaches the limit. When it does, the command says how long to wait and sends nothing until then.
- A downloaded update is kept for 24 hours, so re-running after a failed install does not download it again.
- In CI there is nobody to answer the prompt, so
updaterefuses without--yes. Prefer pinning the version your pipeline installs (ajat update --version v1.0.4 --yes) over updating on every run.
For scripts, --format json prints the outcome:
{
"changed": false,
"checked_at": "2026-09-19T12:00:00Z",
"current": "v1.0.3",
"latest": "v1.0.4",
"update_available": true
}update needs no Jira credentials and does not count toward your license’s command limit. The service address is the update.endpoint configuration key; change it only when Climakers support asks you to.
If it fails
| Message | Cause | Fix |
|---|---|---|
installing the macOS package requires administrator rights | macOS packages are installed with Apple’s installer, which needs root | sudo ajat update; nothing was downloaded yet |
… is not writable by the current user (Linux) | The binary lives in a directory owned by root | Install once into a directory you own, such as ~/.local/bin |
this ajat runs from …, but the macOS package installs to /usr/local/bin/ajat | Another copy of ajat is first on your PATH | Remove that copy, or sudo ajat update --force |
too many update requests; try again in … | The per-license limit was reached | Wait the time shown; in CI pin a version instead of updating each run |
your subscription ended on … | The release was published after your subscription ended | Install the version the hint names with --version, or renew |
this local license is not signed | The license file predates license signing | Ask for a reissued license file and activate it with --license-file |
the update service is unavailable | A temporary outage | Nothing was changed; try again later |
Still stuck? Run the command with --debug and see Support.