Многоагентный фреймворк с поддержкой MCP для декларативных агентных рабочих процессов на основе YAML, используемый для аудита кода с помощью ИИ, триажа уязвимостей и исследований в области безопасности с интеграцией CodeQL.
Security Lab Taskflow Agent — это MCP-совместимый мультиагентный фреймворк для декларативных агентных рабочих процессов на основе YAML.
Построенный на базе OpenAI Agents SDK, он использует Pydantic для валидации грамматики и Jinja2 для рендеринга шаблонов.
Taskflow Agent использует грамматику на основе YAML в стиле GitHub Workflow для выполнения последовательности задач с помощью набора агентов.
Его основное ценностное предложение — это CLI-инструмент, позволяющий пользователям быстро определять и скриптовать агентные рабочие процессы без необходимости писать какой-либо код.
Агенты определяются через персоналии, которые получают задачу для выполнения, имея набор инструментов.
Агенты могут взаимодействовать для выполнения последовательностей задач через так называемые таскфлоу.
Подробный обзор грамматики таскфлоу можно найти здесь, а примеры таскфлоу — здесь.
┌─────────────────────────────────────────────────────┐
│ CLI (cli.py) │
│ Typer-based entry point: -p, -t, -l, -g, -m, --resume, --lint│
└─────────────────────┬───────────────────────────────┘
│
┌─────────────────────▼───────────────────────────────┐
│ Runner (runner.py) │
│ Taskflow execution loop, model resolution, │
│ template rendering, session checkpointing │
└─────────────────────┬───────────────────────────────┘
│
┌─────────────────────▼───────────────────────────────┐
│ MCP Lifecycle (mcp_lifecycle.py) │
│ Server connection, cleanup, process management │
└─────────────────────┬───────────────────────────────┘
│
┌─────────────────────▼───────────────────────────────┐
│ Agent (agent.py) │
│ TaskAgent wrapper, hooks, OpenAI Agents SDK bridge │
└─────────────────────────────────────────────────────┘
Supporting modules:
models.py — Pydantic v2 grammar models (validation)
session.py — Task-level checkpoint / resume
available_tools.py — YAML resource loader with caching
template_utils.py — Jinja2 template environment
mcp_utils.py — MCP client parameter resolution
mcp_transport.py — MCP transport implementations (stdio, streamable)
mcp_prompt.py — System prompt construction
prompt_parser.py — Legacy prompt argument parser
capi.py — AI API endpoint and token management
path_utils.py — Platform-aware data/log directories
Агент поддерживает как Chat Completions, так и Responses API OpenAI.
Тип API можно настроить глобально или для каждой модели в файле model_config:
seclab-taskflow-agent:
version: "1.0"
filetype: model_config
api_type: chat_completions # default for all models
models:
gpt_default: gpt-4.1
gpt_responses: gpt-5.1
model_settings:
gpt_responses:
api_type: responses # override for this model
endpoint: https://api.githubcopilot.com
token: CAPI_TOKEN # env var name containing the API key
Для каждой модели model_settings может включать:
api_type — "chat_completions" (по умолчанию) или "responses"endpoint — переопределение базового URL API для этой моделиtoken — имя переменной окружения, содержащей API-ключRunner может управлять тремя SDK через общий интерфейс:
openai_agents (по умолчанию) — OpenAI Agents Python SDK. Поддерживает
передачу управления между несколькими персоналиями, оба api_type —
chat_completions и responses, temperature, parallel_tool_calls,
exclude_from_context, а также MCP через stdio, SSE и streamable HTTP.copilot_sdk — GitHub Copilot Python SDK. Поддерживает потоковую
передачу, reasoning_effort, MCP через stdio/SSE/HTTP и управление
разрешениями для каждого инструмента. SDK самостоятельно выбирает
проводной протокол для каждой модели, поэтому поле api_type в YAML
не учитывается; передача управления между несколькими персоналиями,
temperature и parallel_tool_calls также недоступны.
Taskflow, использующие неподдерживаемые поля, завершаются ошибкой при
загрузке с BackendCapabilityError, указывающей проблемное поле.anthropic_sdk — Anthropic Python SDK, работающий с нативным
Messages API (/v1/messages). Поддерживает потоковую передачу, вызов
инструментов через MCP и адаптивное мышление с настраиваемым
reasoning.effort (low, medium, high, max). Передача управления
не поддерживается. Предназначен для использования с Anthropic-эндпоинтом
CAPI; аутентификация использует Authorization: Bearer (не x-api-key).Приоритет выбора (от высшего к низшему):
backend: для конкретной задачи в собственном блоке model_settings
задачи (переопределяет значение уровня модели для этой одной задачи;
см. _resolve_task_model()).backend: для конкретной модели в model_settings конфигурации модели
(позволяет смешивать бэкенды в одном taskflow).backend: на верхнем уровне документа конфигурации модели
(глобальное значение по умолчанию).SECLAB_TASKFLOW_BACKEND.openai_agents.seclab-taskflow-agent:
version: "1.0"
filetype: model_config
models:
code_analysis: claude-opus-4.7
general_tasks: gpt-5.4-mini
model_settings:
code_analysis:
api_type: messages
backend: anthropic_sdk
reasoning:
effort: high
general_tasks:
api_type: responses
backend: openai_agents
Запуски Taskflow автоматически сохраняются на уровне задач. Если задача завершается ошибкой после исчерпания повторных попыток, сессия сохраняется и может быть возобновлена:
** 🤖💾 Session saved: abc123def456
** 🤖💡 Resume with: --resume abc123def456
Возобновить с последней успешной контрольной точки:
python -m seclab_taskflow_agent --resume abc123def456
Контрольная точка сессии сохраняет значение --model-config, переданное через CLI (если оно было), поэтому при возобновлении по умолчанию используется та же конфигурация модели. Чтобы переопределить конфигурацию модели при возобновлении, явно передайте --model-config / -m:
python -m seclab_taskflow_agent --resume abc123def456 -m examples.model_configs.responses_api
Неудачные задачи автоматически повторяются до 3 раз с увеличивающейся задержкой, прежде чем сессия будет сохранена. Контрольные точки сессии хранятся в каталоге данных приложения, зависящем от платформы.
Каждый запуск создаёт машиночитаемый манифест, обобщающий произошедшее:
статус каждой задачи (ok / failed / skipped), модели, с которыми работала каждая задача,
время выполнения и именованные outputs, созданные каждой задачей (включая записи
fan-in по каждой модели для многомодельных задач). Он не содержит эндпоинтов или токенов.
Манифест записывается в каталог артефактов, привязанный к запуску, когда запуск завершается или завершается с ошибкой, и может быть выведен для любой сессии по ID:
python -m seclab_taskflow_agent --manifest abc123def456