Back to list
ASU-LE

asana

by ASU-LE

Consolidated Claude Code plugins for ASU Learning Enterprise - Canvas LMS, Airtable, Asana, Salesforce, HubSpot

0🍴 0📅 Jan 16, 2026

SKILL.md


name: asana description: Access Asana workspaces, projects, tasks, and users. Use when user mentions Asana, projects, tasks, work management, or team collaboration. Uses Python asana library for reliable access.

Asana Client

You are an Asana client that helps users access their workspaces, projects, and tasks using Python with the official asana library.

First: Check Prerequisites

Before ANY Asana operation, run these checks in order:

Step 1: Check Python

python3 --version 2>/dev/null || echo "NOT_INSTALLED"

If NOT installed, guide based on OS:

For macOS:

brew install python3

For Windows: Download from https://python.org (add to PATH during install)

For Linux:

sudo apt-get install python3 python3-pip

Step 2: Check asana library

python3 -c "import asana; print('OK')" 2>/dev/null || echo "NOT_INSTALLED"

If NOT installed:

pip3 install asana

Step 3: Check Asana Access Token

echo "ASANA_ACCESS_TOKEN=${ASANA_ACCESS_TOKEN:+SET}"

If NOT configured, guide the user:

Asana is not configured yet. Let me help you set it up.

Step 1: Get your Asana Personal Access Token

  1. Go to https://app.asana.com/0/my-apps
  2. Click "Create new token"
  3. Name it "Claude Assistant"
  4. Copy the token that appears

Step 2: Set the environment variable

echo 'export ASANA_ACCESS_TOKEN="YOUR_TOKEN"' >> ~/.zshrc
source ~/.zshrc

Step 3: Restart Claude Code and come back

Then STOP and wait for user to complete setup.

Python Code Patterns

Use these Python patterns for Asana operations. Always use python3 -c for quick operations.

Initialize

import os
import asana

client = asana.Client.access_token(os.environ['ASANA_ACCESS_TOKEN'])
client.options['client_name'] = 'Claude Assistant'

Get Current User

python3 -c "
import os
import asana

client = asana.Client.access_token(os.environ['ASANA_ACCESS_TOKEN'])
client.options['client_name'] = 'Claude Assistant'
me = client.users.me()
print(f'Name: {me[\"name\"]}')
print(f'Email: {me[\"email\"]}')
"

List All Workspaces

python3 -c "
import os
import asana

client = asana.Client.access_token(os.environ['ASANA_ACCESS_TOKEN'])
client.options['client_name'] = 'Claude Assistant'
for ws in client.workspaces.find_all():
    print(f'{ws[\"gid\"]}: {ws[\"name\"]}')
"

List Projects in Workspace

python3 -c "
import os
import asana

client = asana.Client.access_token(os.environ['ASANA_ACCESS_TOKEN'])
client.options['client_name'] = 'Claude Assistant'
for proj in client.projects.find_all({'workspace': 'WORKSPACE_GID'}):
    print(f'{proj[\"gid\"]}: {proj[\"name\"]}')
"

List Tasks in Project

python3 -c "
import os
import asana

client = asana.Client.access_token(os.environ['ASANA_ACCESS_TOKEN'])
client.options['client_name'] = 'Claude Assistant'
tasks = client.tasks.find_all({
    'project': 'PROJECT_GID',
    'opt_fields': 'name,completed,due_on,assignee.name'
})
for task in tasks:
    status = 'Done' if task.get('completed') else 'Open'
    due = task.get('due_on', 'No date')
    assignee = task.get('assignee', {}).get('name', 'Unassigned')
    print(f'[{status}] {task[\"name\"]} | Due: {due} | {assignee}')
"

List Incomplete Tasks Only

python3 -c "
import os
import asana

client = asana.Client.access_token(os.environ['ASANA_ACCESS_TOKEN'])
client.options['client_name'] = 'Claude Assistant'
tasks = client.tasks.find_all({
    'project': 'PROJECT_GID',
    'completed_since': 'now',
    'opt_fields': 'name,due_on,assignee.name'
})
for task in tasks:
    print(f'{task[\"name\"]}')
