ITTales :(){ :|:& };:
1.66K subscribers
133 photos
17 videos
6 files
544 links
Этот чудесный мир IT

Contact: @kvaps
Download Telegram
Vibe Coding
Andrei Kvapil
Vibe Coding: как внедрять ИИ в инженерные процессы без магии и самообмана

В этом выпуске я рассказываю, как мы используем Claude Code и AI-агентов в повседневной работе инженерной команды Ænix.

За последний год AI для нас перестал быть просто помощником для генерации кода. Сегодня он участвует практически во всех процессах: разработке, отладке, код-ревью, исследованиях, документации, поддержке клиентов и даже подготовке архитектурных решений.

0:00 Почему мы считаем себя AI-first компанией
2:29 Какие модели и инструменты используем на практике
5:11 Как организовать работу команды вокруг Claude Code
12:00 CLAUDE.md, AGENTS.md и правила для агента
14:55 Как работать с контекстом, планами и памятью агента
21:02 Скиллы: как шарить знания внутри команды
26:07 MCP, хуки и автоматизация внешних систем
30:15 Как писать промты и общаться с нейронкой
33:24 Реальные кейсы: презентации, сайт и фронтенд
38:09 Когда агентный подход работает, а когда превращается в самообман
46:06 Линтеры, параллельные агенты и код-ревью
55:03 Spec-driven разработка: где граница между инженером и AI
58:31 Дебаг Kubernetes и инфраструктуры через AI
1:02:34 Постмортемы и артефакты сессий
1:05:55 RTFS: читаем исходники open-source вместо документации
👀9👍7🔥4
/me в очередной раз взглянув на свою колонку In Progress на рабочей доске (задачи на сегодня) взргустнул и подумал нужно эвулюционировать и продолжать оркестрировать свою работу дальше.

Всё сводится к тому что нужно строить свой собственный meta-harness над claude code.

Все предпосылки к этому уже выполнены:

- уже давнее время мы собираем транскрипты всех встреч в компании, они дают отличный артефакт для постановки задачи и начала работы.
- пачка MCP-серверов уже настроены во всевозможные каналы (google workspace, github, telegram, slack, read.ai) и прочее, могут постить от моего имени, забирать и отправлять документы.
- как жить с 4+ сессиями и не сойти с ума? И вот тут поподробнее

Когда эта проблема возникла, я начал ресёрчить, первым же делом я обратился к коллегам, в частности к @xor_dev (тимлиду нашей reliability команды по Cozystack)
У которого, в виду загруженности и разрозненности задач такая проблема была испокон веков.

Ваня постоянно поддерживает контекст с десятками клиентов и контроллирует работу команды.
Для того чтобы контекст не разъезжался, в первую очередь у него в голове, он сделал свой тул - Grimoire, который содержит в себе базу данных по каждому проекту и клиенту, и позволяет запускать сессии Claude Code прямо в браузере. Через стартовый промпт он сразу инструктирует их куда и как складывать контекст, откуда его вычитывать и как работать с этой системой.

В отличие от Obsidian вся история чуть-более интерактивная и крутится вокруг заметок. Каждая заметка - это своего рода entrypoint для входа в интерактивную сессию.
В интерфейсе можно выбрать заметку и запустить из неё нового агента, который уже будет знать весь необходимый контекст и обогощать общую базу знаний.
Исходники Grimoire доступны на GitHub: https://github.com/IvanHunters/grimoire

Сфера мета-оркестрации AI-агентов сейчас ещё достаточно молодая, проверенных решений и готовых концепций практически нет и из-за этого легко уйти не туда.
Прежде чем полностью погрузиться в готовое решение я решил пройти тот же путь и выработать подходы самостоятельно.

Следующие несколько постов будут именно про это.
💩25👍6🥴3
Итак находка первая - это claude agents
https://code.claude.com/docs/en/agent-view

Как оказалось в официальном claude code есть так называемый agent view.

