Features

Task Management

Complete task management operations with Asana CLI

Task Management

Comprehensive task management features for creating, listing, completing, and deleting Asana tasks from the command line.

Create Tasks

Basic Task Creation

Create a simple task with just a name:

bun run dev task create -n "Task name" -w WORKSPACE_ID

Task with Description

bun run dev task create \
  -n "Implement authentication" \
  -d "Add OAuth 2.0 and JWT support for user authentication" \
  -w WORKSPACE_ID

Task in a Project

Assign a task to a specific project:

bun run dev task create \
  -n "Fix login bug" \
  -p PROJECT_ID \
  -w WORKSPACE_ID

Task with Assignee

Assign a task to a specific user:

bun run dev task create \
  -n "Review code changes" \
  -a USER_ID \
  -w WORKSPACE_ID

Task with Due Date

Set a deadline for the task:

bun run dev task create \
  -n "Submit quarterly report" \
  --due 2025-12-31 \
  -w WORKSPACE_ID

Complete Task Creation

Create a task with all options:

bun run dev task create \
  -n "Update user documentation" \
  -d "Add examples and screenshots to user guide" \
  -p PROJECT_ID \
  -a USER_ID \
  --due 2025-11-30 \
  -w WORKSPACE_ID

Output Formats

All task commands support multiple output formats via the --format flag:

TOON Format (Default)

Token-efficient format optimized for LLM interactions (30-60% fewer tokens than JSON):

bun run dev task list -a me -w WORKSPACE_ID --format toon

Output example:

tasks[3]{gid,name,completed}:
  "1234567890",Setup authentication,true
  "1234567891",Add task commands,false
  "1234567892",Write documentation,false

JSON Format

Machine-readable format for scripts and automation:

bun run dev task list -a me -w WORKSPACE_ID --format json

Output example:

{
  "tasks": [
    { "gid": "1234567890", "name": "Setup authentication", "completed": true },
    { "gid": "1234567891", "name": "Add task commands", "completed": false }
  ]
}

Plain Format

Traditional human-readable CLI output:

bun run dev task list -a me -w WORKSPACE_ID --format plain

Output example:

Tasks (3):

✓ 1234567890 - Setup authentication
○ 1234567891 - Add task commands
○ 1234567892 - Write documentation

List Tasks

List Your Tasks

View all tasks assigned to you:

bun run dev task list -a me -w WORKSPACE_ID

List Project Tasks

View all tasks in a specific project:

bun run dev task list -p PROJECT_ID

Filter by Completion State

List only incomplete or only completed tasks:

bun run dev task list -p PROJECT_ID --incomplete-only
bun run dev task list -p PROJECT_ID --completed-only

-c, --completed is deprecated: despite its name it excludes completed tasks. Use --incomplete-only instead.

Filter by Assignee

-a accepts me, a user GID, or none for unassigned tasks:

bun run dev task list -p PROJECT_ID -a none

Expand Fields

Pull extra fields into the listing with --fields instead of one task get per task:

bun run dev task list -p PROJECT_ID --fields completed,assignee,due_on

Count and Group

Return aggregates instead of rows:

bun run dev task list -p PROJECT_ID --count
bun run dev task list -p PROJECT_ID --incomplete-only --group-by assignee --format json

Example output:

{
  "summary": {
    "total": 12,
    "groups": [
      { "assignee": "Alice", "count": 7 },
      { "assignee": "unassigned", "count": 5 }
    ]
  }
}

List Tasks in a Section

bun run dev task list --section SECTION_ID

List Tasks with a Tag

bun run dev task list --tag TAG_ID

The tag endpoint has no server-side completion filter, so --incomplete-only is applied client-side for tags.

List My Tasks

List the tasks in your My Tasks list. The workspace comes from --workspace or the configured default:

bun run dev task list --my-tasks -w WORKSPACE_ID
--project, --section, --tag, and --my-tasks are mutually exclusive. Combining two or more is a usage error (exit code 2) reported before any API call. --assignee, --fields, --count, --group-by, and the completion filters work with every source.

Empty Results

With --format json or --format toon, an empty listing prints a definitive empty list ({"tasks": []} in JSON) instead of prose. --format plain prints No tasks found.

List Tasks for Another User

View tasks assigned to a specific user:

bun run dev task list -a USER_ID -w WORKSPACE_ID

View Task Details

Get detailed information about a specific task:

bun run dev task get TASK_ID

This displays:

  • Task name
  • Description
  • Assignee
  • Due date
  • Projects
  • Completion status
  • Created and modified dates

Look Up by Custom ID

If your workspace uses custom task IDs, look a task up by that ID instead of its GID. The workspace comes from --workspace or the configured default:

bun run dev task get --custom-id PROJ-123 -w WORKSPACE_ID

Pass exactly one of TASK_ID or --custom-id; giving both or neither is a usage error (exit code 2). The output has the same shape as task get TASK_ID.

Duplicate Tasks

Duplicate a task under a new name. Asana runs duplication as an asynchronous job:

bun run dev task duplicate TASK_ID --name "Copy of task"

Choose what to copy with --include, a comma-separated list of assignee, attachments, dates, dependencies, followers, notes, parent, projects, subtasks, and tags:

bun run dev task duplicate TASK_ID --name "Copy of task" --include notes,subtasks,tags