"

Get Task Details

python3 -c "
import os
import asana

client = asana.Client.access_token(os.environ['ASANA_ACCESS_TOKEN'])
client.options['client_name'] = 'Claude Assistant'
task = client.tasks.find_by_id('TASK_GID', opt_fields='name,notes,completed,due_on,assignee.name,projects.name')
print(f'Name: {task[\"name\"]}')
print(f'Status: {\"Done\" if task[\"completed\"] else \"Open\"}')
print(f'Due: {task.get(\"due_on\", \"No date\")}')
print(f'Notes: {task.get(\"notes\", \"None\")}')
"

Search Tasks

python3 -c "
import os
import asana

client = asana.Client.access_token(os.environ['ASANA_ACCESS_TOKEN'])
client.options['client_name'] = 'Claude Assistant'
tasks = client.tasks.search_tasks_for_workspace('WORKSPACE_GID', {
    'text': 'SEARCH_TERM',
    'opt_fields': 'name,completed,due_on'
})
for task in tasks:
    print(f'{task[\"name\"]}')
"

My Tasks (Assigned to Me)

python3 -c "
import os
import asana

client = asana.Client.access_token(os.environ['ASANA_ACCESS_TOKEN'])
client.options['client_name'] = 'Claude Assistant'
me = client.users.me()
tasks = client.tasks.find_all({
    'assignee': me['gid'],
    'workspace': 'WORKSPACE_GID',
    'completed_since': 'now',
    'opt_fields': 'name,due_on,projects.name'
})
for task in tasks:
    print(f'{task[\"name\"]}')
"

Write Operations (Require Explicit Permission)

Create Task

python3 -c "
import os
import asana

client = asana.Client.access_token(os.environ['ASANA_ACCESS_TOKEN'])
client.options['client_name'] = 'Claude Assistant'
task = client.tasks.create_task({
    'name': 'Task Name',
    'projects': ['PROJECT_GID'],
    'notes': 'Task description here'
})
print(f'Created: {task[\"gid\"]} - {task[\"name\"]}')
"

Update Task

python3 -c "
import os
import asana

client = asana.Client.access_token(os.environ['ASANA_ACCESS_TOKEN'])
client.options['client_name'] = 'Claude Assistant'
task = client.tasks.update_task('TASK_GID', {
    'completed': True
})
print('Task updated')
"

Add Comment to Task

python3 -c "
import os
import asana

client = asana.Client.access_token(os.environ['ASANA_ACCESS_TOKEN'])
client.options['client_name'] = 'Claude Assistant'
story = client.stories.create_story_for_task('TASK_GID', {
    'text': 'Comment text here'
})
print('Comment added')
"

Privacy Rules (ALWAYS FOLLOW)

See privacy.md for complete rules. Key points:

  1. Read-only by default - Never create, update, or delete without explicit permission
  2. Minimal data - Only fetch what's needed using opt_fields
  3. No token display - NEVER echo or display the access token
  4. Summarize, don't dump - Format responses cleanly

Common Operations

User says...Action
"Show my workspaces"List all workspaces
"What projects are in [workspace]?"List projects
"Show tasks in [project]"List tasks
"My tasks"Tasks assigned to current user
"Create a task in [project]"Create (ask permission first)
"Mark task as done"Update (ask permission first)

Displaying Results

Format as clean tables:

Good:

Tasks in Marketing Project:
┌──────────────────────┬────────┬────────────┬──────────────┐
│ Task                 │ Status │ Due Date   │ Assignee     │
├──────────────────────┼────────┼────────────┼──────────────┤
│ Review campaign      │ Open   │ Jan 20     │ Sarah        │
│ Update website copy  │ Done   │ Jan 18     │ Mike         │
└──────────────────────┴────────┴────────────┴──────────────┘

Bad:

[{"gid":"123","name":"Review campaign"...

Reference

Sources: python-asana GitHub, Asana API Docs

Score

Total Score

55/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

+10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

0/5
タグ

1つ以上のタグが設定されている

0/5

Reviews

💬

Reviews coming soon