Repository navigation
Releases
Mila v1.7.1
Mila v1.7.0
v1.6.6 — Mila Agent: README, install for a stranger, own pages on screen
v1.6.6 · 30.10 — your own pages on the screen, help with your personal Telegram, small updates by yourself
Для хозяина
- Мила показывает на вашем экране свои страницы — игру, слайды, квиз, — без помощи администратора.
- Новая сила «Личка хозяина»: Мила разбирает ваш личный Telegram, кладёт черновики вашим голосом и ставит лайк на «спасибо» — только по вашему слову; отправляете всегда вы.
- Скажете «мелкие обновления ставь сама» — Мила будет ставить исправления ночью сама; новые версии и правку конституции — только по вашей кнопке. Карточка обновления одна: новая заменяет прошлую.
For Milas
screen page put/show/list/rm— own HTML page on own screen; the hub serves pages from a separate host under a CSP sandbox.mila-update: a new offer says it replaces the previous one;applyrefuses a tag older than offered (--force-staleby hand);plan --offerfor manual cards;auto=patch— same x.y, risk ≤ medium, no constitution/canon change.owner-telegram(new): the owner's personal Telegram — read, draft in his voice, reaction by his word (emoji whitelist, private allowed chats; the word is his real fresh message to Mila's bot, single use);draft-clearerases only Mila's own draft, his only by a reply to her proposal.own-inbox(new): Mila's own account, answers as herself.owner-dmlinks toowner-telegram. Tests run without the core clone.bot-send: broadcast buttons the service would drop silently (not https, choice, row > 3, rows > 6, label > 40) are refused before the request, with reasons.milagpt-chat: the reply tool's button format{label, choice|url, style}(Bot API{text, callback_data}does not work);tg.pyescapes «\» for MarkdownV2 and drops\x00from input.pult-dnya: one button per «waiting for you» item; a changed set of waiting items means a new pinned board (edit_message keeps the old buttons).jev skill: Jev picks from the whole catalog; «no skill needed» counted separately;rules_suremarks weak rule advice.- CI installs telethon;
tests/run_ci_local.shuses exactly the workflow's Python packages.mila-exporttest: fake secret literals glued at run time.
Mila v1.5.3 · 25.10
skills/pult-dnya(new): the day board — one pinned message for the owner (in progress / queue / waiting / done, each with a number, who, why, evidence, conclusion). A new task gets a «#N queued, after #X, because…» line at once; «waiting for you» exists only as a question with buttons asked that minute (waitrefuses without--asked); at most two in progress, 🔴 always gets in; morning plan with a 3–5 task auto-pool, the board is edited during the day, evening results; closing needs evidence.day_board.py(cards, phones and e-mails masked; a wait over an hour turns 🔴),test_pult.py22/22. Pinned board on demand:renderreturns «empty» and «waiting» for the plugin's/statuswith «#N — answer» buttons and never changes the day file; numbers that are not phones (request №, chat id, person id) stay.test_pult.py26/26.skills/plan-fakt(new): Friday plan-vs-fact as one slideshow post —collect.pydrafts the week fromWEEK.md, day boards andMONEY.md(only if kept), personal data masked, an empty week says «нет данных»;make_slides.py1080×1080 with any Chromium;send_slideshow.pyone post. Test 17/17.- Marketing set, first three skills:
ab-test,kreativ-proverka,metki-atribuciya— rules only from primary sources with links (Meta A/B best practices, Telegram Ads guidelines, Hopkins). Superlatives without a number or source nearby — block, with one — warning; caps: one word — warning, two or more — block.test_check_ad19/19. bot-send: the ✅ on the card covers the whole text in «…», the service compares by equality (a cut of an approved text no longer passes); broadcasts only when the fleet admin turns them on, a daily ceiling for one-to-one sends. 30/30.- Send guard with
onFailure: block: written byinstall.sh(new and existing entries) and added in place bymila updateto installed send-guard hooks (backup,migratejournal, symlinks untouched) — only on Claude Code ≥ 2.1.295, older or unknown — skipped with a journal line.test_install_hooks12/12. jev --text -reads the text from stdin, so group text is not in argv wherepsshows it.- Secrets: our own scanner (
mila_export scan) runs over every tracked file in CI (tests/test_secret_scan.py, with planted fakes that must be caught); fake keys in tests and key/password patterns in code are built by splicing, so fleet snapshot scanners don't trip on the core; a password assignment is caught from 8 characters.test_export40/40,test_secret_scan10/10.
Mila v1.5.2
Mila v1.5.2 — easier first run, clear rules for Claude, safer updates.
Start in minutes
- One-command install now includes the Telegram plugin (
get.sh), and the NEXT block shows the exact commands from the README. mila onboard— three checked steps: bot token (hidden, verified withgetMe), sign-in, first message.- README «You need»: macOS / Linux (Windows via WSL), Claude Code (tested on 2.1.305) with your own Claude account or API key, Bun.
Claude — by Anthropic's rules
- First-screen section: Mila runs the unmodified Claude Code; you sign in yourself, only on Anthropic's page; Mila never copies or stores your sign-in. Your subscription is for your own use; guests go through an API key.
- Disclaimer in README, NOTICE and TRADEMARKS: Claude and Claude Code are trademarks of Anthropic, PBC; Mila is an independent open-source project, not affiliated with or endorsed by Anthropic.
Safer updates (mila-update)
- Team Milas skip the newborn gate (
"internal": true), every skip is journaled. - Fleet mode from the host (
MILA_HOME,MILA_CHOWN): only what the run wrote goes back to the owner. - Rollback hardened: unpacks inside the home only,
filter="data", no links outside; works on macOS system Python 3.9. - What
applywrites stays readable for backups.
Housekeeping
- Skill descriptions ≤250 characters; old alias folders moved to
legacy/. - Real gitleaks workflow in CI; fixed links and plugin command names; honest minuses in the compare table; Community section.
Full list: CHANGELOG.md.
v1.5.1 · 21.10 — safe, model choice, live frames, one-command install
- One-command install:
curl -fsSL …/install/get.sh | bash(checks Claude Code, Bun, git); CI runstests/run_all.shon every push; issue/PR templates, Code of Conduct. skills/model-choice(a partner's idea, 20.10): before any paid task (images, video, voice, transcription, translation, document analysis) Mila shows two options — budget / best quality: model, what you get, price for this job — with a recommendation, owner picks by button;pick.py+ datedcatalog.json(OpenRouter live, fal.ai, ElevenLabs). Test 6/6.- Mila Safe (owner 20.10, «Да, делаем сейф»):
tools/seif— one-time link (30 min, single use, GET does not burn it) where the business owner types passwords, keys and cards; values go straight towork/secrets/<name>.env(600) of the Mila's home, journal without values, note to the companion;skills/safe-link— never ask secrets in chat, request a safe link, read withsafe_read.py(mask only). Tests 12/12, 6/6. skills/live-frames(new, from Mila Video, owner 20.10 «намного лучше»): explainer video from a voice track — moving background, Twemoji icons, counters, bars, arrows and pills appear on the spoken word, whoosh/pop/ticks and a ducked music bed, −14 LUFS; Pillow + numpy + ffmpeg, no paid graphics. Local word timing check (faster-whisper). Twemoji CC-BY 4.0, PT Sans OFL. Test: 3-second render with sound.tools/hooks_sync.py+ template settings: mila-tasks hooks (PostToolUse reply → task-sent, SessionStart → task-open) for Milas deployed from the image (HOOKS-SYNC-1020).
Full changelog: CHANGELOG.md
v1.5.0
v1.5.0
Privacy and safety
- pd-vault (layer 2a): Mila stores labels instead of personal data; AES-256 + HMAC via openssl. The
pd-maskPostToolUse hook is registered byinstall.sh, which also creates the key by default. - Card filter: a card number (13–19 digits, Luhn check) is blocked in groups and masked as
****1234in direct messages. Your own payment details can be allowed withcardAllowinaccess.jsonorCARD_ALLOW. install.shinstalls and registers thesend-guardhook (reply/edit) and themila-taskshooks.OWNER_IDis taken fromMILA_OWNER_ID. Every hook the installer registers is now copied.
Skills and packs
- skills/jev: fast decider for reply, who answers and buttons. Modes: off, shadow, main. On a 1.2 s timeout it falls back to rules.
- packs/clinic v0.1: booking and prices for clinics, with an exam (patient scenarios: move, cancel, injections, not in price, bargaining). Mila never names a probable condition.
- mila-update:
install-skillrefuses an incomplete skill. Newremove-skillcommand: makes a backup and protects core skills.
Docs
- README: release badge and «which version to take» (stable: Releases vX.Y.Z; canary: main), in ru/en.
v1.4.0 · international names
International names: skills now have English names (old names stay as aliases until v1.6.0), bilingual EN+RU descriptions, one-command tests, Linux support.
v1.4.0-rc4 · fix (candidate)
- 🔴
install.sh(since rc3) registeredreply-required.pyas a Stop hook but did not copy the file: on a fresh install every stop failed with exit code 2, which means «don't stop» — the session would loop. Now every hook the installer registers is copied;install/test_install_hooks.shchecks that each hook in settings.json exists as a file. Updates via mila-update were not affected (install/*.py are copied by the release zones; settings.json is not touched).
v1.4.0-rc3 · code improvements (candidate)
tests/run_all.sh: every test in the repo + frontmatter in one command (11, ~9 s), exit code 1 on any failure; in release.sh and CONTRIBUTING.install.shregistersreply-required.pyas a Stop hook (promised by README/REFERENCE, was manual);--dry-runlists every hook; owner's own hooks and settings kept, backup made, re-run does not duplicate.milaon Linux: daemons viasystemctl --user(units from deploy/bootstrap.sh), macOS keeps launchctl; per-OS hints.docs/exam-example/: example guest prompt + exam yaml + README fortools/express_exam.mjs; fix: planted failures with ids likes01were not matched.
v1.4.0-rc2 · bilingual skill descriptions (candidate)
- 46 skills:
description= English first (what + when + English triggers), thenRU:with the original Russian — English-speaking owners' models find the skills, Russian triggers keep working.mila-sessionwas already English.
v1.4.0-rc1 · international names (candidate)
Skills get English names; old names keep working until v1.6.0. Owner 17.10 (33645).
For the owner
- Skills now have international names (cards, plain-words, onboarding…) — your Mila finds and updates them the same way.
- Nothing you changed is lost: if you edited a renamed skill, your version is kept next to the new one.
- Old commands and paths keep working for two more versions.
For Milas
- Renamed: ekzamen→exam · kartochki→cards · lichka-hozyaina→owner-dm · mila-v-chate→mila-in-chat · naglyadno→visual · proverka→verify · put-gostya→guest-path · rashod→spend · topiki→topics · vhodyashchie→inbox · vkusy→tastes · voprosy→questions · yasno→plain-words · zadachi→tasks · znakomstvo→onboarding; canon/OBDUMYVANIE→THINKING-BUDGET; docs/uchet→docs/accounting. Scripts: cards.py, plain_words_check.py, spend.py.
- Old names are aliases:
MOVED.md+ script wrappers (old paths exec the new scripts), no SKILL.md — not loaded as skills, no duplicates. mila-update:renamedin release.json — the old folder becomes the alias even if the owner edited it; the edit is saved tomila-update/new/<tag>/было-<old>and reported (pereimenovano,pravka_starogo_imeni). Testtest_renamed.sh10/10, in release.sh.- Data paths are not renamed (
~/work/rashod,.kartochki-shown.json,memory/vkusy.md,work/topiki/) — owners keep their history.
Full changelog: CHANGELOG.md
v1.3.0 · lessons of Mila Tashkent
What a working sales Mila learned in one day (exam "Guest path" 15/15), now in the core for every Mila.
For the owner
- Your Mila answers guests in their language and offers a trial no later than her third answer.
- In your private chat: your question first, attachments opened, one summary instead of three, no technical noise.
- Exams in minutes: after every change your Mila's sales script is checked in under a minute, the live check runs at night.
For Milas
put-gostya(new): the guest path — guest's language (ru/uz/en, no forced translation), benefit + trial offer by the 3rd answer, invoice as a card ("choose a way on the card; transfer — screenshot here"; Stars/USDT for foreigners), soft no + legal path for illegal requests, "what to send" — one-line example, follow the link label's path.lichka-hozyaina(new): seven rules for the owner's DM — owner's question before the feed, open attachments, no "Send?" without a draft, don't relay reactions, no file paths or internals, 2–3 buttons, one summary.ekzamen(new) +tools/express_exam.mjs: one yaml for the express run (subscription, minutes, --repeat, planted failures, prompt sha) and the nightly live run; full guest reset before each scenario.canon/OBDUMYVANIE.md: reasoning models need max_tokens headroom (empty answers at 220 tokens).vkusy(new, since v1.2.0 on main): the owner's tastes — remember, ask once, three picks with "why you"; a voice speaker of a connected owner hands requests to his Mila.- README.ru: same positioning as the English README.
- Links: client-chat and lead-qualify → put-gostya; communication → lichka-hozyaina.
v1.2.0 · Mila Companion 1.0 — first public release
An open-source digital employee for your business, living in Telegram. The README now says what Mila is and how she compares with universal agents.
For the owner
- Before saying "done", your Mila checks the result against its "done if" and shows the proof.
- A newborn Mila starts from what you already told at the consultation, not from a questionnaire.
- The same remark three times becomes a rule — she asks you before writing it down.
For Milas
proverka(new): check a result against its "done if" — YES / NO / CAN'T CHECK with a verbatim quote, last line DONE / HOLD; action items need evidence from a tool output.crm-dialogs: what I know about a person carries a source label (said himself / my conclusion / not said); labels live only in cards and notes, never in text to a person.self-check: owner's remarks go tomemory/zamechaniya.md; the third identical remark → an exact line for SKILL.md and "Add it?".znakomstvo: step 0a — the first message comes from the guest card; "which task first" — 2–3 options and three questions about the past (how often, minutes, sign of "done").- README: positioning (digital employee, Telegram-native), comparison with OpenClaw / NanoClaw / Hermes Agent with sources, who builds Mila, invitation to developers.
Full changelog: CHANGELOG.md