Konfiguracja Zadania (task.json)
Przegląd
Plik task.json to główny plik konfiguracyjny każdego zadania. Zawiera wszystkie informacje niezbędne do wykonania zadania przez system.
Pełna Struktura
{
"task_id": "example_task_2_team_mode",
"title": "Add User Authentication System",
"issue": {
"id": "DEV-789",
"author_id": "product.owner",
"assignee_id": "tech.lead",
"assignee_github_id": "techleadgithub",
"url": "https://jira.example.com/browse/DEV-789"
},
"worker": {
"type": "sembot_frontend",
"docker_path": "docker/docker/sembot_frontend",
"docker_finish_stop": false
},
"repositories": [
{
"folder": "sembot-angular",
"git_url": "[email protected]:sembot-io/sembot-angular.git",
"target_branch": "master",
"working_branch": "feature/example_task_2_team_mode",
"merge_request_id": null,
"merge_request_url": null,
"merge_request_create_as_draft": false
}
],
"ai": {
"provider": "claude",
"model": "claude-sonnet-4",
"mode": "read_only",
"start_commands": [
{
"id": "init_workspace",
"catalog": "START",
"executor": "bash",
"command": "bash /workspace/files/helpers/init_workspace.sh",
"dependencies": []
},
{
"id": "backup_task",
"catalog": "START",
"executor": "bash",
"command": "bash /workspace/files/helpers/backup_task_md.sh",
"dependencies": ["init_workspace"]
},
{
"id": "plan_task",
"catalog": "START",
"executor": "claude",
"command": "/plugin-codegen:plan",
"dependencies": ["backup_task"]
},
{
"id": "move_task_spec",
"catalog": "END",
"executor": "bash",
"command": "bash /workspace/files/helpers/move_task_md.sh",
"dependencies": ["plan_task"]
},
{
"id": "persist_git",
"catalog": "END",
"executor": "bash",
"command": "bash /workspace/files/helpers/persist_git_changes.sh",
"dependencies": ["move_task_spec"]
},
{
"id": "github_push_mr",
"catalog": "END",
"executor": "bash",
"command": "bash /workspace/files/helpers/github_push_mr.sh",
"dependencies": ["persist_git"]
}
],
"approval_request_wait_minutes": 10,
"sessions": {
"claude": null,
"codex": null,
"gemini": null
}
},
"monitoring": {
"status_update_interval_minutes": 5,
"status_ai_provider": "claude",
"status_ai_model": "haiku",
"last_status_update": null
},
"worker_tag": null,
"parent_task_id": null,
"reopened_count": 0,
"reopened_at": null,
"created_at": "2025-12-18T10:00:00Z",
"updated_at": "2025-12-18T10:00:00Z",
"started_at": null,
"completed_at": null,
"status": "todo"
}Szczegółowy Opis Pól
Podstawowe Informacje
task_id (string, required)
Unikalny identyfikator zadania.
Format: Dowolny string (zazwyczaj ID z systemu ticketów) Przykłady: "DEV-7315", "FEAT-123", "BUG-456"
{
"task_id": "DEV-7315"
}title (string, required)
Krótki, opisowy tytuł zadania.
Długość: 5-100 znaków Przykład: "Add User Authentication System"
{
"title": "Settings UI Unification"
}Sekcja: issue
Informacje o tickecie/issue z systemu zarządzania projektami.
issue.id (string, required)
ID ticketu w systemie zewnętrznym (Jira, Linear, etc.)
{
"issue": {
"id": "DEV-789"
}
}issue.author_id (string, required)
ID autora zadania (osoby która stworzyła ticket).
Format: Zazwyczaj email lub username Przykład: "product.owner", "[email protected]"
{
"issue": {
"author_id": "product.owner"
}
}issue.assignee_id (string, required)
ID osoby przypisanej do wykonania zadania.
{
"issue": {
"assignee_id": "tech.lead"
}
}issue.assignee_github_id (string, required)
GitHub username osoby która ma być przypisana do PR/MR.
Ważne: Musi być poprawnym GitHub username (bez @)
{
"issue": {
"assignee_github_id": "techleadgithub"
}
}issue.url (string, optional)
Link do ticketu w systemie zewnętrznym.
{
"issue": {
"url": "https://jira.example.com/browse/DEV-789"
}
}Sekcja: worker
Konfiguracja workera (Docker environment).
worker.type (string, required)
Typ kolejki/workera.
Wartości: "sembot_frontend", "sembot_backend", "sembot_qa"
Ważne: Określa który Docker worker zostanie użyty i do której kolejki trafi zadanie.
{
"worker": {
"type": "sembot_frontend"
}
}worker.docker_path (string, required)
Ścieżka do katalogu z docker-compose.yml.
Format: Relatywna ścieżka od PROJECT_ROOT
{
"worker": {
"docker_path": "docker/docker/sembot_frontend"
}
}worker.docker_finish_stop (boolean, optional, default: false)
Czy zatrzymać i usunąć Docker po zakończeniu zadania.
Wartości:
true- Zatrzymaj i usuń kontenery po zakończeniufalse- Zostaw kontenery uruchomione (szybsze kolejne uruchomienia)
{
"worker": {
"docker_finish_stop": false
}
}Sekcja: repositories
Lista repozytoriów Git do sklonowania i pracy.
Typ: Array of objects Może być wiele repozytoriów: Tak
repositories[].folder (string, required)
Nazwa folderu w workspace gdzie zostanie sklonowane repo.
Ścieżka: workspace/{folder}
{
"repositories": [
{
"folder": "sembot-angular"
}
]
}repositories[].git_url (string, required)
URL Git do klonowania (SSH lub HTTPS).
Preferowane: SSH (wymaga SSH_PRIVATE_KEY secret)
{
"repositories": [
{
"git_url": "[email protected]:sembot-io/sembot-angular.git"
}
]
}repositories[].target_branch (string, required)
Główny branch (base branch dla PR/MR).
Przykłady: "master", "main", "develop"
{
"repositories": [
{
"target_branch": "master"
}
]
}repositories[].working_branch (string, required)
Branch na którym wykonywane są zmiany.
Format: Zazwyczaj feature/{task_id} lub fix/{task_id}
Ważne: Branch zostanie utworzony jeśli nie istnieje
{
"repositories": [
{
"working_branch": "feature/DEV-7315"
}
]
}repositories[].merge_request_id (string|null, auto-filled)
ID utworzonego PR/MR.
Auto-filled: Wypełniane automatycznie przez github_push_mr.sh
{
"repositories": [
{
"merge_request_id": "123"
}
]
}repositories[].merge_request_url (string|null, auto-filled)
URL do utworzonego PR/MR.
Auto-filled: Wypełniane automatycznie przez github_push_mr.sh
{
"repositories": [
{
"merge_request_url": "https://github.com/sembot-io/sembot-angular/pull/123"
}
]
}repositories[].merge_request_create_as_draft (boolean, optional, default: false)
Czy utworzyć PR/MR jako draft.
Wartości:
true- Draft PR (wymaga ręcznej zmiany na "Ready for review")false- Normalny PR (od razu ready for review)
{
"repositories": [
{
"merge_request_create_as_draft": true
}
]
}Sekcja: ai
Konfiguracja AI providera i komend.
ai.provider (string, required)
Domyślny provider AI dla zadania.
Wartości: "claude", "codex", "gemini", "mock"
{
"ai": {
"provider": "claude"
}
}ai.model (string, required)
Domyślny model AI.
Przykłady:
- Claude:
"claude-sonnet-4","claude-opus-4" - Codex:
"gpt-4","gpt-5.1-codex-max" - Gemini:
"gemini-pro"
{
"ai": {
"model": "claude-sonnet-4"
}
}ai.mode (string, optional)
Tryb działania AI - określa czy AI może modyfikować kod.
Wartości:
- Brak (default) - Normalny tryb, AI może modyfikować kod i tworzyć commity
"read_only"- Tryb read-only, AI może tylko analizować kod bez wprowadzania zmian
Zachowanie w trybie read_only:
- AI nie tworzy commitów
- AI nie pushuje zmian
- AI nie tworzy Pull Requestów
- Pomija wszystkie operacje git w
execute_subtask.sh - Używane głównie dla worker type
"qa"(Q&A system)
Użycie: Idealny dla zadań typu Q&A, gdzie AI ma odpowiadać na pytania o kod bez wprowadzania zmian.
{
"ai": {
"provider": "codex",
"model": "gpt-5.1-codex-max",
"mode": "read_only"
}
}Przykład - Worker Q&A:
{
"worker": {
"type": "qa",
"docker_path": "qa"
},
"ai": {
"provider": "codex",
"model": "gpt-5.1-codex-max",
"mode": "read_only",
"start_commands": [
{
"id": "init_workspace",
"catalog": "START",
"executor": "bash",
"command": "bash /workspace/files/helpers/init_workspace.sh",
"dependencies": []
},
{
"id": "qa_answer",
"catalog": "START",
"executor": "codex",
"command": "/qa_answer",
"dependencies": ["init_workspace"]
}
]
}
}ai.start_commands (array, required)
Tablica komend do wykonania w fazach START i END.
Struktura komendy:
{
"id": "unique_command_id",
"catalog": "START" | "END",
"executor": "bash" | "claude" | "codex" | "gemini",
"command": "command to execute",
"dependencies": ["array", "of", "command_ids"]
}Przykład pełnej konfiguracji:
{
"ai": {
"start_commands": [
{
"id": "init_workspace",
"catalog": "START",
"executor": "bash",
"command": "bash /workspace/files/helpers/init_workspace.sh",
"dependencies": []
},
{
"id": "plan_task",
"catalog": "START",
"executor": "claude",
"command": "/plugin-codegen:plan",
"dependencies": ["init_workspace"]
},
{
"id": "finalize",
"catalog": "END",
"executor": "bash",
"command": "bash /workspace/files/helpers/move_task_md.sh",
"dependencies": []
}
]
}
}Pola obiektu komendy:
id(string, required) - Unikalny identyfikator dla dependenciescatalog(string, required) -"START"lub"END"executor(string, required) - Który executor użyć"bash"- Bezpośrednia komenda bash"claude"- Claude Code slash command"codex"- Codex command"gemini"- Gemini CLI command
command(string, required) - Komenda do wykonaniadependencies(array, required) - Lista ID komend które muszą się wykonać wcześniej
ai.approval_request_wait_minutes (number, optional, default: 10)
Czas oczekiwania na odpowiedź użytkownika (w minutach) przy approval requestach.
Zachowanie po timeout:
- Jeśli możliwe kontynuowanie → kontynuuje + notyfikacja
- Jeśli nie → task failed
{
"ai": {
"approval_request_wait_minutes": 10
}
}ai.sessions (object, auto-managed)
Session IDs dla różnych AI providerów.
Auto-managed: System automatycznie zarządza sesjami Wartości: null lub string (session ID)
{
"ai": {
"sessions": {
"claude": "session_abc123def456",
"codex": null,
"gemini": null
}
}
}Sekcja: monitoring
Konfiguracja monitoringu i statusów.
monitoring.status_update_interval_minutes (number, optional, default: 5)
Interwał między automatycznymi statusami (w minutach).
Zakres: 1-60 minut Domyślnie: 5 minut (z .env)
{
"monitoring": {
"status_update_interval_minutes": 5
}
}monitoring.status_ai_provider (string, optional, default: ai.provider)
Provider AI do generowania statusów.
Zazwyczaj: Lekki model (Haiku) dla oszczędności
{
"monitoring": {
"status_ai_provider": "claude"
}
}monitoring.status_ai_model (string, optional, default: "haiku")
Model AI do generowania statusów.
Rekomendacja: Użyj szybkiego, lekkiego modelu
{
"monitoring": {
"status_ai_model": "haiku"
}
}monitoring.last_status_update (string|null, auto-filled)
Timestamp ostatniego wysłanego statusu.
Auto-filled: Aktualizowane przez task_status_monitor.sh Format: ISO 8601
{
"monitoring": {
"last_status_update": "2025-12-31T10:30:00Z"
}
}Metadata i Status
worker_tag (string|null, auto-filled)
Tag kolejki przypisanej przez watchdog.
Auto-filled: Ustawiane przez watchdog podczas load balancingu Przykłady: "sembot_frontend_1", "sembot_backend_1"
{
"worker_tag": "sembot_frontend_2"
}parent_task_id (string|null, optional)
ID parent taska (dla follow-up tasków).
Użycie: Follow-up taski (DEV-7315-FIX-1 → parent: DEV-7315)
{
"parent_task_id": "DEV-7315"
}reopened_count (number, auto-managed, default: 0)
Liczba reopenów taska.
Auto-managed: Inkrementowane przez reopen_task.sh
{
"reopened_count": 2
}reopened_at (string|null, auto-filled)
Timestamp ostatniego reopena.
Auto-filled: Ustawiane przez reopen_task.sh Format: ISO 8601
{
"reopened_at": "2025-12-31T14:30:00Z"
}created_at (string, required)
Timestamp utworzenia zadania.
Format: ISO 8601
{
"created_at": "2025-12-18T10:00:00Z"
}updated_at (string, auto-managed)
Timestamp ostatniej aktualizacji.
Auto-managed: Aktualizowane przy każdej zmianie task.json
{
"updated_at": "2025-12-18T10:30:00Z"
}started_at (string|null, auto-filled)
Timestamp rozpoczęcia wykonywania zadania.
Auto-filled: Ustawiane przez orchestrator przy pierwszym subtasku
{
"started_at": "2025-12-18T10:15:00Z"
}completed_at (string|null, auto-filled)
Timestamp zakończenia zadania.
Auto-filled: Ustawiane przy przeniesieniu do done/failed
{
"completed_at": "2025-12-18T12:45:00Z"
}status (string, auto-managed)
Aktualny status zadania.
Wartości:
"todo"- Zadanie oczekuje"in_progress"- Zadanie w trakcie wykonywania"done"- Zadanie ukończone pomyślnie"failed"- Zadanie zakończone niepowodzeniem
{
"status": "in_progress"
}Subtask task.json
Subtaski mają uproszczoną strukturę:
{
"task_id": "frontend_abc123",
"priority": "P1",
"title": "Implement Settings Menu Component",
"why": "User needs to access settings through a visible menu with icons",
"ai": {
"provider": "claude",
"model": "claude-sonnet-4",
"start_command": "/frontend /task",
"sessions": {
"claude": null,
"codex": null,
"gemini": null
}
},
"dependencies": ["init_workspace", "plan_task"],
"created_at": "2025-12-18T10:20:00Z",
"updated_at": "2025-12-18T10:20:00Z",
"started_at": null,
"completed_at": null
}Pola specyficzne dla subtasków
priority (string, required)
Poziom priorytetu subtaska.
Wartości: "START", "P0", "P1", "P2", "P3", "END"
{
"priority": "P1"
}why (string, required)
Wyjaśnienie dlaczego subtask został utworzony.
Cel: Pomaga AI zrozumieć kontekst i cel zadania
{
"why": "User needs to access settings through a visible menu with icons"
}ai.start_command (string, required)
Pierwsza komenda do uruchomienia w subtasku.
Format: Slash command z path do subtaska
{
"ai": {
"start_command": "/frontend /task"
}
}dependencies (array, optional)
Lista dependency IDs (wspiera wildcards).
{
"dependencies": ["init_workspace", "frontend_*", "test_unit_*"]
}Przykłady Konfiguracji
Przykład 1: Prosty Frontend Task
{
"task_id": "DEV-7315",
"title": "Settings UI Unification",
"issue": {
"id": "DEV-7315",
"author_id": "product.owner",
"assignee_id": "frontend.dev",
"assignee_github_id": "frontenddev"
},
"worker": {
"type": "sembot_frontend",
"docker_path": "docker/docker/sembot_frontend"
},
"repositories": [
{
"folder": "sembot-angular",
"git_url": "[email protected]:sembot-io/sembot-angular.git",
"target_branch": "master",
"working_branch": "feature/DEV-7315"
}
],
"ai": {
"provider": "claude",
"model": "claude-sonnet-4",
"start_commands": [
{
"id": "init",
"catalog": "START",
"executor": "bash",
"command": "bash /workspace/files/helpers/init_workspace.sh",
"dependencies": []
},
{
"id": "plan",
"catalog": "START",
"executor": "claude",
"command": "/plugin-codegen:plan",
"dependencies": ["init"]
}
]
}
}Przykład 2: Multi-Repo Backend Task
{
"task_id": "API-456",
"title": "New Payment Gateway Integration",
"issue": {
"id": "API-456",
"assignee_github_id": "backenddev"
},
"worker": {
"type": "sembot_backend",
"docker_path": "docker/docker/sembot_backend"
},
"repositories": [
{
"folder": "backend-api",
"git_url": "[email protected]:sembot-io/backend.git",
"target_branch": "develop",
"working_branch": "feature/API-456-payment"
},
{
"folder": "shared-models",
"git_url": "[email protected]:sembot-io/models.git",
"target_branch": "main",
"working_branch": "feature/API-456-payment-models"
}
],
"ai": {
"provider": "claude",
"model": "claude-sonnet-4"
}
}Przykład 3: Follow-up Task
{
"task_id": "DEV-7315-FIX-1",
"title": "Fix issues from DEV-7315 verification",
"parent_task_id": "DEV-7315",
"issue": {
"id": "DEV-7315-FIX-1",
"author_id": "orchestrator",
"assignee_id": "frontend.dev",
"assignee_github_id": "frontenddev"
},
"worker": {
"type": "sembot_frontend",
"docker_path": "docker/docker/sembot_frontend"
},
"repositories": [
{
"folder": "sembot-angular",
"git_url": "[email protected]:sembot-io/sembot-angular.git",
"target_branch": "master",
"working_branch": "feature/DEV-7315"
}
],
"ai": {
"provider": "claude",
"model": "claude-sonnet-4"
}
}Walidacja
Wymagane Pola (Minimum)
{
"task_id": "required",
"title": "required",
"issue": {
"id": "required",
"assignee_github_id": "required"
},
"worker": {
"type": "required",
"docker_path": "required"
},
"repositories": [
{
"folder": "required",
"git_url": "required",
"target_branch": "required",
"working_branch": "required"
}
],
"ai": {
"provider": "required",
"model": "required"
}
}Common Mistakes
❌ Błąd: worker.type nie pasuje do żadnej kolejki
{
"worker": {
"type": "invalid_worker"
}
}❌ Błąd: Brak start_commands dla orkiestry team
{
"ai": {
"provider": "claude",
"model": "claude-sonnet-4"
// Brakuje start_commands!
}
}❌ Błąd: Circular dependency w start_commands
{
"ai": {
"start_commands": [
{"id": "a", "dependencies": ["b"]},
{"id": "b", "dependencies": ["a"]}
]
}
}Template
Użyj tego template do tworzenia nowych zadań:
cp templates/task.json tasks/todo/YOUR-TASK-ID/task.jsonTemplate path: templates/task.json