Communitygithub.com

lokkju/term-recorder

Verwenden Sie dies, wenn Sie sehen müssen, was ein Terminalprogramm tatsächlich anzeigt, anstatt aus dem Quellcode zu raten, z. B. um zu überprüfen, wie eine TUI Text, einen Dialog oder ein Layout rendert, Tastatur- oder Mausinteraktionen zu testen oder ein Demo-GIF aufzuzeichnen. Es treibt das Programm über eine Schrittdatei auf einem privaten tmux-Server an und liefert Klartext-Bildschirmaufnahmen; funktioniert mit Claude Code selbst.

Was ist term-recorder?

Dieses Skill ermöglicht es Ihnen, ein beliebiges Terminalprogramm in einer isolierten Umgebung mit fester Bildschirmgröße auszuführen, es mit einer Reihe von Schritten zu steuern und die resultierenden Bildschirminhalte als Text zu erfassen. Der Hauptanwendungsfall ist die Beantwortung der Frage „Wie sieht das auf dem Bildschirm aus?“, die durch reines Lesen des Quellcodes nicht beantwortet werden kann – etwa wie ein Dialog mit langem Text umbricht, wie eine TUI bei 100 Spalten aussieht oder wohin ein Mausklick fällt. Das Skill erstellt einen eigenen temporären tmux-Server, der die echten tmux-Sitzungen des Benutzers nicht beeinträchtigt, und führt den Befehl mit einer minimierten Umgebung aus. Die Steuerung erfolgt über eine Schrittdatei oder direkte Schrittangaben, die Tastatureingaben, Warten auf bestimmte Textmuster, Klicks und Bildschirmaufnahmen ermöglichen. Es unterstützt die Aufzeichnung im Asciicast-Format und die Konvertierung in GIFs. Über einen optionalen MCP-Server kann es in Agenten wie Claude Code integriert werden, um dort TUI-Interaktionen zu testen oder visuelle Ergebnisse zu dokumentieren.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/lokkju/skills/tree/HEAD/plugins/term-recorder/skills/term-recorder

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht term-recorder?

term-recorder führt einen Befehl in einem Terminal mit fester Größe aus, steuert ihn mit Schritten und erfasst, was er anzeigt. Verwenden Sie es, wenn die Frage lautet „Wie sieht das auf dem Bildschirm aus?“, was das Lesen von Code nicht beantworten kann: wie ein Dialog langen Text umbricht, ob Markdown rendert, was eine TUI bei 100 Spalten tut, wo ein Klick landet.

Es führt den Befehl auf einem eigenen tmux-Server aus (tmux -L term-record-<pid>, einer generierten Konfiguration, ohne Statuszeile) mit einer minimalen Umgebung, sodass es die tmux-Sitzungen des Benutzers niemals berührt und der Befehl keine Variablen dieser Sitzung erbt. Der Server wird beendet, wenn der Lauf endet.

Ausführen

Rufen Sie das record-Tool auf (das des term-recorder MCP-Servers; in Claude Code mcp__plugin_term-recorder_term-recorder__record) mit:

  • command: das Programm und seine Argumente als Liste, z. B. ["claude", "--model", "haiku"].
  • steps: die Schritte inline, einer pro Zeile (siehe unten), oder steps_file für eine Schrittdatei; beides führt die Datei zuerst aus. ${EXAMPLES} in Schritten ist das gebündelte Beispiele-Verzeichnis.
  • cwd: wo der Befehl startet (Standard: das Projektverzeichnis). Pfade in include und paste in Inline-Schritten sind relativ dazu.
  • out: wohin die Bildschirmaufnahmen gehen (Standard: ein neues temporäres Verzeichnis); das Verzeichnis wird erstellt.

Jede snap NAME schreibt <out>/NAME.txt, und der Bildschirm wird am Ende immer als final aufgenommen. Das Ergebnis ist der Bildschirmtext jeder Aufnahme und dann der Pfad, wohin die Aufnahmen gingen; lesen Sie sie, sie sind die Antwort. show: "final" gibt nur den letzten Bildschirm zurück und show: "none" keinen (die Dateien werden trotzdem geschrieben); das snaps-Tool listet die Aufnahmen eines früheren Laufs auf oder liest eine nach Namen. Ein fehlgeschlagener Schritt (ein Timeout beim Warten, zu klickender Text nicht auf dem Bildschirm, der Befehl wurde beendet) macht das Ergebnis zu einem Fehler, der den Schritt benennt und den Bildschirm in diesem Moment zeigt.

check_steps analysiert Schritte, ohne etwas auszuführen, was eine billige Sicherheitsmaßnahme vor einem Lauf ist, der eine echte Claude Code-Unterhaltung kostet.

Die Standardeinstellungen: 100x30 (size), TERM screen-256color und nur HOME, PATH, USER, LOGNAME, SHELL, LANG, LC_ALL, LC_CTYPE und TMPDIR aus der Server-Umgebung. Fügen Sie Variablen mit env (ein Objekt) oder pass (Namen) und Schritt-Ersetzungen mit vars hinzu.

Ohne den MCP-Server

