Tech Stack

Основной стек

КомпонентТехнологияВерсияОбоснование
BackendPython + FastAPI3.12 / 0.111+Async, типизация, экосистема AI
DatabasePostgreSQL16Надёжность, JSON, расширения
QueuePG (SKIP LOCKED)Нет отдельного брокера, см. ADR-0001-Use-Postgres-As-Queue
CacheRedis7+Sessions, hot cache
Vectorpgvector (старт)0.7+Внутри PG, достаточно для MVP
ContainerDocker + ComposeИзоляция, воспроизводимость
Process Mgrpm2 (уже есть)Уже настроен на серверах
FrontendTelegram (пока)Web UI в Phase 3

LLM Routing

Выбор модели по уровню сложности и стоимости:

Уровень задачиМодельАгентыCost/1M tokens
СтратегияClaude Opus 4.6Agent-CEO, сложные аналитические$$$
АналитикаClaude Sonnet 4.6Directors, Agent-Judge, Agent-MarketResearcher$$
РутинаClaude Haiku 4.5Executors, classification, Agent-CompetitorScout$
  • Модель указывается в roles/*.yaml для каждого агента
  • Override per-task возможен через payload.model_override
  • Fallback: если основная модель unavailable → Sonnet (кроме Codex-critical задач)

Анти-стек

Что мы НЕ используем и почему:

ТехнологияПочему нет
n8n / ZapierVendor lock-in, нет контроля над логикой, не масштабируется, debugging nightmare
LangChainИзбыточные абстракции, leaky abstractions, лишняя зависимость
LangGraphПереусложнено для MVP, state machine overhead
CrewAI / AutoGenНе контролируем оркестрацию, magic > explicit
MongoDBPostgreSQL покрывает все кейсы (JSON, vector, queue)
RabbitMQ / KafkaPG SKIP LOCKED достаточно при нашей нагрузке (<1000 tasks/day)
KubernetesOverkill для 2 серверов, operational complexity

Принцип: каждая зависимость = обязательство. Добавляем только когда PG / Python / стандартная библиотека не справляются.

Observability Stack

ФазаРешение
MVP (сейчас)Собственная таблица runs + FastAPI /admin/dashboard
Phase 2stdout → journald → Loki, basic Prometheus + Grafana
Phase 3OpenTelemetry, structured logging, alerting

Переход к внешним tools при > 1GB/месяц логов. До этого — собственный dashboard.

См. Observability для деталей.

Secrets Management

ФазаРешение
MVP.env на сервере (не в git), chmod 600
Phase 2SOPS + age для шифрованных секретов в git
Phase 3HashiCorp Vault (когда команда > 1 человек)

Правило: секреты НИКОГДА не в git, не в логах, не в task payload.

CI/CD

Developer push
  → GitHub Actions (или Gitea CI)
    → ruff (linting)
    → mypy (type checking)
    → pytest (tests)
    → build Docker image
    → deploy to staging
    → manual promote → production

Pre-commit hooks: ruff check, mypy --strict, pytest -x.

Repo Structure (synth-brain)

synth-brain/
├── api/            # FastAPI routes
├── agents/         # Agent runner, context assembly
├── roles/          # *.yaml role definitions (prompts, tools, budgets)
├── tools/          # Tool implementations
├── policy/         # PolicyEngine, validators
├── queue/          # Worker loop, task management
├── memory/         # RAG, embedding, Librarian logic
├── obs/            # Observability, logging, metrics
├── migrations/     # Alembic SQL migrations
├── tests/          # pytest
├── docker-compose.yml
├── Dockerfile
└── pyproject.toml

Связанные документы