Mila Agent installs with one command — from the files of the latest release, not from the fresh main branch. A checksum sits next to the installer: download, compare, read, then run. Below is how it works and how a version is released. Every line links to the code.
For anyone who installs Mila on their own computer or server.
The link points at the release files on GitHub: releases/latest/download/get.sh.
curl -fsSL …/releases/latest/download/get.sh | bash downloads the installer from the latest release and runs it.
Every release carries two files: get.sh and SHA256SUMS. Download both, compare the sum, read the script — then run it.
With MILA_INSTALL_ARGS=--dry-run the installer shows what will be touched; the kit goes to a temporary folder, nothing is written to your home.
It checks Claude Code, Bun and git, clones the kit to ~/mila, runs install/install.sh and installs the Telegram plugin mila-telegram.
The commands come from the README, for Linux and macOS. --ignore-missing checks only the files you downloaded. README:130 README:133-139
The run comes after &&: if the sum does not match, bash get.sh does not start.
$ curl -fsSLO https://github.com/shakhruz/mila-agent/releases/latest/download/get.sh $ curl -fsSLO https://github.com/shakhruz/mila-agent/releases/latest/download/SHA256SUMS $ sha256sum -c --ignore-missing SHA256SUMS && bash get.sh # Linux $ shasum -a 256 -c --ignore-missing SHA256SUMS && bash get.sh # macOS
MILA_REF the installer takes the latest stable tag vX.Y.Z; the main branch only with MILA_REF=main. get.sh:6 get.sh:15 get.sh:26-30get.sh, tools/release.sh writes the tag and its commit; in the repository both lines stay empty. get.sh:12-14 get.sh:25 release.sh:46-48get.sh stops: “nothing installed”. get.sh:45-49~/mila holds something that is not the Mila kit, the installer changes nothing and suggests another folder. get.sh:31-36The maintainer runs tools/release.sh X.Y.Z. The script goes step by step and pushes nothing by itself.
The tree is clean, the tag does not exist yet, the version is newer than the last one; CHANGELOG.md has a section for this version with a “For the owner” block.
The update tests (test_update, test_nightly, test_renamed), the full tests/run_all.sh and the frontmatter check. One red — no release.
release.json gets the version, the tag and the date, then a commit “release vX.Y.Z”.
The tag is signed (git tag -s) when the maintainer’s key is set; otherwise it is an annotated tag without a signature, and the script says so.
get.sh and SHA256SUMSIn dist/vX.Y.Z/: get.sh with the tag and commit stamped in, and SHA256SUMS for it, under the release file name.
The script sends nothing: it prints the push commands, a gh release create line with the tag’s commit in the notes, and the install link check.
The releases/latest/download link works only while the latest release carries get.sh and SHA256SUMS. A separate tool checks that.
tools/check_install_link.py finds every release file link in README*.md and requests each one. Anything but 200 — exit code 1 and a list: which file, in which README. check_install_link.py:4-6 check_install_link.py:11-19 check_install_link.py:40-46The nightly update installs a version with the release’s own updater and counts itself successful only when that updater answers "ok": true. Any other answer is “rejected”, and the version stays as it was. update.py:1036-1038 test_reexec_nightly.sh:41-45 CHANGELOG:117
How updates arrive and get installed — on the Updates page.
get.sh and SHA256SUMS come from the same release. README:130-132get.sh of releases after v1.7.1. README:131-133 get.sh:45-49The release and check scripts live in the open repository. CHANGELOG:95 CHANGELOG:121 CHANGELOG:93
| File | What it does |
|---|---|
| tools/release.sh | the release: checks, tests, release.json, tag, installer and checksum file |
| install/get.sh | the installer: checks, release tag, clone, install.sh, Telegram plugin |
| tools/check_install_link.py | the README install command answers 200 |
| tools/test_check_install_link.py | the link check tested against a fake GitHub |
| CHANGELOG.md | v1.7.0: install from a release, not from main |
The set is open: skills, hooks, tools and templates. Every pull request is read by a human and by Mila Quality.
Facts on this page: github.com/shakhruz/mila-agent (main, b5f1b9d, after v1.7.1), checked on 5 November 2026. The chat in the phone is an illustration. “Mila”, “MILAGPT” and the logo are trademarks of MILAGPT.