Communitygithub.com

plan-canvas

Abre planes y artefactos HTML en un lienzo del navegador para que el humano anote elementos, chatee y apruebe o solicite cambios sin salir de la página. Úsalo al presentar un plan para revisión, o cuando necesites comentarios visuales como anotaciones.

¿Qué es plan-canvas?

Plan Canvas es una habilidad para agentes de IA que establece un bucle de revisión visual entre el agente y el humano, mostrando artefactos locales (markdown o HTML) en un lienzo del navegador con capacidad de anotación, chat y veredicto. Es compatible con Claude Code, Codex, Cursor, Gemini, OpenCode, Copilot y otros, funcionando como un comando CLI único (`ecc-plan-canvas`) que abre el archivo, espera la respuesta del humano en JSON, y permite responder dentro del mismo lienzo. Su utilidad radica en que elimina la necesidad de intercambiar mensajes de texto largos para aprobar o modificar planes, ya que el humano puede señalar exactamente qué elemento desea cambiar, chatear en contexto y decidir si aprueba o solicita cambios. El flujo típico implica ejecutar `open` para mostrar el artefacto, luego `await` para bloquear hasta recibir comentarios, y opcionalmente `--reply` para responder en el lienzo, manteniendo la conversación visual en todo momento.

Compatible con✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓OpenCode
npx skills add https://github.com/affaan-m/everything-claude-code/tree/main/skills/plan-canvas

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Plan Canvas

Bucle de revisión para planes y artefactos visuales: tú escribes el artefacto, el humano lo revisa en el navegador — anotando el elemento exacto al que se refiere, chateando y entregando un veredicto de Aprobar plan / Solicitar cambios — mientras tú te bloqueas en una única llamada CLI que devuelve sus comentarios como JSON.

Inspirado en lavish-axi; reconstruido de forma nativa en ECC alrededor de la puerta de confirmación /plan, con cero dependencias.

