Limitations
September 14, 2026 ยท View on GitHub
Known lossy behaviors and Asana API gaps that shape what asana-axi can report.
No total counts from the API
Asana's list endpoints paginate but never report a total. count: is therefore the number of rows returned, with has_more: true when another page exists. The exception is project view, which uses the dedicated task_counts endpoint for true totals (total/incomplete/completed).
Client-side filters see only the fetched window
task list --section/--tag/--due-before/--due-after filter locally after fetching up to --limit tasks. has_more: true with zero matches on the page does not prove nothing matches overall - widen --limit before concluding. --assignee and completion filters are server-side and exact.
task list is project-scoped
There is no cheap unbounded "all my tasks" listing; the /tasks endpoint needs a project (or workspace+assignee pairing used by the dashboard's my_tasks block). Use task search for cross-project lookup and the no-arg dashboard for your own open tasks.
Stories are plain text
Asana comments (stories) have no structured document format. Whatever you pass to --text is stored verbatim; Asana's own renderer decides how markdown-ish syntax displays. System events (assignments, section moves, ...) are excluded from --comments output - only human comments render.
Notes render as plain text
html_notes (Asana's rich-text field) is not requested; notes is the plain-text form. Embedded formatting in the UI may be richer than what task view shows.
Create is not idempotent
Asana has no idempotency key for task creation. A retried failed create can duplicate a task. Edit/move/complete/reopen/tag operations ARE idempotent no-ops when already applied.
Subtask placement
Subtasks are created under a parent and inherit its project; --section is rejected for create --parent (Asana has no direct subtask-to-column placement). Move a subtask with task move after creation if needed.
Multi-project tasks
A task can live in multiple projects. Section moves use the task's first project membership for name resolution; pass an explicit --project <gid> (or a raw section GID) when that guess would be wrong. task view renders all sections/projects.
Attachments
Uploads are limited to local file paths. Download URLs from Asana expire; task attach output reports the permanent UI URL.
Rate limits
Retries on 429/503 honor Retry-After (max 3 attempts, capped wait), then fail with RATE_LIMITED. Very large boards can still trip the limit on wide --limit values.