O que Painel de Perguntas (Ask Panel) faz?
Um botão "Ask" (canto inferior direito) abre um painel lateral na página: caixa de perguntas, alternador Haiku/Sonnet, respostas em stream, perguntas de acompanhamento em uma única thread, botão Parar e selecione-texto-depois-"Ask about this" para citar uma passagem. Um widget, dois backends escolhidos em tempo de execução:
| Onde a página está | Backend | Respostas |
|---|---|---|
| artefato claude.ai | claude.use("sample"), no próprio Claude do visualizador | a partir do texto da página |
servida por ask-open | lens serve.py (claude -p, somente leitura) | texto da página, mais arquivos em --repo |
file:// simples | nenhum: o botão nunca aparece | n/d |
Passos
- Publicar como um Artefato:
python3 ~/.claude/skills/ask-panel/scripts/inject.py report.html(no lugar, ou-o out.html), depois publique esse arquivo comcapabilities: {sample: {}}. Carregue o skillartifact-capabilitiesprimeiro, como para qualquer capacidade. - Mostrar localmente:
~/.claude/skills/ask-panel/scripts/ask-open report.html [--repo DIR]. Ele injeta, inicia o servidor e abre o navegador. Ele roda até Ctrl-C, então inicie-o como um comando em segundo plano. Ele serve apenas aquele relatório, em sua própria porta. Ele dá à página aberta a chave do lens, portanto abra apenas relatórios confiáveis com ele. - Informe ao usuário que a página tem um botão Ask. Essa é toda a entrega.
Regras
- Perguntas sobre a página pertencem ao painel da página. Não as responda na sessão e não ofereça comentários de artefato para Q&A (comentários voltam para a sessão). Se uma pergunta exige trabalho real (mudanças de código, nova investigação), isso é uma nova tarefa, não uma pergunta do painel.
- A injeção é idempotente e pula lições do lens (elas têm seu próprio Ask).
- O modo artefato chama
sampleapenas em um clique, nunca ao carregar.not_grantede os outros códigos permanentes ocultam o painel. - O texto do modelo é renderizado apenas com nós DOM, nunca como HTML.
Arquivos
assets/ask-panel.js, assets/ask-panel.css (o widget, embutido por inject.py), scripts/inject.py, scripts/ask-open. O backend local é ~/.claude/skills/lens/scripts/serve.py; ele responde a POST /__lens/ask com mode: "report" para páginas que não são lições do lens.
Testes: node ~/.claude/skills/ask-panel/scripts/test-panel.mjs (Playwright, Claude falso, sem rede), além de python3 ~/.claude/skills/lens/scripts/test-serve.py para o servidor.