Direkt zum Inhalt
ColliePWA

14/Documentation

Konfiguration

Das .env, Ihre eigenen Slash-Befehle, Tasten, Schnellantworten, Starter und Schriftarten; Erscheinungsbild, Zen-Modus, Sprache

Standardmäßig antwortet Collie nur einem Gerät, das Sie mit collie pair gekoppelt haben. Ein gekoppeltes Gerät hat volle Kontrolle; wer die URL in Ihrem Tailnet erreichen kann, benötigt daher trotzdem zuerst ein gekoppeltes Telefon. Ohne COLLIE_TRUSTED_USER gibt die Bridge eine TRUSTED_USER-Warnung aus, da jede Tailnet-Anmeldung den Kopplungsbildschirm erreichen kann. Zugriff weiter einschränken:

# in your .env
COLLIE_TRUSTED_USER=you@example.com           # your tailnet login — Collie rejects anyone else
COLLIE_PUBLIC_HOSTS=myhost.tail1234.ts.net    # only behind your OWN proxy; on a tailnet `collie
                                              # start` discovers this for you

Die Konfigurationsdatei

Jede Collie-Einstellung kann in einer TOML-Datei definiert werden. Schreiben Sie eine Datei mit allen Einstellungen und deren Standardwerten:

collie config init

Dies schreibt ~/.collie/config.toml, die eigene Deklaration der Maschine, und gibt den Pfad aus. Jeder Schlüssel darin ist auskommentiert, daher ändert die geschriebene Datei zunächst nichts: Kommentieren Sie einen Schlüssel ein und starten Sie neu. Führen Sie stattdessen collie config init --instance aus, um config.toml neben Ihrer .env zu schreiben, was die Maschinendatei für diese einzelne Instanz überschreibt.

DateiEbeneErmittlung
~/.collie/config.tomlMaschineIhr Home-Verzeichnis oder der Pfad in COLLIE_CONFIG
<config-dir>/config.tomlInstanzneben dem .env, den das CLI bereits auflöst

Die Instanzdatei gewinnt Schlüssel für Schlüssel, niemals Datei für Datei: Ein darin fehlender Schlüssel behält den Wert der Maschinendatei. Es gibt kein config.<instance>.toml, da bei einer von Herdr verwalteten Installation das Konfigurationsverzeichnis bereits pro Instanz existiert und es bei einer Binärinstallation ~/.config/collie ist. Ein zweiter Collie auf einem Host legt seine eigenen Einstellungen daher in seinem eigenen Konfigurationsverzeichnis ab, siehe docs/deployment.md → Mehrere Collies auf einem Host. Ein .collie/ innerhalb eines Projektverzeichnisses wird überhaupt nicht gelesen.

Drei Verben steuern die Datei:

  1. collie config init schreibt eine kommentierte Datei mit jeder Einstellung und deren Standardwert.
  2. collie config check validiert die beiden Dateien, die gelesen werden würden, oder eine von Ihnen benannte Datei.
  3. collie config show gibt beide Pfade und jede Einstellung mit ihrem Wert sowie ihrer Herkunft aus.

Die Rangfolge lautet Standardwert, dann ~/.collie/config.toml, dann <config-dir>/config.toml, dann die Prozessumgebung, die Ihre .env enthält. collie config show nennt den Gewinner für jeden Schlüssel auf einmal, sodass die Frage "warum ist mein Abfrageintervall immer noch 1500" in einer Zeile beantwortet wird.

Ein fehlerhafter Schlüssel stoppt die Bridge nie. Ein unbekannter Schlüssel oder ein falscher Typ ist ein Problem, das collie config check ausgibt und collie doctor meldet; nur für diesen Schlüssel greift der Rückfallwert aus der Umgebung. Jeder andere Schlüssel in der Datei gilt weiterhin.

Collie liest config.toml nur beim Start. Führen Sie collie restart nach Änderungen daran aus.

Hinweis. Eine Datei, die [push] vapid_private oder [stt] stt_key enthält, wird auf den Modus 600 beschränkt, genau wie Ihre .env. Wenn Collie die Berechtigungen nicht verschärfen kann, werden nur diese Schlüssel verworfen und collie doctor meldet dies.

Die Umgebung gewinnt weiterhin

Collie lädt die Konfiguration aus einer Datei .env in ~/.config/collie. Wenn Herdr die Installation verwaltet, fragt das CLI Herdr nach dem Plugin-Konfigurationsverzeichnis (typischerweise ~/.config/herdr/plugins/config/herdr.collie). Beide Pfade lösen über alle CLI-Befehle hinweg einheitlich auf, sodass der Dienst die hier angelegte Datei liest:

mkdir -p ~/.config/collie && cp .env.example ~/.config/collie/.env

# on a Herdr-managed install, seed Herdr's plugin config dir instead:
cp .env.example "$(herdr plugin config-dir herdr.collie)/.env"

Die folgenden Pfade verwenden ~/.config/collie/…. Ersetzen Sie dieses Präfix bei einer von Herdr verwalteten Installation durch $(herdr plugin config-dir herdr.collie).

Collie liest .env nur beim Start. Führen Sie collie restart nach Änderungen daran aus.

Die Datei .env.example listet alle Optionen auf, ebenso wie collie config init --print.

Sie enthält COLLIE_PORT, COLLIE_SERVE_MODE=http (für Headscale- oder .internal-Domains) und COLLIE_SERVE_PORT (um HTTPS auf einem anderen Port als :443 bereitzustellen; siehe docs/deployment.md → Mehrere Collies auf einem Host). Die CLI liest die Serve-Parameter, um tailscale serve zu konfigurieren, anstatt sie an die Bridge zu übergeben.

Was jeder Abschnitt enthält

Die Konfigurationsdatei gruppiert jede Einstellung unter einem [section]. Der Umgebungsname eines Schlüssels ist COLLIE_ plus der Schlüssel in Großbuchstaben, [bridge] poll_ms ist also COLLIE_POLL_MS.

Abschnittwas er enthält
bridgeAbfrageintervall, wie viele Zeilen gelesen werden, wo der Zustand liegt
networkder Port, die Bind-Adresse, zulässige Hosts und Origins
muxwelchen Multiplexer dieser Collie spiegelt und wo er liegt
accessdie Tailscale-Identitätsprüfung, der Geräte-Header, das Überwachungsprotokoll, die Geheimnismaskierung
pushdie drei Web-Push-Werte (VAPID)
uploadsdie Obergrenze für die Anhangsgröße und die zusätzlich akzeptierten Texttypen
journalwo jedes Harness sein eigenes Sitzungsprotokoll führt
crewdie Budgets, die ein Lead einem Mitglied zuweist, und der eigene Browser eines Peers
standbydie zweite Tür des deputy: Port, Bind-Adresse, Scharfschaltung
updatewoher Releases stammen, wie viele Versionen verbleiben, ein GitHub-Token für die Release-Prüfung
serveob Collie die Eingangstür veröffentlicht, worüber und unter welchem Pfad (base_path)

Die durable agents, die ein Collie neben seinem Multiplexer ausführt, liegen nicht in config.toml. Jeder ist ein Eintrag in sources.json, im selben Verzeichnis wie .env (Persistente Agenten). | stt | Spracherkennung, fehlt, bis collie stt setup ausgeführt wird |

Um den Verlauf aus mehreren Agent-Heimatverzeichnissen zu lesen, geben Sie eine kommagetrennte Liste in COLLIE_TRANSCRIPT_ROOT an.

docs/deployment.md deckt eigene Domains und Reverse-Proxys ab. Collie erzwingt eine Same-Origin-Policy, daher muss jeder eigene Hostname oder externe TLS-Terminator explizit auf die Zulassungsliste gesetzt werden:

COLLIE_ALLOWED_ORIGINS=https://collie.example.com

Ohne diese Einstellung lädt die Benutzeroberfläche als leere Seite. Details finden Sie unter Fehlerbehebung.

Eigene Slash-Befehle

Legen Sie maschinenspezifische Befehle wie ein Herdr-Plugin /fork-in-herdr oder ein benutzerdefiniertes /deploy in commands.toml ab. Dies ist eine von sechs Konfigurationsdateien, die denselben Reader und dasselbe Lademuster nutzen:

DateiGeltungsbereichBestätigungs-/Gefahr-FlagLive-Reload
commands.tomloptional, pro Zeileconfirm = trueja, kein Neustart erforderlich
keys.tomloptional, pro Zeiledanger = trueja, kein Neustart erforderlich
quick-replies.tomloptional, pro Zeilekeinerja, kein Neustart erforderlich
theme.tomlkeine, die Gesichter sind eine Geräteeinstellungkeinerja, beim nächsten Neuladen der Seite
launchers.tomlkeine, stattdessen über den genauen Befehl abgeglichen; [phone] steuert die vom Telefon hinzugefügten Zeilenkeinerja, aber ein bereits geöffneter Tab liest die Zeilen erst beim nächsten Laden neu ein
cache-rules.tomlkeine, stattdessen über die genaue Regel-ID zugeordnetkeinerja, kein Neustart erforderlich

Diese Dateien werden durch die Konfigurationsdatei nicht verändert. Sie teilen sich das Verzeichnis der Instanz config.toml, sie behalten ihre eigenen Formate sowie ihren eigenen Live-Reload bei, und nichts führt sie darin zusammen.

Jede Zeile mit gesetztem Flag erfordert eine Bestätigung durch zweifaches Antippen, bevor sie ausgeführt wird. Änderungen an diesen Dateien werden ohne Neustart des Dienstes wirksam. Wenn Collie eine Zeile ablehnt, gibt journalctl --user -u collie -n 20 die Zeilennummer und den Fehler aus.

cp commands.toml.example ~/.config/collie/commands.toml
[[commands]]
scope = "omp"                # optional; omit for every pane
command = "/fork-in-herdr"
description = "Fork this conversation into a new herdr tab"

[[commands]]
scope = "claude"
command = "/statusline"
description = "Set the status line"
bar = true
bar_label = "Status"

Ein Bereich, der Ihren konfigurierten Zeilen entspricht, zeigt nur diese Zeilen an. Die spezifischste Zeile hat Vorrang, wie in ADR 0018 dokumentiert.

Öffnen Sie zum Überprüfen einen Bereich und tippen Sie auf /; Ihre Zeilen erscheinen auf dem ersten Bildschirm.

Befehle in der Aktionsleiste platzieren

bar = true platziert die Zeile zusätzlich in der Aktionsleiste, der einzelnen Tastenleiste über der Tastatur. Eine Leistenzeile bleibt weiterhin eine normale Palettenzeile, sie erscheint also auf beiden Flächen. bar_label ist die Beschriftung der Taste und entspricht standardmäßig dem Befehlsnamen ohne Schrägstrich.

Die Aktionsleiste ist ein Band, das randlos über der Tastatur liegt. Collies eigene Bedienelemente befinden sich direkt auf diesem Band: Keys, Type, Quick, Agent und das Anzeige-Zahnrad. Die eigenen Befehle des laufenden Harness liegen daneben in einem Bereich, der in der Markenfarbe des Harness eingefärbt ist, damit Sie sofort sehen, welche Tasten Eingaben an den Agenten senden. Durch horizontales Ziehen lässt sich das Band scrollen; es wird nichts verworfen.

Jedes Harness liefert eigene Tasten in dieser Reihenfolge aus:

HarnessTasten
Claude CodeModel, Effort, Compact, Resume
CodexModel, Compact, Resume
piModel, Compact, Tree, Resume
ompModel, Compact, Tree, Resume
opencodeModel, Compact, Resume
Grok BuildModel, Compact, Resume
Muse CodeModel, Effort, Compact, Resume
Antigravity (agy)Model, Compact, Resume

Codex, Grok und Antigravity haben keine Schaltfläche für den Denkaufwand, da ihre /model-Auswahl auch den Denkaufwand festlegt. Ein einzelnes /effort in Grok öffnet überhaupt keine Auswahl.

pi und opencode haben keinen Befehl für den Denkaufwand. pi behält diese Einstellung innerhalb von /settings, einem modalen Dialog, den das Tastenfeld nicht sinnvoll bedienen kann, und opencode schaltet seine Varianten über eine Taste durch.

