Что на самом деле делает мой агентный стек
Я создал набор агентов для тестирования Neotoma и ускорения своей работы. Частный монорепозиторий с более чем 12 серверами MCP, где я ежедневно сотрудничаю с агентами ИИ. Neotoma обеспечивает структурированную память, позволяющую агентам опираться на предыдущую работу в каждом сеансе.
Ключевые выводы
— Мой агентный стек — это частный монорепозиторий с более чем 12 серверами MCP, постоянными правилами и навыками многократного использования. Я весь день работаю с ИИ-агентами в Cursor, открывая сеансы для выполнения задач: от сортировки электронной почты до платежей в биткойнах и развертывания веб-сайтов.
- Neotoma обеспечивает нижний уровень структурированной памяти: более 1000 контактов, 600 задач, 170 типов объектов. Агенты на каждом шагу хранят сущности и отношения и извлекают предшествующий контекст, прежде чем ответить.
- Реальные вызовы MCP демонстрируют закономерность: один вызов
storeсохраняет разговор, извлеченные контакты, задачи и типизированные отношения в одной полезной нагрузке. Поисковые вызовы дают агентам контекст, прежде чем они начнут действовать. - Многоуровневая архитектура Neotoma разделяет истину (состояние, основанное на событиях), стратегию (чистое познание, принятие решений) и исполнение (побочные эффекты, возвращение событий). Сегодня я стратег. Архитектура позволяет заменить эту роль программным обеспечением.
- Цель состоит в том, чтобы перейти от практического выполнения к рассмотрению и утверждению, при этом агенты будут самостоятельно обрабатывать повторяющиеся рабочие процессы. Стек станет открытым, как только персональные данные будут перенесены в Neotoma, а скрипты будут реорганизованы и станут универсальными.

