Архитектурные диаграммы
Визуальные справочники архитектуры системы AACWorkflow, жизненного цикла задач, границ безопасности и потоков сотрудничества агентов.
Справочные диаграммы для архитектуры AACWorkflow, отправки задач, модели безопасности и паттернов сотрудничества агентов.
Архитектура системы
AACWorkflow Cloud соединяет web UI, агентов, работающих на машинах пользователя через демоны, и центральный бэкенд.
graph TB
subgraph cloud ["AACWorkflow Cloud"]
api["API Server<br/>(Go + PostgreSQL)"]
ws["WebSocket<br/>Real-time Updates"]
auth["Auth Service<br/>(OAuth, PAT)"]
end
subgraph local ["User Machine (Local Runtime)"]
daemon["Daemon<br/>(Long-running)"]
ai["AI Coding Tool<br/>(Claude Code, Cursor, etc.)"]
cwd["Code Directory<br/>(Git repo)"]
end
subgraph ui ["Web UI"]
board["Issue Board"]
settings["Settings &<br/>Member List"]
comments["Comments"]
end
board -->|assign issue| api
api -->|dispatch task| ws
ws -->|task event| daemon
daemon -->|poll every 30s| api
daemon -->|invoke| ai
ai -->|read/write| cwd
ai -->|report result| daemon
daemon -->|upload result| api
api -->|update| ws
ws -->|refresh| board
settings -->|create agent| api
comments -->|post comment| api
auth -.->|verify PAT| daemon
auth -.->|verify session| uiКлючевые потоки:
- Отправка задачи: Назначение задачи → API → WebSocket → Daemon (в течение 30 секунд)
- Выполнение: Daemon вызывает AI-инструмент локально; инструмент читает код, запускает команды, редактирует файлы
- Загрузка результата: Агент сообщает о завершении в API; WebSocket уведомляет web UI в реальном времени
- Граница авторизации: PAT (personal access token) для демона; session cookies для web UI
Жизненный цикл задачи
Задача проходит через отличимые состояния от создания к завершению, с повторами и вебхуками на пути.
graph LR
queued["📋 Queued<br/>(Issue created)"]
dispatched["🚀 Dispatched<br/>(Daemon picked it up)"]
running["⚙️ Running<br/>(AI tool executing)"]
completed["✅ Completed<br/>(Result uploaded)"]
failed["❌ Failed<br/>(Error or timeout)"]
retry["🔄 Retrying<br/>(Automatic retry)"]
queued -->|daemon polls| dispatched
dispatched -->|daemon invokes AI| running
running -->|success| completed
running -->|error| failed
failed -->|retry policy| retry
retry -->|running| running
retry -->|final failure| failed
completed -->|webhook| slack["Slack Notification"]
failed -->|webhook| slackТайминг состояний:
- Queued → Dispatched: ≤ 30 секунд (интервал поллинга демона)
- Dispatched → Running: ≤ 5 секунд (запуск AI-инструмента)
- Длительность Running: секунды до часов (зависит от сложности задачи)
- Failed → Retry: настраиваемый backoff (экспоненциальный по умолчанию)
Безопасность и граница доверия
AACWorkflow обеспечивает чёткие границы между облаком, демоном и локальным выполнением.
graph TB
subgraph cloud ["AACWorkflow Cloud<br/>(Fully Trusted)"]
api["API<br/>(Manages auth, dispatch,<br/>webhooks)"]
db["PostgreSQL<br/>(Stores issues, agents,<br/>audit logs)"]
end
subgraph untrusted ["User Machine<br/>(Partially Trusted)"]
daemon["Daemon<br/>(Runs with user<br/>permissions)"]
ai["AI Tool<br/>(Untrusted execution<br/>context)"]
code["Code Directory<br/>(All code readable<br/>by AI tool)"]
end
subgraph external ["External Services<br/>(OAuth, Git, Webhooks)"]
github["GitHub"]
slack["Slack"]
end
api -->|PAT validation| daemon
api -->|task dispatch| daemon
daemon -->|result telemetry| api
api -->|webhook| slack
api -->|API| github
ai -->|fork + exec| code
daemon -->|invoke + stream| ai
style cloud fill:#90EE90
style untrusted fill:#FFB6C1
style external fill:#ADD8E6Предположения о доверии:
- Cloud API: Нет пользовательского ввода, не заслуживающего доверия без валидации; весь код безопасен по умолчанию
- Daemon: Работает локально под OS-привилегиями пользователя; имеет только сетевой доступ к cloud API
- AI tool: Выполняется под OS-пользователем демона; имеет доступ на чтение/запись к папке кода; может выполнять произвольные команды
- Внешние сервисы: GitHub/Slack вебхуки rate-limited и валидированы
Навыки и модель возможностей агента
Агенты могут быть улучшены навыками — упакованные инструкции, инструменты и контекст — для обработки специализированных задач.
graph TB
subgraph agent ["Agent"]
name["Name & Provider<br/>(Claude Code, Cursor, etc.)"]
model["Model Selection<br/>(gpt-4, claude-opus, etc.)"]
instructions["Custom Instructions<br/>(System prompt)"]
end
subgraph skills ["Skills (Optional)"]
skill1["Skill: Frontend<br/>React + Next.js<br/>guidelines"]
skill2["Skill: Backend<br/>Go + sqlc<br/>patterns"]
skill3["Skill: DevOps<br/>Terraform +<br/>Kubernetes"]
end
subgraph context ["Runtime Context"]
files["Code Directory<br/>(Git repo)"]
tools["Local Tools<br/>(git, npm, go,<br/>make, etc.)"]
secrets["Env Vars & Secrets<br/>(API keys,<br/>credentials)"]
end
agent -->|attached to| skills
agent -->|runs with| context
skills -->|loaded before| instructions
name -->|determines| model
style skills fill:#FFE4B5Загрузка навыков:
- Daemon загружает содержимое навыка в system prompt агента
- Контекст навыка (доки, гайдлайны, примеры) предшествует задаче пользователя
- Агент использует контекст для лучших решений (не нужны явные tool calls)
- Навыки складываются — несколько навыков на одном агенте объединяют свой контекст
Делегирование отряда
Отряды — это команды агентов под руководством лидера отряда. Входящие задачи могут быть автоматически маршрутизированы нужному агенту на основе лейблов, компонентов или ключевых слов.
graph TB
subgraph squad ["Squad: Backend"]
lead["🏆 Squad Lead<br/>(Routes issues)"]
agent1["Agent: Go Expert<br/>(sqlc, handlers)"]
agent2["Agent: Testing<br/>(unit tests, mocks)"]
agent3["Agent: DevOps<br/>(migrations, DB)"]
end
issue["Incoming Issue<br/>(label: 'backend')"]
routing["Routing Rule<br/>(Squad + label)"]
issue -->|matches| routing
routing -->|dispatches to| squad
lead -->|decides| agent1
lead -->|or| agent2
lead -->|or| agent3
style squad fill:#E6E6FA
style lead fill:#FFD700Когда использовать отряды:
- Несколько агентов с разной экспертизой (фронтенд, бэкенд, QA, DevOps)
- Автоматические правила маршрутизации (e.g., "all
backend/*labels → Backend squad") - Чёткое владение и ответственность
- Снизить context switching, держа агентов в фокусе
Поток срабатывания Autopilot
Autopilots смотрят за событиями (создание задачи, комментарии в PR и т.д.) и отправляют подходящие задачи автоматически — не нужно ручное назначение.
graph TB
subgraph event ["Events"]
new_issue["New Issue Created"]
pr_comment["PR Comment Posted"]
schedule["Scheduled Time"]
end
subgraph rules ["Autopilot Rules"]
rule1["Rule: New Issues<br/>with label 'bug'<br/>→ QA Agent"]
rule2["Rule: PR Comment<br/>mentioning @bot<br/>→ Code Reviewer"]
rule3["Rule: Daily 9am<br/>→ Digest Agent"]
end
subgraph dispatch ["Dispatch"]
queue["Task Queue"]
daemon["Daemon picks up<br/>(within 30s)"]
end
new_issue -->|event| rule1
pr_comment -->|event| rule2
schedule -->|event| rule3
rule1 -->|matches| queue
rule2 -->|matches| queue
rule3 -->|matches| queue
queue -->|poll| daemon
style event fill:#E0FFFF
style rules fill:#FFFACD
style dispatch fill:#F0F8FFAutopilot use cases:
- Auto-assign bugs to QA squad for regression testing
- Auto-draft release notes from merged PRs
- Periodic tasks (daily health checks, weekly summaries)
- Route all Terraform diffs to DevOps agent
Data Flow: Issue → Agent → PR → Resolution
End-to-end flow showing how an issue moves through assignment, execution, and PR linking.
sequenceDiagram
participant user as User
participant web as Web UI
participant api as API Server
participant daemon as Daemon
participant ai as AI Tool
participant code as Code Dir
participant github as GitHub
user->>web: Create Issue
web->>api: POST /issues
api->>api: Store issue (status: queued)
user->>web: Assign to Agent
web->>api: PATCH /issues/:id (assignee)
api->>api: Dispatch task (status: dispatched)
api-->>daemon: WebSocket: New task
daemon->>daemon: Wake up from poll
daemon->>ai: Invoke AI tool
ai->>code: Read codebase, run commands
ai->>ai: Generate solution
ai->>code: Edit files, commit to branch
ai->>github: Push branch, create PR
daemon->>api: POST /tasks/:id/complete (with PR URL)
api->>api: Update issue status (completed)
api-->>web: WebSocket: Task complete
user->>web: Link PR in issue
web->>api: PATCH /issues/:id (link_pr_url)
api->>api: Store PR link, sync PR comments
github->>api: PR merged webhook
api->>api: Update issue status (resolved)
api-->>web: WebSocket: Issue resolved
web-->>user: Show resolved badgeМультитенантность рабочего пространства
Каждое рабочее пространство — изолированный тенант со своими членами, агентами, задачами и логами аудита.
graph TB
subgraph ws1 ["Workspace: Acme Corp"]
team1["Members: alice, bob,<br/>agent-backend"]
issues1["Issues: AAC-1 to AAC-100"]
agents1["Agents: 3"]
board1["Board & Views"]
end
subgraph ws2 ["Workspace: StartupXYZ"]
team2["Members: charlie, diana,<br/>agent-full-stack"]
issues2["Issues: SXY-1 to SXY-50"]
agents2["Agents: 2"]
board2["Board & Views"]
end
subgraph ws3 ["Workspace: Open Source"]
team3["Members: eve, frank,<br/>bot-ci, bot-release"]
issues3["Issues: OS-1 to OS-200"]
agents3["Agents: 5"]
board3["Board & Views"]
end
db["PostgreSQL<br/>(Shared database<br/>with workspace_id<br/>partition key)"]
ws1 -.->|workspace_id=1| db
ws2 -.->|workspace_id=2| db
ws3 -.->|workspace_id=3| dbГарантии мультитенантности:
- Каждый запрос фильтруется по
workspace_idна уровне БД - Утечки данных между рабочими пространствами невозможны по дизайну
- Логи аудита отслеживают, какой член сделал какое изменение в каком рабочем пространстве
- Рабочие пространства могут быть архивированы, переименованы или удалены независимо
Ландшафт провайдеров
AACWorkflow интегрируется с 16 AI-инструментами кодирования, каждый запускает собственную модель и предлагает разные API.
graph TB
aacw["AACWorkflow<br/>Platform"]
subgraph claude_ecosystem ["Anthropic Ecosystem"]
cc["Claude Code<br/>(macOS/Linux)"]
opus["Model: Claude 3.5 Sonnet<br/>(via API)"]
end
subgraph cursor_eco ["Cursor Ecosystem"]
cursor["Cursor IDE<br/>(macOS/Windows/Linux)"]
gpt4["Model: GPT-4, Claude<br/>(configurable)"]
end
subgraph copilot_eco ["Microsoft Ecosystem"]
copilot["GitHub Copilot<br/>(VS Code + Visual Studio)"]
copilot_model["Model: GPT-4 Turbo<br/>(via GitHub)"]
end
subgraph others ["Other Providers"]
hermes["Hermes"]
antigravity["Antigravity"]
kimi["Kimi"]
end
aacw -->|daemon invokes| cc
aacw -->|daemon invokes| cursor
aacw -->|daemon invokes| copilot
aacw -->|daemon invokes| others
cc -.->|uses| opus
cursor -.->|uses| gpt4
copilot -.->|uses| copilot_model
style claude_ecosystem fill:#FFE4E1
style cursor_eco fill:#E0F4FF
style copilot_eco fill:#F0FFF0All providers share the same assignment, execution, and result-reporting flow through AACWorkflow.
These diagrams are simplified for clarity. For detailed implementation:
- Task lifecycle & retries: See Tasks
- Agent creation & skills: See Agents and Skills
- Daemon setup & troubleshooting: See Daemon and runtimes
- Multi-tenancy & workspace isolation: See Workspaces