opencode belegt zwei Schaltflächen auf eigene Weise: Modell sendet /models und Fortsetzen sendet /sessions. Komprimieren funktioniert, sobald die Sitzung einen Durchlauf enthält, da opencode /compact erst dann anbietet.

Die Tree-Taste von omp befindet sich zwischen Compact und Resume. Sie öffnet den sitzungseigenen Baum von omp im Spiegel, eine Auswahlmaske, die zu jedem früheren Zeitpunkt der Sitzung springt. Derselbe Befehl, /tree, ist auch in der Befehlspalette von omp enthalten.

Jede Harness-Taste sendet ihren Befehl unverändert. Model sendet /model, und die eigene Modellauswahl des Agenten übernimmt die Steuerung im Bereich. Collie führt keine Liste von Modellnamen, da diese Liste dem Harness gehört und sich unangekündigt ändert. Bei Effort verhält es sich genauso.

Ihre Leistenzeilen ersetzen das mitgelieferte Harness-Segment für die Bereiche, die sie ansprechen, und lassen es überall sonst unverändert. Die Agent-Palette ist eine separate Fläche und wird durch eine einzelne Leistenzeile niemals geleert (ADR 0043).

Ein bar_label mit mehr als 12 Zeichen wird gekürzt, und die Taste wird weiterhin angezeigt. Ein bar, das weder true noch false ist, verwirft diese einzelne Zeile, genau wie ein fehlerhafter confirm.

Die Zeile sendet, während der Agent beschäftigt ist, genau wie die Befehlspalette. Das Häkchen erscheint erst, wenn der Bereich den Text übernommen hat.

Eine Switch-Taste befindet sich am rechten Ende des Bandes und öffnet die Bereichsauswahl. Sie zeigt ausschließlich das Ebenen-Symbol hinter einer Haarlinie und trägt keine Beschriftung. Ein Wischen nach oben an beliebiger Stelle auf dem Band öffnet dieselbe Auswahl. Ein horizontales Ziehen scrollt stattdessen das Band.

Die Agenten-Markierung links neben der Schaltfläche „Dateien“ zählt die laufenden Subagenten des Bereichs. Für omp und Gentle Shell zählt sie deren Hintergrundjobs nur, während der Chat des Bereichs auf einem Telefon geöffnet ist; die Bildschirmansicht zählt sie nicht mit.

Solange das Textfeld Text oder einen Anhang enthält, befindet sich auch am rechten Ende der Leiste ein X, links neben der Schaltfläche „Switch“. Ein Fingertipp leert das Feld sowie den gespeicherten Entwurf und sendet nichts an den Bereich. Das X wird dann zu „Rückgängig“, wodurch Text und Anhänge wiederhergestellt werden. „Rückgängig“ bleibt bis zu Ihrer nächsten Aktion sichtbar: einem Tastenanschlag, einem Anhang, einem Senden, einem Tippen auf eine andere Leistenschaltfläche oder dem Verlassen des Bereichs. Beim Scrollen der Leiste bleibt es erhalten.

Linkshänder? Setzen Sie Einstellungen → Darstellung → Hand auf Links. Die Leiste kehrt sich um: Die Switch-Schaltfläche und das X wandern an das linke Ende, weiterhin über Send, und Keys wird die Schaltfläche ganz rechts, während der Rest nach links wegläuft. Send und Attach wandern links neben das Antwortfeld. Die Einstellung gilt pro Gerät und greift beim nächsten Öffnen eines Bereichs.

Öffnen Sie zur Überprüfung einen Bereich, in dem Claude Code, Codex, pi oder omp ausgeführt wird; das eingefärbte Segment befindet sich rechts in der Leiste über der Tastatur. Deaktivieren Sie dieses Segment pro Gerät unter Einstellungen → Erscheinungsbild → Harness-Tastaturkürzel; Collies eigene Bedienelemente bleiben erhalten.

Einen Durchlauf anhalten

Eine Schaltfläche Stoppen befindet sich am Anfang der Leiste vor den anderen Schaltflächen von Collie, sodass sie ohne Scrollen sichtbar ist. Sie steht dort für jeden Agenten, dessen Harness-Profil eine Stopptaste festlegt, und ist abgeblendet, solange nichts ausgeführt wird. Sie behält ihren Platz und ihre Größe, sodass sich die anderen Schaltflächen beim Starten oder Beenden eines Durchlaufs nie verschieben. Ein Tippen auf die abgeblendete Schaltfläche bewirkt nichts und sendet nichts. Ein Agent ohne Stopptaste hat keine Schaltfläche. Anhalten tippt nichts ein und sendet keine Nachricht. Es drückt einmal die eigene Stopptaste des Agenten und meldet das Ergebnis.

Ein Stopp erfordert zwei Berührungen. Das erste Antippen schärft die Schaltfläche: Die Beschriftung wechselt zu Anhalten? und die Schaltfläche behält ihre Größe. Tippen Sie innerhalb von vier Sekunden erneut darauf, um den Durchlauf anzuhalten. Ein zweites Antippen innerhalb von 0,4 Sekunden zählt als dieselbe Berührung und wird ignoriert. Wenn Sie warten, verfällt die Schärfung und keine Taste wird gedrückt. Die Schärfung verfällt auch, wenn Sie einen anderen Bereich öffnen, und die Schaltfläche blendet ab, sobald der Durchlauf endet. Während das zweite Antippen verarbeitet wird, nimmt die Schaltfläche keine weiteren Eingaben an; ein schnelles drittes Antippen kann somit keinen zweiten Stopp auslösen.

Welche Taste einen Durchlauf anhält, bestimmt das Harness selbst; das Harness-Profil speichert diese Angabe. Die meisten Agenten stoppen auf Escape, manche auf Strg+C und einige benötigen Escape zweimal. Das Profil entscheidet dies, nicht diese Seite.

Nach dem Tastendruck liest Collie den Bildschirm bis zu drei Sekunden lang erneut aus und meldet unter dem Feld eines von drei Ergebnissen:

BelegBedeutung
Angehalten.Die Taste wurde gesendet, und zwei aufeinanderfolgende Lesevorgänge zeigen das Ende des Durchlaufs. Das Eingabefeld ist frei.
Stopp gesendet. Der Agent wirkt weiterhin beschäftigt.Die Taste wurde gesendet, aber Collie konnte das Ende des Durchlaufs nicht bei zwei aufeinanderfolgenden Lesevorgängen feststellen. Warten Sie einen Moment und tippen Sie bei Bedarf erneut auf Anhalten.
Eine VerweigerungEs wurde keine Taste gedrückt. Der Satz nennt den Grund.

Falls die Stopptaste stattdessen einen Dialog geöffnet hat, meldet Collie dies und verweist auf dessen Karte.

Einige Agenten, darunter OMP, legen eine eingereihte Nachricht wieder in ihr Eingabefeld zurück, wenn Sie den Zug stoppen. Sieht Collie sie direkt nach dem Tastendruck dort, vermerkt die Quittung dies, zum Beispiel „Gestoppt. 1 eingereihte Nachricht liegt als Entwurf wieder im Agenten.“ Im Chat wandert die Nachricht auf eine Zurück im Feld-Karte. Nachrichten, die zusammen zurückkehrten, teilen sich eine Karte.

Die Karte hat zwei Schaltflächen, und beide lesen das Feld zuerst erneut aus. Senden sendet den Entwurf nur, wenn der Zug untätig ist und das Feld exakt diesen Text enthält. Verwerfen leert das Feld nur, wenn es diesen Text noch enthält; haben Sie ihn geändert, entfernt „Verwerfen“ die Karte und drückt nichts. Solange der Entwurf steht, wird eine neue Nachricht verweigert, und die Verweigerung verweist Sie auf die Karte.

Collie verweigert die Aktion vor dem Tastendruck, wenn das Drücken Schaden anrichten könnte:

  • Ein Dialog ist geöffnet. Escape würde diesen Dialog beantworten. Beantworten Sie ihn stattdessen auf seiner Karte.
  • Das Feld enthält Ihren Text, und die Stopptaste dieses Harness würde ihn löschen. Leeren Sie das Feld oder verwenden Sie die Leeren-Schaltfläche auf dem Tastenfeld; tippen Sie danach erneut auf Anhalten.
  • Collie kann diesen Bereich nicht lesen. Collie drückt keine Taste in einen Bildschirm, den es nicht lesen kann. Dies gilt auch für Bildschirme, bei denen Collie nicht feststellen kann, ob ein Durchlauf aktiv ist.
  • Der Durchlauf war bereits beendet. Es gab nichts anzuhalten; es wurde keine Taste gedrückt.
  • Dieser Rechner unterstützt das Anhalten über das Telefon noch nicht. In einer Crew läuft auf dem Rechner dieses Bereichs eine ältere Version von Collie. Aktualisieren Sie ihn und halten Sie den Durchlauf dann an.

Wenn von einem Crew-Rechner nicht rechtzeitig eine Antwort eingeht, meldet Collie dies. Der Stopp wurde möglicherweise ausgeführt; prüfen Sie daher den Bereich, bevor Sie erneut auf Anhalten tippen.

Ein Stopp geht immer auf Ihr Antippen zurück. Eine Walkie-Talkie-Nachricht, ein Hook, die Befehlszeile und eine eingereihte Aktion lösen ihn niemals aus. In einer Crew drückt der Rechner, der den Bereich ausführt, die Taste, liest den Bildschirm aus und sendet die Bestätigung über die Leitung zurück.

Ein Programm, das als dauerhafter Agent läuft, behält das Stop, das es bereits hatte. Es stoppt den genannten Turn mit seiner eigenen Quittung und verwendet das Arm nicht.

Feld leeren

Die Schaltfläche Leeren am Ende der Chip-Reihe auf dem Keys-Board leert das Eingabefeld des Harnesses mit einem Fingertipp, ohne Arm. Collie drückt die harness-eigene Löschtaste so oft wie nötig, liest das Feld erneut aus und informiert Sie in einem Hinweis über dem Belt, ob das Feld leer ist oder warum nicht. Die Schaltfläche ist ausgegraut, wenn das Feld leer ist, ein Dialog geöffnet ist oder die Verbindung unterbrochen ist. Wenn sich das Feld nicht leeren lässt, belässt Collie den verbleibenden Rest und drückt nicht erneut.

Nach dem Leeren bietet der Hinweis zwei Minuten lang Wiederherstellen an. Ein Fingertipp gibt den Text wieder in das Feld ein, als einzelne Zeile und ohne Enter, sodass nichts gesendet wird. Wiederherstellen verschwindet, sobald Sie erneut im Feld tippen oder einen anderen Bereich öffnen. Die Bridge behält den gelöschten Text zusammen mit der Quittung des Leerens im Speicher und schreibt ihn niemals in ein Protokoll oder auf die Festplatte.

Eigene Tasten-Voreinstellungen

Sie können die Zeile Presets der Tastenleiste in keys.toml ersetzen, die sich neben commands.toml befindet:

cp keys.toml.example ~/.config/collie/keys.toml
[[keys]]
scope = "claude"             # optional; omit for every pane
label = "Yes"
keys = ["Down", "Enter"]     # several chords go out as one batch

Entspricht ein Pane Ihren definierten Zeilen, zeigt es ausschließlich Ihre Voreinstellungen anstelle der standardmäßigen Schaltflächen für Strg+C/D/U/R/L/Z an (ADR 0018). Diese Zeilen stammen von Ihnen als Operator und gelten für jedes Telefon. Das darüber liegende Tastenfeld (Esc, die Pfeiltasten, Eingabe/Tab/Leertaste, die Sondertasten) wird hier nicht festgelegt: Jedes Telefon ordnet dieses individuell an, siehe nächster Abschnitt.

Tastenkombinationen verwenden die Syntax von herdr, nicht die von tmux:

TasteTastenkombinationunterstützt?
Strg+Cctrl+c (nicht C-c)ja
Umschalt+Tabshift+tabja
Strg+F7ctrl+F7ja
Bild auf—nein
Pos 1—nein
Ende—nein
Entf—nein

Öffnen Sie zur Überprüfung ein Pane und tippen Sie auf Tasten → Presets, um die neuen Schaltflächen anzuzeigen. Wenn Collie eine Zeile ablehnt, prüfen Sie journalctl --user -u collie -n 20 auf Fehlerdetails.

