Skip to content

Task format reference

Tasks are markdown files with YAML frontmatter. One file per task. Location: ~/.sybra/tasks/<id>.md (or the directory set via tasks_dir in config).

---
id: task-abc123
slug: add-hello-endpoint
title: "Add /hello endpoint"
status: in-progress
task_type: normal
agent_mode: headless
allowed_tools: []
tags: [backend, small]
project_id: Automaat/sybra
branch: feature/hello
pr_number: 42
issue: https://github.com/Automaat/sybra/issues/99
status_reason: "Implementing"
reviewed: false
run_role: ""
todoist_id: "8123456"
due_date: 2026-04-25T00:00:00Z
require_permissions: null
agent_runs:
- agent_id: agent-xyz
role: plan
mode: headless
provider: claude
state: completed
started_at: 2026-04-16T09:10:00Z
ended_at: 2026-04-16T09:14:00Z
cost_usd: 0.12
input_tokens: 2450
output_tokens: 1230
result: success
log_file: ~/.sybra/logs/agent-xyz.ndjson
session_id: sess-abc
workflow:
execution_id: exec-def456
status: running
current_step_id: implement
created_at: 2026-04-16T09:00:00Z
updated_at: 2026-04-16T09:15:00Z
---
## Description
Add a GET /hello endpoint that returns 200 with `{"msg":"world"}`.
## Acceptance criteria
- Returns valid JSON
- Has a table-driven test
FieldTypeRequiredNotes
idstringyesUnique. Typically task-<6char hash>.
slugstringnoHuman-readable directory suffix when saving to disk
titlestringyesOne-line description
FieldTypeRequiredNotes
statusenumyesnew / todo / planning / plan-review / in-progress / in-review / human-required / done
status_reasonstringnoHuman note on why the task is in this status
reviewedboolnoHas a human reviewed the current agent’s output
FieldTypeRequiredNotes
task_typeenumnonormal / debug / research / chat. Default normal.
tagslist[string]noFree-form strings. Workflow conditions filter on these.
agent_modeenumnoheadless / interactive. Default from agent.mode config.
allowed_toolslist[string]noEmpty list grants ALL tools with skip-permissions.
FieldTypeRequiredNotes
project_idstringnoFormat owner/repo. Must match a registered project.
branchstringnoBranch name. Defaults to feature/<id> on agent start.
pr_numberintnoSet by link_pr_and_review workflow step
issuestringnoGitHub issue URL. Set when task originated from an issue.
FieldTypeRequiredNotes
require_permissionsbool or nullnoNull = use config default. False = skip-permissions.
run_rolestringno"", triage, plan, eval, pr-fix. Set by workflows.
FieldTypeRequiredNotes
todoist_idstringnoSource Todoist task ID if task originated there
due_dateRFC3339noSynced from Todoist

agent_runs is an append-only list. One entry per agent run against this task.

FieldTypeNotes
agent_idstringIn-memory agent ID (stable across restarts via session resume)
rolestring"" / triage / plan / eval / pr-fix
modeenumheadless / interactive
providerstringclaude / codex
modelstringModel ID used
stateenumrunning / completed / failed / cancelled
started_atRFC3339
ended_atRFC3339Null while running
cost_usdfloatTotal cost for this run
input_tokensint
output_tokensint
resultstringsuccess / error / escalated / cancelled
log_filepathNDJSON log path
session_idstringClaude Code session; usable with --resume
escalation_reasonstringSet if result == "escalated"
error_kindstringSet if result == "error"
error_msgstringHuman error message
FieldTypeNotes
workflow.execution_idstringCurrent workflow execution
workflow.statusenumrunning / completed / failed / cancelled
workflow.current_step_idstringStep being executed
FieldTypeRequiredNotes
created_atRFC3339yesSet on creation, never modified
updated_atRFC3339yesUpdated on any frontmatter change
new → todo → planning → plan-review → in-progress → in-review → done
human-required
ValueIntended workflow
normaldefault-feature
debugdefault-debug
researchdefault-research
chatNo workflow; ephemeral session
  • headlessclaude -p with NDJSON output
  • interactive — tmux session
  • "" — generic implementation
  • triage — classifies and tags the task
  • plan — writes an implementation plan
  • eval — grades another agent’s output
  • pr-fix — addresses review comments on a PR

Go:

import "github.com/Automaat/sybra/internal/task"
t, err := task.Parse("~/.sybra/tasks/task-abc123.md")

CLI:

Terminal window
sybra-cli get task-abc123 --json
---
id: task-manual01
title: "Refactor auth module"
status: new
task_type: normal
agent_mode: headless
tags: [backend, refactor, medium]
project_id: Automaat/sybra
created_at: 2026-04-16T10:00:00Z
updated_at: 2026-04-16T10:00:00Z
---
## Description
The auth module is tightly coupled to the HTTP layer. Extract a
pure domain package and wire the HTTP handlers to it.

Drop that in ~/.sybra/tasks/task-manual01.md. Sybra’s fsnotify watcher picks it up within a second. No restart needed.

Edit the file. Save. Sybra reloads. The updated_at field is not auto-set on manual edits — update it if order-in-list matters.

If an agent is running, be careful: status changes while the agent is live may confuse workflows. Prefer GUI edits during active runs.