Communitygithub.com

sincekmori/asana-gate

Opere o Asana por meio do asana-gate, o gateway de políticas que coloca uma política declarativa em YAML na frente da API REST do Asana para agentes de IA, como ferramentas MCP (asana_*) e a linha de comando asana-gate. Use esta skill sempre que uma tarefa envolver o asana-gate de alguma forma: escrever ou corrigir uma política (escopos where/allow/deny, restrições como membros obrigatórios, prefixos de título, limites de taxa e confirmações), executar comandos asana-gate, chamar suas ferramentas MCP ou ler suas recusas (404 Not a recognized ID, 403 asana-gate:).

O que é asana-gate?

A skill asana-gate é um gateway de políticas para a API REST do Asana, projetado especificamente para agentes de IA. Ela usa um arquivo YAML para definir, por escopo (workspace, equipe, portfólio, projeto, seção, tarefa), quais ações o agente pode executar e como suas requisições são moldadas. Isso é útil porque impõe controle de acesso fino e consistente, evitando que agentes realizem ações não autorizadas ou modifiquem dados de forma inadequada. A skill suporta integração via ferramentas MCP (por exemplo, `asana_search_tasks`, `asana_create_task`) e uma interface de linha de comando (`asana-gate`), fornecendo respostas claras de recusa (prefixadas com `asana-gate:`) que explicam exatamente por que uma ação foi bloqueada. Dessa forma, desenvolvedores e agentes podem planejar suas ações com base nas permissões concedidas, tornando a automação do Asana mais segura e previsível.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/sincekmori/asana-gate/tree/HEAD/skills/asana-gate

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que asana-gate faz?

asana-gate é um gateway de políticas posicionado na frente da API REST do Asana. Uma política YAML define, por escopo (workspace, equipe, portfólio, projeto, seção, tarefa), quais ações um agente pode executar e como suas requisições são moldadas; o gateway a aplica em cada requisição, seja ela uma chamada de ferramenta MCP ou um comando asana-gate. Tudo que você pode ver ou fazer através dele é decidido por essa política, não pelo Asana: objetos que a política oculta não existem para você, e recusas são retornadas como erros no estilo HTTP cuja mensagem começa com asana-gate:.

Leia primeiro as respostas do gateway

Cada objeto retornado pelo gateway carrega allowed_actions: as ações <resource>:<verb> que a política permite naquele momento, como task:update ou story:create. Verifique antes de escrever, pois uma ação ausente será recusada: planeje com base no que está listado, em vez de tentar e falhar.

RespostaSignificadoO que fazer
404 <type>: Not a recognized ID: <gid>O objeto não existe ou a política o oculta; o gateway torna deliberadamente os dois indistinguíveis (o mesmo 404 que o Asana envia)Não tente novamente nem use outros gids. Diga que o objeto não está visível sob a política; seu proprietário pode executar asana-gate explain <gid> para ver qual regra o oculta
403 asana-gate: <action> is not permitted on <type> <gid>O objeto está visível, mas a política não permite esta ação neleReporte e ofereça uma ação de allowed_actions; ampliar a política é decisão do proprietário
403 asana-gate: updating <resource>.<member> is not permitted here (allowed fields: …)A atualização envolveu um membro fora da lista de permissões fields da regraReenvie apenas com os membros permitidos
400 asana-gate: the <resource> does not satisfy the policy: …Uma restrição da política: um membro obrigatório está faltando ou foi limpo, um prefixo ou formato está errado, um valor não é permitido, um membro é proibidoCorrija a requisição exatamente como a mensagem indica e reenvie
428 asana-gate: <action> needs a person's confirmationA política exige que um humano aprove esta açãoPelo MCP, responda à solicitação que o cliente mostra; de um shell, execute novamente com --yes
429 asana-gate: <action> is limited to N per <period>Um limite de taxa que a política define para esta ação neste escopoAguarde o período passar; não faça loop nisso

As listas (projetos, tarefas, pesquisa, typeahead, eventos) são filtradas silenciosamente: objetos ocultos estão simplesmente ausentes, nada informa quantos foram removidos, e uma página carrega next_page.offset para continuar com offset. Os erros do próprio Asana passam sem alterações, sem o prefixo asana-gate:: um 402 significa que o plano do workspace não possui o recurso (pesquisa, campos personalizados, portfólios e metas exigem um plano pago), um 400 simples é o Asana rejeitando o corpo, um 403 simples é a permissão do próprio token (eventos de log de auditoria, eventos de workspace e exportações de organização exigem uma conta de serviço em um nível Enterprise; os endpoints de Agent em acesso antecipado usam a flag ai_teammate_actors na configuração asana.enable). Procure pelo prefixo: com ele, a política decidiu; sem ele, o Asana decidiu.