Eigenes Tastenfeld

Sie können das Keys-Tastenfeld neu anordnen. Öffnen Sie Tasten und tippen Sie auf den Stift neben der Beschriftung:

  1. Tippen Sie auf den Stift neben Tasten. Ein hohes Blatt öffnet sich über dem Bereich.
  2. Ziehen Sie eine Taste an eine andere Stelle oder tippen Sie darauf und nutzen Sie die vier Pfeilschaltflächen.
  3. Tippen Sie auf ein gestricheltes +, um eine Taste in einer freien Zelle hinzuzufügen, oder wählen Sie eine Taste aus und tippen Sie auf Ändern oder Entfernen.

Das Tastenfeld ist ein Raster aus 7 Spalten. Eine Taste belegt eine Zelle und kann breiter (1, 2 oder 3 Spalten) sowie höher (1 oder 2 Zeilen) sein. Wählen Sie eine Taste aus und tippen Sie auf Breite oder Höhe, um die Größe anzupassen. Sie vergrößert sich nach rechts und nach unten. Eine Größe, die eine andere Taste überdecken oder das Tastenfeld verlassen würde, wird abgeblendet dargestellt; ein Antippen zeigt, welche Taste im Weg ist. Collie verschiebt niemals eine zweite Taste für Sie. Zeile hinzufügen fügt unten eine Zeile hinzu, bis zu maximal acht. Änderungen werden sofort im Dock sichtbar. Collie speichert Ihr Tastenfeld in diesem Browser. Ein anderer Browser startet daher mit dem Standard-Tastenfeld, bis Sie ein Layout dorthin übertragen. Der Standard ist das bisherige Tastenfeld, mit einer drei Zellen breiten Leertaste und der Eingabetaste am linken Ende der zweiten Zeile:

Esc    Tab    Shift  Ctrl   Alt    Up     ^C
Enter  Space (3 wide)        Left   Down   Right

Das Ziehen einer Taste verschiebt deren gesamten Bereich. Legen Sie sie auf einer gleich großen Taste ab, tauschen die beiden die Plätze. Legen Sie sie auf einem anderen Hindernis ab, wird der Zielrahmen grau und gestrichelt, eine Zeile zeigt die blockierende Taste an und die Taste kehrt zurück. Eine Pfeilschaltfläche überspringt blockierende Tasten und stoppt an der nächsten passenden Stelle; gibt es keine, bleibt sie inaktiv.

Eine Taste sendet eine Tastenkombination aus bis zu drei Modifikatoren plus einer Taste, zum Beispiel Strg+Alt+Umschalt+T. Sie kann auch eine kurze Sequenz von bis zu vier Schritten senden, zum Beispiel Strg+B und danach C. Eine Sequenz wird der Reihe nach als ein Aufruf gesendet. Wählen Sie im Tasteneditor dafür Zeichen, Benannt oder F-Tasten. Wählen Sie Modifikator, um eine einrastende Strg-, Alt- oder Umschalttaste wie auf dem Standard-Tastenfeld zu erstellen: Einmaliges Tippen aktiviert die nächste Taste, erneutes Tippen hält sie fest, ein drittes Tippen gibt sie frei. Eine Modifikatortaste steht allein, hat also keine Schritte und keinen Namen. Jede Taste verhält sich wie die integrierten Tasten: Sie wartet, solange der Bereich gesperrt oder offline ist; eine Taste, die ein Programm beenden kann (Strg+D, Strg+Z oder eine Sequenz mit Strg+C), verlangt ein zweites Antippen; und eine Taste, die Ihr Multiplexer nicht senden kann, ist ausgegraut.

StrgFunktion
PresetsStandard, Claude Code, Präfix (Strg+B), Vim, Navigation. Jedes Profil zeigt eine Vorschau und fragt nach, bevor es Ihr Tastenfeld ersetzt.
Teilen: Layout kopierenKopiert einen kurzen Code in die Zwischenablage. Markieren Sie den Code unter einfachem http und kopieren Sie ihn manuell.
Teilen: Layout importierenFügen Sie einen geteilten Layout-Code ein. Collie prüft ihn, zeigt eine Vorschau und fragt vor der Anwendung nach.
Standard wiederherstellenStellt nach einer Vorschau das ursprüngliche Tastenfeld wieder her.

Codes früherer Versionen lassen sich weiterhin importieren, wobei jede Taste eine Zelle belegt. Fehlen Esc, Eingabe oder ein Pfeil auf Ihrem Tastenfeld, weist eine unaufdringliche Zeile mit Zurücklegen darauf hin. Die Voreinstellung Präfix (Strg+B) sendet das Präfix Ctrl+B und eignet sich daher für ein tmux innerhalb des Bereichs. Die Voreinstellung Navigation enthält Pos1, Ende, BildAuf und BildAb, die Herdr nicht senden kann; auf einem Herdr-Bereich sind sie daher ausgegraut (ADR 0092).

Eigene Schnellantworten

Sie können die Formulierungen des Schnell-Docks in quick-replies.toml anpassen:

cp quick-replies.toml.example ~/.config/collie/quick-replies.toml
[[replies]]
scope = "claude"             # optional; omit for every pane
title = "confirm"
items = ["yes", "no"]        # sent verbatim, one per button

Wenn ein Bereich Ihren Regeln entspricht, ersetzen Ihre Gruppen die Standardgruppen (ADR 0018). Die Standardsätze sind auf Englisch (yes, commit and push, drastically simplify).

Verwenden Sie diese Datei für andere Sprachen oder um Wörter wie approve an bestimmte Harnesses zu senden. Das Setzen von scope = "shell" zielt auf Standard-Shell-Panes ab, die sonst nur y/n empfangen.

Öffnen Sie zur Überprüfung ein Pane und tippen Sie auf Schnell, um Ihre Gruppen zu sehen. Wenn eine Zeile nicht geladen werden kann, gibt journalctl --user -u collie -n 20 den Fehler aus.

Eigene Starter

Ein Tippen führt einen definierten Befehl in launchers.toml neben keys.toml aus:

cp launchers.toml.example ~/.config/collie/launchers.toml
[[launchers]]
command = "htop"             # required; the shell line, typed verbatim into the fresh shell
label = "Top"                # optional; defaults to the first word of command
# cwd = "~/dev/collie"       # optional; absent means "here" — see below

Wo die Zeile geöffnet wird, hängt davon ab, wo Sie sie starten, nicht von der Zeile selbst. Aus dem Neue Seite (Shell, dann die Zeile in der Befehlsauswahl) erstellt Start einen neuen Space, der nach seinem Ordner benannt ist, und die Beschriftung der Zeile benennt den Tab. Aus einem Pane (der Umschaltansicht, die Sie durch Wischen nach oben erreichen) öffnet ein Antippen ein neues Tab im eigenen Space dieses Bereichs daneben, das nach der Zeile benannt ist.

In beiden Fällen tippt die Bridge den command in die neue Shell ein und sendet Enter. Der Befehl bestimmt seine eigene Lebensdauer: Ein Befehl, der sich selbst beendet, schließt den Space oder Tab mit, und htop bleibt geöffnet, bis Sie es beenden.

cwd legt fest, wo dieser neue Space oder Tab geöffnet wird. Weisen Sie einer Zeile einen festen Ordner zu (wie oben htop), hat dieser Vorrang, egal wo Sie auf die Zeile tippen.

Lassen Sie ihn weg, bedeutet dies „hier“: Das Dashboard öffnet ihn in Ihrem Home-Verzeichnis, ein Pane im cwd von diesem Bereich. Eine Zeile ohne cwd folgt Ihnen durch Ihre Checkouts, statt immer im Hauptverzeichnis eines bestimmten Checkouts zu landen.

Diese Datei und die über ein Smartphone hinzugefügten Zeilen (unten) bilden die Zulassungsliste. POST /api/launch akzeptiert nur einen command, der exakt mit einer dieser Zeilen übereinstimmt, eine Agenten-ID aus der maschineneigenen Liste (die Maschine tippt den Befehl dieses Agenten selbst ein) oder eine einfache Shell. Änderungen greifen sofort ohne Neustart, aber ein bereits geöffneter Tab liest die Zeilen erst beim nächsten Laden neu ein.

Zwei optionale Schlüssel geben dem Telefon mehr Informationen über eine Zeile:

[[launchers]]
command = "claude-danger"
label = "Claude Code, no prompts"
# The agent that reads the row: it is listed under Agent with that agent's mark.
harness = "claude"
# The line skips permission prompts, but an alias hides its flags.
no_prompts = true

Ihre Zeilen erscheinen an drei Stellen:

  • Auf der Seite „Neu“ (tippen Sie im Dashboard auf + Neu). Der Schalter oben zeigt Agent | Shell. Eine Zeile mit harness befindet sich in der Agent-Auswahl. Eine Zeile ohne harness befindet sich in der Befehl-Auswahl, also der Auswahl unter Shell.
  • In einem Start-Bereich auf dem Dashboard. Es klappt wie Spaces zusammen.
  • In einem Start-Bereich im Switcher-Sheet (wischen Sie von einem Bereich nach oben).

Auf der Seite „Neu“ wird eine Zeile ohne cwd in dem Ordner ausgeführt, den Sie dort angeben. Eine Zeile mit festem Ordner zeigt diesen Ordner anstelle des Felds. Eine Zeile startet nie in einem Worktree; wählen Sie dafür einen Agenten oder Shell. Eine Zeile mit festem Ordner zeigt ihn gekürzt unterhalb des Home-Verzeichnisses an; eine Zeile ohne cwd zeigt im Switcher „hier“ (das Dashboard impliziert bereits das Home-Verzeichnis, zeigt dort also nichts an). Wenn Sie keine Zeilen deklarieren, erscheint keiner der beiden Bereiche.

In einer Crew (mehrere Maschinen, eine dem Telefon zugewandte Lead-Instanz) liest jede Maschine ihre eigene Kopie dieser Datei: Eine Zeile startet auf dem Dashboard oder Bereich der Maschine, auf der Sie sie angetippt haben, nicht auf dem Lead.

Die Auswahl Agent auf der Seite „Neu“ ist Collies eigene Liste: Claude Code, Codex, opencode, pi, omp, Grok, Hermes, Kiro, Muse und Antigravity. Kiro startet mit den Werkzeugberechtigungen, wie Sie sie festgelegt haben. Ein Agent, der sich nicht im Login-PATH der Maschine befindet, bleibt in der Liste deaktiviert und wird als „nicht installiert“ markiert. Für einen anderen Terminal-Agenten deklarieren Sie eine Zeile wie oben: Er erscheint in der Auswahl Befehl unter Shell, startet wie jeder Befehl in einem Bereich, und Collie zeigt keinen Status dafür an.

Laden Sie zur Überprüfung das Dashboard neu und sehen Sie unter der Herd nach. Wenn eine Zeile nicht geladen werden kann, gibt journalctl --user -u collie -n 20 den Fehler aus.

Vom Telefon hinzugefügte Starter

Ein Telefon kann auf einer Maschine eigene Zeilen hinzufügen. Sie werden im Statusordner dieser Maschine gespeichert, in launchers-added.json, niemals in launchers.toml und niemals auf eine andere Maschine kopiert.

Tippen Sie auf der Seite „Neu“ unter der Agent-Auswahl oder unter der Befehl-Auswahl auf Eigene hinzufügen. Dadurch öffnet sich die Seite /new/add für die dort ausgewählte Maschine. Wählen Sie oben Agent oder Befehl. Für einen Agenten gibt es zwei Wege: ein Rezept (ein Test-Harness, Optionschips und die genaue Befehlszeile, die Collie eingeben wird) und Befehl schreiben. Eine Befehlszeile wird immer manuell verfasst. Hinzufügen führt zur Seite „Neu“ zurück, wobei die neue Zeile ausgewählt ist. Unter dem Formular listet Auf dieser Maschine hinzugefügt jede Zeile auf, die ein Telefon dort hinzugefügt hat, mit Umbenennen und Entfernen, sowie die Zeilen aus launchers.toml mit einem Schloss und ohne Aktionen. So funktioniert das Hinzufügen öffnet eine kurze Erklärung mit dem launchers.toml-Pfad dieser Maschine und einer Beispielzeile zum Kopieren.

