Trackers
Pull tasks from the built-in board, a ClickUp sprint or list, or GitHub Issues, and map their states to SI Fabrik's.
A tracker is where a project's tasks come from and where agents report back. SI Fabrik supports three, set with tracker.kind. Each one decides which states are active, which are terminal, which columns the board shows, and which tools the agent gets.
| Built-in board | ClickUp | GitHub Issues | |
|---|---|---|---|
tracker.kind | local | clickup | github |
| Secret | None | CLICKUP_API_TOKEN | GITHUB_TOKEN or gh auth token |
| Identifiers | HAR-12 | Custom task ID, or CU-<id> | GH-<number> |
| Board in SI Fabrik | Drag, create, comment, edit, block, delete | Drag, create, comment | Read-only |
| Hand-off | Human Review column | A review status, such as review | The human-review label |
All boards have Dispatch Now and Fetch branch into repo. Tracker credentials are resolved on the host and stripped from every agent and hook environment; agents use host-side tools instead.
Built-in board#
The SI Fabrik Board is a Kanban stored as JSON next to WORKFLOW.md. It needs no account and works offline.
tracker:
kind: local
provider:
path: .symphony/board.json # default
prefix: HAR # identifiers HAR-1, HAR-2, …
active_states: [Todo, In Progress]
terminal_states: [Done, Canceled]
board_states: [Backlog, Todo, In Progress, Human Review, Done, Canceled]- Task ids are UUIDs; identifiers use the prefix.
- Blockers: set Blocked by (for example
HAR-3) when you create a task. A task isn't dispatched while any blocker is not in a terminal state, and its card shows it's blocked. - You can edit and delete tasks, and comment on them.
- The wizard adds
.symphony/to.gitignore, so the board isn't committed. - Agent tools:
board_get_issue,board_set_state,board_comment,board_create_issue.
ClickUp#
ClickUp tasks come from the current sprint of a Sprints folder, or from one or more fixed lists.
- Create a personal API token
In ClickUp, open your avatar → Settings → Apps → API Token. It starts with
pk_. - Connect in Add Project
Choose ClickUp, paste the token and press Connect. SI Fabrik saves it to the Keychain as
CLICKUP_API_TOKEN(Settings → Environment); it never reaches agents. - Pick a sprint folder or a list
Search Find a sprint folder or list. Choose Current sprint on a Sprints folder, or List for a fixed list. The active, hand-off and done statuses are pre-filled from that list's statuses; adjust them later in
WORKFLOW.md. - Optionally, only your tasks
Turn on Only dispatch tasks assigned to me to add
assignee: me.
tracker:
kind: clickup
provider:
api_token: $CLICKUP_API_TOKEN
sprint_folder_id: "90120000000" # or list_id: "901200000001", or list_ids: [...]
# assignee: me
# include_subtasks: true
active_states: ["to do", "in progress"]
terminal_states: ["complete", "closed"]How SI Fabrik reads ClickUp:
- Current sprint: the list in the folder whose start date is at or before now and whose due date is at or after now. Between sprints it uses the most recently started one. The choice is re-resolved every 5 minutes, so sprint rollover is automatic.
- Requests include tasks added to a sprint list from their home list. Pages of 100 tasks, up to 50 pages.
- Status filters are matched against the list's own statuses, and the board's columns default to those statuses, in order.
identifieris the custom task ID when your workspace has them, otherwiseCU-<id>.priorityis ClickUp's 1 (urgent) to 4 (low).labelsare the task's tags.blocked_bycomes from "waiting on" dependencies. A task isn't dispatched until its blockers reach aclosedordonestatus type, or while its assignee doesn't matchassignee.- When SI Fabrik refreshes running tasks, tasks that return 404 or have left the scoped lists (after a sprint rollover, for example) are dropped.
- On the board you can drag tasks between statuses, create tasks (in the current sprint list) and comment.
- Agent tools:
clickup_get_task,clickup_set_status,clickup_comment,clickup_create_task,clickup_add_tag.
GitHub Issues#
Open issues in one repository. Pull requests are skipped.
tracker:
kind: github
provider:
repo: your-org/your-repo # required
token: $GITHUB_TOKEN # default; falls back to `gh auth token`
exclude_labels: [human-review, blocked]
active_states: [open]
terminal_states: [closed]- States are
openandclosed. Identifiers areGH-<number>. - Priority comes from
p1…p4labels. - Issues with any
exclude_labelslabel aren't dispatched. Addinghuman-reviewis how the agent hands off. - Set Required label in the wizard (
tracker.required_labels) to only dispatch labelled issues. - The board is read-only; edit issues on GitHub.
- Agent tools:
github_comment,github_add_labels,github_remove_label,github_close.
Board columns and states#
tracker.board_states sets the board's columns. Columns that are active states are marked as such on the board ("agents pick these up"). The Settings form in the Workflow tab edits active states, done states, board columns, required labels and the poll interval as chips.
Tracker errors#
Tracker failures are reported with the Symphony spec's categories, in the project header and the Activity log:
| Category | Typical cause |
|---|---|
unsupported_tracker_kind | tracker.kind isn't local, clickup or github |
invalid_tracker_config | A required provider key is missing or malformed, such as repo |
missing_tracker_secret | The token variable isn't set, for example CLICKUP_API_TOKEN |
tracker_request | The request couldn't be sent (network, DNS) |
tracker_status | The API answered with an error status |
tracker_response | The response wasn't what SI Fabrik expected |
tracker_pagination | Paging through results failed |
tracker_rate_limited | The API rate limit was hit; the next poll tries again |