Архитектура
crew/
├── apps/
│ ├── server/ Hono: REST + WebSocket, раздаёт веб-интерфейс
│ └── web/ React 19 + Vite + Tailwind v4
├── packages/
│ ├── core/ Рантайм агентов, LLM-провайдеры, инструменты, промпт, воркер
│ ├── memory/ SQLite: агенты, сообщения, память (FTS5 + векторы), задачи
│ └── channels/ Telegram (grammY)
├── cli/ `crew`, публикуется как @vefimov/crew
├── docs/ Этот сайт (VitePress)
└── docker/Потоки данных
Веб ──────┐
CLI ──────┼──▶ Рантайм Crew ──▶ Провайдер (Ollama / OpenAI-совместимый)
Telegram ─┘ │ ▲
▼ │ инструменты: remember · recall · list/read/write files
SQLite (один файл)
│
▼
Очередь задач ──▶ извлечение памяти, догенерация эмбеддинговПринятые решения
В Crew нет нативных зависимостей. node:sqlite встроен в Node 22, поэтому npx работает без компиляции.
Всё состояние лежит в одном файле, ~/.crew/crew.db, в режиме WAL. Туда входят агенты, чаты, память, векторы, настройки и очередь задач.
Для поиска по памяти используются FTS5 и перебор по косинусной близости вместо векторной базы. Для тысяч воспоминаний на агента этого хватает с запасом, и не нужен лишний сервис.
Провайдеры спрятаны за маленьким интерфейсом Provider (chat, embed, models, ping) со стримингом и tool calls. Адаптеры Ollama и OpenAI-совместимого API занимают по одному короткому файлу.
Рантайм построен на EventEmitter. Сервер пересылает его события в WebSocket-клиенты, поэтому любой интерфейс видит всех агентов вживую.
Каждый агент обрабатывает один ход за раз, из какого бы канала ни пришло сообщение.