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), odersteps_filefü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 inincludeundpastein 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:
| Schritt | Tut |
|---|---|
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 DATEI | fügt DATEI als eine geklammerte Einfügung ein, geeignet für mehrzeilige Eingabeaufforderungen |
click TEXT | führt einen Linksklick auf den ersten sichtbaren TEXT aus |
sleep SEKUNDEN | |
snap NAME | erfasst 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 on | off` |
include DATEI | fü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, undDISABLE_AUTOUPDATER=1inenv, 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=1ist inenvgesetzt. Seit Claude Code 2.1.300 ist--model haikuHaiku 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.