[phone]
adds = true          # default true: a phone may add rows built from a recipe
free_text = false    # default false: a phone may also add a line typed by hand
run = true           # default true: a phone may run a one-off command, and run it again from history

Fügen Sie die [phone]-Tabelle an beliebiger Stelle in launchers.toml ein. Ein Wert, der nicht true oder false ist, wird als false interpretiert. Die Bridge setzt die Schalter durch: Ein abgelehnter Hinzufügevorgang ändert nichts, und eine durch einen Schalter deaktivierte Zeile startet ab sofort nicht mehr. Die Zeile bleibt in der Datei erhalten; wenn Sie den Schalter wieder einschalten, wird sie wiederhergestellt.

Ein Rezept ist ein Agent plus Optionschips aus der Tabelle der Bridge selbst, beispielsweise Claude Code und „Berechtigungsabfragen überspringen“. Das Telefon sendet nur die IDs, und die Bridge baut die Befehlszeile zusammen. Jeder Chip wurde aus dem eigenen --help dieses Agenten ausgelesen:

AgentOptionFügt hinzu
Claude CodeBerechtigungsabfragen überspringen--dangerously-skip-permissions
Claude CodePlanmodus--permission-mode plan
Claude CodeModell: opus, Modell: sonnet--model opus, --model sonnet
Claude CodeLetztes fortsetzen--continue
CodexGenehmigungen und Sandbox überspringen--dangerously-bypass-approvals-and-sandbox
CodexNie nachfragen--ask-for-approval never
CodexSchreibgeschützte Sandbox, Websuche--sandbox read-only, --search
opencodeAutomatisch genehmigen, Planungs-Agent, Letzten fortsetzen--auto, --agent plan, --continue
piLetzten fortsetzen, Nachdenken: hoch--continue, --thinking high
ompLetzten fortsetzen, Nachdenken: hoch--continue, --thinking=high

Eine Freie Zeile, wie etwa ein Alias wie claude-danger oder eine einfache htop, ist nur mit free_text = true möglich. Ohne dies zeigt Befehl schreiben eine deaktivierte Zeile, „Auf der Maschine deaktiviert“, und Hinzufügen bleibt aus. Damit zeigt Zeile prüfen die Zeile mit jedem verborgenen Zeichen als dessen Code geschrieben (zum Beispiel ⟨U+200B⟩), bevor Hinzufügen aktiviert wird. Sie umfasst höchstens 200 Zeichen, und die Bridge weist Steuerzeichen, Zeilen- oder Absatztrennzeichen sowie bidirektionale Steuerzeichen darin ab, sowohl beim Hinzufügen als auch bei jedem Lesen.

Eine Maschine behält höchstens 20 hinzugefügte Zeilen. Hat eine Zeile denselben Inhalt wie eine Zeile in launchers.toml, gewinnt die Zeile in launchers.toml. Jede hinzugefügte Zeile speichert das gekoppelte Gerät, das sie hinzugefügt hat. Das Widerrufen dieses Geräts entfernt seine Zeilen, vom Telefon aus oder mit collie devices revoke, und das Audit-Protokoll zeichnet jedes Hinzufügen, Umbenennen und Entfernen auf.

Achtung. Eine Zeile, die Berechtigungsabfragen überspringt, trägt das Kennzeichen „Keine Abfragen“. Jedes Gerät fragt einmal nach, bevor es diese Zeile erstmals startet, und zeigt den Befehl, den Ordner sowie die Maschine an. Setzen Sie adds = false, um jede vom Telefon hinzugefügte Zeile auf einer Maschine zu deaktivieren.

Einen durable agent erreichen (experimentell)

Jeder durable agent, den ein Collie neben seinem Terminal ausführt, ist ein Eintrag in sources.json, geschrieben von collie durable attach (Persistente Agenten). Die ersten drei folgenden Variablen sind die ältere Form für eine reine Durable-Instanz (COLLIE_MUX=durable), die einen einzelnen durable agent namens default steuert. Setzen Sie den Socket oder die URL mit ihrem Token, niemals beides.

VariableBeispielBedeutung
COLLIE_DURABLE_SOCKET/run/user/1000/durable/session.sockder private Unix-Socket des durable agents auf diesem Rechner. Absolut, maximal 103 Bytes, Modus 0600
COLLIE_DURABLE_URLhttps://durable-member.example.comdie Adresse eines durable agents, den Sie hinter TLS bereitgestellt haben. Nur https:// oder http://127.0.0.1:<port> für einen durable agent auf diesem Rechner. Maximal 2048 Bytes, keine Abfrage
COLLIE_DURABLE_TOKENyour-32-byte-random-token-hereDas Bearer-Token, das mit jeder Anfrage an die URL gesendet wird. Mindestens 32 Bytes. Eine Datei, die es enthält, muss Modus 600 haben, und Collie gibt es niemals aus
COLLIE_PROGRAMSoffder Notschalter für durable agents. Die Bridge ignoriert sources.json, protokolliert eine Zeile und registriert keinen durable agent, sodass das Telefon keinen Abschnitt für durable agents anzeigt. collie doctor und collie durable list besagen, dass durable agents deaktiviert sind. Heben Sie die Definition auf und führen Sie dann collie restart aus, um sie wiederherzustellen. Deaktiviert die obige Umgebungsvariablen-Form nicht

Sind beide gesetzt, eine URL ohne Token oder ein Token ohne URL, liegt ein Konfigurationsfehler vor: Die Instanz startet und zeigt den durable agent mit diesem Grund als nicht erreichbar an. Über HTTPS ist jeder Poll eine kostenpflichtige Anfrage, daher pollt Collie alle 2 s, während ein Telefon zuschaut, und sonst alle 10 s. Persistente Agenten beschreibt, was jeder Weg fernhält und was nicht.

Starter eines langlebigen Agenten (experimentell)

Ein langlebiger Agent listet seine Starter auf der Seite „Neu“ auf, die Sie von ihm aus öffnen, unter Neue Unterhaltung. Ein Starter ist eine benannte Methode, eine Unterhaltung zu beginnen, etwa eine Codeüberprüfung. Er erfordert keinen Text: Sie tippen ihn an, und der langlebige Agent entscheidet, was gestartet wird. Die neue Unterhaltung öffnet sich als Bereich. Ein wiederholtes Antippen mit derselben Anfrage-ID öffnet dieselbe Unterhaltung und startet nichts Neues, und falls der langlebige Agent nicht antwortet, sendet Erneut versuchen dieselbe Anfrage-ID. Ein langlebiger Agent, der nicht erreichbar ist, listet keine Starter auf. Dies ist experimentell und kann sich in jedem Minor-Release ändern.

Einmalige Befehle und ihr Verlauf

Ein Telefon kann auch einen Befehl einmalig ausführen, der kein Starter ist. Collie öffnet eine Shell in dem von Ihnen angegebenen Ordner und tippt die Zeile dort ein, genau wie beim Starten einer Starter-Zeile. Die Zeile folgt derselben Regel wie eine freie Zeile: höchstens 200 Zeichen und keine Steuer-, Trenn- oder bidirektionalen Zeichen. Ein einmaliger Befehl startet niemals auf einem neuen Branch.

Dies ist standardmäßig aktiviert, da ein gekoppeltes Telefon bereits eine Shell öffnen und Eingaben tätigen kann. Setzen Sie run = false in der Tabelle [phone], um das Tastaturkürzel auf dieser Maschine zu entfernen.

Wechseln Sie auf der Seite „Neu“ zu Shell. Die Auswahl Befehl endet dann mit zwei Ergänzungen: einer Gruppe Zuletzt verwendet, die die Zeilen im Verlauf dieser Maschine auflistet, und Befehl eingeben…. Wählen Sie Befehl eingeben… aus, und direkt unter der Auswahl erscheint ein Textfeld. Tippen Sie die Zeile ein und tippen Sie auf Starten (oder die Eingabetaste, die als Los beschriftet ist). Die Zeile über Starten gibt an, was und wo ausgeführt wird, zum Beispiel „Führt htop in ~/projects auf bluefin aus“. Der Worktree-Schalter bleibt für eine einmalige Zeile deaktiviert.

Vor der ersten Ausführung fordert Collie die Maschine auf, die Zeile zu prüfen. Die Prüfung führt nichts aus und speichert nichts. Trägt die Zeile ein Flag, das Berechtigungsabfragen überspringt, wie etwa --dangerously-skip-permissions, fragt dieses Telefon vor dem Start einmal nach, genau wie bei einer Zeile mit dem Kennzeichen „Keine Abfragen“. Verstößt die Zeile gegen die obige Regel, erklärt ein Hinweis den Grund und es wird nichts ausgeführt.

Wählen Sie eine Zeile aus Zuletzt verwendet, um sie erneut auszuführen. Das Feld Ordner füllt sich mit dem Ordner, in dem diese Zeile zuletzt ausgeführt wurde, es sei denn, Sie haben den Ordner selbst geändert. Während eine Zeile aus Zuletzt verwendet ausgewählt ist, werden Aus Verlauf entfernen und Verlauf leeren unter der Auswahl angezeigt. Verlauf leeren fragt vorher nach. Die Zeile Nochmals oben auf der Seite wiederholt ebenfalls eine einmalige Ausführung. Mit run = false bleiben die Zeilen in Zuletzt verwendet in der Liste, sind jedoch deaktiviert, und Befehl eingeben… ist verschwunden. Eine Maschine, die älter als 1.19.0 ist, zeigt keines von beiden an.

Jeder gestartete Befehl wird im Statusordner dieser Maschine gespeichert, in commands-recent.json. Die Datei speichert höchstens 12 Zeilen, die neuesten zuerst, zusammen mit dem Ordner, in dem jede zuletzt lief. Eine Zeile erneut auszuführen, verschiebt sie an den Anfang. Eine Zeile, die anscheinend ein Geheimnis enthält, wie etwa TOKEN=abc deploy, eine URL mit Passwort oder ein Wort wie token, secret oder password, wird dennoch ausgeführt, aber nicht gespeichert. Sie können eine einzelne Zeile entfernen oder die Liste vom Telefon aus leeren. Mit run = false wird die Liste weiterhin angezeigt, aber nichts darin gestartet. In einer Crew führt jede Maschine ihre eigene Liste, und es wird nichts zwischen Maschinen kopiert.

Die Liste stellt keine Berechtigung dar. Eine Zeile daraus zu starten ist eine neue einmalige Ausführung, die ein gekoppeltes Gerät erfordert; das Entkoppeln oder Widerrufen eines Geräts lässt die Liste daher unverändert. Das Audit-Protokoll zeichnet das erste Wort eines einmaligen Befehls und dessen Länge auf, niemals die gesamte Zeile, da eine Zeile ein von Ihnen eingegebenes Geheimnis enthalten kann.

Eigene Schriftarten

Die Schriftart der Benutzeroberfläche ist eine gerätebezogene Einstellung. Unter Einstellungen → Erscheinungsbild → Schriftart können Sie zwischen System, Space Grotesk, Aldrich (Standard), IBM Plex Sans, Geist und Atkinson Hyperlegible Next wählen. Ein Theme, das einen Schriftschnitt benennt, schreibt diesen einmal hierhin, wenn Sie das Theme auswählen. Sie können eigene Schriftarten in theme.toml hinzufügen, der vierten Konfigurationsdatei:

cp theme.toml.example ~/.config/collie/theme.toml
mkdir -p ~/.config/collie/fonts
cp departure.woff2 ~/.config/collie/fonts/
[[font]]
family = "Departure Mono"    # the picker's label AND the CSS family
file   = "departure.woff2"   # a bare name inside fonts/, woff2 only
weight = "400 700"           # optional

Benutzerdefinierte Schriftarten werden an die integrierte Liste angehängt, statt sie zu ersetzen (ADR 0033), anders als in commands.toml und den übrigen Konfigurationsdateien. Da Schriftarten keine Aktionen auslösen, wird nichts überschattet.

Sie erscheinen unter den mitgelieferten Einträgen, und jedes Client-Gerät wählt seinen eigenen aus.