Trabalhando via MCP

O servidor expõe as ferramentas selecionadas que a política poderia permitir, além de três genéricas:

  • asana_create_tasks e asana_update_tasks aceitam até 50 tarefas de cada vez e respondem com um status_code e body por tarefa, em ordem; algumas podem falhar enquanto outras são bem-sucedidas.
  • asana_request chama qualquer operação REST do Asana (method, path abaixo de /api/1.0, query, body como objeto data) através da mesma política; um POST /batch através dela aceita até 50 ações.
  • asana_operations lista as operações com a ação de política que cada uma necessita; asana_allowed_actions informa o que você pode fazer com um objeto.
FerramentaLinha de comandoO que faz
asana_search_tasksasana-gate task searchPesquisa de tarefas por texto completo e filtros no workspace (API de Pesquisa do Asana; apenas planos pagos). Os resultados são limitados a tarefas que a política torna visíveis.
asana_list_tasksasana-gate task listLista tarefas em um projeto, seção, com uma tag ou atribuídas a um usuário (um dos parâmetros project, section, tag ou assignee é obrigatório). Cada tarefa carrega allowed_actions.
asana_get_taskasana-gate task get <task_gid>Lê uma tarefa com seus campos completos e allowed_actions.
asana_create_taskasana-gate task createCria uma tarefa em um ou mais projetos (opcionalmente em uma seção), sob uma tarefa pai, ou sem ancoragem no workspace.
asana_update_taskasana-gate task update <task_gid>Atualiza campos de uma tarefa. Concluir precisa de task:complete, atribuir precisa de task:assign; outros campos precisam de task:update (possivelmente limitado a uma lista de permissões).
asana_create_tasksasana-gate task create-manyCria até 50 tarefas em uma chamada, cada uma como asana_create_task faria. O resultado contém um status_code e body por tarefa, em ordem; o Asana pode falhar em algumas enquanto as outras são bem-sucedidas. Uma recusa de política de qualquer tarefa recusa toda a chamada antes de tudo ser executado, e sua mensagem nomeia a tarefa (actions[i]).
asana_update_tasksasana-gate task update-manyAtualiza até 50 tarefas em uma chamada, cada uma como asana_update_task faria. O resultado contém um status_code e body por tarefa, em ordem; o Asana pode falhar em algumas enquanto as outras são bem-sucedidas. Uma recusa de política de qualquer tarefa recusa toda a chamada antes de tudo ser executado, e sua mensagem nomeia a tarefa (actions[i]).
asana_delete_taskasana-gate task delete <task_gid>Exclui uma tarefa (ela é movida para a lixeira no Asana).
asana_list_subtasksasana-gate task subtasks <task_gid>Lista as subtarefas diretas de uma tarefa.
asana_create_subtask—Cria uma subtarefa sob uma tarefa; ela herda o escopo da tarefa pai, a menos que projetos sejam fornecidos.
asana_set_task_parentasana-gate task set-parent <task_gid>Torna uma tarefa uma subtarefa de outra (ou uma tarefa de nível superior com parent null).
asana_add_task_to_projectasana-gate task add-project <task_gid>Multi-ancora uma tarefa em um projeto, opcionalmente em uma seção.
asana_remove_task_from_projectasana-gate task remove-project <task_gid>Remove uma tarefa de um de seus projetos.
asana_move_task_to_sectionasana-gate task move <task_gid>Move uma tarefa para uma seção de um projeto ao qual ela pertence (necessita task:move em ambas as extremidades).
asana_add_tag_to_taskasana-gate task tag <task_gid>Aplica uma tag a uma tarefa (necessita tag:apply no escopo da tarefa).
asana_remove_tag_from_taskasana-gate task untag <task_gid>Remove uma tag de uma tarefa (necessita tag:apply no escopo da tarefa).
asana_add_task_dependenciesasana-gate task add-dependencies <task_gid>Marca tarefas das quais esta tarefa depende; cada tarefa referenciada deve estar visível.
asana_remove_task_dependenciesasana-gate task remove-dependencies <task_gid>Remove dependências de uma tarefa.
asana_list_task_storiesasana-gate task comments <task_gid>Lista os comentários e atividades (histórias) de uma tarefa.
asana_create_commentasana-gate task comment <task_gid>Adiciona um comentário (história) a uma tarefa.
asana_update_story

Habilidades Relacionadas