Его изначальное предназначение - это менеджер долгоживущих background-сессий.
Так получилось что именно такие я и использую. Абсурд ситуации дошёл до того что мне проще переиспользовать существующую сессию чем заново объяснять контекст в новой. Но таких постоянных сессий у меня около 10 штук.

Так вот что бы в этом всём этом бардаке не теряться claude agents позволяет выводить их все на одном экране, переименовывать, видеть статусы и переключаться между ними.

Я даже перестал использовать свой плагин для tmux который выводит статусы в таб, и настроил себе алиас:
alias ca='claude agents'


Сейчас я запускаю клод только таким образом. Что удобно, в случае запуска новой сессии через claude agents, клод автоматом подхватывает директорию проекта, в которой я сейчас нахожусь, но в то же время я в любой момент могу нажать ← и увидеть список всех других сессий запущенных таким же образом в других проектах. Я могу быстро переключиться меду ними или даже закрыть окно, и вернуться к нему позже. Сессии продолжат работать в бэкграунде.

В итоге все мои сессии живут долго, переживают перезапуск компа, а я оперативно вижу все статусы и если агент требует моего внимания.
💩12👍21
Следующая мысль - это агенты, visibility это хорошо, но я не хочу следить за агентами, я хочу чтобы агенты работали сами и приходили ко мне с вопросами.

К чему я хочу стремиться? - Мне нужен условный Meeseeks Box 🗳 с красной кнопкой. Я нажимаю на кнопку появляется Mr. Meeseeks, говорю что оно мне нужно и дальше он бежит и делает задачу пока не выполнит.

Каждый Mr. Meeseeks живёт только для того чтобы выполнить задачу, он чуствует себя плохо если не может завершить её в срок. При необходимости Mr. Meeseeks может сам вызвать других Mr. Meeseeks чтобы они помогли ему с решением проблемы.

(отсылка к Рик и Морти)

Забавно но кто-то по мотивам мульт-сериала уже создал агента и скилл для Claude Code.

Применять в продакшене я это, конечно, не стал, но я пошёл дальше и начал работать над созданием оркестратора над claude agents.

Что я понял для себя: мне нужен mcp-сервер для claude-agents и набор инструкций как с этим работать.
Мне нужна одна управляющая сессия которая будет меня менеджерить и дать возможность ей работать с агентами, запускать, общаться, переименовывать точно так же как это делаю я.

Другими словами меняем push модель на pull

В качестве интерфейса с человеком - это по прежнему чат, здесь ограничение вызвано в первую очередь мной (человеком) и моей пропускной способностью.
Я не смогу следить за 20 агентами и при этом сохранять контекст, мне нужен менеджер, который будет этим управлять.

В итоге родился
https://github.com/kvaps/claude-agents-mcp
Теперь клод может самостоятельно работать с сессиями, а я могу оперативно подключиться к ним и проконтроллировать его работу
💩18👍4🤯1🙏1🤡1
Я всё ждал какого-то RFC или общепринятого стандарта на трейлеры описывающие использование AI-агентов в ваших коммитах.

Из практики нескольких крупных проктов:
- Linux Kernel
- Fedora
- LLVM

Популярность получил Assisted-By: <your AI agent>

В Kubernetes однако же есть строгий запрет на любые трейлеры, включая этот. А при создании пулреквестов вас обязывают расскрыть использование AI в явной форме.

И теперь я понял почему. Согласно правовой системе США, под которую попадают и все проекты CNCF, ваш код помеченный трейлером
Co-Authored-By: Claude <noreply@anthropic.com>

который Claude Code так заботливо штампует во все ваши коммиты, автоматически распространяет права на этот код и Антропику. То есть, согласно законодательству, он может реально на него претендовать.

По данной проблеме заведён issue, предлагающий заменить Co-Authored-By на Assisted-By, но антропики кажется не торопятся.

Факт остаётся фактом, единого стандарта до сих пор нет, но Co-Authored-By им точно не станет. А пока что предлагаю поддержать инициативу и перестать использовать Co-Authored-By для AI-агентов в своём коде.

