Мой AI-workspace: одно хранилище, три агента и вики, которая учится
Долгое время мои проекты жили где попало. Заметки в одном приложении, скрипты в случайных репозиториях, а большая часть контекста только у меня в голове. Каждый новый чат с AI-ассистентом начинался с нуля, и я снова и снова объяснял одно и то же: где сервер, как мы деплоим, что я уже пробовал на прошлой неделе. В какой-то момент стало очевидно, что проблема не в модели, а в памяти вокруг неё.
Поэтому я собрал один workspace для всего. В этом посте расскажу, как он устроен, какие идеи я позаимствовал и как это выглядит на реальных задачах.
Одна папка для людей и агентов
Основа нарочно скучная: обычная папка, которая одновременно git-репозиторий и хранилище Obsidian. Я читаю и навигирую её в Obsidian, со всеми обратными ссылками и графом, а агенты работают с теми же файлами из терминала. У каждого проекта своя папка из трёх частей: raw/ для исходников, wiki/ для знаний и repo/, которая просто симлинк на настоящий репозиторий с кодом. Ещё есть общие папки для глобальных знаний, скиллов, правил кодинга и пары скриптов.
Каждую неделю я пользуюсь тремя агентами: Claude Code, Codex и Kilo Code. Каждый хорош в своём, и я переключаюсь между ними в зависимости от задачи и лимитов. Именно поэтому следующая идея оказалась такой важной.
Один файл инструкций для всех агентов
Каждый агент хочет свой конфиг, а держать три копии в синхроне это верный способ получить три разные правды. К счастью, теперь есть общая конвенция AGENTS.md, которую читает большинство агентов для кода. Поэтому в workspace один AGENTS.md со всеми правилами: структура, соглашения, что делать в начале и в конце сессии. CLAUDE.md содержит только импорт этого файла.
Тот же трюк работает со скиллами. Повторяемые сценарии описаны в формате Agent Skills, папка с SKILL.md внутри, и лежат в одном месте. Папка скиллов Claude это просто симлинк туда, так что скилл вроде “создать новый проект” или “разобрать новые исходники” работает одинаково в любом агенте. Мои личные правила кодинга (маленькие диффы, без оверинжиниринга, короткая документация) тоже лежат в одной папке, а файл инструкций говорит, какое правило к какому типу файлов применяется.
Для инструментов я использую MCP-серверы, и здесь тоже один источник правды: единый .mcp.json. Маленький скрипт генерирует из него конфиги для Codex и Kilo, и сгенерированные файлы никто руками не правит. В итоге я могу начать задачу в одном агенте, продолжить в другом, и оба знают одни и те же правила и имеют одни и те же инструменты.
Вики вместо истории чатов
Самая важная идея пришла из заметки Андрея Карпаты про LLM Wiki. Суть простая: люди приносят исходники и задают вопросы, а модель пишет и поддерживает из них вики. Вы не ищете каждый раз по куче документов, вы спрашиваете уже собранное знание.
У меня raw/ неизменяемая. Туда попадают выгрузки, PDF, транскрипты, письма, и их никогда не редактируют. wiki/ принадлежит агенту: он создаёт страницы, делит их, сливает дубли и переписывает, когда что-то меняется. На практике всё держится на двух маленьких файлах. index.md перечисляет все страницы с описанием в одну строку, поэтому агент сначала читает индекс и открывает только нужное, это гораздо дешевле по контексту, чем читать всё. log.md только дописывается и фиксирует, что и когда было загружено, спрошено или исправлено. И есть правило, которое мне очень нравится: хорошие ответы становятся страницами. Если я что-то спросил и ответ пригодится потом, он идёт в вики, а не умирает в окне чата.
Рядом в каждой вики есть глоссарий, маленькая таблица: термин, сокращение, смысл. Звучит как бюрократия, но убирает много трения. Когда я пишу “CF” или “YD”, агент разворачивает это по глоссарию, а когда термин начинает встречаться в двух проектах, он переезжает в глобальный глоссарий.
Цикл, который учится
Вики хранит факты, но я хотел, чтобы система помнила и ошибки. Поэтому каждая сессия заканчивается скиллом reflect. Агент проходит по тому, что случилось, обновляет вики проекта, заметки по инструментам и глоссарии, а общие уроки записывает в LEARNINGS.md, который загружается в каждую новую сессию. Раз в неделю скилл retro чистит этот файл, сливает дубли, удаляет правила, которые оказались неверными, и превращает повторяющиеся сценарии в новые скиллы.
Несколько уроков, которые теперь закреплены: старые Intel-бинарники в /usr/local/bin тихо ломают всё на Mac с Apple Silicon, используйте версии из Homebrew; OIDC-доверие GitHub к AWS для некоторых репозиториев требует неизменяемый формат sub, а не простой repo:owner/name; а когда правите файлы на удалённых серверах скриптом, держите резервную копию и считайте совпадения после правки. Каждый из этих уроков однажды стоил час. Теперь он не стоит ничего, причём для любого агента.
Чтобы вики оставалась здоровой, хук SessionStart запускает маленький скрипт-линтер ещё до того, как я поздоровался: битые ссылки, страницы-сироты, пропуски в индексе, исходники, которые никто не разобрал. Агент видит этот отчёт и может предложить всё починить.
Ограничения раньше возможностей
Давать агентам доступ к серверам, DNS и облачным аккаунтам полезно и немного страшно. Поэтому правила явные. Команды только на чтение разрешены без вопросов, всё, что меняет состояние, требует подтверждения, а разрушительные действия (удаление, публикация, изменения DNS) всегда требуют моего явного “да”. Секреты никогда не попадают в заметки, они живут в keychain или в игнорируемых .env. Проекты с персональными данными исключены из git. Даже мелкие предпочтения сохранены в памяти, например что в коммитах не должно быть строк про AI-соавтора или что ответы должны быть короткими, без нравоучений.
Пример: этот блог за один вечер
Этот блог был сайтом на Hugo 2023 года с устаревшей темой и ручным скриптом деплоя. За одну длинную сессию с агентом мы перенесли репозиторий на GitHub и настроили деплой по пушу через GitHub Actions и AWS OIDC, так что долгоживущих ключей нет нигде. Потом обновили Hugo, перешли на тему Roadster, сделали сайт двуязычным и перевели все посты на русский.
Дальше была та часть, которую легко откладывать вечно: canonical-ссылки, hreflang, структурированные данные, robots.txt, который явно разрешает AI-краулеров, и файл llms.txt, чтобы агенты могли читать сайт без разбора HTML. Аналитика встала за баннер согласия, домен подтверждён в Search Console через DNS-запись, и подготовлена первая рекламная кампания. Каждое решение и каждый подводный камень по ходу попали в вики проекта, так что следующая сессия начинается с полного контекста, а не с археологии.
Пример: бэкапы за пределами основного провайдера
Для небольшой инфраструктуры мне нужны были бэкапы, которые не живут у того же провайдера, что и серверы. Агент написал скрипты бэкапа и раскатал их по SSH на несколько хостов. Одна раскатка пошла не так, причём очень поучительно: шаг копирования молча упал, а проверка идемпотентности искала не тот текст, и один и тот же сниппет вставился в конфиг трижды. Мы всё почистили, а урок сразу ушёл в LEARNINGS.md: не прячьте ошибки на шагах копирования, проверка должна искать ровно то, что вставляете, считайте совпадения после, держите резервную копию. Следующая раскатка прошла чисто, и ни один агент в моём workspace эту ошибку больше не повторит.
Пример: ежегодные бумаги
Самый скучный пример, возможно, самый полезный. Каждый год мне нужно готовить налоговые декларации больше чем в одной стране, и каждая из них это отдельный проект со своей вики. Выписки, справки и официальные формы идут в raw/, а агент превращает их в страницы с цифрами, сроками и ссылками на исходные документы. Персональные данные, нужные нескольким проектам, вроде данных семьи и номеров документов, лежат на одной странице, на которую ссылаются остальные, и всё это исключено из git.
Здесь был и небольшой технический сюрприз. Текст, извлечённый из государственных PDF-форм, часто выходит с пробелом между каждой цифрой, и суммы становятся нечитаемыми. Решение: отрендерить страницы в картинки и дать модели прочитать их как изображения. Теперь это тоже урок, и в следующем году всё просто сработает.
Что я бы взял из этого
Вам не нужна в точности моя конфигурация. Если бы я начинал заново, я бы начал с одной папки и одного файла инструкций, держал исходники отдельно от сгенерированного знания, заставил агента записывать уроки и загружать их каждый раз, и добавлял ограничения раньше, чем новые доступы. Инструменты меняются каждые несколько месяцев, а эти привычки остаются.
Это всё ещё в процессе, и я меняю что-то почти каждую неделю. Если у вас есть свой способ бороться с проблемой “каждый чат начинается с нуля”, мне правда интересно. Пишите в комментариях.

