Communitygithub.com

Plan Canvas

Abra planos e artefatos HTML em um canvas no navegador, onde o humano anota elementos, conversa e aprova ou solicita alterações sem sair da página. Use ao apresentar um plano para revisão ou quando feedback visual for necessário.

O que é Plan Canvas?

O Plan Canvas é uma skill para agentes de IA (como Claude Code, Cursor, Codex, Gemini, OpenCode, Copilot) que cria um loop de revisão visual para planos e artefatos HTML. Quando o agente escreve um plano (`.plan.md`) ou outro artefato, ele abre um servidor loopback local (`127.0.0.1:4517`) que exibe o conteúdo no navegador do usuário. O usuário pode então anotar elementos específicos, conversar e dar um veredito final de 'Aprovar plano' ou 'Solicitar alterações', tudo sem sair da página. O agente fica bloqueado em uma única chamada CLI (`ecc-plan-canvas await`) que retorna o feedback como JSON estruturado. A skill é inspirada no lavish-axi, reconstruída nativamente para o ecossistema ECC com zero dependências, e suporta diagramas Mermaid. É ideal para revisões visuais, comparações, relatórios e qualquer fluxo onde o usuário precise apontar exatamente o que mudar.

Funciona com✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓OpenCode
npx skills add https://github.com/affaan-m/ECC/tree/main/skills/plan-canvas

Perguntar na sua IA favorita

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

Documentação

O que Plan Canvas faz?

Loop de revisão para planos e artefatos visuais: você escreve o artefato, o humano o revisa no navegador — anotando o elemento exato a que se refere, conversando e entregando um veredito Aprovar plano / Solicitar alterações — enquanto você fica bloqueado em uma única chamada CLI que retorna o feedback como JSON.

Inspirado por lavish-axi; reconstruído nativo para o ECC em torno do portão de confirmação /plan, com zero dependências.

