Привет, Хабр!

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

Этим я занимаюсь на работе, дома, в отпуске — везде. Такой уж человек.

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

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

Зачем нужен ещё один AI-агент?

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

По моему убеждению, хороший агент:

  • узкоспециализирован;

  • решает большую часть задач обычными алгоритмами;

  • использует LLM только там, где это действительно оправдано.

  • применяет модели вариативно.

Например:

  • дешёвая компактная модель может быстро проверять релевантность данных;

  • а флагманская модель — принимать сложные решения или выполнять глубокий анализ.

LLM — это не замена инженерии, а только инструмент внутри инженерной системы.

Но при всём этом мне хотелось сделать именно универсальную базу, на которой можно быстро собирать специализированных агентов под свои нужды:

  • добавлять навыки;

  • менять память;

  • подключать новые инструменты;

  • экспериментировать с архитектурой.

Без многослойного оверинжира, гигантских фреймворков и вот этого всего.

Почему open source

Меня давно смущает, что вокруг AI-агентов появилось большое количество переусложнения.

Когда новичок открывает репозиторий очередного “автономного суперагента”, он видит:

  • десятки абстракций;

  • сотни файлов;

  • бесконечные orchestration-слои;

  • и архитектуру, в которую страшно заходить без боевой подготовки.

Это и меня печалит, а новичков вообще расстраивает.

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

А мне хочется противоположного подхода: минимального порога входа.

Основная цель проекта "Агент Ануфрий" — не создать “убийцу” существующих решений, а сделать тему AI-агентов более доступной для русскоязычного сообщества.

Чтобы даже разработчик с небольшим опытом смог:

  • быстро понять, как всё устроено;

  • изменить поведение агента;

  • добавить собственные инструменты;

  • и начать экспериментировать самостоятельно.

И чем больше людей начнёт заниматься агентостроением, тем больше изящных инженерных решений мы увидим.

К какой архитектуре я пришёл

В итоге архитектура получилась максимально прямолинейной:

  • одна точка входа с основным циклом агента, системным промптом, и встроенными инструментами;

  • конфигурационный файл;

  • и несколько модулей с говорящими названиями.

AgentAnufry/
├── main.py                 # Gateway + Agent Loop
├── config.py               # Конфигурация
├── requirements.txt        # Зависимости Python
├── tools/
│   ├── shell.py            # Выполнение команд
│   ├── filesystem.py       # Работа с файлами
│   ├── browser.py          # Управление браузером через CDP
│   ├── memory_tools.py     # Инструменты памяти
│   ├── task_tools.py       # Инструменты трекера задач
│   ├── result_tools.py     # Инструменты работы с результатами
│   └── skills_runner.py    # Запуск навыков
├── memory/
│   ├── manager.py          # Менеджер долговременной памяти
│   ├── task_tracker.py     # Трекер задач
│   ├── task_results.py     # Менеджер результатов задач
│   ├── agent_memory.db     # SQLite база данных
│   └── README.md           # Документация памяти
├── skills/
│   ├── loader.py           # Загрузчик навыков
│   ├── README.md           # Документация навыков
│   └── mongo-compass/      # Пример навыка
│       ├── SKILL.md        # Описание навыка
│       ├── scripts/        # Скрипты навыка
│       └── references/     # Справочные материалы
├── docs/
│   ├── MEMORY_QUICKSTART.md      # Документация памяти
│   ├── TASK_TRACKING.md          # Документация трекера задач
│   ├── RESULTS_SYSTEM.md         # Система сохранения результатов
│   ├── SKILLS_ARCHITECTURE.md    # Архитектура навыков
│   └── GOOGLE_SEARCH_FIX.md      # Исправления поиска
├── llm/
│   ├── factory.py          # Фабрика для создания LLM провайдеров
│   └── provider.py         # Базовый класс для LLM провайдеров
└── ...

Что умеет агент уже сейчас

В базовый функционал вошли:

Работа с файловой системой

Агент создаёт директорию agent-workspace/ и может:

  • создавать файлы;

  • редактировать их;

  • удалять;

  • читать содержимое.

Это уже позволяет автоматизировать какое-то количество рутинных сценариев.

Долговременная память

Память реализована на базенке SQLite.

Есть:

  • хранение важной информации;

  • ранжирование информации по важности;

  • очистка мусора;

  • семантический поиск через embeddings.

Агент, в лучших традициях, может не просто “держать контекст”, а накапливать опыт взаимодействия.

Работа с браузером

Добавил управление браузером через CDP/Playwright:

  • открытие страниц;

  • взаимодействие с сайтами;

  • извлечение контента;

  • работу с поисковиками.

