Технологии
Hugging Face выпустила funes — локальную память для Claude Code, Codex, pi и Hermes
Один binary индексирует исходные agent traces, сочетает vector и BM25 search и при необходимости синхронизирует приватный Lance dataset через Hub.

Память строится из уже существующих сессий
Hugging Face представила funes — открытый слой долговременной памяти для coding agents. Проект решает знакомую проблему: Claude Code, Codex, pi или Hermes начинает новую сессию как незнакомец, хотя прошлый агент уже исследовал репозиторий, отвергал неудачные подходы и принимал архитектурные решения. Эти сведения обычно остаются в traces, но простой архив из тысяч ходов почти невозможно использовать во время следующей задачи.
funes устанавливается как один binary и добавляется командой вида funes add codex или funes add hermes. Первичная операция строит индекс, подключает инструменты recall и get, а также автоматизацию, которая индексирует завершённые ходы. Дальнейшее обновление инкрементальное: новые turn добавляются без полного повторного embedding всей истории, а глубокий backfill можно выполнять ограниченными порциями.
Система не переписывает сессию в компактный набор фактов. Она хранит исходный текст и возвращает фрагмент с агентом, временем, session и turn, а get открывает соседний контекст. Это принципиальный выбор: summary могло бы выбросить причину отказа от прежнего решения, тогда как raw evidence позволяет будущему агенту проверить формулировку и понять, кто именно её произнёс.
Гибридный поиск остаётся локальным
Под капотом traces разных агентов приводятся к общей структуре turn и block, разбиваются на chunks, локально превращаются в embeddings и сохраняются в Lance dataset. На запрос funes сочетает vector search и BM25, объединяет rankings, применяет cross-encoder reranking, учитывает свежесть и прикладывает соседние chunks. Такая комбинация должна находить и смысловые совпадения, и точные редкие идентификаторы, которые чистая семантика может пропустить.
Embedding и reranking по умолчанию выполняются на машине пользователя, без отдельного ML runtime dependency у стандартного backend. Для локального recall не требуется аккаунт Hugging Face и удалённый сервис не получает сессии на индексацию. Это особенно важно для кода и журналов инструментов, где рядом с полезным решением могут находиться внутренние пути, данные клиентов или секреты.
Один индекс может объединить историю нескольких агентов. Решение, принятое в Claude Code, затем доступно Codex, а результат локального pi — Hermes. Но принадлежность не теряется: каждый найденный фрагмент сообщает происхождение. В результате память не привязана к конкретной модели, хотя рассуждение над retrieved passages всё равно выполняет текущий coding agent.
Перенос между машинами без отдельного SaaS
Для общей памяти можно указать Hugging Face dataset при подключении: funes add codex acme/funes-memory. Локальный Lance dataset публикуется в приватный по умолчанию repository пользователя и обновляется на границах сессий. На другой машине та же привязка скачивает данные в cache, после чего тёплые запросы снова выполняются локально. Hub используется как слой владения, контроля доступа, версий и доставки, а не как обязательный memory API.
Перед публикацией credentials редактируются во время индексации, затем каждый chunk проходит повторный secret scan; подозрительные фрагменты не отправляются. Авторы отдельно подчёркивают границы этой защиты в SECURITY.md. Такое устройство снижает риск, но не превращает выгрузку traces в безусловно безопасную операцию: владельцу всё равно нужно понимать состав истории и политику доступа к dataset.
Команда funes ask позволяет задать разовый вопрос локальной или указанной общей памяти без постоянной интеграции. Она извлекает passages, передаёт их coding agent и требует ответа с источниками. Если retrieval не нашёл достаточной опоры, система должна сообщить о пробеле, а не дорисовать решение. Это делает ask диагностическим инструментом и способом изучить опубликованную память проекта.
Почему recall отличается от handoff
Hugging Face сравнила compaction, письменный handoff и recall на двух задачах, ответ на которые зависел от прежней сессии. Compaction не дошёл до результата в одном случае, потому что summary сгладило важные находки. Recall оказался дешевле успешного письменного handoff в восемь раз на одной задаче и в четыре — на другой, поскольку не требовал заранее сочинять универсальную передачу контекста.
Это не означает, что searchable traces заменяют документацию. Архитектурный контракт, инструкция развертывания и публичное API должны оставаться в устойчивых документах. Память ценна для другого слоя: почему команда отвергла streaming parser, какую ошибку увидела в старом benchmark, какие варианты уже проверялись. Именно такие причинные следы чаще всего исчезают между сессиями.
funes предлагает практическую модель владения памятью: исходный материал остаётся dataset, retrieval воспроизводим, а найденный ответ ведёт назад к turn. Самый сильный тезис проекта — у агентов уже есть запись рабочего процесса; не хватает индекса, provenance и безопасного способа переносить её. Если эти три части работают, новая сессия перестаёт начинаться с нуля, не полагаясь на непрозрачное резюме.