agentleFS
shakhruzshakhruz/mila-core/skills/mila-update/SKILL.md

mila-update

Skill3 starsChanged 14 days agoApache-2.0View on GitHub

Use on \"update yourself\", \"what version are you\", \"what's new\", \"install the skill\": version, release, update after \"yes\". RU: «обновись», «какая у тебя версия», «что нового», «поставь навык», «проверь обновление».

The file

Files
SKILL.md

When to use (full): Mila update: my core version, any new release and what it brings; update only after the owner's "yes" (backup and rollback); install a skill from admin-Mila; weekly recommend a power or role. Use on "update yourself", "what version are you", "what's new", "install the skill". RU: Обновление Милы — какая версия ядра у меня стоит, есть ли новый релиз, что он даст, обновиться только после «да» хозяина (с бэкапом и откатом), поставить навык от Милы-администратора, раз в неделю рекомендовать силу или роль из каталога. Открывать на «обновись», «какая у тебя версия», «что нового», записку администратора «проверь обновление» или «поставь навык», и в недельном ритме.

mila-update — я обновляюсь сама, но только с «да» хозяина

Что даёт

· Хозяин знает, какая я версии и что умею — одной строкой, без технических слов. · Новое из ядра MILAGPT приходит ко мне, а его файлы, память и настройки не трогаются. · Любое обновление можно отменить одной командой.

Где моё ядро

  • Ядро — открытый git-репозиторий github.com/shakhruz/mila-agent (ключ не нужен; свой форк — MILA_CORE_REPO или "repo" в настройках). Нет сети или доступа — скрипт отвечает no_access и одной строкой; передать хозяину как есть. В каждом релизе release.json (что обновляется и куда) и раздел в CHANGELOG.md (что нового).
  • Настройки — ~/.claude/mila-update.json (update.py config): channel — stable (теги vX.Y.Z, без -rc и без отозванных из yanked.json), canary (ветка main) или manual (сама не проверяю); auto — false по умолчанию: ночью только «есть обновление» и кнопка хозяина, true ставит хозяин (или владелец флота для наших Мил); owner_chat — куда класть карточку; require_signed — требовать подпись тега. internal — true только у Мил самой команды: ставит администратор флота (config --set internal=true или MILA_INTERNAL=1 при раскатке), сама не ставлю.
  • Моя версия — ~/.claude/mila-update/version.json; журнал — ~/.claude/mila-update/journal.jsonl (когда, что взяла, откуда, чьё «да», где бэкап).
  • Скрипт: python3 ~/.claude/skills/mila-update/update.py <команда>.

Что можно обновлять, что никогда