Drei Verhaltensweisen sind zu beachten:

  • Layout-Verschiebung beim ersten Laden. Benutzerdefinierten Schriftarten fehlen metrisch angepasste Fallbacks, was beim ersten Laden zu einer leichten Layout-Verschiebung führt. Integrierte Schriftarten vermeiden dies, da ihre Fallbacks zur Build-Zeit generiert werden.
  • Verzögerung beim Kaltstart. Ein Kaltstart ruft die Datei mit einer kurzen Verzögerung ab; ein Client mit Cache rendert sofort.
  • Nur Chrome. Die gewählte Schriftart gilt nur für das Chrome von Collie. Das Terminal-Mirror, das Transkript und gerendertes Markdown behalten ihre eigene Typografie.
  • Live beim nächsten Neuladen. Änderungen erfordern keinen Neustart und werden beim nächsten Neuladen der Seite wirksam. Ungültige Konfigurationen protokollieren Fehler, die über journalctl --user -u collie -n 20 sichtbar sind.

Eigene Cache-Regeln

Verwenden Sie cache-rules.toml, um die Lebensdauer eines Prompt-Caches anzupassen, die von Ihrem Anbieter geändert wurde.

cp cache-rules.toml.example ~/.config/collie/cache-rules.toml

Collie liefert eine Regel pro Harness und Anbieter aus. Collie hat jede Regel an einem erfassten Datum von einer Anbieterseite ausgelesen. Ein Anbieter kann diesen Wert ohne Vorankündigung ändern. Ein Gateway, also ein Proxy zwischen Ihrem Agenten und dem Anbieter, kann ihn ebenfalls ändern. Verwenden Sie diese Datei, um Werte zu überschreiben, bis Collie eine Aktualisierung bereitstellt.

[[rule]]
id = "claude.api"
ttl_seconds = 3600
source_url = "https://platform.claude.com/docs/en/build-with-claude/prompt-caching"
retrieved = "2026-09-12"
note = "our gateway sends ttl 1h on every request"

Collie behält eine Zeile nur, wenn alle vier Regeln zutreffen. id muss eine mitgelieferte Regel benennen. ttl_seconds muss eine Ganzzahl von 1 bis 86400 sein. source_url muss eine nicht-leere Zeichenkette sein. retrieved muss sich als gültiges YYYY-MM-DD-Datum parsen lassen und darf nicht nach dem heutigen Tag liegen. Ungültige Zeilen werden verworfen und protokolliert. Der Rest der Datei gilt weiterhin.

Zwei weitere Regeln bestimmen die Bedeutung einer Datei. Zwei Zeilen mit demselben id sind kein Fehler: Die spätere Zeile gewinnt. Ein note, das Sie als leere Zeichenkette schreiben, verwirft die gesamte Zeile; lassen Sie das Feld stattdessen weg.

Eine Zeile bindet an die Stufenregel, die ihr id benennt. Die Aufteilung nach Modell unter dieser Stufe wandert mit, sodass eine Zeile jedes Modell dieser Stufe abdeckt.

Hinweis. Sie dürfen eine Zahl ändern. Sie dürfen weder die Quellseite noch das Abrufdatum entfernen. Der Regelkatalog verlangt beide Felder.

collie doctor prüft drei Punkte. cache-claims warnt, wenn niemand eine mitgelieferte Regel innerhalb von 180 Tagen erneut geprüft hat. cache-rules nennt jede verworfene Zeile und den Grund für das Verwerfen. cache-env meldet, wenn Sie ENABLE_PROMPT_CACHING_1H oder FORCE_PROMPT_CACHING_5M in Ihrer Shell setzen. Die Bridge läuft als separater Dienst und kann die Umgebung Ihres Agenten nicht lesen. Spiegeln Sie diese Variablen von Claude Code hier, damit die Bridge sie lesen kann.

Dies sind die Regel-IDs, die Sie schreiben dürfen.

Regel-IDWas abgedeckt wird
claude.subscriptionClaude Code mit einem Claude-Abonnement, Pro oder Max
claude.apiClaude Code mit einem API-Schlüssel oder einem Drittanbieter
codex.subscriptionCodex CLI, angemeldet mit einem ChatGPT-Tarif
codex.apiCodex CLI mit einem OpenAI-API-Schlüssel
pi.anthropic, opencode.anthropicpi oder opencode im Austausch mit Anthropic
pi.openai, opencode.openaipi oder opencode im Austausch mit OpenAI
pi.google, opencode.googlepi oder opencode im Austausch mit Google
pi.unknown, opencode.unknownpi oder opencode an einem Upstream, der keine TTL dokumentiert

Der Prompt-Cache-Countdown

Ein Chip in jedem Agenten-Bereich zeigt an, wie lange der Prompt-Cache dieses Agenten warm bleibt.

Jeder unterstützte Testrahmen zwischenspeichert die aktuelle Konversation. Testrahmen berechnen niedrigere Raten, solange dieser Cache warm bleibt. Der Chip zählt die Leerlaufzeit seit der letzten Anfrage des Agenten herunter. Er erfasst nicht das Gesamtalter der Sitzung. Jede neue Anfrage setzt den Timer zurück.

Die Sanduhr des Chips zeigt den Zustand in einer von drei Farben an, und die Zahl daneben bleibt grau. Die Sanduhr ist grün, solange das Zeitfenster groß ist, rot während des letzten Viertels und blau, sobald das Zeitfenster abläuft oder ein Durchlauf die volle Rate kostet. Der Chip zeigt im blauen Zustand cold an und <1m statt Sekunden, wenn weniger als eine Minute verbleibt.

Einige Aktionen leeren den Cache vor Ablauf der Zeit: ein Wechsel zu einem anderen Modell per /model, eine Änderung des Aufwands, eine Kompaktierung und /reload-plugins --force. Der Chip färbt sich blau, sobald Claude Code die Aktion in sein Transkript schreibt, und das Blatt benennt die Aktion. opencode meldet eine Kompaktierung und einen Modellwechsel auf dieselbe Weise.

Der Chip befindet sich am rechten Ende der zweiten Zeile des Bereichskopfs, nach dem Arbeitsbereich des Bereichs. Bei einer Crew steht der Name des Rechners daneben auf derselben Zeile. Tippen Sie auf den Chip, um die zugrunde liegende Regel anzuzeigen: die Regel-ID, die Quellseite des Anbieters und das Abrufdatum.

Hinweis. Werte sind Herstellerangaben mit protokolliertem Datum, keine Live-Messungen, sofern nicht als gemessen markiert. Claude Code schreibt Cache-Fenster direkt in sein Transkript, daher sind Claude-Bereiche meist gemessen.

Manche Bereiche zeigen keinen Chip. Das ist zu erwarten. Ein Bereich zeigt erst dann einen Chip an, wenn sein Agent einen Durchlauf abgeschlossen hat. Collie stellt vor der Messung keine Vermutungen an. Ein Bereich zeigt nichts an, wenn seinem Testrahmen ein Journal-Adapter fehlt oder sein Anbieter keine Lebensdauerdaten veröffentlicht.

Collie kann vor Ablauf eines Caches auch Push-Benachrichtigungen an ein Telefon senden. Eine Variable steuert das Timing.

VarStandardBedeutung
COLLIE_CACHE_WARN_SECONDS300Wie viele Sekunden vor Ablauf des Caches eines überwachten Bereichs der Push erfolgt; Minimum 30, Maximum 3600

Diese Einstellung steuert nur die Push-Benachrichtigung. Sie steuert kein, wann der Chip rot wird. Der Schwellenwert für Rot ist fest auf ein Viertel der TTL jeder Regel gesetzt. Der Push selbst wird ausgelöst, je nachdem, was kürzer ist: diese Einstellung oder die halbe Cache-Lebensdauer des Bereichs. Ein Fünf-Minuten-Cache (Codex, OpenCode, pi, omp) warnt also etwa zweieinhalb Minuten vor dem Erkalten, auch wenn das weniger als die konfigurierten 300 Sekunden sind. Wie Sie Warnungen für bestimmte Bereiche oder alle Bereiche aktivieren, finden Sie unter voice-and-push.md.

Anhänge

Die Büroklammer neben dem Eingabefeld lädt eine Datei auf den Host hoch und fügt deren Pfad in Ihre Nachricht ein.

# in your .env
COLLIE_MAX_UPLOAD_MB=25              # default 10, floor 1, ceiling 512
COLLIE_UPLOAD_EXTRA_TYPES=rb,ex,zig  # bare extensions, no dot

Collie speichert die Datei unter <state-dir>/uploads mit Rechten ausschließlich für den Eigentümer und hängt ihren absoluten Pfad an Ihren Entwurf an. Der Agent liest sie von diesem Pfad, da ein Terminal keine eingefügte Datei entgegennehmen kann. Uploads werden 48 Stunden nach dem Schreiben gelöscht.

EinstellungStandardFunktion
COLLIE_MAX_UPLOAD_MB10Größte zulässige Datei in ganzen Megabyte. Liegt der Wert außerhalb des gültigen Bereichs oder ist keine ganze Zahl, wird auf den Standardwert zurückgegriffen und eine Warnung protokolliert.
COLLIE_UPLOAD_EXTRA_TYPES(leer)Zusätzliche Texttypen, die neben der nachstehenden Liste akzeptiert werden sollen. Kommagetrennte reine Dateiendungen; ein führender Punkt wird toleriert und alles, was nicht aus Buchstaben und Ziffern besteht, wird mit einer Warnung verworfen.

Zwei Arten von Dateien werden akzeptiert und unterschiedlich geprüft.

Bilder werden anhand ihrer Signatur-Bytes identifiziert, niemals anhand ihres Namens oder ihres deklarierten Typs: png, jpg, gif und webp. SVG wird bewusst abgelehnt, da es sich um skriptfähiges Markup und nicht um ein Bild handelt.

Text wird anhand der Dateiendung identifiziert, wobei die Bytes als Veto dienen: Eine Datei, deren erste 4 KB ein NUL-Byte oder ein sonstiges Steuerzeichen enthalten, wird unabhängig von ihrem Namen abgelehnt. Die mitgelieferte Liste umfasst md, markdown, txt, json, jsonl, yaml, yml, toml, csv, tsv, log, xml, html, htm, css, js, jsx, mjs, cjs, ts, tsx, py, go, rs, sh, bash, sql, diff und patch.

Hinweis. COLLIE_UPLOAD_EXTRA_TYPES fügt ausschließlich Texttypen hinzu. Ein Bild erfordert eine Signatur zur Überprüfung, daher kann auf diesem Weg kein Binärformat hinzugefügt werden.

Das Erhöhen von COLLIE_MAX_UPLOAD_MB erhöht zwei weitere Werte. Die Bridge liest einen vollständigen Upload in den Arbeitsspeicher, bevor sie ihn messen kann; ein hohes Limit plus mehrere gleichzeitige Uploads verbraucht entsprechend viel Arbeitsspeicher. Zudem gilt das Body-Limit der Laufzeitumgebung für jede Route, nicht nur für Uploads; ein hohes Limit lässt also große Payloads jeden Handler erreichen, wo das eigene Limit des Handlers diese dann abweist. Nichts wird vor Ablauf der 48 Stunden gelöscht, daher enthält das Upload-Verzeichnis maximal die Daten von zwei Tagen. Erhöhen Sie den Wert nur bei tatsächlichem Bedarf, nicht standardmäßig.

In einem Crew gelten beide Einstellungen pro Rechner, und der Rechner, der die Datei speichert, setzt sie durch. Der Lead weist einen zu großen Body vor der Weiterleitung ab, um Ihren Uplink zu schonen, tut dies jedoch anhand seines eigenen Werts. Setzen Sie auf jedem Mitglied dieselben Werte, andernfalls weist ein Peer Daten ab, die sein Lead durchgelassen hat.

Favoriten und zuletzt verwendete Ordner

Die Seite „Neu“ listet die Ordner auf, in denen Sie zuvor etwas gestartet haben, sodass Sie einen davon antippen können, statt einen Pfad einzutippen.

Unter dem Feld „Ordner“ befinden sich zwei Listen für die Maschine, an die der Start geht. Zuletzt verwendet enthält die letzten 8 Ordner, in denen etwas gestartet wurde, die neuesten zuerst. Es zählt nur Starts, die funktionierten und einen Ordner benannten, und listet niemals Ihr Home-Verzeichnis auf, da ein leeres Feld bereits das Home-Verzeichnis bedeutet. Der eigene Ordner eines neuen Branchs wird nicht hinzugefügt, da es sich um einen neuen Checkout handelt und nicht um einen Ort, an den Sie zurückkehren.

