Ask-Panel
Ein „Ask“-Button (unten rechts) öffnet ein seitliches Panel auf der Seite: Eingabefeld, Haiku/Sonnet-Umschalter, gestreamte Antworten, Folgefragen in einem Thread, Stopp-Button und „Markieren und dann „Ask about this““ zum Zitieren einer Passage. Ein Widget, zwei Backends, die zur Laufzeit ausgewählt werden:
| Wo die Seite ist | Backend | Antworten |
|---|---|---|
| claude.ai-Artefakt | claude.use("sample"), auf dem eigenen Claude des Betrachters | aus dem Seitentext |
bereitgestellt durch ask-open | lens serve.py (claude -p, schreibgeschützt) | Seitentext plus Dateien in --repo |
einfaches file:// | keins: der Button erscheint nie | n. z. |
Schritte
- Als Artefakt veröffentlichen:
python3 ~/.claude/skills/ask-panel/scripts/inject.py report.html(in-place, oder mit-o out.html), dann die Datei mitcapabilities: {sample: {}}veröffentlichen. Lade zuerst dasartifact-capabilities-Skill, wie bei jeder Capability. - Lokal anzeigen:
~/.claude/skills/ask-panel/scripts/ask-open report.html [--repo VERZ]. Es injiziert, startet den Server und öffnet den Browser. Es läuft bis Ctrl-C, also starte es als Hintergrundbefehl. Es bedient nur diesen Bericht auf einem eigenen Port. Es gibt der geöffneten Seite den Lens-Schlüssel, also öffne nur vertrauenswürdige Berichte damit. - Sage dem Benutzer, dass die Seite einen Ask-Button hat. Das ist die gesamte Übergabe.
Regeln
- Fragen zur Seite gehören in das Panel der Seite. Beantworte sie nicht in der Sitzung und biete keine Artefakt-Kommentare für Fragen/Antworten an (Kommentare leiten zurück zur Sitzung). Wenn eine Frage echte Arbeit erfordert (Codeänderungen, neue Untersuchungen), handelt es sich um eine neue Aufgabe, keine Panel-Frage.
- Die Injektion ist idempotent und überspringt lens-Lektionen (diese haben ihr eigenes Ask).
- Der Artefakt-Modus ruft
samplenur bei einem Klick auf, nie beim Laden.not_grantedund die anderen permanenten Codes blenden das Panel aus. - Modelltext wird nur mit DOM-Knoten gerendert, niemals als HTML.
Dateien
assets/ask-panel.js, assets/ask-panel.css (das Widget, von inject.py inline eingefügt), scripts/inject.py, scripts/ask-open. Das lokale Backend ist ~/.claude/skills/lens/scripts/serve.py; es antwortet auf POST /__lens/ask mit mode: "report" für Seiten, die keine lens-Lektionen sind.
Tests: node ~/.claude/skills/ask-panel/scripts/test-panel.mjs (Playwright, Fake-Claude, kein Netzwerk), plus python3 ~/.claude/skills/lens/scripts/test-serve.py für den Server.