talonic_list_decision_tasks
List the decision tasks of one Talonic App, newest first. A decision task is how an External-mode app hands a run's decision to an agent outside the platform: the run assembles its input package, freezes it, enters awaiting_decision, and offers a task. This tool is the polling alternative to the app.decision_task.offered webhook and the entry point of the decision workflow.
Each row in data[] carries identifiers (id, run_id, app_id), the lifecycle status, the current execution_epoch, the lease settings (lease_seconds, claimed_by, claimed_at, lease_expires_at, heartbeat_at), the hard sla_deadline_at, and submitted_at / created_at. The input package is never inlined here: it is read page by page after a claim, and every page read is journaled onto the run.
decide tier. A tlnc_ workspace API key needs a decide grant on the app. An OAuth connector session (Claude.ai) needs the apps:decide scope — consented in person when the connector is added, never pre-consented — plus a live workspace role of senior_member or above; the claim is then recorded as the client acting for that person ("Claude for Jane Doe"). Web sessions are refused. A 403 names what is missing (decide_grant_required, insufficient_scope, insufficient_tier); the agent should report it rather than retry.The decision workflow
- Call
talonic_list_decision_taskswith theapp_idandstatus: "available". - Claim a task with
talonic_claim_decision_task; the claim returns the output contract, precedents and the package descriptor. - Read the frozen input package with
talonic_read_decision_package, page by page frompackage.first_cursor. - Heartbeat with
talonic_heartbeat_decision_taskwhile deciding, then finish withtalonic_submit_decision_task— ortalonic_release_decision_task/talonic_fail_decision_task.
| Parameter | Type | Description |
|---|---|---|
| app_id * | UUID | The External-mode app whose inbox to read. |
| status | available | claimed | submitted | released | failed | timed_out | cancelled | Optional lifecycle-state filter. Start with `available` when looking for work. |
| limit | integer | Page size from 1 to 100. Defaults to 50. |
| cursor | string | Opaque `pagination.next_cursor` from the previous page. |
// talonic_list_decision_tasks({ "app_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa", "status": "available", "limit": 1 })
{
"data": [
{
"id": "11111111-1111-4111-8111-111111111111",
"customer_id": "cccccccc-cccc-4ccc-8ccc-cccccccccccc",
"run_id": "22222222-2222-4222-8222-222222222222",
"app_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"status": "available",
"execution_epoch": 0,
"input_package_ref": "run",
"lease_seconds": 120,
"claimed_by": null,
"claimed_at": null,
"lease_expires_at": null,
"heartbeat_at": null,
"sla_deadline_at": "2026-09-22T10:10:00.000Z",
"submitted_at": null,
"created_at": "2026-09-22T10:00:00.000Z",
"updated_at": "2026-09-22T10:00:00.000Z"
}
],
"pagination": { "has_more": false, "next_cursor": null }
}sla_deadline_at is the decision SLA (default 10 minutes, configurable per app): if no valid decision arrives by then, the platform applies the app's declared fallback policy — a resident rule set decides, the run parks as a system-raised review, or the run fails. Filtering by claimed or timed_out is useful for supervision; a task whose lease expired is eligible for reclaiming.