Sie können auch einen Pfad eintippen. ~/projects und /srv/www bedeuten das, was sie sagen. Ein Name ohne vorangestelltes / oder ~, wie etwa projects, ist ein Ordner unter Ihrem Home-Verzeichnis, wie cd projects in einer frischen Shell, und die Zeile über „Start“ zeigt den vollständigen Pfad (~/projects), bevor Sie tippen. Ein Pfad, der .. enthält, wird abgewiesen. Der Ordner muss auf der Maschine, die den Start ausführt, bereits existieren und ein Verzeichnis sein. Ist er nicht vorhanden, startet nichts und ein Hinweis über „Start“ meldet „There is no folder … on this machine.“ Collie prüft dies erst, wenn Sie auf „Start“ tippen, niemals während der Eingabe. In einer Crew prüft die von Ihnen ausgewählte Maschine ihren eigenen Datenträger.

Ein Tippen auf eine Zeile füllt das Feld „Ordner“ und startet nichts, sodass Sie die obige Auswahl weiterhin ändern können. Der Stern neben einer Zeile verschiebt sie nach Favoriten, bis zu 12 Zeilen, in der Reihenfolge, in der Sie sie markiert haben. Ein zweites Tippen auf den Stern verschiebt sie wieder an den Anfang von „Zuletzt verwendet“.

Durchsuchen befindet sich unter den beiden Listen. Ein Fingertipp darauf listet die Unterordner des Ordners im Feld auf oder des Home-Verzeichnisses, wenn das Feld leer ist. Tippen Sie auf einen Ordner, um ihn zu öffnen; das Feld folgt. Nach oben oder ein Teil des Pfads über der Liste geht zurück. Ein Ordner, der ein Git-Repository ist, trägt ein git-Badge. Diesen Ordner verwenden füllt das Feld aus, wie ein Fingertipp auf eine Zuletzt-Zeile.

Wenn das Feld einen Pfad enthält, der nicht existiert, wie etwa ~/src/plektra-, öffnet Durchsuchen den nächstgelegenen vorhandenen Ordner (~/src) und listet nur die Namen auf, die mit dem Rest beginnen (plektra-). Das Tippen im Feld grenzt die Liste also ein. Ein Pfad außerhalb Ihres Home-Verzeichnisses zeigt „Hier gibt es nichts zu durchsuchen“.

Durchsuchen liest nur Ordnernamen unterhalb Ihres Home-Verzeichnisses mit den Einschränkungen der Dateien-Ansicht. Es blendet Punkt-Ordner aus, es sei denn, Sie tippen den Punkt ein, listet niemals .git oder Collies eigene Status- und Konfigurationsordner auf, folgt keinem Link aus dem Home-Verzeichnis heraus und zeigt maximal 200 Ordner an. Es erstellt nichts und erfordert wie Dateien ein gekoppeltes Gerät.

Die Liste gehört zur Maschine, nicht zum Telefon. Jede Maschine führt ihre eigene Liste in folders.json in ihrem Statusverzeichnis, ~/.local/state/collie/folders.json, sofern COLLIE_STATE_DIR sie nicht verschiebt. Jedes von Ihnen verwendete Gerät sieht dieselbe Liste, und die Datei erscheint erst nach dem ersten Start in einem Ordner oder dem ersten Markieren mit einem Stern. Dieselben Listen füllen Anderer Ordner unter Neuer Worktree, wo sie den Ordner bestimmen, in den der eigene Ordner des Branchs abgelegt wird.

In einem Crew behält jede Maschine die Ordner, die auf ihr existieren, und die Seite zeigt die Liste der ausgewählten Maschine an. Eine Maschine mit einem älteren Collie hat keine Liste, und die Seite zeigt dann keine dafür an. Durchsuchen listet auch die Festplatte der ausgewählten Maschine auf, und eine ältere Maschine meldet, dass sie eine Aktualisierung benötigt.

Geheimnismaskierung

Collie maskiert bekannte Geheimnismuster im Bereichstext, bevor er Ihr Telefon erreicht.

# in your .env; the default is on
COLLIE_REDACT=off
VariableStandardFunktion
COLLIE_REDACTonMaskiert API-Schlüssel, JWTs, private PEM-Schlüssel, Bearer-Tokens und password=-Werte in Mirror, Chat, History, Push-Benachrichtigungen, Dateiinhalten in Files und Diffs in Changes. off sendet sie unverändert.

In der Konfigurationsdatei entspricht dies [access] redact. Die Maske behält die Zeichenbreite des verborgenen Inhalts bei, damit das Layout des Mirrors stabil bleibt. Sie erfasst nur Muster mit hoher Erkennungsgenauigkeit; die Einschränkungen stehen in Sicherheit.

In einer Crew maskiert die Leitung den von ihren Mitgliedern gesendeten Text gemäß ihrer eigenen Einstellung ebenfalls. Der Text eines Mitglieds erreicht Ihr Telefon nur dann unmaskiert, wenn sowohl die Leitung als auch das Mitglied COLLIE_REDACT=off setzen.

Problem melden

Wenn drei aufeinanderfolgende Eingaben in einem Bereich aus einem Grund fehlschlagen, der auf Collie hindeutet, bietet eine Karte über dem Antwortfeld eine Meldung an. Einstellungen → System → Meldung anbieten, wenn das Senden fehlschlägt schaltet die Karte für dieses Gerät aus (im Browser gespeichert, standardmäßig aktiviert). Problem melden im Bereichsmenü und die Schaltfläche Problem melden auf derselben Karte in den Einstellungen öffnen den Dialog weiterhin.

Nichts verlässt das Telefon, bis Sie auf Auf GitHub öffnen oder Bericht kopieren tippen, und Collie besitzt kein GitHub-Token. Was der Bericht enthält und wie Sie ihn vor dem Senden lesen, steht in Fehlerbehebung.

Mehrere Sitzungen

Standardmäßig bedient eine Collie-Instanz jede gefundene Herdr-Sitzung.

COLLIE_MULTI_SESSION=on (Standard) erkennt und bedient jede benannte Herdr-Sitzung unter Ihrem Konfigurationsstammverzeichnis, umschaltbar über die Kopfzeile. Die Einstellung COLLIE_MULTI_SESSION=off bedient nur die primäre Herdr-Sitzung. Jede erkannte Herdr-Sitzung ist über dieselbe URL zugänglich, einschließlich privater oder Sandbox-Sitzungen. Sicherheit führt dieses Verhalten als Problemstelle auf.

Nutzungsfenster

Die Punkte neben dem Modell zeigen Ihre Limits für 5 Stunden und 7 Tage für Claude und Codex an, ganz ohne Konfiguration.

# turn every source off
COLLIE_ACCOUNT_WINDOWS=0
# turn on opencode and grok too, or name the ones you want
COLLIE_ACCOUNT_WINDOWS=all
COLLIE_ACCOUNT_WINDOWS=claude,codex

Collie liest Ihre Claude-Anmeldedatei auf dieser Maschine und fragt den Nutzungs-Endpunkt von Anthropic ab, denselben Aufruf, den Claude Codes /usage durchführt; nichts von den Anmeldedaten wird gespeichert oder anderweitig gesendet. Collie fragt nur ab, während ein Bereich dieses Harnesses geöffnet ist, und überspringt eine Anmeldedatei, die andere lesen dürfen (alles, was lockerer ist als 0600), sowie eine abgelaufene Anmeldung. Codex sendet kein Token: Es liest seine eigenen Dateien.

FormWas aktiviert wird
nicht gesetzt, 1, on, true, yesdie Standardauswahl: claude und codex
0, off, false, nonichts: Es wird keine Anmelde- oder Sitzungsdatei gelesen und nichts abgefragt
alljede Quelle: claude, codex, opencode und grok
claude,codexdie von Ihnen genannten Harnesses, in beliebiger Groß-/Kleinschreibung und mit Leerzeichen

Eine ID, die Collie nicht kennt, wird mit einer Warnung verworfen, und nur bekannte IDs sind aktiv; ein Tippfehler aktiviert also niemals eine Quelle, die Sie nicht benannt haben. In der Konfigurationsdatei akzeptiert [bridge] account_windows true oder false, eine Zeichenkette mit denselben Formen oder ein Array wie ["claude", "codex"].

Jede Quelle liest etwas anderes aus.

  • Claude, standardmäßig aktiviert. Collie liest ~/.claude/.credentials.json oder $CLAUDE_CONFIG_DIR/.credentials.json und fragt api.anthropic.com ab.
  • Codex, standardmäßig aktiviert. Collie liest keine Anmeldedaten und fragt niemanden ab. Bei einer ChatGPT-Anmeldung schreibt Codex die Zeitfenster in seine eigenen Sitzungsdateien ($CODEX_HOME/sessions oder ~/.codex/sessions), und Collie liest das Ende der neuesten Dateien aus den letzten zwei Stunden. Ein Codex mit einem API-Schlüssel hat keine anzuzeigenden Zeitfenster.
  • OpenCode Go, standardmäßig deaktiviert. Wenn Sie es aktivieren, liest Collie den Eintrag opencode-go im Anmeldespeicher von OpenCode (~/.local/share/opencode/auth.json oder unter $XDG_DATA_HOME) und fragt opencode.ai ab. Ohne Go-Eintrag fragt es nichts ab.
  • Grok, standardmäßig deaktiviert. Wenn Sie es aktivieren, liest Collie die von grok login gespeicherte Anmeldung (~/.grok/auth.json oder unter $GROK_HOME) und fragt cli-chat-proxy.grok.com nach Ihrem Guthaben ab.
Hinweis. OpenCode Go und Grok folgen dem Schema, das andere Werkzeuge für diese Endpunkte verwenden, und wurden noch von keinem aktiven Konto überprüft. Deshalb sind sie deaktiviert, bis Sie sie benennen. pi und OMP zeigen hier noch keine Fenster an.

collie doctor zeigt jede Quelle in ihrer account-windows-Zeile: ein oder aus, die gelesene Datei und den angefragten Host. Terminals enthält den statusLine-Pfad.

Der Kontextpunkt erfordert keine Einstellung. Für pi, OMP, Codex und OpenCode liest Collie die Tokens des letzten Zuges aus dem Sitzungsprotokoll. Es liest das Modellfenster aus dem Protokoll von Codex oder aus der programmeigenen Modellliste des Harness auf der Festplatte (models-store.json bei pi, models.db bei OMP, ~/.cache/opencode/models.json bei OpenCode). Ein Modell, das diese Liste nicht nennt, erhält keinen Kontextpunkt; der Modellname wird weiterhin angezeigt. Die Kennzeichnung zeigt nach den Punkten auch die Sitzungskosten in Dollar, wenn das Harness solche meldet: Claude Code über die umbrochene Statuszeile, pi, OMP und OpenCode aus ihren Protokollen. Codex hat keine, daher zeigt seine Kennzeichnung keine Kosten.

Dunkelmodus / Hellmodus

Hinweis. Collie folgt standardmäßig dem Erscheinungsbild Ihres Smartphones.

Um es festzupinnen, öffnen Sie Einstellungen → Erscheinungsbild, suchen Sie die Karte Erscheinungsbild unter der Karte Theme und wählen Sie System, Hell oder Dunkel. Die Karte Theme wählt die Farben aus; diese Karte wählt die helle oder die dunkle Hälfte davon. Die Einstellung wird pro Gerät im Browser gespeichert statt auf der Bridge. Ihr Telefon kann auf „Dunkel“ verbleiben, während ein Laptop dem Betriebssystem folgt. Die Einstellung bleibt über Neuladevorgänge und PWA-Neuinstallationen auf demselben Gerät hinweg erhalten.

Das Terminal-Spiegelbild weicht bewusst ab

Das Mirror rendert immer auf einem dunklen Hintergrund. Der helle Modus invertiert das gesamte Element, anstatt einzelne Spans neu einzufärben.

