The Foundry
github.com/podlodka-ai-club/the-foundryЛинейный конвейер от GitHub issue до Pull Request, собранный вокруг одной SQLite-базы. Три процесса — worker, FastAPI, React-UI — общаются только через файл; никаких брокеров, очередей в RAM или Redis. Состояние FSM, очередь, лог событий и долговременная память — всё лежит в одной базе и переживает рестарты «бесплатно».
dev_taskSQLiteЕдинственная точка правды — SQLite-файл
Foundry демонстративно отказывается от любой общей памяти и очередей в RAM. В одной базе живёт
очередь задач, FSM-состояние, append-only лог событий
для лайв-наблюдения и долговременная память по репозиториям. Worker пишет,
API и UI читают — никаких RPC, никакого Redis, никаких подписок. Это даёт «бесплатно» персистентность,
идемпотентность стадий через stage_results и переживание рестартов: задача со статусом
RUNNING после крэша подхватится на следующем тике и продолжит ровно с той стадии, где упала.
Второй ключевой ход — оркестратор сам решает все переходы; стадии — это просто функции,
возвращающие dict, без собственной state-машины.
Три процесса вокруг одной базы
Worker гоняет конвейер и пишет в SQLite. FastAPI и React-UI только читают. Отдельный
pr-feedback listener следит за уже открытыми PR. Никаких внешних брокеров.
gh issue list раз в 30 секdev_taskSQLite — единая шинаЧто важно понять
-
→
Никаких очередей в RAM. Очередь задач — это просто таблица
tasksвSQLite. Worker SELECT'ит её каждый тик. -
→
Идемпотентность через
stage_results. Каждая стадия перед стартом проверяет, не выполнялась ли уже. Упал на verify — после рестарта plan и implement пропустятся. -
→
Per-stage
AgentSettings. Можно поставить haiku на план/verify, sonnet — только на implement. Дешёвая модель работает на дешёвых шагах. -
→
SSE с «бесплатным» resume.
EventSourceсам шлётLast-Event-IDна reconnect — replay работает «из коробки», без custom-протокола.
Шесть стадий конвейера
Каждая задача проходит фиксированную цепочку: fetch → context → plan → implement → verify → pr.
Между implement и verify крутится локальный quality-gate цикл (по умолчанию две попытки).
FAIL retryable — worktree откатывается через git reset --hard,
бинарный патч прошлой попытки сохраняется в data/checkpoints/, в промпт implement'а дописывается
«previous feedback», запускается попытка №2. Непонятный вердикт или маркер NEED_VERIFICATION от агента → задача уходит в BLOCKED.
Четыре CLI под одним протоколом
Foundry не использует ни SDK провайдеров, ни HTTP-клиенты. Все агенты — это локальные CLI,
запускаемые subprocess'ом. Различия — в адаптерах, которые нормализуют события к единому виду:
agent_tool, agent_text, agent_thinking, agent_result.
Три разнотемповых цикла
Никаких webhook'ов, никаких подписок на GitHub events. Простота за счёт latency — для single-tenant сценария это оптимальный компромисс.
Двенадцать строительных блоков
От фонового worker'а до тонкого security wrapper'а вокруг shell-команд — каждый компонент решает одну конкретную задачу. Используйте фильтр для просмотра по категориям.
Что происходит с типичной задачей
От момента, когда оператор поставил label agent-task на issue, до открытого PR — пятнадцать
шагов через шесть стадий dev_task.
Ключевые свойства архитектуры
Девять решений, которые делают Foundry простым, идемпотентным и предсказуемым после падений.