Лично я переключаюсь на Assisted-By по умолчанию.
Но и конечно же читайте правила проекта, как оформлять свои коммиты для контрибьюта во внешние проекты.
👍9🗿5🥱1🖕1
Forwarded from linkmeup
Хороша та CVE https://nvd.nist.gov/vuln/detail/CVE-2026-53359 , для которой уже POC есть https://github.com/V4bel/Januscape
Опять или слили, или раскопали уязвимость с о-о-о-о-очень долгой историей, которую вдруг внезапно заметили и все такие «Ой-ой-ой, что же это делается».
В общем, в KVM есть метод, как выйти за пределы виртуалочки на уровень хоста из-за ошибки 16 лет назад. То есть, буквально, коммит https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2032a93d66fa, где всё сломалось, был сделан в августе 2010.

А пофиксили всё 19 июня в этом году. https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=81ccda30b4e8

Одно хорошо – нужен локальный рут.
🔥10😁3💩3
Прямо сейчас @lllamnyp показывает свой новый CNI драйвер для KubeVirt на eBPF, кому интересно подлючайтесь
https://zoom-lfx.platform.linuxfoundation.org/meeting/93845795591?password=a263fc60-ea72-41c8-84c8-a00d683ecee5
🔥10🤔1
Forwarded from k8s (in)security (r0binak)
Марафон LPE уязвимостей в Linux продолжается. Команда Nebula Security раскрыла GhostLock (CVE-2026-43499), stack-use-after-free в подсистеме rtmutex ядра, который был внесён ещё в Linux 2.6.39 и просуществовал более 15 лет. Корень бага в том, что на proxy-пути функция remove_waiter() очищает pi_blocked_on не у той задачи, оставляя висячий указатель на освобождённый фрейм стека ядра. Затронуты практически все дистрибутивы без патча (диапазон от v2.6.39-rc1 до v7.1-rc1), причём триггер не требует ни привилегий, ни user namespaces, ни специальной конфигурации ядра.

Ключевая опасность в том, что уязвимость превращается в container escape, локальный непривилегированный атакующий из контейнера может подняться до root на хосте. Авторы довели эксплойт до 97% стабильности через forge поддельного rt_mutex_waiter, перезапись inet6_protos[IPPROTO_UDP] и трюк с CPU entry area, за что получили 92 337 долларов в Google kernelCTF.

Полностью рабочий эксплойт и PoC уже открыто выложены в репозитории CyberMeowfia на GitHub.
6👍2👏2😱2😁1
Заопенсорсили ещё один наш инструмент — keycloak-kms-proxy.

Начну с проблемы. Keycloak хранит PII пользователей — email, имя, фамилию, атрибуты и т.д. — в своей базе открытым текстом. Согласно GDPR эти данные считаются персональными и должны быть защищены в состоянии покоя. Обычное storage encryption или шифрование на стороне PostgreSQL помогают лишь частично: ключ всё равно живёт рядом с данными, внутри Postgres, а ещё такой подход не позволяет нормально ротировать ключи без остановки сервиса.

Есть несколько неофициальных плагинов, решающих эту задачу, например Keycloak-PII-Data-Encryption-Provider. Но и у них хватает ограничений: жёсткая привязка к версии Keycloak, интеграция на уровне Java и статический ключ, передаваемый через переменную окружения.

Мы пошли другим путём и сделали прозрачный прокси на уровне wire-протокола PostgreSQL. Он встаёт между Keycloak и его Postgres-базой: Keycloak думает, что работает с обычным Postgres, а прокси на лету шифрует нужные колонки при записи и расшифровывает их при чтении.

Само решение построено по тем же принципам, что и механизм KMSv2 в Kubernetes.