Agenten geben absolute 24-Bit-Farbcodes (38;2;r;g;b) aus, die für dunkle Hintergründe optimiert sind und von nachgelagerten Parsern nicht zuverlässig neu zugeordnet werden können. Direkt auf Weiß gerendert, fällt die meiste Agentenausgabe unter ein Kontrastverhältnis von 3:1. Die Invertierung bewahrt den beabsichtigten Kontrast. Die Messwerte sind in ADR 0002 dokumentiert.

Diese Implementierung hat zwei praktische Konsequenzen:

  • Lassen Sie Ihre Agenten für dunkle Themes konfiguriert. Dies ist die Standardeinstellung für Claude Code, codex, opencode und pi. Wenn ein Agent ein helles Theme verwendet, gibt er Dunkel-auf-Hell-Werte aus, die in Collie in beiden Modi unleserlich werden. Dies liegt an der Agentenausgabe und nicht an Collie selbst.
  • Diffs und hervorgehobene Zeilen werden als dunkle Blöcke gerendert im Hellmodus. Der Kontrast bleibt erhalten, aber die visuelle Gewichtung ist umgekehrt.
Hinweis. Unter iOS im Light Mode bleibt der Text der Statusleiste weiß und kann mit dem Hintergrund verschmelzen. iOS erlaubt es Web-Apps nicht, diesen Wert dynamisch zu aktualisieren. Führen Sie Collie direkt im Browser statt als installierte PWA aus, um diese Einschränkung zu umgehen.

Zen-Modus

Hinweis. Der Zen-Modus ist standardmäßig deaktiviert.

Aktivieren Sie ihn unter Einstellungen → Gerät → Zen-Modus (wird pro Gerät im Browser gespeichert). Dadurch wird dem Bereichsmenü unter dem ⋮ neben „Suchen“ und „Verlauf“ die Option Zen-Modus hinzugefügt. Ein Fingertipp darauf blendet alle Collie-UI-Elemente aus: Kopfzeile, Reiter- und Bereichsleisten, Agent-Statuszeile sowie Composer-Docks. Nur die Terminal-Spiegelung bleibt sichtbar. Eine schwebende Schaltfläche in der oberen rechten Ecke oder die Escape-Taste stellt die Benutzeroberfläche wieder her.

Der Zen-Modus ist flüchtig. Die Konfiguration bleibt erhalten, aber der aktive Zustand wird zurückgesetzt, wenn Sie den Bereich wechseln oder die Seite neu laden. Bereiche öffnen sich immer mit den Standard-Bedienelementen.

Die Terminal-Spiegelung fragt auch im Zen-Modus weiter Daten ab, und interaktive Pufferelemente bleiben funktionsfähig. Eingabeschaltflächen, „Ältere laden“ und Steuerelemente für „Gesamten Verlauf anzeigen“ bleiben verfügbar, da sie Teil des Inhaltsdatenstroms und nicht der Bedienelemente sind.

Große Bildschirme

Hinweis. Auf einem Tablet oder einem geöffneten Fold zeigt die Pane-Ansicht mehrere Panes nebeneinander. Ein aufrecht und flach gehaltenes Smartphone bleibt unverändert.

Das Layout wird für die Pane-Ansicht aktiviert, wenn der Bildschirm mindestens 600 CSS-Pixel breit und mindestens 480 Pixel hoch ist. Ein quer gehaltenes Smartphone ist weniger als 480 Pixel hoch und behält daher das Smartphone-Layout bei. Um es zu deaktivieren, öffnen Sie Einstellungen → Erscheinungsbild → Großbildschirm-Layout und wählen Sie Aus. Automatisch, der Standardwert, aktiviert es dort, wo der Bildschirm groß genug ist. Die Auswahl wird pro Gerät gespeichert.

Das Layout besteht aus drei Teilen.

  • Die Seitenleiste. Sie listet Ihre Panes auf, dieselbe Liste, die auch der Pane-Umschalter anzeigt. Die Schaltfläche in der oberen Zeile klappt sie zu einer schmalen Symbolleiste zusammen; diese Auswahl bleibt auf diesem Gerät gespeichert. Das ColliePWA-Zeichen in der oberen Zeile führt zur Startseite. Neuer Space und Einstellungen befinden sich am Fußende.
  • Die Pane-Zeile. Jeder Space hat seine eigene Zeile, und die Zeile scrollt seitwärts. Tippen Sie auf ein Pane in der Seitenleiste, um es anzuzeigen. Halten Sie es gedrückt (Rechtsklick mit der Maus) für Hier öffnen, was das Pane ersetzt, in dem Sie sich befinden, oder für Daneben öffnen, was es daneben hinzufügt. Sie können ein Pane auch in die Zeile ziehen. Aus der Ansicht entfernen entfernt ein Pane aus der Zeile. Der Agent läuft weiter.
  • Die Space-Kopfzeile. Sie enthält den Namen des Space, seine Tabs und ein + für einen neuen Tab. Halten Sie einen Tab gedrückt (Rechtsklick mit der Maus), um ihn zu Umbenennen oder Tab schließen, genau wie auf dem Smartphone. Wenn Sie den Tab schließen, in dem Sie arbeiten, wechseln Sie zu einem Pane des benachbarten Tabs. Seine zwei Schaltflächen oder ein vertikales Wischen wechseln zum Space darüber oder darunter.

Jedes Pane hat eine Breite: 1/2, 4/5 oder Voll der Zeile. Ein Pane ist nie schmaler als 360 Pixel; eine Breite, die es schmaler machen würde, wird daher nicht angeboten. Wenn die Zeile nicht zwei Panes dieser Größe aufnehmen kann, hat jedes Pane die Breite Voll und das Bedienelement wird ausgeblendet. Die Zeile rastet am Anfang eines Panes ein, sobald Sie aufhören zu scrollen, und seitliches Scrollen navigiert im Browser niemals eine Seite zurück. Die Zeile endet immer mit Pane hinzufügen. Es listet die Panes dieses Space auf, die die Zeile nicht anzeigt, jeweils mit Hier öffnen (das Pane wird das letzte in der Zeile). Es bietet außerdem Neuer Agent in diesem Space, was die Neue-Seite auf dem Rechner und im Ordner dieses Panes öffnet und den Agenten als neuen Tab dieses Space neben dem aktuellen Pane hinzufügt, sowie Neuer Agent in neuem Space.

Jedes Pane hat eine eigene Leiste, außer wenn Sie ein Foldable wie ein Laptop halten (siehe unten). Das Pane, in dem Sie arbeiten, hat einen Rahmen und das Antwortfeld. Ein Tippen auf die Leiste eines anderen Panes führt eine Aktion auf diesem Pane aus und wechselt dorthin. Tippen Sie auf das Pane, um ohne Aktion dorthin zu wechseln.

Das Layout wird nur auf diesem Gerät gespeichert, und „Zurück“ sowie geteilte Links funktionieren wie zuvor.

Foldables. Auf einem halb geöffneten Foldable teilen Chrome und Samsung Internet den Bildschirm am Falz. Wie ein Laptop gehalten, bleibt die Unterhaltung oberhalb des Falzes, und die Leiste sowie ein höheres Antwortfeld befinden sich darunter. Nur das Pane, in dem Sie arbeiten, behält seine Leiste unterhalb des Falzes. Die anderen Panes zeigen nur den Chat. Diese Teilung gilt bei jeder Breite, betrifft also auch ein halb geöffnetes Klapphandy. Das Layout wechselt wieder zur flachen Ansicht, während die Tastatur geöffnet ist. Wie ein Buch gehalten, greift die Teilung ab 600 Pixeln Breite. Bei zwei Panes zeigt jede Hälfte ein Pane und die Seitenleiste wird zur Symbolleiste. Bei einem Pane bleibt die Seitenleiste in einer Hälfte geöffnet und das Pane füllt die andere aus. Andere Browser zeigen ausschließlich das flache Layout an.

Bereichsnavigation

Eine Geste bewegt Sie zwischen Bereichen und Spaces, sowohl auf einem Telefon als auch im Großbildschirm-Layout. Nach links und rechts wechselt zum vorherigen und nächsten Bereich des Spaces, in der Reihenfolge der Bereichsauswahl. Nach oben und unten wechselt zum vorherigen und nächsten Space. Am ersten oder letzten Bereich oder Space bleibt eine Bewegung an Ort und Stelle. Wählen Sie die Methode in Einstellungen → Erscheinungsbild → Bereichsnavigation. Eine Änderung wird beim nächsten Öffnen eines Bereichs sichtbar.

MethodeFunktionsweise
Zwei FingerDer Standard. Halten Sie einen Finger auf dem Chat oder dem Terminal still und setzen Sie dann einen zweiten Finger auf. Das Telefon vibriert und ein Kasten zeigt an, wo Sie sich befinden. Wischen Sie mit dem zweiten Finger: Ein kurzes Wischen ist ein Schritt, ein langes Wischen führt weiter. Heben Sie den zweiten Finger an, dann den ersten, um dorthin zu wechseln.
JoystickHalten Sie den Griff direkt über der Leiste und ziehen Sie denselben Finger. Lassen Sie auf einem anderen Bereich los, um dorthin zu wechseln, oder am Ausgangspunkt, um zu bleiben. Auf einem Telefon öffnet ein schnelles Ziehen nach oben die Bereichsauswahl.
AusKeine Geste. Die Bereichsauswahl bewegt Sie weiterhin, und auf einem großen Bildschirm tun dies auch die Seitenleiste und die Space-Kopfzeile.

Der Kasten nennt den Bereich, zu dem Sie wechseln, mit seinem Status, seinem Space und seiner Position im Space, über einer Übersicht der Spaces. Sie bleiben dort, wo Sie sind, wenn Sie den ersten Finger ohne Wischen anheben, ihn anheben, während der zweite Finger noch aufliegt, oder einen dritten Finger aufsetzen. Nichts unter Ihren Fingern wird beim Anheben angetippt. Wenn die Geste zum ersten Mal auf einem Gerät startet, zeigt ein kurzer Hinweis über der Leiste, wie sie funktioniert und wo sie deaktiviert werden kann.

Die Geste behält die seiteneigenen Berührungen bei. Ein einzeln gehaltener Finger bewirkt nichts Neues: Ein langes Drücken wählt weiterhin Text aus und öffnet dessen Menü. Eine Spreizgeste zoomt weiterhin, da ein zweiter Finger, der innerhalb der ersten 300 ms aufsetzt, als Spreizgeste gewertet wird. Ein Finger, der gerade scrollte oder am linken oder rechten Bildschirmrand ansetzt, wo die herstellereigene Zurück-Geste des Telefons liegt, startet die Geste nie. Ab dem Moment, in dem der zweite Finger aufsetzt, bis Sie den ersten anheben, unterdrückt die Seite Textauswahl und Scrollen, und eine zuvor getroffene Auswahl wird aufgehoben. Die Bereichsnavigation funktioniert ausschließlich über Berührung; eine Maus bewirkt hier nichts. Bei aktivem TalkBack sollte die Geste nichts bewirken, da TalkBack Zwei-Finger-Wischgesten für sich beansprucht; die Bereichsauswahl bewegt Sie weiterhin.

Chat-Ansicht

Hinweis. Chat ist seit Version 1.17.0 die Standardansicht eines Agentenbereichs. Das Terminal ist nur einen Fingertipp entfernt.

Ein Agentenbereich öffnet sich in Chat. Chat stellt die Konversation des Agenten anstelle des Terminals dar: Ihre Beiträge, seine Antworten, Gedankengänge hinter einem Klappelement und eine Karte pro Schritt. Das Eingabefeld, die Leiste und das Bereichsmenü bleiben an ihrem Platz. Um stattdessen das Terminal zu lesen, öffnen Sie das ⋮-Menü des Bereichs und tippen Sie auf Terminalansicht. Die Auswahl ist eine Einstellung für das gesamte Gerät, die im Browser gespeichert wird; ein Gerät, für das bereits das Terminal gewählt wurde, behält dies bei. Chat-Ansicht im selben Menü schaltet zurück.

Wenn Sie eine Nachricht in die Warteschlange stellen, während Claude Code arbeitet, zeigt Chat diese auf einer Warten auf Senden-Karte an, und die Schaltfläche Jetzt senden der Karte sendet die gesamte Warteschlange auf einmal an den laufenden Durchlauf. Nur Claude Code bietet dies an, da die Schaltfläche Strg+Eingabe drückt, also die Taste, die dieser Agent dafür definiert. Die Schaltfläche ist auf einem schreibgeschützten Gerät und bei einer gespeicherten Kopie ausgeblendet.