Führen Sie in einem Agenten ohne den Server die CLI über denselben Code aus. Schreiben Sie die Schritte in eine Datei in Ihrem Scratch-Verzeichnis und führen Sie sie dann als eigenen Befehl aus, nicht als Teil einer Befehlskette:

"${CLAUDE_SKILL_DIR}/scripts/term-record" -C <arbeitsverzeichnis> -s <schritte> -o <ausgabeverzeichnis> -- <befehl> [argumente...]

${CLAUDE_SKILL_DIR} ist das Verzeichnis, das diese SKILL.md enthält. Claude Code füllt es aus; in einem Agenten, der es unverändert lässt, setzen Sie den Pfad zu diesem Verzeichnis ein. Bildschirmaufnahmen werden sowohl auf der Standardausgabe ausgegeben als auch in <ausgabeverzeichnis> geschrieben. Exit-Status 1 bedeutet, dass ein Schritt fehlgeschlagen ist, mit dem Bildschirm auf stderr; 2 ist ein Nutzungs- oder Einrichtungsproblem. Die Flags entsprechen den Argumenten des Tools: --size, --env NAME=WERT, --pass NAME, --var NAME=WERT, --cast, --gif, --agg-arg und -s - liest Schritte von der Standardeingabe.

Schritte

Einer pro Zeile, Shell-Zitierung, # Kommentare:

SchrittTut
wait REGEX [TIMEOUT]wartet, bis der Bildschirm übereinstimmt (Python re, mehrzeilig; 90s)
gone REGEX [TIMEOUT]wartet, bis er nicht mehr übereinstimmt
idle REGEX [QUIET] [TIMEOUT]wartet, bis REGEX, ein Busy-Marker, für QUIET Sekunden abwesend war (3; 240s)
keys TASTE...sendet tmux-Tastennamen: Enter, Down, Escape, C-c
type TEXT [VERZÖGERUNG]tippt TEXT buchstäblich, ein Zeichen alle VERZÖGERUNG Sekunden (0.03; 0 sendet es sofort)
paste DATEIfügt DATEI als eine geklammerte Einfügung ein, geeignet für mehrzeilige Eingabeaufforderungen
click TEXTführt einen Linksklick auf den ersten sichtbaren TEXT aus
sleep SEKUNDEN
snap NAMEerfasst den Bildschirm als Text
resize SPALTENxZEILENändert die Terminalgröße während des Laufs; machen Sie danach einen Snap, um zu sehen, wo ein Layout bricht
`record onoff`
include DATEIführt die Schritte von DATEI an Ort und Stelle aus
when REGEX SCHRITT...führt SCHRITT nur aus, wenn der Bildschirm jetzt übereinstimmt

Pfade in include und paste sind relativ zur Schrittdatei (zu cwd für Inline-Schritte).

Claude Code als Ziel

include ${EXAMPLES}/claude-start.steps startet eine neue Sitzung nach dem Ordner-Vertrauensdialog bis zu einer leeren Eingabeaufforderung; setzen Sie es an den Anfang. ${EXAMPLES}/ask-dialog.steps ist ein vollständiges Beispiel, das den Fragen-Dialog öffnet und ihn per Snap erfasst.

  • Starten Sie es in einem Scratch-Verzeichnis (cwd), mit einem günstigen Modell (--model haiku), es sei denn, das Modell ist wichtig, und DISABLE_AUTOUPDATER=1 in env, damit kein Update-Hinweis im Frame erscheint.
  • Um ein Plugin aus einem Checkout zu testen, fügen Sie --plugin-dir <pfad> hinzu und übergeben Sie --settings <datei>, um die installierte Kopie zu deaktivieren ("enabledPlugins": {"<name>@<marketplace>": false}).
  • Die Aufgaben-Tools (TaskCreate und die anderen) sind bei Claude 5 Modellen deaktiviert, interaktiv oder mit -p, es sei denn, CLAUDE_CODE_ENABLE_TODO_TOOLS=1 ist in env gesetzt. Seit Claude Code 2.1.300 ist --model haiku Haiku 5.5, also schließt das Haiku ein. Selbst dann sind es zurückgestellte Tools: Sie erscheinen in der Liste der zurückgestellten Tools und werden über ToolSearch geladen, nicht in der anfänglichen Tool-Liste.
  • Ihre Eingabeaufforderung wird auf dem Bildschirm angezeigt, warten Sie daher nur auf Text, den das Ergebnis zeigt (eine nummerierte Option eines Dialogs wie '[0-9]\. Accept'), niemals auf ein Wort aus der Eingabeaufforderung selbst.
  • Sein Busy-Marker für idle: '\([0-9]+m? ?[0-9]*s · |esc to interrupt'.
  • Jeder Lauf ist eine echte Unterhaltung auf dem Konto des Benutzers. Halten Sie ihn auf die Anzahl der Runden, die der Test benötigt.

Aufnahmen

cast schreibt eine Asciicast v2 Datei, und gif rendert eine mit agg (agg_args ersetzt seine Argumente); das Ergebnis gibt beide Pfade aus. Frames werden erfasst, wenn sich der Bildschirm ändert; während einer idle-Wartezeit läuft die Uhr des Casts achtmal langsamer (busy_timescale), sodass eine Minute des Nachdenkens in wenigen Sekunden abgespielt wird.

Verwandte Skills