Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Asana

BSecurity

Create, read, and update Asana tasks from the command line. Use whenever the user wants to interact with Asana: list their tasks or a project's tasks, look up a task by id or link, create a new task, update a task's title, notes, due date, assignee, or project membership, or mark a task complete. Triggers on requests like "what's on my Asana", "list my Asana tasks", "create an Asana task for X", "add a task to project Y", "update the due date on that task", "mark this Asana task done", "show ...

2 stars
0 votes
0 copies
0 views
Added 9/28/2026
ai-agentsgoshellbashapi

Works with

cliapi

Security Analysis

B88/100
criticalSends environment variables or credentials to an external URL

Scanned 9/28/2026

Install to Claude Code

$npx -y skills add dversoza/claude-skills --skill asana --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Asana?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Asana
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/dversoza-asana/badge)](https://www.skillsdirectory.com/skills/dversoza-asana)

More formats (shields.io, HTML) on the badges page.

Files
SKILL.md
---
name: asana
description: >-
  Create, read, and update Asana tasks from the command line. Use whenever the
  user wants to interact with Asana: list their tasks or a project's tasks, look
  up a task by id or link, create a new task, update a task's title, notes, due
  date, assignee, or project membership, or mark a task complete. Triggers on
  requests like "what's on my Asana", "list my Asana tasks", "create an Asana
  task for X", "add a task to project Y", "update the due date on that task",
  "mark this Asana task done", "show me the tasks in <project>". Wraps the Asana
  REST API in an `asana` CLI. Deliberately does not delete tasks.
---

# Asana

Task CRUD against the Asana REST API through the installed `asana` CLI. Every
subcommand prints JSON to stdout; errors print `{"error": ...}` to stderr and
exit non-zero. There is intentionally no delete: only list, get, create, update
(completing a task is an update).

## Setup

The CLI installs as a `uv` tool and exposes an `asana` command:

```bash
uv tool install ~/.claude/skills/asana/cli   # or --force to reinstall after edits
asana setup --token <PERSONAL_ACCESS_TOKEN>  # optionally --workspace <GID>
```

Create a Personal Access Token at https://app.asana.com/0/my-apps. If the token
lives in 1Password, source it without exposing it in shell history:

```bash
asana setup --token "$(op read -n 'op://<vault>/<item>/token')"
```

`setup` writes the token to `~/.config/asana-cli/config.env` (mode `0600`) and
verifies it by calling `/users/me`. Confirm auth anytime with `asana whoami`.

Token resolution order (first hit wins): `ASANA_ACCESS_TOKEN` env var, then the
config file. So a token exported in the shell (e.g. from `.zshrc`) overrides the
stored one.

If `asana: command not found`, the uv tool bin dir is not on `PATH`; run
`uv tool install ~/.claude/skills/asana/cli` (uv installs into `~/.local/bin`).

## Subcommands

```bash
asana whoami                                    # authenticated user + workspaces
asana workspaces                                # accessible workspaces
asana projects [--workspace GID] [--limit N]    # projects in a workspace

asana tasks list --assignee me [--include-completed] [--limit N]   # my tasks
asana tasks list --project GID [--include-completed] [--limit N]   # a project's tasks
asana tasks get --gid GID [--fields a,b,c]

asana tasks create --name "..." [--notes "..."] [--parent GID] [--project GID]
                   [--workspace GID] [--assignee me] [--due YYYY-MM-DD]

asana tasks update --gid GID [--name "..."] [--notes "..."] [--due YYYY-MM-DD]
                   [--assignee me] [--add-project GID] [--remove-project GID]
                   [--add-follower GID] [--remove-follower GID]
                   [--complete | --incomplete]

asana tasks reorder --parent GID --order gid1,gid2,gid3    # order subtasks top->bottom

# Escape hatch: call any Asana REST endpoint not covered above
asana api --path /PATH [--method GET|POST|PUT|PATCH] [--query k=v ...] [--data '<json>']
```

All arguments are named (no positional args). Task ids are passed with `--gid`.

Workspace resolution for commands that need one: `--workspace` flag,
`ASANA_WORKSPACE_GID` env var, config file, then auto (used automatically when
the token has access to exactly one workspace — the common case).

## Working with tasks

Discover ids before creating or filtering. A task is a "ticket"; its `gid` is
the numeric id in its URL (`.../task/<gid>`). To find a project's gid, run
`asana projects`. To find your own tasks, `asana tasks list --assignee me`.

`asana tasks list` excludes completed tasks by default; pass
`--include-completed` to include them.

Field selection uses Asana `opt_fields`. Defaults cover the common case; pass
`--fields` to narrow or widen (e.g. `--fields name,due_on,assignee.name`,
or dotted paths like `--fields "projects.name,memberships.section.name"`).

Updates are sparse — only the flags you pass change. Clear the due date with
`--due ''`. Project membership is managed with `--add-project` /
`--remove-project`, and collaborators with `--add-follower` / `--remove-follower`
(Asana does not let you set `projects` or `followers` via a plain update).

Create a subtask with `asana tasks create --parent GID --name "..."`. Asana adds
each new subtask to the top of the list, so when creating several in sequence
their order ends up reversed; fix it with
`asana tasks reorder --parent GID --order gid1,gid2,...` (top to bottom).

Completing a task is `asana tasks update --gid GID --complete`. This is the
safest way to "remove" a task from active lists; the CLI never hard-deletes.

## Any endpoint (`asana api`)

For anything the dedicated commands don't cover — project/section/user/team
metadata, custom fields, subtasks, comments (stories), search — use the raw
`api` command. It prints the full response envelope (including `next_page`).

```bash
asana api --path /projects/1201234/tasks --query opt_fields=name,completed --query limit=5
asana api --path /tasks/1201234/stories --query opt_fields=text,created_by.name
asana api --path /tasks --method POST --data '{"name":"New task","workspace":"1200000000000000"}'
```

`--data` takes the inner JSON object; it is sent wrapped as `{"data": ...}` (the
Asana convention). `--query` is repeatable. `DELETE` is refused unless
`--allow-delete` is also passed. See `references/api.md` for endpoints and
`opt_fields` semantics.

## Extending the skill

The full REST reference — endpoints, request/response shapes, pagination,
`opt_fields` semantics, and gotchas — is in `references/api.md`. Read it before
adding new subcommands (comments/stories, sections, custom fields, subtasks,
attachments, search). Add new commands in `cli/asana_cli/cli.py` following the
existing `cmd_*` pattern, then `uv tool install --force ~/.claude/skills/asana/cli`.

Attribution

dversozadversoza
View sourceMore from dversoza →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Caveman

Ultra-compressed communication mode that cuts output tokens while keeping technical accuracy. Levels: lite, full, ultra and the wenyan variants. Use for /caveman, "caveman mode", "talk like caveman", "be brief" or "less tokens".

1074701 votes

Hyperplan

Adversarial multi-agent planning skill. Self-orchestrates 5 hostile category members (unspecified-low, unspecified-high, deep, ultrabrain, artistry) via team-mode for ruthless cross-critique debate, distills only the defensible insights, then MANDATORILY hands the distilled insight bundle to the `plan` agent for executable plan formalization. Use when planning needs maximum rigor and surfacing of weak assumptions, blind spots, and over-engineering. Triggers: 'hyperplan', 'hpp', '/hyperplan', ...

695601 votes

Mcp Code Execution

Routes multi-tool workflows through MCP servers for large datasets and pipelines. Use when Bash tool overhead is limiting throughput on data-heavy tasks.

3351 votes

catchup

Recovers the conversation and failed tool calls of a previous Codex, Claude Code, Antigravity, Cline, Copilot CLI, Cursor, DeepSeek Harness, Kimi, OpenCode, Pi Agent, or ZCode session. Use when the user says "catch up", "what did the last session do", "get me up to speed", "I switched agents", asks to recover/summarize a previous session before continuing, or asks to diagnose or report a catchup failure. Do NOT use for the current conversation, git history, or any non-agent log.

691 votes

math-skill

A comprehensive mathematical reasoning skill for AI assistants — handles arithmetic to research-level problems with rigorous step-by-step reasoning, systematic verification, and transparent uncertainty handling

381 votes
View all in ai-agents →