Die meisten anderen Agenten, darunter OMP und pi, schreiben bis zum Ende des Zuges nichts über eine eingereihte Nachricht in ihr Protokoll. Für diese stellt Chat die von Collie selbst eingereihten Nachrichten auf derselben Warten auf Senden-Karte dar, bis das Protokoll des Agenten jede davon als Prompt anzeigt. Diese Karte hat keine Schaltfläche. Collie kann eine Nachricht nicht aus der Warteschlange des Agenten entfernen, daher gibt es kein Abbrechen: Um sie zurückzunehmen, stoppen Sie den Zug.

Wenn Collie nicht mehr feststellen kann, wohin eine eingereihte Nachricht gelangt ist, meldet die Karte Nicht bestätigt, anstatt zu verschwinden. Das geschieht, wenn der Agent zweimal hintereinander mit einem leeren Feld untätig bleibt, oder nach 30 Minuten ohne laufenden Zug. Ihre Schaltfläche Verwerfen entfernt die Karte und sendet nichts.

Das Zahnrad für die Anzeige enthält einen Schalter für Stretchtext-Antworten, der standardmäßig deaktiviert ist. Wenn er aktiviert ist, zeigen Chat, die vollständige Antwortkarte und der Verlauf eine mit dem cc-stretch-Plugin verfasste Antwort in ihrer Kurzform an, und ein Antippen einer Phrase öffnet sie. Ein {{name}} ohne Balken wird als name angezeigt.

Ein Punkt in Chat ist bekanntermaßen unvollständig: Hermes kann einen Durchlauf aus seinem Protokoll entfernen, nachdem Collie ihn gelesen hat, beispielsweise beim Komprimieren. Chat zeigt diesen Durchlauf dann weiter an, bis die Sitzung erneut gelesen wird. Im Terminal tritt dieses Problem nie auf.

Chat liest das Sitzungsprotokoll des Agenten, nicht den Bildschirminhalt. Daher erhält ein Bereich die Chat-Ansicht nur, wenn Collie weiß, welche Sitzung in diesem Bereich ausgeführt wird, und der Agent dies dem Multiplexer mitteilt. Der Bereich selbst kann dies nicht ermitteln.

MultiplexerWas die Sitzung meldetChat funktioniert für
HerdrDie passende Herdr-Integration für diesen Agenten, einmalig installiert mit herdr integration install <agent> (zum Beispiel claude, codex, opencode, pi, omp, grok, hermes), danach Neustart des AgentenJeden Agenten, der über eine Integration und ein Sitzungsprotokoll verfügt, das Collie liest
tmux, zellij, Tern (experimentell)Collies Beacon-HooksNur Claude Code, nach collie hooks install claude
tuiosDer tuios-DienstDie Agenten, die der Dienst meldet

OpenClaw benötigt keine Herdr-Integration für den Chat. Herdr leitet eine OpenClaw-Sitzung nicht weiter; Collie liest den Sitzungsnamen daher aus der Fußzeile von openclaw tui (agent main (main) | session work | …) und öffnet die Sitzungsdatenbank dieses Agenten unter $OPENCLAW_STATE_DIR oder ~/.openclaw schreibgeschützt. Setzen Sie openclaw_root, wenn sich der Statusordner an einem anderen Ort befindet. Der Bereich muss sich bei Herdr als Agent openclaw melden. Collie liest niemals die Konfigurationsdatei von OpenClaw oder dessen Gateway-Token.

Kiro benötigt ebenfalls keine Herdr-Integration: Herdr benennt einen kiro-cli-Bereichs-Agenten kiro, und Collie findet die Sitzung des Bereichs über die Sperre, die das laufende Kiro darin hält. Collie liest Kiro-V3-Sitzungen, die mit --v3 oder --agent-engine v3 gestartet wurden oder bei denen V3 in den eigenen Einstellungen von Kiro als Engine festgelegt ist. Eine V1- oder V2-Sitzung hat keinen Chat und keinen Verlauf. Setzen Sie kiro_root, wenn Kiro seine Sitzungen an einem anderen Ort speichert.

herdr integration status zeigt, welche Integrationen installiert sind. Ein Hook wird beim Start des Agenten eingelesen; ein Agent, der bei der Installation bereits lief, erfordert daher einen Neustart. Oh My Pi ist die omp-Integration, nicht die pi-Integration: Es handelt sich um zwei Agenten mit zwei Hooks, die dasselbe Protokollformat nutzen.

Ein neuer Agentenbereich zeigt Chat sofort an, noch bevor Daten zum Lesen vorliegen, mit einer einzelnen Zeile: „Nachricht senden, um zu beginnen“. Codex meldet seine Sitzung erst nach Ihrer ersten Nachricht, und pi schreibt sein Protokoll erst nach seiner ersten Antwort, daher starten beide auf diese Weise. Die Konversation erscheint, sobald eine vorhanden ist.

Ein Bereich fällt auf das Terminal zurück, wenn etwas geschieht, das Chat nicht anzeigen kann: Der Agent stellt Ihnen eine Frage, bevor Daten zum Lesen vorliegen, oder sein erster Durchlauf endet und es gibt noch immer keine Sitzung oder keine Protokolldatei zum Lesen. Das Terminal zeigt dann eine Zeile an, die das Fehlende benennt, und die Zeile ⋮ erklärt die Ursache. Ein erster Durchlauf, der eine Minute lang ohne lesbare Daten und ohne sonstiges Signal läuft, fällt ebenfalls zurück. Ein Bereich, der beim ersten Öffnen bereits beschäftigt war und keine Sitzung hatte, zeigt sofort das Terminal an. Sobald die Sitzung oder das Protokoll später eintrifft, kehrt der Bereich zu Chat zurück. Chat blendet die Zeile niemals aus, sodass Sie einen fehlenden Hook von einer fehlenden Funktion unterscheiden können. collie doctor listet diese Bereiche unter agent-sessions auf und nennt die Integrationszeile (integration-<agent>), die das jeweilige Problem behebt. Die Anleitung Fehlerbehebungsseite enthält die Schritte unter Ein Bereich hat weder Chat noch Verlauf.

Offline lesen

Wenn die Bridge nicht erreichbar ist, zeigt das Telefon die zuletzt gespeicherte Kopie an; Sie können sie lesen, aber nicht darauf reagieren.

Das Telefon speichert zwei Dinge für jeden Bereich: den zuletzt erfassten Terminaltext und die neuesten Chat-Durchläufe so, wie Chat sie dargestellt hat. Es speichert niemals den rohen Terminalbildschirm als Chat. Wenn Sie Collie öffnen und die Bridge nicht innerhalb von etwa anderthalb Sekunden antwortet, stellt das Telefon diese gespeicherte Kopie sofort dar und ersetzt sie durch Live-Daten, sobald die Bridge antwortet.

Eine gespeicherte Kopie unterscheidet sich optisch von einem Live-Bildschirm:

  • Die Agentenliste ist ausgegraut, jeder Status steht in der Vergangenheitsform („arbeitete“, „benötigte Sie“), und die Kopfzeile zeigt Stand: sowie den Zeitpunkt der Speicherung.
  • Ein Chat-Bereich zeigt „Gespeicherte Kopie vom“ und die Uhrzeit an. Die Bridge hält weiterhin die älteren Durchläufe vor.
  • Eingabeschaltflächen, Karten und die Senden-Schaltfläche sind deaktiviert. Ein Tippen auf eine gespeicherte Kopie erreicht den Agenten nicht.

Die Verbindungsleiste nennt eine von drei Ursachen:

LeisteUrsacheAnzeige auf dem Telefon
Sie sind offlineDas Telefon meldet, dass kein Netzwerk vorhanden istDie gespeicherte Kopie mit Zeitangabe
Keine Verbindung zur Bridge. Prüfen Sie Ihre Verbindung oder Tailscale.Jeder sonstige fehlgeschlagene LesevorgangDie gespeicherte Kopie mit Zeitangabe
KopplungsbildschirmDie Bridge hat dieses Gerät abgelehnt: nicht gekoppelt, widerrufen oder abgelaufenNichts gespeichert. Die Ablehnung löscht die Kopie

Ein VPN wie Tailscale lässt die Netzwerk-Kennzeichnung des Telefons im Flugmodus aktiv. Daher kann die Leiste "kein Netzwerk" nicht immer von "die Bridge ist ausgefallen" unterscheiden. Sie meldet dann nur, dass die Bridge nicht antwortet.

Während die App geöffnet ist, erscheinen die Leiste und die gespeicherte Kopie bei der ersten Abfrage ohne Antwort. Eine Abfrage wartet höchstens 6 Sekunden, eine Sekunde länger als die Bridge auf den Multiplexer wartet. Ein Serverfehler (5xx) zählt erst beim zweiten Mal in Folge. Was auf dem Bildschirm zu sehen ist, bleibt dort, und die erste Live-Antwort stellt die Live-Ansicht wieder her.

Direkt nach der Rückkehr zur App zählt die erste Abfrage ohne Antwort nicht allein. Eine Tailscale-Verbindung benötigt unter Umständen einen Moment für die Wiederherstellung. Das Telefon fragt daher eine halbe Sekunde später erneut an und zeigt die Leiste erst an, wenn auch diese Abfrage unbeantwortet bleibt.

Chat auf diesem Telefon behalten unter Einstellungen → Gerät legt fest, wie lange die Chat-Beiträge auf dem Telefon verbleiben:

WertFunktion
AusBehält keine Chat-Beiträge und löscht die bereits gespeicherten
1 TagStandard
7 TageBehält sie für eine Woche

Der Terminaltext hat eine eigene Lebensdauer von 24 Stunden, die durch diese Einstellung nicht verändert wird. In der Terminalansicht ist dieser Terminaltext die einzige Offline-Kopie.

Hinweis. Das Telefon speichert nur Text, den die Bridge bereits maskiert hat, und verwirft die Kopie eines Bereichs, während dieser nach einem Passwort fragt. Was das Telefon behält führt jedes Element, dessen Größenbegrenzung und dessen Lebensdauer auf.

Änderungen

Die Dateien-Ansicht zeigt im Abschnitt Änderungen, was ein Agent in den Git-Repositories seines Arbeitsbereichs geändert hat. Zwei gerätespezifische Einstellungen unter Einstellungen → Gerät → Änderungen bestimmen, wie weit nach Repositories gesucht wird:

EinstellungStandardFunktion
Nach Repositories in diesem Ordner suchenanListet auch Repositories in Ordnern unterhalb des Arbeitsbereichsordners auf, selbst wenn das übergeordnete Repository diese ignoriert
Suchtiefe2Wie viele Ordnerebenen unterhalb des Arbeitsbereichsordners die Suche umfasst, 1 bis 4

Unter Welcher Ordner und welche Repositories erfahren Sie, wie die Suche funktioniert.

Sprache

Die Benutzeroberfläche von Collie ist in zwölf Sprachen verfügbar. Konfigurieren Sie dies unter Einstellungen → Erscheinungsbild → Sprache.

  • English
  • Deutsch
  • Español
  • 한국어
  • 日本語
  • 中文
  • Русский
  • Italiano
  • Français
  • Português
  • Türkçe

Die Auswahl wird lokal im Browser pro Gerät gespeichert. Die Terminal-Spiegelung bleibt unübersetzt: Sie zeigt die Rohausgabe des Agents an, während Kurzantworten, Menübeschriftungen und Tastenbeschriftungen den zugrunde liegenden Bildschirm- oder Tastaturnamen entsprechen.

Der Titel einer Benachrichtigung folgt derselben Auswahl: „claude needs you“ erscheint als „claude 입력 대기“ auf einem Gerät mit koreanischer Spracheinstellung. Das Gerät übernimmt eine neue Auswahl, sobald Collie das nächste Mal darauf geöffnet wird; bis dahin bleiben die Titel in der vorherigen Sprache. Der Text unter dem Titel ist der eigene Name und Speicherort des Bereichs und wird nie übersetzt (Web Push).

Diese Seite auf GitHub bearbeiten

The rest of the documentation