Каждое зашифрованное значение самоописываемое ($KKP$...), поэтому прокси спокойно работает с частично зашифрованной базой, пока backfill-утилита постепенно шифрует оставшиеся записи. Ротация KEK в Vault полностью прозрачна: версия ключа хранится вместе с каждым завёрнутым DEK, поэтому старые данные продолжают расшифровываться без каких-либо миграций.

В Cozystack это уже встроено в системный пакет Keycloak как опциональная возможность. Достаточно включить флаг шифрования в Helm-чарте — прокси автоматически разворачивается, а Keycloak переподключается к нему без дополнительной настройки.
🔥32👍5🤔51
Опенсорснули aeman — инструмент для краткосрочного планирования, который мы используем в Ænix.

Это такой командный Todoist на стеройдах или opinionated вариант доски, со списком задач и краткосрочными спринтами, нацеленный в первую очередь на инженерные команды.
В качестве бэкенда используется GitHub Projects, UI работает поверх write-behind-кэша и отвечает мгновенно, а запись в GitHub уходит асинхронно.
У самой доски Kubernetes подобный API и MCP-сервер для работы с AI-агентами

Подробнее про сам инструмент и наши процессы можно почтитать тут:
https://habr.com/ru/companies/aenix/articles/1062562/
👍121
ITTales :(){ :|:& };:
Магия кэша в controller-runtime: почему ваши контроллеры быстрые, стабильные и не убивают apiserver Если вы когда-нибудь писали Kubernetes-контроллер на Go, то почти наверняка использовали controller-runtime. А если использовали — значит, пользовались одной…
Наконец-то выехал перевод в официальный блог Kubernetes

В ходе публикации пришли мейнтейнеры controller-runtime, и сказали: всё неверно, выкидывайте. В статье действительно нашлось несколько неточностей из-за чего в #sig-docs-blog разыгралась целая драма.
Мы с @lllamnyp оперативно готовим правки, а пока можете за нас порадоваться. Я очень рад фидбеку, пусть и негативному, считаю что в спорах рождается истина.

Урок на будущее: всегда звать мейнтейнеров на ревью :)

https://kubernetes.io/blog/2026/07/29/controller-runtime-cache-explained/
🔥174
This media is not supported in your browser
VIEW IN TELEGRAM
Кстати, вчера собрал образ Talos с shell на консоли — чтобы видеть, что происходит на ноде, когда сеть недоступна и talosctl до неё не достучаться.

Что внутри:
— прошивки Broadcom bnx2/bnx2x и микрокод Intel;
— busybox и iproute2;
— вывод на serial-консоль включён (console=ttyS0,115200n8), автоперезагрузка при панике ядра выключена.

Как пользоваться:
1. Загрузиться с ISO — на консоли откроется дашборд Talos.
2. F9 или Ctrl+] — переключение в shell (root). exit или Ctrl+D — обратно в дашборд.
3. Переключаться можно и напрямую: Alt+F1 — логи ядра, Alt+F2 — дашборд, Alt+F3 — shell.

Важно про установку на диск. Если будете ставить, укажите в machine-config тот же самый образ:

machine:
install:
image: ghcr.io/aenix-io/talos:v1.12.1-debug-shell


Иначе при установке возьмётся стандартный installer без прошивок — они пропадут вместе с сетью уже после установки на диск. Это частая причина ситуации «на загрузке сеть была, после установки нет».

Важно про безопасность. Образ отладочный: доступ к консоли, в том числе через iLO, даёт root без пароля. Он предназначен только для диагностики, для постоянной эксплуатации его использовать не стоит.
🔥14❤‍🔥5💊51
Чему меня научили десятки AI-агентов: как я в качестве эксперимента написал хранилище Blockstor

Многие просили меня рассказать каким образом я в одиночку навайбкодил аналог LINSTOR для Kubernetes. Получилась довольно интересная история.

В процессе разработки я выработал несколько полезных паттернов при работе с агентами и хочу поделиться выводами, которые теперь активно применяю и в своей повседневной деятельности.

https://habr.com/ru/companies/aenix/articles/1068652/
👍11🔥6❤‍🔥3💩21