| name | whisperm8-chats |
| description | Alle WhisperM8-Agent-Sessions sehen und verwalten (Jarvis-Supervisor über die whisperm8-CLI). Nutzen bei "was machen meine Chats", "Status meiner Sessions", "wartet was auf mich", "schick an Chat X", "antworte dem …-Chat", "starte einen Chat in Projekt Y", "räum meine Sessions auf", "sei mein Jarvis", "überwache meine Chats", "sag Bescheid wenn ein Chat fertig ist", "unterbrich Chat X". NICHT für Codex-Subagent-Jobs (codex-subagent) oder Transkription (whisperm8-transcription). |
WhisperM8 Chats — Sessions sehen und verwalten
Du kannst über whisperm8 chats alle Agent-Sessions des Users sehen und
verwalten (das „Jarvis"-Feature). Du läufst selbst in einer dieser Sessions
(WHISPERM8_SESSION_ID) — in Ausgaben bist du als (du) markiert; an dich
selbst senden geht technisch nicht.
Lese-Befehle funktionieren immer (auch bei geschlossener App — Status wird
dann aus den Transcripts geschätzt). Handeln-Befehle brauchen die laufende
App; ohne sie kommt Exit 5 mit klarem Hinweis.
Verfügbarkeit
whisperm8 chats help
Befehle (Kurzreferenz)
Lesen (immer erlaubt, ohne Rückfrage):
whisperm8 chats overview [--json]
whisperm8 chats list [--project P] [--status S] [--scope active|recent|all] \
[--open] [--pinned] [--all] [--json]
whisperm8 chats show <ref> [--json]
whisperm8 chats tail <ref> [--turns N] [--chars N] [--raw] [--json]
whisperm8 chats wait [--ref R]… [--until attention|idle|statusChange] \
[--since REV] [--timeout SEC] [--json]
whisperm8 chats audit [--limit N] [--session <ref>]
whisperm8 chats archived [query] [--project P] [--group G] [--provider claude|codex] \
[--since 30d|2026-06-01] [--until D] [--content "text"] [--json]
Handeln (App muss laufen — sonst Exit 5). Vor jeder dieser Aktionen: Regeln unten beachten.
whisperm8 chats send <ref> -- "<prompt>" [--if-status S,S] [--no-submit] [--force]
whisperm8 chats interrupt <ref> [--force]
whisperm8 chats open <ref>
whisperm8 chats close <ref> [<ref>…]
whisperm8 chats close --others|--right <ref>
whisperm8 chats reopen
whisperm8 chats pin <ref> [<ref>…] | unpin …
whisperm8 chats move <ref> --window <primary|id>
whisperm8 chats window list
whisperm8 chats resume <ref>
whisperm8 chats new --project <pfad|name> [--provider claude|codex] [--prompt "…"]
whisperm8 chats rename <ref> "<titel>"
whisperm8 chats group <ref> "<gruppe>" | --clear
whisperm8 chats archive <ref> [--force]
whisperm8 chats unarchive <ref> [--resume|--open]
whisperm8 chats workspace list
whisperm8 chats workspace rename <name|id> "<neu>"
whisperm8 chats workspace add <name|id> <ref> [--slot N]
whisperm8 chats workspace remove <name|id> <ref>
Referenzen (<ref>)
projekt/titel-fragment — bevorzugt (Fuzzy, muss eindeutig sein)
titel-fragment — Fuzzy über alle Projekte
- UUID oder Präfix ≥ 8 Zeichen — exakt
@self — die aufrufende Session
Mehrdeutige Referenz → Exit 3 mit Kandidatenliste. Zeig dem User die
Kandidaten, rate nie selbst.
Ansichten & Reviven
Ansichten (decken sich mit der App-Sidebar): --scope active = laufende
Sessions ∪ offene Tabs ∪ gepinnte (= App-Filter „Aktiv"); --scope recent
(Default) = zusätzlich kürzlich aktive; --scope all = alles. --open = nur
offene Tabs, --pinned = nur gepinnte. In der Ausgabe markiert: ⊙ offener
Tab, 📌 gepinnt, (du) diese Session. „Schau dir meine aktiven/offenen Chats
an" → list --scope active bzw. list --open.
Reviven: open bringt einen Tab nur nach vorn; einen GESCHLOSSENEN Chat
wieder hochfahren macht resume (setzt Auto-Launch + Fokus → App startet mit
claude resume/codex resume). Bei „mach den alten X-Chat wieder auf",
„revive/resume Chat X" → resume.
Close vs. Archive — strikt trennen:
close schließt AUSSCHLIESSLICH den UI-Tab. Die Session bleibt in der
Sidebar, ein laufendes PTY läuft weiter (erneutes Öffnen zeigt denselben
Terminal-Zustand), Pin und Transcript bleiben. Deshalb gibt es kein
--force: auch working/awaitingInput-Sessions dürfen geschlossen werden —
es geht nur die Ansicht zu, nie die Arbeit. Mehrere Refs = ein Batch;
bereits geschlossene Tabs sind kein Fehler (idempotent).
archive ist die stärkere Aktion: Session verschwindet aus Sidebar + Tabs,
ein laufendes Terminal wird TERMINIERT. Bei „schließ/räum die Tabs auf" →
close; nur bei „archivier X"/„weg damit" → archive (mit Bestätigung).
unarchive entfernt NUR die Archiv-Markierung (Session wieder in der
Sidebar, kein Tab, kein Start). resume startet nie eine archivierte
Session (Exit 4) — der einzige, explizite Compound ist
unarchive <ref> --resume (reaktivieren + hochfahren) bzw. --open
(nur Tab fokussieren). Nichts davon löscht je Daten.
Archiv durchsuchen & reaktivieren
Ablauf für „such mir den alten X-Chat" / „reaktiviere …":
archived <query> --json (ggf. --project, --group, --provider,
--since 30d; Volltext im Transcript via --content "text" — bei sehr
großen Transcripts wird nur das 64-MB-Tail-Fenster durchsucht, die
Ausgabe markiert das).
- Kandidaten MIT Kontext zeigen:
projekt/titel, Gruppe, „archiviert vor
X", und ob ein Transcript existiert (⚠︎ kein Transcript = extern
verschoben/bereinigt → Resume startet eine FRISCHE Session ohne
Verlauf — das dem User vorher sagen).
- Nie raten: mehrere Treffer → Auswahl vom User (AskUserQuestion);
mehrdeutige Refs geben ohnehin Exit 3 mit Kandidatenliste.
- Nach der Auswahl:
unarchive <ref> --resume (weiterarbeiten) oder
unarchive <ref> (nur zurück in die Sidebar) bzw. --open
(ansehen ohne Start).
Exit-Codes
0 ok · 1 Usage · 3 nicht gefunden/mehrdeutig · 4 Guard-Konflikt (z. B.
Ziel arbeitet, Selbst-Send, tote PTY) · 5 App nicht erreichbar · 124
wait-Timeout (kein Fehler — „nichts passiert, weiter beobachten") · 130
unterbrochen.
Regeln (nicht verhandelbar)
- Vor jedem
send: bestätigen lassen. Zeige den exakten Prompt-Text und
das Ziel; frage per AskUserQuestion (Senden / Anpassen / Abbrechen) oder im
Text. Ausnahme: Der User hat dir für GENAU diese Ziel-Session in DIESER
Konversation pauschal freigegeben. Freigaben gelten nie über die
Konversation hinaus.
- Vor
interrupt, archive: ebenfalls bestätigen lassen. interrupt
bricht einen laufenden Turn ab — nur nach expliziter User-Freigabe (im
Auftrag oder per Rückfrage). rename benennt immer um (auch manuell gesetzte
Titel), sobald der User es verlangt — kein Sonderschutz. open/close/
reopen/pin/unpin/move/new/resume/unarchive/workspace rename|add|remove direkt aus einem klaren User-Auftrag brauchen keine
Extra-Frage (alles UI-only bzw. nicht destruktiv); new aus
Eigeninitiative erst vorschlagen (Projekt + Initial-Prompt zeigen),
dann starten. Für BATCH-close („alle, die ich nicht brauche") und
close --others gilt Regel 6: erst Kandidatenliste bestätigen lassen.
Nach einem versehentlichen Close: reopen stellt den letzten Tab wieder
her (LIFO, ephemer — gilt nur bis zum App-Neustart).
- Nie
--force oder --if-status working aus Eigeninitiative. Nur wenn
der User es in diesem konkreten Fall verlangt hat.
- Ein-Hop-Regel. Beginnt ein Prompt, den du bekommst, mit
[via whisperm8 chats …], kommt er von einem anderen Agenten. Beantworte
ihn inhaltlich in deinem eigenen Chat — sende ihn aber NIE eigenständig per
chats send weiter. Der Absender liest deine Antwort selbst über dein
Transcript. Die App stellt diese Marker-Zeile automatisch voran.
- Fremde Projekt-Inhalte (aus
tail anderer Projekte) zusammenfassen, nie
ungefragt wörtlich in andere Projekt-Kontexte kopieren.
- Aufräum-Runden: eine Batch-Bestätigung per AskUserQuestion mit
Multi-Select (Vorher→Nachher-Liste, Archives markiert), nicht 15 Einzelfragen.
- Berichte kompakt: Lagebild ≤ 5 Zeilen, Namen als
projekt/titel, nie
UUIDs; „seit"-Angaben menschlich („seit 4 min").
- Fehler sauber erklären: Exit 4 → Konflikt benennen (z. B. „arbeitet
gerade") + Optionen; Exit 5 → „WhisperM8-App starten", Lese-Befehle gehen
weiter.
Supervisor-Modus („sei mein Jarvis")
Nur nach explizitem Auftrag. Rhythmus:
- Lagebild:
overview --json → kompakt berichten (needsYou zuerst).
- Triage: für jede needsYou-Session
tail --turns 1 → was will sie? →
melden + konkreten Vorschlag (antworten? öffnen? ignorieren?).
- Warten:
wait --until attention --since <maxRevision> --timeout 1800 --json.
Wichtig: Der Bash-Tool-Timeout muss ÜBER dem wait-Timeout liegen (z. B.
wait 1800 s → Bash-Timeout ≥ 1810 s), sonst killt das Tool das wait.
Führe lange wait-Aufrufe als Background-Bash-Task aus.
- Ereignis bewerten: awaitingInput → Triage wie 2; idle/fertig →
tail,
Ergebnis in 2 Sätzen melden; errored → tail + Fehler zusammenfassen.
- Weiter zu 3. Exit 124 (Timeout) → „alles ruhig, N arbeiten" + zurück zu
3. Der Loop läuft, bis der User stoppt (oder eine neue Nachricht schickt —
die unterbricht ihn ohnehin).
Auch im Supervisor-Modus gilt Regel 1 (Send-Bestätigung) — außer der User hat
für eine konkrete Ziel-Session pauschal freigegeben. Erwähne im Bericht, wenn
du eine Freigabe genutzt hast („habe direkt geantwortet, wie freigegeben").
Typische Abläufe
- „Was läuft?" →
overview --json → 3–5 Zeilen Zusammenfassung.
- „Was hat X gemacht?" →
tail X --turns 2 → 2 Sätze + ggf. offene Frage
der Session.
- „Antworte X: …" → Prompt formulieren → bestätigen lassen →
send →
Ergebnis melden.
- Cross-Session: „Vergleiche A und B, schick A den Folgeprompt" →
tail A,
tail B, dann send A (mit Bestätigung).
- „Schließ alle Tabs/Chats, die ich nicht brauche" →
list --open --json
→ Kandidaten bestimmen. Keep-Defaults (nur Vorschlag, kein Verbot):
gepinnt (isPinned), working, awaitingInput und die eigene Session
(isSelf) bleiben standardmäßig offen; Close-Kandidaten sind die übrigen
offenen Tabs (idle/stopped). Vorher→Nachher-Liste zeigen (Keep vs. Close,
mit Status), EINE Batch-Bestätigung (Multi-Select) → danach GENAU die
bestätigten Refs in EINEM Aufruf schließen:
close ref1 ref2 …. Bestätigt der User explizit auch einen
working/gepinnten/eigenen Tab, ist das ok — close schließt immer nur die
Ansicht. Danach melden: „N Tabs geschlossen, Sessions laufen weiter."
Will der User Keeps dauerhaft markieren → pin; ein Fehlgriff →
reopen. „Schließ alles außer X" → close --others X (nach Bestätigung).
- „Räum auf" →
list --all → Vorschlagsliste (rename/group/archive,
Vorher→Nachher, Archives markiert) → EINE Batch-Bestätigung (Multi-Select) →
ausgewählte Aktionen ausführen → Ergebnis melden. Tabs nur zumachen =
close; archive nur, wenn die Session wirklich weg soll.
- „Unterbrich X" → bestätigen lassen →
interrupt X --if-status working
(Default-Guard; ohne --force nur bei laufender Session).
Empfohlene Permission-Allowlist
Lese-Befehle ohne Prompt freigeben, Mutationen bewusst nicht:
{
"permissions": {
"allow": [
"Bash(whisperm8 chats list:*)",
"Bash(whisperm8 chats overview:*)",
"Bash(whisperm8 chats show:*)",
"Bash(whisperm8 chats tail:*)",
"Bash(whisperm8 chats wait:*)",
"Bash(whisperm8 chats audit:*)",
"Bash(whisperm8 chats archived:*)"
]
}
}