What the agent does
The run reads Asana through Asana's remote MCP server, https://mcp.asana.com/mcp, the Asana entry in the Rush connector catalog. Connect it once with POST /me/connections {"type": "mcp", "name": "asana", "url": "https://mcp.asana.com/mcp", "auth": {"mode": "oauth"}} and approve access in Asana from the authorize_url. The agent sees the workspace and projects the approving Asana user can see, so connect with an account that is a member of every project the report should cover.
It starts by listing the workspace's projects, skipping archived ones, then reads the open (incomplete) tasks in each, including subtasks, with each task's name, assignee, due date, section, project and link. A task that sits in two projects is counted once. Where the workspace offers task search, the agent can ask for incomplete tasks with a due date before today in one query, but it still walks the projects to find tasks with no due date, since search by a missing field is not reliable.
For the blocked list it reads the comments on open tasks (Asana calls them stories) and looks for a person saying the task is blocked or waiting: "blocked on", "waiting for", "can't start until". It also counts tasks with an incomplete dependency, which Asana marks directly. Each blocked task in the report quotes the comment and names who wrote it and when.
Then it groups. Overdue tasks go under their assignee with the number of days overdue, worst first. Tasks with no assignee and tasks with no due date get their own lists, by project. The agent calls no tool that creates, updates or comments on a task.
Start it with one API call
POST https://api.prix.dev/o/{org}/sessions with this body:
{
"agent": "claude",
"input": "Use the Asana connection to read every incomplete task, including subtasks, across all non-archived projects in the workspace. Write overdue.md with: overdue tasks grouped by assignee, with project, days overdue and a link, worst first; tasks with no assignee, by project; tasks with no due date, by project; and tasks that are blocked, either by an incomplete dependency or a comment saying they are blocked or waiting, quoting the comment with its author and date. Count a task in several projects once. Change nothing: no edits, assignments or comments.",
"connections": [
"asana"
]
}- Get an API key. In the console, open Settings, then API keys, and create a key for your org. Send it in the Authorization header as a Bearer token.
- Send the request. POST the body in request.json to https://api.prix.dev/o/{org}/sessions, with your repository as the resources URL. The run starts in its own cloud sandbox.
- Read what came back. Follow the run on its live stream or wait for the run.completed webhook, then read the result and its trajectory.
What comes back
The session returns overdue.md. It opens with four counts (overdue, unassigned, no due date, blocked), then a section per assignee listing their overdue tasks by days late, then the unassigned and undated lists by project, then the blocked tasks with the comment or dependency that blocks them. Every task links to Asana.
Before the weekly meeting, a lead skims for false positives. A comment that says "no longer blocked" can still match a blocked phrase, so the quote is there to check. And a task overdue by months is often one nobody will do; the report is a good moment to close it. The session's transcript lists each project the agent read, which confirms the report covered every project it should.
Run it on every Friday afternoon
Put the report on a schedule the team meets on. A Project automation with a weekly trigger can send the request every Friday, so the list is ready for Monday's planning, or your own cron job can post it with the API key.
Your server receives run.completed and can read the artifact and post each person's section to them directly. For a team that wants it daily, the same request on a weekday schedule costs only the run, and each day's report is its own session to compare against.
The use case this job follows, with its automation and trigger: Produce a report or file, no repo.
Why run it on Rush?
Asana shows overdue tasks per person or per project, but not a workspace-wide view of what is late, unowned and stuck in one place, and blocked work hides in comments that no filter reads. The agent reads every open task and its comments in its own sandbox and writes the result down with links, so the meeting starts from the list.
The run is read only by prompt and the transcript records every Asana call, so nobody's tasks are reassigned by surprise. Teams in separate workspaces can each get their own session at the same time, up to the key's concurrent run limit.
Frequently asked questions
Will it reassign or comment on tasks?
No. The prompt says change nothing and the agent calls only reading tools. If you want comments posted on overdue tasks, review the report and ask for that in a follow-up.
Does it cover projects I am not a member of?
It sees what the Asana account that approved the connection sees. Projects that account cannot open are missing, so connect with an account that belongs to every project in scope.
How does it decide a task is blocked?
An incomplete dependency in Asana, or a comment where someone says the task is blocked or waiting. The report quotes the comment so you can judge it.
Can it run for one team or portfolio only?
Yes. Name the projects, the team or the portfolio in the prompt and the agent reads only those.