An unknown or empty --include value is a usage error (exit code 2). The command prints the job and, once Asana has created it, the new task:

{
  "job": {
    "gid": "900",
    "status": "succeeded",
    "new_task_gid": "901",
    "new_task_name": "Copy of task"
  }
}

While the job is still running, new_task_gid and new_task_name are omitted.

Update Tasks

Modify existing task properties:

Update Task Name

bun run dev task update TASK_ID --name "New task name"

Update Task Description

bun run dev task update TASK_ID --notes "Updated description with more details"

Update Task Assignee

bun run dev task update TASK_ID --assignee USER_ID

Update Due Date

bun run dev task update TASK_ID --due-on 2025-12-31

Update Start Date

bun run dev task update TASK_ID --start-on 2025-11-01

Mark Task Complete or Incomplete

# Mark as complete
bun run dev task update TASK_ID --completed true

# Mark as incomplete
bun run dev task update TASK_ID --completed false

Update Multiple Fields

You can update multiple fields in a single command:

bun run dev task update TASK_ID \
  --name "Revised task name" \
  --notes "Updated description" \
  --due-on 2025-12-15 \
  --assignee USER_ID

Move Tasks

Move a task to a different project:

Move to Project

bun run dev task move TASK_ID --project PROJECT_ID

Move to Project and Section

Move a task to a specific section within a project:

bun run dev task move TASK_ID --project PROJECT_ID --section SECTION_ID
Note: The move command removes the task from all current projects and adds it to the specified project. If you want a task in multiple projects, use the update command with project options.

Complete Tasks

Mark a task as complete:

bun run dev task complete TASK_ID

The task will be marked as completed but remains in the system for record-keeping.

Alternative: You can also use task update TASK_ID --completed true for more flexibility.

Delete Tasks

Permanently delete a task:

bun run dev task delete TASK_ID
Warning: This action cannot be undone. The task will be permanently removed from Asana.

Command Options

Common Options

All task commands support these options:

  • -w, --workspace <id> - Workspace ID (required for most operations)
  • -p, --project <id> - Project ID
  • -a, --assignee <id> - User ID or "me" for yourself

Create Options

  • -n, --name <string> - Task name (required)
  • -d, --notes <string> - Task description/notes
  • --due <date> - Due date (YYYY-MM-DD format)

Update Options

  • -n, --name <string> - Update task name
  • -d, --notes <string> - Update task description/notes
  • -a, --assignee <id> - Update assignee
  • --due-on <date> - Update due date (YYYY-MM-DD format)
  • --start-on <date> - Update start date (YYYY-MM-DD format)
  • -c, --completed <boolean> - Mark as completed (true) or incomplete (false)

Move Options

  • -p, --project <id> - Target project ID (required)
  • -s, --section <id> - Target section ID (optional)

List Options

  • -c, --completed - Deprecated; use --incomplete-only
  • --section <id> / --tag <id> / --my-tasks - List a section, a tag, or My Tasks (exclusive with -p)

Get Options

  • --custom-id <id> - Look up by custom ID instead of GID
  • -w, --workspace <id> - Workspace for --custom-id

Duplicate Options

  • -n, --name <string> - Name of the new task (required)
  • --include <fields> - Comma-separated fields to copy

Practical Examples

Daily Standup Workflow

# Check your tasks for today
bun run dev task list -a me -w WORKSPACE_ID

# Create follow-up tasks
bun run dev task create -n "Follow up on PR review" -w WORKSPACE_ID

# Update task with new information
bun run dev task update TASK_ID \
  --notes "Discussed with team, approved for merge" \
  --due-on 2025-10-31

# Complete finished tasks
bun run dev task complete TASK_ID

Project Management

# View all project tasks
bun run dev task list -p PROJECT_ID

# Add new task to project
bun run dev task create \
  -n "Implement search feature" \
  -p PROJECT_ID \
  -w WORKSPACE_ID

# Move task to different project
bun run dev task move TASK_ID --project NEW_PROJECT_ID

Team Collaboration

# Assign task to team member
bun run dev task create \
  -n "Review API documentation" \
  -a TEAM_MEMBER_ID \
  --due 2025-10-30 \
  -w WORKSPACE_ID

# Reassign task to different team member
bun run dev task update TASK_ID --assignee OTHER_TEAM_MEMBER_ID

# Update task deadline
bun run dev task update TASK_ID --due-on 2025-11-15

Task Lifecycle Management

# Create a new task
bun run dev task create -n "Build new feature" -w WORKSPACE_ID

# Add details as work progresses
bun run dev task update TASK_ID \
  --notes "Started implementation, using React hooks pattern"

# Extend deadline if needed
bun run dev task update TASK_ID --due-on 2025-12-01

# Move to different project phase
bun run dev task move TASK_ID --project TESTING_PROJECT_ID

# Mark as complete when done
bun run dev task complete TASK_ID

Tips & Best Practices

Pro Tip: Use environment variables to avoid repeating workspace IDs:

export ASANA_WORKSPACE=your_workspace_id

Then you can omit the -w flag in many commands (depending on implementation).

Finding IDs:

  • Workspace ID: Check the URL when viewing your workspace in Asana
  • Project ID: Look at the URL when viewing a project
  • User ID: Available through the Asana API or web interface ::
Copyright © 2026