How Mila did it: case studies and news
A new version of Mila comes as a card: what is new in a few lines and a button. She updates only when you tap it. Your files, memory and keys are never touched, and any update can be undone. Every line below links to the code.
New skills come to you. Your work stays as it is.
The mila-update skill knows the installed version, compares it with the latest release and brings only what helps. skills/mila-update:9-12
Once a day Mila looks for a release newer than hers. Test builds (-rc) and withdrawn versions are skipped.
skills/mila-update:38-40 update.py:117 update.py:523-534The release list, the skill headers and the hook code are checked first. One error and the version is turned down; nothing is written.
update.py:422-433 update.py:557-561 test_nightly.sh:67“There is an update”, a few lines from the release notes, what stays untouched, and two buttons: ✅ Update and ⏸ Not now. The same version is not offered twice.
update.py:481-486 update.py:565-571 test_nightly.sh:41Mila updates after ✅ on this exact version. A tap from yesterday, for another version or from someone else does not count. After “Not now” she waits for the next release.
skills/mila-update:59-60 skills/mila-update:63 skills/mila-update:80An update brings core skills, hooks and tools, the mila launcher, the constitution and the canons. The exact list is in the release file. skills/mila-update:27 release.json:6-58
A list built into the script is stronger than any release: those paths are never written, even if a release by mistake asks for it. update.py:52-57 update.py:63-65 release.json:60-78
memory/ and journal/ folders and the state of crons. update.py:54 update.py:56.env, secrets/, the Claude login, the update settings themselves. update.py:55-57Before writing, every file is compared with what is installed. There are four outcomes. update.py:244-257
You have the previous version and did not edit it. It is replaced with the new one.
skills/mila-update:33You changed the skill. Your version stays; the new one is put aside in mila-update/new/, and Mila tells you about it.
On the first check a file may even be newer than the release. It is taken only by name, after a comparison.
skills/mila-update:35 test_update.sh:34Every update is written to a journal: when, which version, from where, who decided and where the backup is. skills/mila-update:22-23 update.py:375-377
Everything that will change goes into a .tgz in mila-update/backups/ first.
One command returns everything as it was before the last update: new files go, old ones come back from the backup.
update.py:608-612 test_update.sh:56Files in place, skills readable, hooks compile, the version recorded. In night mode a failed check means an automatic rollback and a card: “I put everything back”.
update.py:436-458 update.py:575-580 test_nightly.sh:61-63The developers can withdraw a version. It is never installed; if it is already installed, Mila warns you.
skills/mila-update:45 update.py:150-161 test_nightly.sh:75Channel stable (the default) takes only released versions. canary follows the main branch. manual means Mila does not check by herself. skills/mila-update:18-20 update.py:588-596 test_nightly.sh:84
By default auto is off: at night only a card, the update after your button. If you turn auto on yourself, she updates at night on her own, with a backup, a check and an automatic rollback, and then sends “what is new”. update.py:33 update.py:572-582 test_nightly.sh:52
Each home gets its own night slot of 0–119 minutes, so Milas do not all go at once. update.py:604-605
$ update.py status $ update.py check $ update.py diff --tag v1.5.2 $ update.py nightly --dry-run $ update.py rollback $ update.py config --set channel=stable
owner_chat the card is only a file in mila-update/cards/. The release signature is checked only if require_signed is on. update.py:495-510 update.py:554-556| File | What it does |
|---|---|
| skills/mila-update | how Mila updates and what she never touches (in Russian, short English part) |
| update.py | check, compare, update, rollback, night step, health check |
| release.json | what a release updates and what it never touches |
| yanked.json | withdrawn versions |
| test_nightly.sh | 23 checks of the night step |
| test_update.sh | 27 checks of update and rollback |
| CHANGELOG.md | what is new in every version |
The kit is open: skills, hooks, tools and templates. Run test_nightly.sh and test_update.sh yourself; every pull request is read by a person and by Mila Quality.
Facts on this page: github.com/shakhruz/mila (main, 8a6b97d, v1.5.2), checked 22 Oct 2026; test_nightly.sh passed 23 of 23, test_update.sh 27 of 27. The chat in the phone is an illustration. “Mila”, “MILAGPT” and the logo are trademarks of MILAGPT.