Агент умеет самостоятельно искать информацию в интернете и взаимодействовать с веб-интерфейсами.

Трекер задач

  • Сохраняет контекст сложных задач

  • Фиксирует все попытки выполнения

  • Запоминает причины неудач

  • Сохраняет только важную информацию (не засоряет память)

  • Позволяет продолжить с того места, где остановились

Система навыков (skills)

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

Например, я уже добавил:

  • работу с MongoDB;

  • инструмент для более глубокого анализа поисковой выдачи.

Это те же .md файлы, которые легко пищутся и редактируются. Но в некоторых случаях скилы требуют референс и/или скрипты.

Поддержка локальных LLM

Агент работает через OpenAI-совместимый API, поэтому можно использовать обычные и локальные модели. Будет полезно для удешевления работы. На компактных моделях агент вполне справляется с некоторым типом задач.

И кажется, мне удалось добиться главной цели — сделать базу, которую легко модифицировать.

Любой разработчик за короткое время может:

  • заменить БД;

  • изменить правила работы с памятью;

  • переписать встроенные навыки;

  • добавить новые инструменты;

  • улучшить обработку skills;

  • оптимизировать взаимодействие с LLM.

А дальше всё уже зависит только от фантазии.

Можно сделать:

  • персонального ассистента;

  • исследовательского агента;

  • автоматизатор рутины;

  • web-agent;

  • DevOps-ассистента;

  • AI-помощника для работы с документами;

  • да что угодно.

Как запустить

Чтобы попробовать агента, достаточно:

  1. Клонировать репозиторий проекта.

  2. Установить зависимости.

  3. Создать .env по примеру env.example.

  4. Запустить main.py.

На старте память агента пустая, поэтому с ним лучше немного “познакомиться”:

  • рассказать о себе;

  • описать задачи;

  • обозначить предпочтения.

Он это запомнит и начнёт использовать в дальнейшей работе.

Небольшой лайфхак

Если агент с трудом решил сложную задачу, похвалите его в конце, тогда он сохранит оптимальный алгоритм действий и ответит что-то в этом духе:

? Агент: Супер, Артём! Я сохранил оптимальный алгоритм выполнения этой задачи в долговременную память. В следующий раз смогу повторить процесс быстрее и без лишних действий.

Вместо вывода

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

Ну и, конечно, буду рад форкам и pull request’ам.

Хочется, чтобы тема AI-агентов перестала казаться чем-то сложным и стала обычной инженерной областью, в которую можно войти без страха и сожалений.

Надеюсь, после этой статьи кто-то тоже попробует собрать своего первого агента.

Удачи всем, кто решил заняться агентостроением.

Комментарии (5)


  1. it_police Автор
    04.06.2026 17:21

    Статья чуть устарела, полежала весь май в песочнице. Я чуть допилил Ануфрия, но стараюсь, чтобы он оставался таким же простым, в архитектурном плане. Если будут вопросы, рад ответить.


  1. SurMaster
    04.06.2026 17:21

    Без боли то оно может и без боли, но:

    1. Агент имеет доступ к терминалу через shell=True. Реализованный черный список команд обходится банальным разделением через ; или &&. Любая prompt-инъекция из интернета или файлов проекта может выполнить rm -rf или выкачать ваши ключи или еще чего натворить. Вывод: запускать строго в изолированном Docker-контейнере.

    2. В коде зачем -то фигурируют ссылки на телеграмм канал t.me/itpolice. Намеренно?

    3. main.py на 700+ строк, копипаст парсинга поисковой выдачи, пустые блоки except и неиспользуемые импорты. Короче - код сырой. Я бы не стал такое запускать на реальном хосте без допиливания надфилем. В целом - интересно, issue оставил вам


    1. it_police Автор
      04.06.2026 17:21

      О, спасибо, что изучили код) Да, main выглядит печально, но моя основная задача - сделать архитектуру простой и наглядной. В этом файле содержатся базовые инструменты и инструкции для LLM, разнести их не составит большого труда. Но сейчас пробежавшись глазами сразу понятно, как оно работает, буквально за пару минут.

      В коде фигурируют ссылки на мой канал, это тоже намеренно сделано, просто привет от автора.

      Доступ к терминалу агент имеет полный, насморя на встроенные ограничения, иногда и промпт инъекция может не понадобиться, чтобы LLM под галюном их обошла. Поэтому запускать его лучше в изолированной среде, это верно.

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


  1. gachkovsky
    04.06.2026 17:21

    Хочу попробовать. Он полностью бесплатный или за токены нужно платить?


    1. it_police Автор
      04.06.2026 17:21

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