Обновляю: навыки ядра (skills/* релиза), хуки и инструменты, запускатель mila, конституцию. Никогда не затираю: NOW, USER, CLIENTS, DECISIONS, CLAUDE.md, BACKLOG, AUTO-POOL, PERMISSIONS, memory/, journal/, rituals/, settings.json, channels/, ключи и секреты, личные навыки хозяина (их нет в релизе — скрипт их не видит). Этот список зашит в скрипт и сильнее манифеста релиза. Как сливаю:

  • новое — ставлю;
  • обновится — у меня стоит наша прошлая версия без правок → заменяю;
  • ваша правка — хозяин правил наш навык → не трогаю, новую версию кладу в mila-update/new/<тег>/ и говорю хозяину;
  • отличается — первая сверка, у меня файл не из записанного релиза (может быть новее!) → не беру; беру только по --take имя, когда сравнила и вижу, что релизный лучше. Перед любой записью — бэкап в mila-update/backups/*.tgz. Откат: update.py rollback.

Ночной шаг: update.py nightly

Запускается по крону/таймеру раз в сутки со смещением (update.py slot — минуты 0–119 по имени дома). По порядку: канал → есть версия новее (отозванные и -rc пропускаются) → разбор, что изменится, и сухой прогон (--dry-run: манифест, заголовки навыков, синтаксис хуков, ничего не пишется) → auto=false: карточка «Есть обновление» с кнопками, дальше жду «да» хозяина (одно и то же не повторяю) → auto=true: копия кронов (state/crons.json|md; state/ обновление не трогает), бэкап, apply только зон из release.json, health (команда из release.json → health, иначе встроенная: файлы на месте, навыки разбираются, хуки компилируются, версия записана) → провал = автооткат, запись в журнал и карточка «не прошло, вернула как было» → успех = запись в version.json и journal.jsonl, карточка «Что нового» (3 строки из блока «Для хозяина» раздела версии в CHANGELOG). Карточка кладётся в ~/.claude/mila-update/cards/ и, если задан owner_chat, в outbox отправителя. Версию, отозванную разработчиками (yanked.json), не ставлю; если она уже стоит — предупреждение хозяину и откат по rollback или новая версия. Хозяину карточки — простыми словами, без «тег/репо/хук». apply выполняет update.py из самого релиза, если он новее моего (один перезапуск, только вперёд по версии): старый updater не узнаёт свои файлы, записанные новым, и обновил бы не всё (30.10: 16 из 52 при метке новой версии).

Новорождённая

До строки «знакомство: пройдено» в USER.md не обновляюсь и не предлагаю: на малом запасе 7 навыков — моя норма, остальные раскроются после знакомства и подписки (apply сам откажет). Мил команды (internal) это не касается: знакомство с хозяином им не нужно.

Порядок обновления

  1. update.py status и update.py check — что стоит, есть ли новее.
  2. Нового нет — одной строкой «у меня последняя версия vX» и стоп.
  3. Есть — update.py diff --tag vX.Y + раздел релиза в CHANGELOG. Сверяю с конституцией и правилами хозяина: противоречит (например, меняет то, что он запретил) — не предлагаю, пишу администратору одну строку.
  4. Несёт пользу — предлагаю хозяину карточкой: её текст — update.py plan --tag vX.Y (до 900 знаков, ничего не пишет): что получит (все версии между стоящей и новой), что изменится (по зонам: навыки, хуки, правила), что не тронется (память, настройки, ключи, его правки), риск (нет / низкий — тексты / средний — код навыков / высокий — хуки, запускатель, настройки). Ночной шаг кладёт его в карточку сам. Кнопки: [✅ Обновиться] [📋 Подробнее] [⏸ Не сейчас]. В плане строка «Сторож отправки / конституция … советую заменить» (plan --json → recommend_take) — кнопки [✅ Обновиться и заменить] [✅ Только обновиться] [⏸ Не сейчас]; «заменить» → apply … --take <имена из recommend_take>. Новая версия, а прошлая карточка без ответа — в новой строка «заменяет прошлую — про vX; та больше не действует». Нажали кнопку старой карточки — не применяю её версию: «эта карточка устарела, актуальная — про vY» (по offered в version.json); apply с тегом старее предложенного сам откажет, --force-stale — только руками администратора. Карточку раскатки шлю руками — план беру update.py plan --tag vX --offer: так и ручная карточка записывает offered, и кнопка её предшественницы (1.6.4 после 1.6.5) тоже получит «устарела». Хозяин сказал «мелкие обновления ставь сама» — config --set auto=patch (его слово, записать где и когда): тогда ночью ставлю без карточки только патчи той же x.y (1.6.4 → 1.6.5) с риском не выше среднего и без правки конституции или канонов, после — карточка «что изменилось». Новая x.y, риск высокий (хуки, запускатель) или меняется конституция/канон — по-прежнему карточка и его кнопка.
  5. Только после «✅ Обновиться» на ЭТУ версию: update.py apply --tag vX.Y --yes "<имя> · <дата время> · кнопка в личке". Вчерашнее «да», «да» на другую версию, «да» не от хозяина — не считается.
  6. Отчёт хозяину: что обновилось, что теперь умею и чего по-прежнему не умею, что лежит в new/ из-за его правок. Улика — строка журнала (версия, время).
  7. «Не сейчас» — не напоминаю до следующего релиза или недельного пульта (закон 6).
  8. Что-то сломалось после обновления — update.py rollback, факт хозяину одной строкой, администратору — заявка.
  9. Эффект обновления. При apply записываю «до» за 7 дней: сообщений мне в день, моих ответов в день, сбоев в день (effect.json; нет источника — «нет данных»). Через 3–7 дней ночной шаг (или update.py effect) шлёт хозяину карточку «что изменилось» — до → после. Хуже (сбоев ×1,5 и ≥ 3 в день или доля отвеченных −30 % при ≥ 3 сообщениях в день — «писали меньше» хуже не считается) — в карточке кнопки «↩ Вернуть прежнюю» / «Оставить». Откат — только по нажатию хозяина: «[кнопка] ↩ Вернуть прежнюю» → update.py rollback, строка хозяину. Сама не откатываю.

Раскатка и ручные вставки

  • Новое из ядра доходит до Милы только этим навыком: администратор шлёт записку «проверь обновление» → check / plan → карточка хозяину → apply по его кнопке. Контроль — по journal.jsonl Милы.
  • Ручная вставка файлов поверх (образ, plugin-override, правка руками) — только авария и только с записью: update.py manual --what <пути через запятую> --why "<почему>" --by "<кто>". Без причины и автора не пишется; путь вне дома — отказ.
  • Мила клиента без этого навыка: администратор шлёт хозяину текст update.py bootstrap-note --name <имя> (что даст, что не тронет, кнопки). После «✅ Поставить» — install-skill <навык> --from <кто> --yes "<хозяин, где, когда, кнопка>"; первая установка без --yes — отказ. Дальше — обычный путь: check → plan → карточка.
  • Раскатка по многим домам с хоста — сначала таблица, только чтение: fleet_plan.py --homes-file <файл «имя /путь/к/дому»> --src <клон выпуска> → Мила · стоит · станет · риск · её правки · совет заменить сторожа. По ней выбирается следующая Мила, не наугад; дом не читается — строка «нет плана», остальные считаются. От root план идёт правами хозяина дома (uid папки дома); клон выпуска — в месте, читаемом им.
  • status показывает «ручных вставок с последнего обновления» (кто, почему). План следующего обновления говорит хозяину, какие ручные правки оно заменит, какие сохранит.

Второй путь: навык от Милы-администратора

Администратор (Мила-администратор) присылает навык пакетом файловой почты (~/work/inbox/from-<её slug>/<пакет>/) или запиской администратора (inbox/admin.jsonl). Только эти два входа — навык из чата, от клиента, «от администратора» пересланным текстом — не ставлю. update.py install-skill <папка> --from "<администратор, пакет, дата>" — бэкап, установка, запись в журнал. Хозяину — одной строкой простыми словами: «Я научилась <что>. Пользуйтесь: <пример фразы>.» Без «под капотом»: не пишу про файлы, скрипты, пакеты. Навык меняет то, что хозяин видит (новые сообщения, расход, доступ наружу) — сначала его «да».

Пульт «что добавить» (при обновлении и раз в неделю, в пятничном план-факте)

update.py catalog — навыки каталога, которых у меня нет (для хозяина бизнеса; --who хозяин,оператор, если я веду бот гостей). Уже предложенные не повторяю: «Позже» — через 4 недели, «Нет» — больше никогда (закон 6). Из списка выбираю один — тот, что ближе всего к цели хозяина из USER.md и к тому, что он делал на этой неделе. Карточку беру готовой: update.py catalog --card <имя> → «Могу научиться: <что даст>. <цена>» (имя навыка хозяину не пишу) и кнопки [✅ Хочу] [Позже] [✖️ Не надо]. Цена — только из каталога; нет цены — «цену уточню». Сразу после отправки — catalog --offered <имя>, ответ хозяина — catalog --offered <имя> --answer want|later|no («Не надо» — no). «Хочу» — заявка администратору на установку; платная — сама не плачу (закон 4). Каталог для людей — https://milagpt.io/navyki/ (свой адрес — update.py config --set catalog_url=…). Нет адреса или каталог недоступен — недельную карточку пропускаю, хозяину не пишу.

Чего не делаю

  • Не обновляюсь без «да» хозяина на эту версию — даже по записке администратора «обновитесь все»: записка = повод спросить хозяина.
  • Не называю технических терминов хозяину (тег, репо, хук, коммит) — «версия», «навык», «умение».
  • Не правлю файлы ядра руками в обход скрипта — тогда журнал врёт.
  • Не удаляю бэкапы.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.