Cuándo Usarlo

  • Acabas de escribir un artefacto de plan (.claude/plans/*.plan.md desde /plan) y necesitas la decisión de CONFIRMAR/aprobar — el veredicto del lienzo reemplaza un "sí/continuar" escrito.
  • El usuario debe señalar qué cambiar: revisando diseños, comparaciones, informes o cualquier artefacto local .md / .html.
  • El usuario solicita /plan-canvas, una revisión visual o "ábrelo en el navegador".

NO usar para: revisión de código de diffs (/code-review), aplicaciones web en ejecución o URLs remotas. El lienzo solo sirve archivos de artefactos locales.

Cómo Funciona

Invoca el CLI como ecc-plan-canvas — el binario distribuido por el paquete ecc-universal (en PATH tras una instalación global/plugin; node "$CLAUDE_PLUGIN_ROOT/scripts/plan-canvas.js" también funciona para instalaciones plugin). Ejecútalo desde el proyecto que estás revisando; funciona desde cualquier directorio de trabajo. Gestiona un servidor de bucle invertido separado (127.0.0.1:4517) compartido por todas las sesiones, identificado por la ruta del artefacto — sin IDs de sesión que rastrear.

El flujo de trabajo es un bucle CLI más JSON simple, por lo que es agnóstico al modelo y al arnés: cualquier agente que pueda ejecutar un comando de shell y leer la salida estándar lo maneja de la misma manera (Claude Code, Codex, Cursor, Gemini, OpenCode, Copilot). Actívalo como tu arnés exponga las habilidades — por ejemplo, /plan-canvas en Claude Code, $plan-canvas en Codex — o simplemente ejecuta los comandos ecc-plan-canvas directamente.

# 1. Abre el artefacto en el navegador del usuario (regresa inmediatamente)
ecc-plan-canvas open .claude/plans/feature.plan.md

# 2. Bloquéate hasta que el humano responda. Déjalo ejecutándose; vuelve a ejecutarlo si se interrumpe:
#    los comentarios en cola nunca se pierden.
ecc-plan-canvas await .claude/plans/feature.plan.md

Mantente a la escucha, o el humano habla con una silla vacía

Los comentarios solo te llegan mientras un await está realmente estacionado en la sesión. Si tu turno termina sin que nada esté escuchando, el mensaje permanece en la cola y, desde el lado humano del cristal, enviar parece no hacer nada en absoluto.

Por lo tanto, ejecuta await como una tarea en segundo plano cuando tu arnés lo admita (en Claude Code, una llamada Bash con run_in_background: true). Sale en el momento en que llegan los comentarios y el arnés te entrega el JSON, manteniendo el bucle vivo a lo largo de los turnos en lugar de morir con la llamada en primer plano. Un await en primer plano también funciona, pero solo hasta que el arnés lo limite por tiempo.

Existen dos salvaguardas, y ninguna es excusa para saltarse lo anterior:

  • ecc-plan-canvas pending lista los comentarios en cola sin oyente. Revísalo cada vez que no estés seguro de si te has perdido algo.
  • El hook stop:plan-canvas-pending bloquea el final de tu turno mientras haya comentarios del lienzo no entregados, y te entrega los mensajes. Si estás leyendo comentarios de ese hook, dejaste de escuchar demasiado pronto.

await imprime JSON cuando el humano actúa:

{
  "status": "feedback",
  "items": [
    { "kind": "annotation", "text": "Divide esto en dos fases",
      "anchor": { "selector": "h2:nth-of-type(3)", "tag": "h2", "snippet": "Fase 2: Migración" } },
    { "kind": "verdict", "verdict": "request-changes" }
  ]
}
  • kind: "chat" — mensaje libre; responde en el lienzo, no en la terminal.
  • kind: "annotation" — comentario anclado a un elemento (anchor.selector, anchor.snippet muestran a qué apuntaron; anchor.textRange.text cuando resaltaron un pasaje).
  • kind: "verdict" — approve significa que el plan está CONFIRMADO: deja de preguntar, finaliza la sesión y comienza a implementar. request-changes significa revisa el artefacto (el lienzo lo recarga en vivo) y mantén el bucle activo.

3. Responde siempre en el lienzo, luego sigue escuchando. Un comando hace ambas cosas:

ecc-plan-canvas await <archivo> --reply "Dividida la Fase 2 como se solicitó. Échale un vistazo."

Cada mensaje humano recibe una respuesta en el lienzo, incluso una línea como "En ello, reescribiendo la tabla de riesgos ahora". El silencio en el panel de chat es indistinguible de un lienzo roto, que es exactamente el fallo que este bucle existe para prevenir. Responde allí, no solo en la terminal.

Mientras trabajas, mantén el chat honesto con el indicador de actividad:

# burbuja animada "el agente está pensando..."; refréscala durante trabajos largos
ecc-plan-canvas typing <archivo> --state thinking
# cambia a "el agente está escribiendo..." justo antes de que llegue una respuesta
ecc-plan-canvas typing <archivo> --state typing

await establece thinking por ti en el momento en que te entrega un lote, y --reply lo limpia. Ambos estados se auto-expiran, por lo que un agente bloqueado decae a un honesto "en cola" en lugar de dejar al humano viendo puntos para siempre. Refresca thinking si una revisión lleva más de un minuto.

4. Finaliza cuando la revisión concluya: ecc-plan-canvas end <archivo>.

Diagramas (Mermaid)

Cuando parte del plan sea un flujo, arquitectura, secuencia, máquina de estados, modelo ER o gráfico de dependencias, escríbelo como un bloque de código ```mermaid en lugar de arte ASCII o un muro de prosa — el lienzo lo renderiza como un diagrama temático al que el humano puede señalar. Recurre a ello cuando una imagen se lea más rápido que un párrafo; evítalo para listas o tablas simples.

```mermaid
flowchart LR
  A[Mercado resuelve] --> B{¿Observadores?}
  B -->|sí| C[Encolar trabajos] --> D[Trabajador de distribución]
```

Los diagramas se renderizan en el tema oscuro de ECC con la paleta de acentos. Mermaid se carga en el navegador desde un CDN fijo; si no está disponible (fuera de línea), el bloque degrada mostrando su fuente, por lo que la revisión nunca se bloquea. Apunta un espejo local a ECC_PLAN_CANVAS_MERMAID_URL para uso en entornos aislados.

Reglas

  • Los artefactos Markdown se renderizan en la plantilla de plan de ECC (incluyendo bloques Mermaid); los artefactos .html se renderizan tal cual con la capa de anotación inyectada. Para obtener orientación sobre la creación de HTML, usa las habilidades frontend-design-direction y artifact-design.
  • Edita el archivo del artefacto para revisar — el lienzo se recarga en vivo al guardar. Nunca vuelvas a ejecutar open para actualizar.
  • {"status": "ended", "endedBy": "user"} (o sessionEnded: true en un lote de comentarios) significa que el usuario cerró la revisión: deja de preguntar, entrega las actualizaciones restantes en el chat y no vuelvas a abrir. Un open simple en esa sesión es rechazado; pasa --reopen solo cuando el usuario pida reanudar.
  • Los activos hermanos (imágenes, CSS) deben estar junto al artefacto y referenciarse mediante ruta relativa.
  • El servidor es solo de bucle invertido y se cierra después de 30 minutos de inactividad (ECC_PLAN_CANVAS_IDLE_MS); stop lo apaga explícitamente. El estado reside en ~/.claude/plan-canvas/ (ECC_PLAN_CANVAS_STATE_DIR).

Ejemplos

Flujo de aprobación de plan — /plan escribe .claude/plans/notifications.plan.md y debe ESPERAR confirmación:

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
# plan confirmado — comenzar implementación

Bucle de revisión — llegan comentarios, editas el archivo, respondes, sigues escuchando:

# await devolvió anotaciones → edita el .plan.md (el lienzo se recarga en vivo)
ecc-plan-canvas await <archivo> --reply "Tabla de riesgos rehecha."
# → se bloquea de nuevo hasta la siguiente respuesta

Anti-Patrones

  • Preguntar con --timeout-ms en un bucle. Existe para pruebas. Deja el await simple ejecutándose.
  • Terminar tu turno sin un await escuchando mientras la revisión aún está abierta. Ese es el único fallo que el humano experimenta como "envié un mensaje y no pasó nada".
  • Leer los comentarios pero responder solo en la terminal. El humano está mirando el lienzo.
  • Volver a abrir después de un cierre iniciado por el usuario "solo para mostrar" algo.
  • Pegar todo el plan en el chat y abrir un lienzo — elige el lienzo y mantén el resumen en la terminal en una línea.
  • Analizar el chat del lienzo desde los archivos de estado — todo lo que necesitas llega a través de await.

Notas de diseño y origen: 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/claude-api

Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.

affaan-m/everything-claude-code

End-to-end marketing campaign planning and execution. Covers audience research, positioning, campaign angle definition, landing page copy, email sequences, social posts, ad copy, short-form video scripts, and content calendars. Use as the orchestration layer for multi-channel product launches. Use when planning or executing a multi-channel product launch, or producing landing page, email, social, or ad copy.

affaan-m/everything-claude-code

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/everything-claude-code-conventions

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use when the user asks to build web components, pages, or applications and the visual direction matters as much as the code quality.

affaan-m/gget

gget CLI and Python workflow for quick genomic database queries, sequence lookup, BLAST-style searches, enrichment checks, and reproducible bioinformatics evidence logs.

affaan-m/literature-review

Systematic literature-review workflow for academic, biomedical, technical, and scientific topics, including search planning, source screening, synthesis, citation checks, and evidence logging.

affaan-m/motion-ui

Production-ready UI motion system for React/Next.js. Use when implementing animations, transitions, or motion patterns.

affaan-m/project-guidelines-example

Example project-specific skill template based on a real production application.

affaan-m/pubmed-database

Direct PubMed and NCBI E-utilities search workflows for biomedical literature, MeSH queries, PMID lookup, citation retrieval, and API-backed literature monitoring.

affaan-m/scholar-evaluation

Structured scholarly-work evaluation for papers, proposals, literature reviews, methods sections, evidence quality, citation support, and research-writing feedback.

affaan-m/uspto-database

USPTO patent and trademark data workflow for official record lookup, PatentSearch queries, TSDR checks, assignment data, and reproducible IP research logs.

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.

Skills relacionados