Технологии

Hugging Face выпустила funes — локальную память для Claude Code, Codex, pi и Hermes

Один binary индексирует исходные agent traces, сочетает vector и BM25 search и при необходимости синхронизирует приватный Lance dataset через Hub.

Hugging Face выпустила funes — локальную память для Claude Code, Codex, pi и Hermes

Память строится из уже существующих сессий

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 и безопасного способа переносить её. Если эти три части работают, новая сессия перестаёт начинаться с нуля, не полагаясь на непрозрачное резюме.

Первоисточники

  1. Hugging Face — Give Your Coding Agents a Memory You Own