Panel de Preguntas
Un botón "Preguntar" (abajo a la derecha) abre un panel lateral en la página: cuadro de preguntas, selector Haiku/Sonnet, respuestas en streaming, preguntas de seguimiento en un mismo hilo, botón Detener y la opción de seleccionar texto y luego "Preguntar sobre esto" para citar un pasaje. Un widget, dos backends elegidos en tiempo de ejecución:
| Dónde está la página | Backend | Respuestas |
|---|---|---|
| Artefacto de claude.ai | claude.use("sample"), en el propio Claude del visor | a partir del texto de la página |
Servido por ask-open | lens serve.py (claude -p, solo lectura) | texto de la página, más archivos en --repo |
file:// simple | ninguno: el botón nunca aparece | n/a |
Pasos
- Publicar como artefacto:
python3 ~/.claude/skills/ask-panel/scripts/inject.py report.html(en el mismo lugar, o con-o out.html), luego publica ese archivo concapabilities: {sample: {}}. Carga primero el skillartifact-capabilities, como para cualquier capacidad. - Mostrar localmente:
~/.claude/skills/ask-panel/scripts/ask-open report.html [--repo DIR]. Inyecta, inicia el servidor y abre el navegador. Se ejecuta hasta Ctrl-C, así que inícialo como un comando en segundo plano. Sirve solo ese informe, en su propio puerto. Le da a la página abierta la clave del lens, por lo que solo debes abrir informes confiables con él. - Indícale al usuario que la página tiene un botón de Preguntar. Eso es toda la transferencia.
Reglas
- Las preguntas sobre la página pertenecen al panel de la página. No las respondas en la sesión y no uses comentarios del artefacto para preguntas y respuestas (los comentarios redirigen de vuelta a la sesión). Si una pregunta requiere trabajo real (cambios de código, nueva investigación), esa es una nueva tarea, no una pregunta del panel.
- La inyección es idempotente y omite las lecciones del lens (que ya tienen su propio Ask).
- El modo artefacto llama a
samplesolo al hacer clic, nunca al cargar. Los códigosnot_grantedy otros permanentes ocultan el panel. - El texto del modelo se renderiza solo con nodos DOM, nunca como HTML.
Archivos
assets/ask-panel.js, assets/ask-panel.css (el widget, incrustado por inject.py), scripts/inject.py, scripts/ask-open. El backend local es ~/.claude/skills/lens/scripts/serve.py; responde a POST /__lens/ask con mode: "report" para páginas que no son lecciones del lens.
Pruebas: node ~/.claude/skills/ask-panel/scripts/test-panel.mjs (Playwright, claude simulado, sin red), más python3 ~/.claude/skills/lens/scripts/test-serve.py para el servidor.