From recipe-skills
Asana integration recipes for Workato. Enables AI agents to generate valid recipe JSON for Asana operations including task management, project organization, portfolio tracking, goal setting, team management, and workspace administration.
How this skill is triggered — by the user, by Claude, or both
Slash command
/recipe-skills:asana-recipesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> **DEPENDENCY: Load the `workato-recipes` base skill first if not already loaded.**
DEPENDENCY: Load the
workato-recipesbase skill first if not already loaded. This skill requires the base Workato knowledge for triggers, control flow, datapills, formulas, and recipe structure.
This skill provides Asana-specific knowledge for generating Workato recipes. It extends the workato-recipes base skill and focuses on Asana-specific patterns, including:
provider: "asana") — 16 native actions for common operations.recipe.json files to understand local patternstemplates/create-task.json, templates/get-task.json, templates/search-tasks.jsoncreate-task-001, search-tasks-002opt_fields to select returned fieldsUse this skill when building Workato recipes that:
Prerequisites:
workato-recipes base skill loadedEvery recipe using Asana actions requires the asana provider in the config section:
{
"keyword": "application",
"provider": "asana",
"skip_validation": false,
"account_id": {
"zip_name": "my_asana_account.connection.json",
"name": "My Asana account",
"folder": ""
}
}
Combined with API endpoint trigger (for testability via curl):
"config": [
{ "keyword": "application", "provider": "workato_api_platform", "skip_validation": false, "account_id": null },
{ "keyword": "application", "provider": "asana", "skip_validation": false, "account_id": { "zip_name": "my_asana_account.connection.json", "name": "My Asana account", "folder": "" } }
]
Combined with callable recipe trigger:
"config": [
{ "keyword": "application", "provider": "workato_recipe_function", "skip_validation": false, "account_id": null },
{ "keyword": "application", "provider": "asana", "skip_validation": false, "account_id": { "zip_name": "my_asana_account.connection.json", "name": "My Asana account", "folder": "" } }
]
The Asana connector provides 16 native actions, 2 triggers, and __adhoc_http_action for everything else. See lint-rules.json for the authoritative list of valid action and trigger names.
Get vs Search vs List:
get_*_by_id actions — Use when you already have the resource GIDsearch_* actions — Use when filtering by criteria (name, assignee, workspace, etc.)list_* actions — Use when enumerating all items in a scope (project tasks, workspace members, tagged tasks)Triggers:
new_event — Webhook trigger for Asana change events. Requires workspace_id. Use dynamicPickListSelection for workspace and action filtering. Filter with actions array: changed, deleted, removed, added, undeleted.new_or_updated_task_v2 — Polling trigger for new or updated tasks.Uncovered operations: Use __adhoc_http_action for any Asana REST API endpoint not in the 16 native actions (goals, portfolios, budgets, webhooks, time tracking, etc.). See Adhoc HTTP for Extended API Coverage below.
Asana action outputs are accessed directly — no ["body"] wrapper:
// CORRECT
"path": ["gid"]
"path": ["name"]
"path": ["assignee", "gid"]
// WRONG — do NOT use body wrapper
"path": ["body", "gid"]
The Asana REST API covers 217 operations across 20+ resource types (tasks, projects, goals, portfolios, teams, users, workspaces, sections, tags, webhooks, custom fields, stories, attachments, status updates, budgets, rates, allocations, time tracking, memberships, and more).
For the full operation catalog with per-resource recipes, see patterns/api-endpoint-recipes.md.
Search for a task, then update or process it:
Step 1: search_tasks (find matching tasks)
Step 2: if/else (check if results found)
Step 3: update_task or create_task (act on results)
React to Asana changes:
Trigger: new_event (workspace_id, actions: ["changed"])
Step 1: get_task_details_by_id (get full details of changed task)
Step 2: [downstream action — Slack notification, Salesforce update, etc.]
For operations not in the 16 native actions (goals, portfolios, webhooks, etc.), use __adhoc_http_action:
{
"number": 1,
"provider": "asana",
"name": "__adhoc_http_action",
"keyword": "action",
"input": {
"mnemonic": "GET /api/1.0/goals?workspace={workspace_gid}"
},
"uuid": "get-goals-001"
}
All Asana resources are identified by GID (string, not integer). Always type GID fields as "type": "string":
{ "name": "task_gid", "type": "string", "label": "Task GID", "optional": false }
Tasks can be default_task, milestone, or approval. Use pick_list for these enums:
{
"name": "resource_subtype",
"type": "string",
"pick_list": [["Default task", "default_task"], ["Milestone", "milestone"], ["Approval", "approval"]]
}
See validation-checklist.md for Asana-specific validation, which references the base checklist in workato-recipes/validation-checklist.md.
See templates/ directory:
create-task.json — Create a task with full field support (assignee, due dates, custom fields, followers, projects, tags)get-task.json — Get a task by ID with opt_fieldssearch-tasks.json — Search tasks in a workspace with filtersworkato-recipes — Recipe structure, triggers, control flow, formulastemplates/ directory — 3 reference recipes (create, get, search tasks)patterns/ directory — API endpoint recipe pattern for full REST API coveragelint-rules.json for the authoritative list of valid action/trigger namesnpx claudepluginhub workato-devs/recipe-skills --plugin recipe-skillsCreates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.