Quando Usar

  • Você acabou de escrever um artefato de plano (.claude/plans/*.plan.md do /plan) e precisa da decisão CONFIRMAR/aprovar — o veredito do canvas substitui um "sim/continuar" digitado.
  • O usuário deve apontar o que mudar: revisando designs, comparações, relatórios ou qualquer artefato local .md / .html.
  • O usuário pede /plan-canvas, uma revisão visual, ou "abra no navegador".

NÃO use para: revisão de código de diffs (/code-review), aplicações web em execução ou URLs remotas. O canvas serve apenas arquivos de artefatos locais.

Como Funciona

Invoque a CLI como ecc-plan-canvas — o binário enviado pelo pacote ecc-universal (no PATH após instalação global/plugin; node "$CLAUDE_PLUGIN_ROOT/scripts/plan-canvas.js" também funciona para instalações via plugin). Execute-a a partir do projeto que você está revisando; funciona de qualquer diretório de trabalho. Ela gerencia um servidor loopback destacado (127.0.0.1:4517) compartilhado por todas as sessões, indexado pelo caminho do artefato — sem IDs de sessão para rastrear.

O fluxo de trabalho é um simples loop CLI-mais-JSON, portanto é agnóstico a modelo e plataforma: qualquer agente que possa executar um comando shell e ler stdout o aciona da mesma forma (Claude Code, Codex, Cursor, Gemini, OpenCode, Copilot). Acione-o conforme sua plataforma expõe skills — por exemplo /plan-canvas no Claude Code, $plan-canvas no Codex — ou apenas execute os comandos ecc-plan-canvas diretamente.

# 1. Abra o artefato no navegador do usuário (retorna imediatamente)
ecc-plan-canvas open .claude/plans/feature.plan.md

# 2. Bloqueie até o humano responder. Deixe executando; reexecute se interrompido:
#    o feedback enfileirado nunca é perdido.
ecc-plan-canvas await .claude/plans/feature.plan.md

Fique ouvindo, ou o humano conversa com uma cadeira vazia

O feedback só chega até você enquanto um await está realmente estacionado na sessão. Se seu turno terminar sem nada ouvindo, a mensagem fica na fila e, do lado do humano, enviar parece não fazer nada.

Portanto, execute await como uma tarefa em segundo plano quando sua plataforma suportar uma (no Claude Code, uma chamada Bash com run_in_background: true). Ela sai no momento em que o feedback chega e a plataforma entrega o JSON, o que mantém o loop vivo entre turnos em vez de morrer com a chamada em primeiro plano. Um await em primeiro plano também funciona, mas apenas até que a plataforma limite seu tempo.

Existem duas salvaguardas, e nenhuma delas é desculpa para pular o acima:

  • ecc-plan-canvas pending lista feedback enfileirado sem ouvinte. Verifique sempre que não tiver certeza se perdeu algo.
  • O hook stop:plan-canvas-pending impede que seu turno termine enquanto houver feedback do canvas não entregue e entrega as mensagens. Se você está lendo feedback desse hook, parou de ouvir cedo demais.

await imprime JSON quando o humano age:

{
  "status": "feedback",
  "items": [
    { "kind": "annotation", "text": "Divida isso em duas fases",
      "anchor": { "selector": "h2:nth-of-type(3)", "tag": "h2", "snippet": "Fase 2: Migração" } },
    { "kind": "verdict", "verdict": "request-changes" }
  ]
}
  • kind: "chat" — mensagem livre; responda no canvas, não no terminal.
  • kind: "annotation" — feedback ancorado a um elemento (anchor.selector, anchor.snippet mostram o que apontaram; anchor.textRange.text quando destacaram uma passagem).
  • kind: "verdict" — approve significa que o plano está CONFIRMADO: pare de consultar, encerre a sessão e comece a implementar. request-changes significa revisar o artefato (o canvas recarrega ao vivo) e manter o loop.

3. Sempre responda no canvas, depois continue ouvindo. Um comando faz ambos:

ecc-plan-canvas await <file> --reply "Dividindo a Fase 2 conforme solicitado. Dê uma olhada."

Toda mensagem humana recebe uma resposta no canvas, mesmo uma linha como "Fazendo, reescrevendo a tabela de riscos agora." Silêncio no painel de chat é indistinguível de um canvas quebrado, que é exatamente a falha que este loop existe para prevenir. Responda lá, não apenas no terminal.

Enquanto trabalha, mantenha o chat honesto com o indicador de atividade:

# bolha "agente está pensando..." animada; atualize durante trabalho longo
ecc-plan-canvas typing <file> --state thinking
# mude para "agente está digitando..." pouco antes de uma resposta chegar
ecc-plan-canvas typing <file> --state typing

await define thinking para você no momento em que entrega um lote, e --reply o limpa. Ambos os estados expiram sozinhos, então um agente quebrado decai para um honesto "enfileirado" em vez de deixar o humano observando pontos para sempre. Atualize thinking se uma revisão levar mais de um minuto.

4. Termine quando a revisão concluir: ecc-plan-canvas end <file>.

Diagramas (Mermaid)

Quando parte do plano é um fluxo, arquitetura, sequência, máquina de estados, modelo ER ou gráfico de dependências, escreva-o como um bloco ```mermaid em vez de arte ASCII ou um muro de prosa — o canvas o renderiza como um diagrama temático que o humano pode apontar. Use-o quando uma imagem é mais rápida que um parágrafo; pule para listas ou tabelas simples.

```mermaid
flowchart LR
  A[Mercado resolve] --> B{Observadores?}
  B -->|sim| C[Enfileirar jobs] --> D[Worker fan-out]
```

Diagramas renderizam no tema escuro do ECC com a paleta de destaque. Mermaid carrega no navegador de uma CDN fixa; se isso não estiver disponível (offline), o bloco degrada para mostrar seu código fonte, então a revisão nunca é bloqueada. Aponte um espelho local em ECC_PLAN_CANVAS_MERMAID_URL para uso em ambientes isolados.

Regras

  • Artefatos Markdown renderizam no modelo de plano do ECC (incluindo blocos Mermaid); artefatos .html renderizam como estão com a camada de anotação injetada. Para orientação de criação de HTML, use as skills frontend-design-direction e artifact-design.
  • Edite o arquivo do artefato para revisar — o canvas recarrega ao vivo ao salvar. Nunca reexecute open para atualizar.
  • {"status": "ended", "endedBy": "user"} (ou sessionEnded: true em um lote de feedback) significa que o usuário fechou a revisão: pare de consultar, entregue atualizações restantes no chat e não reabra. Um simples open nessa sessão é recusado; passe --reopen apenas quando o usuário solicitar retomar.
  • Ativos irmãos (imagens, CSS) devem ficar ao lado do artefato e ser referenciados por caminho relativo.
  • O servidor é loopback-only e sai após 30 minutos ociosos (ECC_PLAN_CANVAS_IDLE_MS); stop o desliga explicitamente. O estado reside em ~/.claude/plan-canvas/ (ECC_PLAN_CANVAS_STATE_DIR).

Exemplos

Fluxo de aprovação de plano — /plan escreve .claude/plans/notifications.plan.md e deve AGUARDAR confirmação:

ecc-plan-canvas open .claude/plans/notifications.plan.md
ecc-plan-canvas await .claude/plans/notifications.plan.md
# → {"status":"feedback","items":[{"kind":"verdict","verdict":"approve"}]}
ecc-plan-canvas end .claude/plans/notifications.plan.md
# plano confirmado — iniciar implementação

Loop de revisão — feedback chega, você edita o arquivo, responde, continua ouvindo:

# await retornou anotações → edite o .plan.md (canvas recarrega ao vivo)
ecc-plan-canvas await <file> --reply "Refiz a tabela de riscos."
# → bloqueia novamente até a próxima resposta

Anti-Padrões

  • Consultar com --timeout-ms em um loop. Existe para testes. Deixe o await simples executando.
  • Terminar seu turno sem nenhum await ouvindo enquanto a revisão ainda está aberta. Essa é a única falha que o humano experimenta como "enviei uma mensagem e nada aconteceu".
  • Ler o feedback mas responder apenas no terminal. O humano está olhando para o canvas.
  • Reabrir após um encerramento iniciado pelo usuário "só para mostrar" algo.
  • Colar o plano inteiro no chat e abrir um canvas — escolha o canvas e mantenha o resumo no terminal em uma linha.
  • Analisar o chat do canvas a partir de arquivos de estado — tudo o que você precisa chega via await.

Notas de design e origem: docs/design/plan-canvas.md.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/content-engine

Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.

affaan-m/ECC

Multi-platform content distribution across X, LinkedIn, Threads, and Bluesky. Adapts content per platform using content-engine patterns. Never posts identical content cross-platform. Use when the user wants to distribute content across social platforms.

affaan-m/fal-ai-media

Unified media generation via fal.ai MCP — image, video, and audio. Covers text-to-image (Nano Banana), text/image-to-video (Seedance, Kling, Veo 3), text-to-speech (CSM-1B), and video-to-audio (ThinkSound). Use when the user wants to generate images, videos, or audio with AI.

affaan-m/manim-video

日本語翻訳:このファイルは manim-video 用の日本語翻訳が必要です

affaan-m/remotion-video-creation

Remotion のベストプラクティス - React で動画を作成する。3D、アニメーション、音声、字幕、チャート、トランジションなどをカバーするドメイン固有の29のルール。

affaan-m/video-editing

AI-assisted video editing workflows for cutting, structuring, and augmenting real footage. Covers the full pipeline from raw capture through FFmpeg, Remotion, ElevenLabs, fal.ai, and final polish in Descript or CapCut. Use when the user wants to edit video, cut footage, create vlogs, or build video content.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

agent-self-evaluation

Use after completing any non-trivial task. The agent self-rates its output on 5 axes — accuracy, completeness, clarity, actionability, conciseness — with concrete evidence per criterion. Produces a structured 1-5 scorecard with specific improvement suggestions.

agent-sort

Build an evidence-backed ECC install plan for a specific repo by sorting skills, commands, rules, hooks, and extras into DAILY vs LIBRARY buckets using parallel repo-aware review passes. Use when ECC should be trimmed to what a project actually needs instead of loading the full bundle.

ai-first-engineering

Engineering operating model for teams where AI agents generate a large share of implementation output. Use when setting team process, review gates, or ownership rules for a codebase largely written by agents.

ai-regression-testing

Regression testing strategies for AI-assisted development. Sandbox-mode API testing without database dependencies, automated bug-check workflows, and patterns to catch AI blind spots where the same model writes and reviews code. Use when adding regression coverage to AI-assisted code, or when the same model both wrote and reviewed a change.

android-clean-architecture

Clean Architecture patterns for Android and Kotlin Multiplatform projects — module structure, dependency rules, UseCases, Repositories, and data layer patterns. Use when structuring modules, layers, or data flow in an Android or KMP project.

angular-developer

Generates Angular code and provides architectural guidance. Trigger when creating projects, components, or services, or for best practices on reactivity (signals, linkedSignal, resource), forms, dependency injection, routing, SSR, accessibility (ARIA), animations, styling (component styles, Tailwind CSS), testing, or CLI tooling.

Habilidades Relacionadas