7 tasks today, 2 of them overdue
Start with Send revised quote to Fieldstone: overdue since Wednesday and marked High.
Weekday mornings: your Asana tasks due today and the ones already overdue, in the order to do them, with the first one to start on.
Reads
You get
The card on the right is a sample. Yours shows your own numbers and updates in place every run.
What lands on your board
Start with Send revised quote to Fieldstone: overdue since Wednesday and marked High.
My Tasks in Asana shows everything assigned to you, sorted however you last left it. On a busy morning the question is narrower: what is due today, what slipped, and which one first.
The agent pulls your open tasks across projects, keeps the ones due today or earlier, and orders them: overdue first, then by your Priority field if you have one, then by time of day. The card says where to start, and which overdue task has been pushed so often that it needs a real new date.
Call GET /users/me for your gid and workspaces, and use the workspace you work in (or each of them, one card per workspace).
Call GET /tasks?assignee=me&workspace={workspace_gid}&completed_since=now&opt_fields=name,due_on,due_at,projects.name,custom_fields.name,custom_fields.display_value,permalink_url. Asana requires the workspace whenever you filter by assignee.
Keep tasks with due_on today or earlier, or a due_at before midnight in your timezone. For the overdue ones, count the due_date_changed stories from GET /tasks/{task_gid}/stories.
Overdue first with the oldest due date on top, then a Priority custom field (High, Medium, Low) if your workspace has one, then tasks with a due time in time order, then the rest by project.
A numbered list with project, due and priority, the task to start on, and a note on any task whose due date has moved three times or more.
With BRIEFKIN_TOKEN set, the agent sends the result as one card that updates in place every run. Without it, you get the report in the chat.
Pick your agent, where the data comes from and how to schedule it; the commands below follow.
One command. It puts the SKILL.md in ~/.claude/skills and in ~/.agents/skills, which Codex, Cursor, Gemini CLI, Copilot CLI and OpenCode read too.
shellcurl -fsSL https://briefkin.dev/skills/asana-my-tasks-today/install | shAsk Claude Code:
promptRun the asana-my-tasks-today skillOr paste the prompt instead of installing:
promptFrom Asana (read only), list my incomplete tasks in my workspace (assignee=me with the workspace, completed_since=now) and keep the ones due today or earlier. Order them: overdue first with the oldest due date on top, then by my Priority custom field if there is one (High, Medium, Low), then tasks with a due time in time order, then the rest by project. Give me a numbered list with task, project, due and priority, tell me which one to start with and why, and point out any overdue task whose due date has been changed three or more times.Weekdays at 8:00, from cron on any machine where Claude Code is signed in:
crontab0 8 * * 1-5 claude -p "Run the asana-my-tasks-today skill"Add it with crontab -e. A laptop asleep at that time runs it when it wakes if you use launchd or Task Scheduler instead; GitHub Actions works for the API route.
Connect Briefkin once with curl -fsSL https://briefkin.dev/install | sh and every run lands on your board as a report card. How setup works
SKILL.md---
name: asana-my-tasks-today
description: "Weekday mornings: your Asana tasks due today and the ones already overdue, in the order to do them, with the first one to start on. Use when the user asks for this, or when it runs on a schedule."
---
# Asana my tasks today
Weekday mornings: your Asana tasks due today and the ones already overdue, in the order to do them, with the first one to start on.
My Tasks in Asana shows everything assigned to you, sorted however you last left it. On a busy morning the question is narrower: what is due today, what slipped, and which one first.
The agent pulls your open tasks across projects, keeps the ones due today or earlier, and orders them: overdue first, then by your Priority field if you have one, then by time of day. The card says where to start, and which overdue task has been pushed so often that it needs a real new date.
## Two ways to get the data
Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.
## Route A: API or MCP server
### What you need
- Your own Asana account through the Asana MCP server or connector, or a personal access token in `ASANA_ACCESS_TOKEN`; read access is enough.
If something is missing, say what and stop; do not invent numbers.
### Steps
1. **Find your workspace** (Asana): Call `GET /users/me` for your gid and workspaces, and use the workspace you work in (or each of them, one card per workspace).
2. **Pull your open tasks** (Asana): Call `GET /tasks?assignee=me&workspace={workspace_gid}&completed_since=now&opt_fields=name,due_on,due_at,projects.name,custom_fields.name,custom_fields.display_value,permalink_url`. Asana requires the workspace whenever you filter by assignee.
3. **Keep today and overdue** (Asana): Keep tasks with `due_on` today or earlier, or a `due_at` before midnight in your timezone. For the overdue ones, count the `due_date_changed` stories from `GET /tasks/{task_gid}/stories`.
4. **Put them in order**: Overdue first with the oldest due date on top, then a Priority custom field (High, Medium, Low) if your workspace has one, then tasks with a due time in time order, then the rest by project.
5. **Write the list**: A numbered list with project, due and priority, the task to start on, and a note on any task whose due date has moved three times or more.
## Route B: the browser
### What you need
- Signed in to your own Asana account; My tasks only ever shows the signed-in person's tasks, so no extra permission is needed.
If something is missing, say what and stop; do not invent numbers.
### Steps
Start at https://app.asana.com/. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.
1. **Open My tasks**: Click **My tasks** in the left sidebar and switch to the **List** tab. If you belong to several workspaces, pick the one to report on from the switcher at the top left; My tasks is per workspace.
2. **Keep today and overdue**: Click **Filter** and choose **Incomplete tasks**, then **Sort: Due date**. Read every task whose due date is today or earlier; tasks with no due date drop to the bottom and are left out. Show the **Projects** and **Priority** columns through the **+** at the end of the header if they are hidden.
3. **Check how often the overdue ones moved**: Open each overdue task and scroll its activity at the bottom; count the "changed the due date" entries. Three or more earns a note.
4. **Order and write the list**: Overdue first with the oldest due date on top, then by Priority (High, Medium, Low), then tasks with a due time in time order, then the rest by project. Name the task to start with and why.
Note: My tasks shows one workspace at a time; switch workspaces and repeat for another. The activity feed hides older entries behind a **Show more** link on busy tasks, so the agent clicks it before counting.
## The report
- How many tasks are due today and how many are overdue.
- The list in order: task, project, due, priority.
- The task to start with, and why.
- Tasks whose due date keeps moving.
## Post it to Briefkin
When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.
```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
-H "authorization: Bearer $BRIEFKIN_TOKEN" \
-H "content-type: application/json" \
-d @- <<'JSON'
{
"v": 1,
"event_id": "asana-my-tasks-today/<date of this run, e.g. 2026-10-16>",
"item_key": "asana-my-tasks-today",
"project": "Acme",
"source": "Asana my tasks today skill",
"kind": "update",
"title": "7 tasks today, 2 of them overdue",
"summary": "Start with **Send revised quote to Fieldstone**: overdue since Wednesday and marked High.",
"widget": [
{
"type": "Table",
"props": {
"columns": [
"#",
"Task",
"Project",
"Due",
"Priority"
],
"rows": [
[
1,
"Send revised quote to Fieldstone",
"Sales",
"Overdue 2 days",
"High"
],
[
2,
"Review Q1 hiring plan",
"Ops",
"Overdue 1 day",
"Medium"
],
[
3,
"Approve homepage hero copy",
"Website relaunch",
"Today 11:00",
"High"
],
[
4,
"Outline the board update",
"Board",
"Today",
"High"
],
[
5,
"Sign off on September close",
"Finance",
"Today",
"Medium"
],
[
6,
"Reply to podcast invite",
"Marketing",
"Today",
"Low"
],
[
7,
"Submit offsite expenses",
"Ops",
"Today",
"Low"
]
]
}
},
{
"type": "Callout",
"props": {
"text": "Review Q1 hiring plan has had its due date moved 3 times. Give it a fixed slot today or a realistic new date.",
"tone": "warn"
}
}
]
}
JSON
```
Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.
## Run it on a schedule
Suggested: Weekdays at 8:00 (`0 8 * * 1-5`). From cron, with the agent signed in on that machine:
```bash
0 8 * * 1-5 claude -p "Run the asana-my-tasks-today skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```
Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/asana-my-tasks-today#schedule
Source: https://briefkin.dev/skills/asana-my-tasks-today
Your own Asana account through the Asana MCP server or connector, or a personal access token in ASANA_ACCESS_TOKEN; read access is enough.
https://mcp.asana.com/v2/mcp, signed in with OAuth. Asana also offers an Asana app for Claude; the older beta endpoint (/sse) is deprecated (docs).ASANA_ACCESS_TOKEN with ASANA_WORKSPACE_GID, and send it as a Bearer token.tasks:read and projects:read.A personal access token carries all of your Asana permissions, so for scheduled runs use read-scoped OAuth or a separate account with comment-only access to the projects in the report.
Yes: anything assigned to you and due by today, whoever assigned it and whichever project it sits in. Tasks with no due date stay out unless you ask for them, so the list stays about today.
It runs per workspace, since Asana scopes the assignee filter to one. Ask for all of them and the agent repeats the query for each workspace listed by GET /users/me, posting one card per workspace.
No. The skill runs with your own agent and gives you the report in the chat. With a Briefkin token set, each run also posts it to your board as a report card, so you can glance at it instead of asking again.
Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot CLI, OpenCode, Windsurf and Amp all read SKILL.md files. The install command puts it in ~/.claude/skills and ~/.agents/skills, where they look. ChatGPT, the Claude app and Grok take the prompt instead. Pick your agent under "Install and run it" and the commands change to match.
Yes. Switch the data source to "Your browser" and the steps change to the Asana pages themselves: the agent opens app.asana.com in a browser you are signed in to and reads the numbers off the page. Claude Code, Codex, Cursor, Claude app and ChatGPT can drive a browser out of the box; Gemini CLI, Copilot CLI and OpenCode need a Playwright or Chrome DevTools MCP server first. It is slower than the API and needs you signed in, so it suits a report you run by hand or from a scheduler on your own computer.
Skills are free to use with any agent. Briefkin is where their results land: one board for every report, number and question your agents send, with a ping when something needs you.
Free during the open beta. No card.