Мой агентский стек — это тестовая версия Neotoma. Это также моя личная операционная система. Частный монорепозиторий, в котором агенты ИИ обрабатывают все: от сортировки электронной почты до платежей в биткойнах и развертывания веб-сайтов, а Neotoma выступает в качестве структурированной памяти под ним.
Каждая функция, которую я добавляю в Neotoma, сначала проверяется здесь, в первую очередь в Cursor и, во вторую очередь, через терминальные агенты, такие как Claude Code, Codex и Cursor CLI. Каждый пробел, который я нахожу в памяти агентов, в первую очередь всплывает здесь. Стек — это то, как я веду свою повседневную жизнь и работу. Помимо отзывов пользователей, трудности, с которыми я сталкиваюсь, лежат в основе дорожной карты Neotoma.
Я намерен открыть исходный код стека. Но в репозитории накопились месяцы личных данных, скриптов, жестко запрограммированных в моих учетных записях, и конфигурации, привязанной к моей настройке. Прежде чем он станет общедоступным, мне нужно полностью перенести эти данные в Neotoma и провести рефакторинг инструментов, чтобы они стали универсальными. Эта работа продолжается.
В этом посте объясняется, что такое стек, как я его использую и что он говорит о том, что должна делать структурированная память агента.
Что такое стек
Стек представляет собой монорепозиторий с более чем десятком серверов MCP и интерфейсами командной строки, каждый из которых подключает агентов ИИ к разным службам: Gmail, Календарь Google, WhatsApp, Биткойн-кошелек, Instagram, Asana, HomeKit, DNSimple, Google Search Console, 1Password, [web Scraper] (https://github.com/markmhendrickson/mcp-server-web-scraper) и многое другое. Некоторые из них представляют собой серверы MCP, которые агенты называют инструментами. Другие представляют собой CLI, которые агенты вызывают из терминала. Оба дают агентам одно и то же: доступ к внешним сервисам.
На серверах MCP расположены правила и навыки. Правила — это постоянные инструкции по поведению, которые находятся в репозитории, а не в Neotoma: всегда сохраняйте контакты в Neotoma, прежде чем ответить, никогда не раскрывайте секреты, используйте регистр предложений в заголовках, запускайте тесты после изменений кода, предпочитайте CLI панели мониторинга для журналов и конфигурации, связывайте первое упоминание названий продуктов. Навыки — это многоэтапные рабочие процессы: сортировка входящих сообщений, написание сообщения в блоге, развертывание веб-сайта, обработка отзывов о продукте, извлечение заказа Amazon из электронной почты, оплата подрядчику в биткойнах.
А под всем находится Neotoma как слой структурированной памяти. Каждый агент читает из него и записывает в него. Именно поэтому стек со временем увеличивается, а не сбрасывается при каждом сеансе.
Как я с этим работаю
Я живу в Курсоре. Мой день — это череда агентских сессий. Я открываю нового агента, описываю, что я хочу сделать, и агент выполняет его, используя серверы, правила и навыки MCP в рабочей области. Некоторые сеансы выполняются быстро: «ответьте на это письмо». Некоторые из них длинные: «проверьте мой почтовый ящик, обработайте последние отзывы тестировщиков, затем напишите сравнительный пост об агенте памяти Google».
Это сотрудничество с агентами. Я сижу за столом и работаю вместе с ними весь день. Личные задачи: планирование ремонта, оплата подрядчику, управление событиями календаря. Профессиональные: написание постов, обработка отзывов, развертывание сайтов, управление доменами. Агенты занимаются исполнением. Я задаю направление, проверяю результаты и одобряю действия, требующие участия человека.
Каждый сеанс агента имеет полный контекст рабочей области: каждый сервер MCP, каждое правило, каждый навык. Агент может читать мою почту Gmail, проверять мой календарь, запрашивать у Neotoma предыдущий контекст, сохранять новые данные, генерировать изображения, отправлять код и проверять развертывания. Моя роль все больше заключается в описании намерений и обзоре результатов.
Как подходит Неотома
Без структурированной памяти каждый сеанс агента начинается с нуля. Агент не знает, кто ваши контакты, какие задачи у вас открыты, что вы обсуждали вчера или что вы уже кому-то заплатили. Вы можете вставить контекст в каждое приглашение, но это не продлится несколько сеансов. Память платформы хранит вашу атмосферу, а не вашу работу. RAG помогает с кодом, но не со структурированными фактами, которые управляют рабочими процессами: кому вы должны деньги, какие отзывы вы получили на прошлой неделе, какие задачи все еще открыты.
Мой экземпляр Neotoma хранит более 1000 контактов, 600 задач, 140 разговоров, 120 сообщений в блогах и 170 типов сущностей, которые агенты создавали, когда они сталкивались с новыми видами информации: транзакции, постоянные правила, заметки об отзывах, события календаря, споры, счета, навыки, результаты развертывания. Когда агент начинает новый сеанс, он получает то, что ему нужно. По завершении он сохраняет то, что узнал.
Вот 20 основных типов сущностей в моем сегодняшнем экземпляре Neotoma с примером каждого из них:
Ни одна из этих схем не разрабатывалась заранее. Агенты [создают и расширяют схемы по мере необходимости] (https://neotoma.io) по мере того, как они сталкиваются с новыми видами информации. Сейчас в системе имеется 170 типов сущностей, большинство из которых содержат лишь несколько записей. Память агента становится интересной в «длинном хвосте»: единый субъект спора с полной историей переговоров, единое обязательство связаться с кем-то в случае изменения стратегии, единое предпочтение относительно того, как обрабатывать конкретный платеж.
Практическая разница в том, что агенты опираются на предыдущую работу. Когда я прошу агента отправить кому-нибудь электронное письмо, он сначала ищет контакт в Neotoma. Когда я прошу его обработать обратную связь, он извлекает существующие объекты обратной связи и связывает новые. Когда я прошу его заплатить подрядчику в биткойнах, он знает постоянное правило (всегда платите этому человеку в биткойнах) и включает ссылку на транзакцию в подтверждение, потому что так предписывает другое постоянное правило.
Хранение и извлечение вблизи
Neotoma MCP предоставляет инструменты, которые агенты вызывают напрямую. Вот как на практике выглядит реальное хранение и извлечение.
Когда агенту необходимо сохранить ход диалога с извлеченными объектами, он вызывает store с одной полезной нагрузкой:
магазин({
"сущности": [
{
"entity_type": "разговор",
"title": "Определение электронной почты от 9 марта"
},
{
"entity_type": "agent_message",
"роль": "пользователь",
"content": "отсортировать мой почтовый ящик",
"turn_key": "conv-42:1"
},
{
"entity_type": "контакт",
"full_name": "Алекс Чен",
"электронная почта": "alex@example.com",
"source": "звонок для обратной связи с тестером"
},
{
"entity_type": "задача",
"title": "Продолжайте следить за отзывами Алекса",
"статус": "в ожидании",
«приоритет»: «средний»
}
],
"отношения": [
{
"relationship_type": "PART_OF",
«исходный_индекс»: 1,
"target_index": 0
},
{
"relationship_type": "REFERS_TO",
«исходный_индекс»: 1,
"target_index": 2
},
{
"relationship_type": "REFERS_TO",
«исходный_индекс»: 1,
"target_index": 3
}
],
"idempotency_key": "conv-42-turn-1-triage"
})
В одном вызове сохраняется разговор, сообщение, новый контакт и задача, связанные типизированными отношениями. Агенту не требовалось предварительное определение схемы для «контакта» или «задачи». Neotoma принимает произвольные поля и выводит структуру.
Когда агенту перед ответом требуется контекст, он запрашивает идентификатор:
получить_entity_by_identifier({
"идентификатор": "Алекс Чен"
})
Это возвращает запись контакта с электронной почтой, предыдущими разговорами и происхождением каждого поля. Если агенту требуется более широкий контекст, он запрашивает по типу:
извлечь_сущности({
"entity_type": "feedback_note",
"search": "выпуск для разработчиков",
«лимит»: 10
})
Это вернет десять наиболее актуальных отзывов о выпуске разработчика, каждое с полным снимком и историей наблюдений.
Для постоянных правил агент извлекает их один раз в начале рабочего процесса:
извлечь_сущности({
"entity_type": "стоящее_правило"
})
Мой экземпляр возвращает такие правила, как «всегда платить Карлосу в биткойнах» и «предоставлять черновики сообщений в блоках уценки». Агент применяет их автоматически до конца сеанса.
Когда рабочие процессы затрагивают файлы (квитанции, снимки экрана, документы), агент сохраняет их вместе с сущностями в одном вызове, используя file_path:
магазин({
"сущности": [
{
"entity_type": "транзакция",
"вендор": "Амазонка",
«сумма»: 47,99,
"валюта": "ЕВРО"
}
],
"file_path": "/путь/к/квитанции.pdf",
"idempotency_key": "amazon-order-march-9"
})
[неструктурированный путь хранения] Neotoma (https://github.com/markmhendrickson/neotoma) обрабатывает файл оттуда. Необработанные байты имеют адресацию по содержимому (SHA-256), поэтому один и тот же файл никогда не сохраняется дважды. Агент передает файл как есть через file_path (локальные среды, такие как Cursor) или file_content (base64, для веб-сред); он не интерпретирует и не извлекает данные перед сохранением. По умолчанию Neotoma автоматически запускает AI-интерпретацию сохраненного файла, извлекая структурированные объекты и связывая их обратно с источником с помощью отношения EMBEDS. Повторное сохранение того же файла с помощью interpret: true запускает повторную интерпретацию без создания дубликата. Квитанция становится структурированными данными, доступными для запроса, при этом исходный PDF-файл сохраняется для проверки происхождения. Интерпретацию также можно отложить («интерпретировать: false») для пакетной обработки или управления квотами, а затем запустить позже с другой конфигурацией.
Рабочие процессы на практике
Несколько рабочих процессов демонстрируют эту закономерность.
Сортировка электронной почты. Агент читает непрочитанные электронные письма через Gmail MCP, проверяет Neotoma на наличие существующих записей контактов и предыдущего контекста с каждым отправителем, готовит ответы, используя правила моего стиля общения, сохраняет новые контакты и задачи и архивирует обработанные сообщения. За один запуск сортировки можно сохранить пять новых контактов, три задачи и дюжину вариантов разговора.
Написание сообщений в блоге. Сам навык присутствует в Неотоме как структурированная сущность. Агент получает его с помощью «retrive_entity_snapshot». Затем он запрашивает существующие сообщения для калибровки стиля, пишет черновик, сохраняет объект сообщения со всеми метаданными, генерирует главные изображения, создает копию для Twitter и LinkedIn, восстанавливает кеш веб-сайта из экспорта Neotoma и развертывает. Этот пост был написан именно так.
Платежи в биткойнах. Я плачу подрядчику в биткойнах, используя сервер MCP кошелька BTC. Neotoma хранит постоянное правило, запись контакта и историю транзакций. Агент получает все три, выполняет платеж, сохраняет новую транзакцию со ссылкой на цепочку и подтверждает.
Обработка отзывов. Когда тестировщики оставляют отзывы о версии Neotoma для разработчиков, агенты извлекают объекты структурированных отзывов, связывают их с контактной записью тестировщика, классифицируют отзывы по сегментам и оценивают их на предмет ограничений на этапе выпуска. Предыдущие отзывы можно получить по тестировщику, сегменту или дате.
Развертывание веб-сайта. Навык развертывания синхронизирует локальные изменения уценки с Neotoma, экспортирует полный набор данных веб-сайта, восстанавливает кеш, отправляет репозиторий веб-сайта и отслеживает Действия GitHub до тех пор, пока сборка не завершится успешно. Если сборка завершается неудачно, агент читает журналы, устраняет проблему и запускается повторно.
К агентам, которые работают без меня
Каждый рабочий процесс начинается с открытия агента Cursor и ввода инструкции. Я в курсе каждой задачи. Это нормально для текущего этапа, но это не конечное состояние.
Я настраиваю автоматизированные процессы, чтобы агенты могли управлять рабочими процессами без моего прямого участия. Части уже есть: навыки определяют все этапы рабочего процесса, Neotoma хранит контекст и правила, серверы MCP обеспечивают охват. Чего не хватает, так это оркестрации, которая запускает рабочие процессы по расписанию или в ответ на события, а также легкого интерфейса утверждения, чтобы я мог просматривать и разрешать действия, не сидя за ноутбуком.
[Многоуровневая архитектура] Neotoma (https://github.com/markmhendrickson/neotoma/blob/dev/docs/foundation/layered_architecture.md) предназначена именно для этого. Он разделяет три проблемы:
- Уровень истины (Neotoma). На основе событий, с помощью редуктора, детерминированный. Все агенты читают его. Обновления состояния происходят только через события предметной области, обрабатываемые редукторами. Ни один агент не изменяет истину напрямую.
- Стратегический уровень. Считывает текущее состояние мира из Неотомы. Оценивает приоритеты, ограничения, риски, обязательства и время. Выводит решения и команды. Чистое познание: состояние внутри, решения снаружи. Никаких побочных эффектов.
- Уровень выполнения. Принимает команды от уровня стратегии. Выполняет побочные эффекты через внешние адаптеры (API электронной почты, платежные сервисы, календарь, обмен сообщениями). Выдает события домена, описывающие, что произошло. Эти события проходят обратно через редукторы для обновления состояния. Чистый эффект: команды вводятся, события выходят.
Цикл замыкается:
Входящие сигналы (электронная почта, WhatsApp, календарь, финансовые данные)
-> Нормализация -> Состояние Neotoma (журнал событий + редукторы)
-> Галочка стратегии (оценка приоритетов, принятие решений)
-> Агенты исполнения (выполняют побочные эффекты, создают события)
-> Редукторы -> Обновленное состояние
-> Следующий тик
Сегодня я отвечаю за стратегию. Я смотрю на состояние, решаю, что делать, и приказываю агенту выполнить. Архитектура позволяет заменить эту роль программным обеспечением. Стратегический механизм считывает Neotoma, оценивает, что требует внимания, на основе постоянных правил и приоритетов, и выдает команды исполнительным агентам. Эти агенты вызывают серверы MCP, сохраняют результаты, и цикл повторяется.
Критическим инвариантом является то, что ни один уровень не осуществляет запись непосредственно в базовое хранилище данных Neotoma. Обновления передаются только через события домена и редукторы. Это делает систему проверяемой и обратимой. Если автономный агент примет неправильное решение, я могу отследить событие, которое его вызвало, отменить обновление состояния и исправить правило, которое привело к этому.
Цель — сократить ежедневное время, проводимое за компьютером. Не устранить это. Перейдите от практического выполнения к рассмотрению и утверждению. Я хочу проснуться и увидеть сводку того, что мои агенты обрабатывали за ночь: сортировка электронных писем, составление черновиков сообщений, проверка развертываний, постановка платежей в очередь. Я хочу одобрить платеж в биткойнах с помощью Apple Watch. Я хочу просмотреть черновик электронного письма на телефоне во время прогулки и нажать, чтобы отправить. Агенты обрабатывают 80% повторяемых операций. Я справляюсь с теми 20%, которые требуют суждения.
Здесь вопрос об оборудовании становится интересным. Современные телефоны и часы не предназначены для такого взаимодействия. Вам нужно устройство, оптимизированное для жестов краткого просмотра и одобрения, а не для набора текста или просмотра.
Из устройств, существующих сегодня, Apple Watch кажутся наиболее близкими к правильному форм-фактору: всегда на вашем запястье, на виду, с возможностью простого взаимодействия с нажатием для подтверждения. Но программного уровня еще нет. Невозможно передать сводку агентов и запросы на одобрение на часы так, чтобы они выглядели привычными.
В какой-то момент я мог бы поэкспериментировать с этой областью, создав легкое сопутствующее приложение, которое связывает состояние Neotoma с интерфейсом на уровне запястья. Независимо от того, станет ли подходящей поверхностью приложение для часов, специальное устройство искусственного интеллекта или что-то еще не существующее, модель взаимодействия ясна: агенты выполняют работу, структурированная память сохраняет состояние, а человек обеспечивает направление в темпе намерения, а не в темпе исполнения.
Открытый исходный код стека
Сегодня эта стопка является частной, потому что она содержит мою жизнь: контакты, финансы, данные о здоровье, личные сообщения, постоянные правила того, как я веду свое домашнее хозяйство. Прежде чем я смогу открыть исходный код, мне нужно во всем этом разобраться.
Путь прямой. Персональные данные полностью перемещаются в Neotoma, которая уже является источником истины для большей их части. Скрипты, ссылающиеся на мои конкретные учетные записи и пути, подвергаются рефакторингу для чтения из конфигурации. Обертки сервера MCP становятся универсальными. Навыки теряют свои жестко запрограммированные предположения.
Остается только многоразовый агентный стек: шаблон монорепозитория со каркасом сервера MCP, структура правил и навыков, интеграция Neotoma для структурированной памяти и примеры рабочих процессов, которые каждый может адаптировать. Архитектура – самое интересное. Моих личных данных нет.
У меня нет графика для этого. Рефакторинг происходит параллельно с ежедневным использованием. Каждый раз, когда я прикасаюсь к сценарию, я делаю его более общим. Каждый раз, когда я перемещаю данные в Neotoma, я удаляю их из репозитория. Стек становится более портативным с каждым сеансом.
Что это доказывает о Неотоме
Я построил этот стек еще до существования Неотомы. В ранней версии использовались плоские файлы и таблицы Parquet. Это работало до тех пор, пока не прекратилось.
Режимы сбоя были специфическими: агент сохранял контакт как «Сара Ким» в одном сеансе и «С. Ким» в другом, создавая дубликаты без возможности их объединения. Происхождения не было, поэтому я не мог сказать, какой агент написал это поле и когда.
Запросы были ограничены точными совпадениями в отдельных столбцах, поэтому вопрос «какие отзывы я получил на прошлой неделе?» означало сканирование каждого файла вручную. Иногда записи были плохо перезаписаны или полностью удалены без возможности восстановления журнала событий. И между типами ничего не связано, поэтому, зная, что задача, связанная с контактом, связанным с транзакцией, требовала от меня держать этот график в голове.
Неотома заменила этот слой. Это дало агентам структурированную, запрашиваемую, учитывающую взаимоотношения память, которая работает во всех рабочих процессах. В Neotoma стек теперь имеет 170 типов сущностей, и не потому, что я заранее разработал 170 схем, а потому, что агенты создают типы сущностей по мере того, как они сталкиваются с новыми видами информации. Примечание обратной связи отличается от транзакции, отличается от постоянного правила, и система обрабатывает их все.
Это проверка, которая позволяет Неотоме быть честным. Когда поиск происходит медленно, я чувствую это в каждом сеансе агента. Когда разрешение объекта не удается, я получаю повторяющиеся контакты. Когда хранилище ненадежно, рабочие процессы нарушаются. Каждая ошибка и каждый пробел проявляется в моей повседневной работе раньше, чем в чьей-либо еще.
Проблема с памятью универсальна. Каждый разработчик, создающий агентские рабочие процессы, упирается в одну и ту же стену: агенты, которые не могут запоминать, не могут запрашивать и не могут опираться на предыдущую работу. Одного извлечения недостаточно; структура и происхождение — вот что делает память заслуживающей доверия. Этот стек является доказательством того, что структурированная память меняет возможности агентов. Neotoma — это то, как я делаю это доступным для всех.
Выпуск для разработчиков открыт для тестирования. Если вы создаете агентные рабочие процессы и хотите использовать структурированную память, то начинать следует именно с этого.