iris-claude-sessions: Memory von Claude Code anzeigen, bearbeiten, bereinigen, exportieren und importieren #203
Labels
No labels
herkunft/alpha-feedback
status
blockiert
status
zu-testen
typ
bug
typ
docs
typ
enhancement
typ
feature
typ
idea
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
iris/iris-plugins#203
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ziel
Das Plugin
iris-claude-sessionszeigt, bearbeitet, exportiert und importiert das Memory von Claude Code (~/.claude/projects/<kodierter Pfad>/memory/). Der Bearbeiten-Knopf öffnet einen Markdown-Editor mit Zusatzfunktionen. So lässt sich ein Memory auf eine andere Iris übertragen und vorher von Privatem bereinigen.Erweiterung des freigegebenen Plans (Issue #167, dort „Nicht Teil“ nicht berührt); der Plan ist gesperrt, deshalb eigenes Issue.
Befund
MEMORY.md(Index, eine Zeile pro Eintrag) plus eine Datei je Fakt mit Frontmatter (name,description,metadata.type= user | feedback | project | reference), Querverweise[[name]].Entwurf
Neuer Plugin-Blocktyp
memory_editor(WebView, Mustereditable_table/mask_editor,provided_block_types), kein App-Umbau für die Oberfläche.MEMORY.md+ Einzeldateien), rechts Markdown-Editor.~/.config/iris-private-words.txt. Funde markiert, Entfernen je Fund oder alle..mdoder.zip, Wahl „Ersetzen“ oder „Mergen“. Merge-Schlüssel istname:; bei Konflikt je Datei Behalten / Übernehmen / Beide;MEMORY.mdwird neu aufgebaut. Das Ergebnis steht im Editor, geschrieben wird erst bei „Speichern“.memory editschreibt das Canvas und startet einen losgelösten Wächter, der auf<Workspace>/canvas_response.jsonwartet (30 Minuten), selbst speichert undmemory_ergebnis.jsonschreibt;auswahlgibt das Ergebnis aus, das Modell meldet nur dieses. Vor dem Speichern liegt eine Kopie der alten Fassung untersicherungen/<Projekt>/<Zeit>/; nach dem Schreiben wird zur Kontrolle zurückgelesen. (Gebaut und am echten Klick auf dem MacBook bestätigt, Version 0.2.2.)memory list,memory read,memory save,memory export,memory import; Standardbibliothek, Tests gegen ein Testverzeichnis (Umgebungsvariable), nie gegen das echte~/.claude.Risiken / offene Fragen
Speichern über das LLMgelöst (0.2.2): Ein Skript kann den Klick selbst verarbeiten, weil die Appcanvas_response.jsonvor der Nachricht an das Modell schreibt. Ein wartender Hermes-Aufruf trägt nicht (das Modell setztetimeout: 60); der losgelöste Wächter schon. Kein App-Umbau nötig.Nicht Teil
Reihenfolge
memory list/read/savemit Tests (0.2.0).privat_muster.json) mit Tests.memory import/exportmit Tests.memory editmit Wächter, einfaches Textfeld im Canvas (0.2.0 bis 0.2.2, MacBook-Test bestanden).memory_editor(Dateiliste, Markdown-Editor, Privat-Check-Knöpfe, Import-Vorschau, Export) statt des Textfeldes.PR #204 gemergt: feat(claude-sessions): Memory von Claude Code lesen, prüfen und speichern (#203)
#204
Commits:
Stand: Schritte 1 und 2 (Grundlage ohne Oberfläche).
Geändert
claude_memory.py(neu): Memory-Projekte finden, lesen (Frontmatter tolerant, Rohtext byte-genau), speichern, Privat-Check.claude_sessions.py: neuer Befehlmemory list | read | check | save;Fehler,projekte_dir,daten_dir,papierkorb_dirkommen jetzt ausclaude_memory.py.privat_muster.json(neu): Muster für den Privat-Check, einzige Quelle für Skript und späteren Editor (nur Regex-Syntax, die Python und JavaScript gleich lesen).Verhalten von
memory savepapierkorb/memory/<Projekt>/<Zeit>), entfernt nicht mehr genannte.md-Dateien, lässt Fremddateien stehen, liest nach dem Schreiben zur Kontrolle zurück.Geprüft
memory listundmemory checkgegen das echte Memory (168 Dateien im größten Projekt): Format passt. Der Lauf deckte drei Fehlalarme auf (hf_hub_download,127.0.0.1, Bundle-ID….internal), die Muster sind nachgeschärft und mit Tests belegt.Nicht geprüft
memory savenie gegen das echte~/.claude(bewusst nur Testverzeichnis).pruefenmeldet drei Manifest-Punkte (Version, Changelog, system_prompt): betreffen die Veröffentlichung, nicht diesen Schritt.Offen
memory import/export.memory_editor. Schritt 5: Canvas-Anbindung und die zwei Risiken aus der Beschreibung (Speichern ohne LLM, Export aus der WebView).memorynoch nicht; kommt mit der Canvas-Anbindung.PR #205 gemergt: feat(claude-sessions): Memory zusammenführen, ersetzen, exportieren und importieren (#203)
#205
Commits:
Stand: Schritt 3 (Zusammenführen, Ersetzen, Export, Import) — weiterhin ohne Oberfläche.
Geändert
claude_memory.py:bundle_lesen,exportieren,zusammenfuehrenund Hilfen (Index-Zeilen, freie Dateinamen).claude_sessions.py:memory export PROJEKT --out X.zip [--datei NAME …]undmemory import PROJEKT QUELLE --modus ersetzen|mergen [--konflikt NAME=ENTSCHEIDUNG …] [--standard …] [--speichern].Verhalten
dateien,hinzugefuegt,geaendert,entfernt,unveraendert,konflikte,uebersprungen); er ist die Grundlage für die Anzeige im Editor. Erst--speichern(später: der Knopf „Speichern“) schreibt, übermemory savemit Sicherung im Papierkorb.name:(nicht der Dateiname). Neue Namen kommen dazu, der Index bekommt nur die neuen Zeilen, der Rest bleibt unberührt. Gleicher Name mit anderem Inhalt = Konflikt, Entscheidung je Name:behalten(Standard, nie ein Verlust),uebernehmen(Inhalt und Indexzeile ersetzt),beide(Kopie<name>-import.mdmitname: … (Import)). Gleicher Dateiname bei anderem Namen bekommt-2. Zweimal dasselbe mergen ändert nichts.iris-memory.json(Format, Zeitpunkt, Anzahl; keine Pfade) plus die .md-Dateien; ohne Auswahl mit MEMORY.md, mit Auswahl ohne Index (wird beim Import gebaut). Export überschreibt nie. Import liest auch eine einzelne .md.../x.md, Unterordner,__MACOSX, fremde Endungen und Nicht-UTF-8 werden übersprungen und im Ergebnis gemeldet.Geprüft
Nicht geprüft
~/.claude(--speichernnur gegen Testverzeichnisse).beidenur mit erfundenen Daten.exportliest den Stand auf der Platte.Offen
memory_editor(Dateiliste, Markdown-Editor, Privat-Check mitprivat_muster.json, Import-Vorschau, Abbrechen/Speichern).PR #206 gemergt: feat(claude-sessions): memory edit — Speichern per Canvas ohne Chat-Modell (#203)
#206
Commits:
Stand: „Speichern ohne LLM“ geprüft und als Mechanismus gebaut (
memory edit). Zum Testen auf dem MacBook gedacht; Oberfläche ist hier noch ein einfaches Canvas, nicht der spätere Editor.Befund (Code gelesen, App nicht gestartet)
AgentJobManager.submitCanvasschreibt zuerst<Workspace>/canvas_response.json(wenn der Snapshot einresponseFilePathhat, was die Datei-Schnittstelle immer setzt) und schickt danach den Text „Canvas-Auswahl bestätigt: …“ als Nachricht an Hermes. Die Antwortdatei existiert also vor und unabhängig vom LLM. Die Linux-Server-Variante (canvas_routes.py) schreibt dieselbe Datei.canvas_request.jsonwährend eines laufenden Hermes-Turns (Kommentar inAgentJob.swift: ein blockierter Tool-Aufruf darf dabei beliebig lange warten).canvas_response.jsonwarten. Der Klick wird dann vom Skript verarbeitet, nicht vom Modell. Kein App-Umbau nötig, daher kein Issue in iris/Iris.FOREGROUND_MAX_TIMEOUT); danach wird er zum Hintergrundprozess. Der Watcher der App läuft nur während eines Turns, weitere Canvas nach Turn-Ende würden also nicht mehr angezeigt. Die Nachricht „Canvas-Auswahl bestätigt“ geht trotzdem noch an das Modell (nach dem Turn); der Prompt sagt ihm, dass dann nichts mehr zu tun ist, undauswahlmeldetmemory_save/memory_cancelals erledigt.Geändert
memory edit PROJEKT DATEI --workspace <WORKSPACE> [--timeout S]: schreibt das Canvas (Inhalt als mehrzeiliges Feld, Knöpfe Speichern/Abbrechen, Privat-Check-Funde oben), wartet auf die Antwort der App und setzt sie um. Speichern:datei_speichern(ganzes Memory vorher im Papierkorb gesichert, nur diese Datei neu geschrieben, zur Kontrolle zurückgelesen). Status:gespeichert,abgebrochen,unveraendert,offen.offen;memory apply PROJEKT DATEI --antwort <WORKSPACE>/canvas_response.jsonspeichert später, wenn der Nutzer doch klickt (liest den Text aus der Datei, das Modell tippt nichts ab).canvas_response.jsonwird vor dem Schreiben entfernt (sonst gälte sie als Klick auf das neue Canvas); halb geschriebene Antworten werden abgewartet; ein Fehler der App (error) bricht mit Meldung ab.Geprüft
canvas_request.jsonwartet undcanvas_response.jsonschreibt: Speichern (inkl. abgeschnittenem Zeilenende), Abbrechen, unveränderter Text, alte Antwort zählt nicht, halbe Datei, Zeitablauf plusapply, Fehlerantwort, Privat-Check im Canvas,auswahlbei memory_*-Klicks.Nicht geprüft (Test auf dem MacBook, Iris dort pullen/installieren)
timeout600 wirklich so absetzt und der Turn dabei offen bleibt.running: die App stellt die Nachricht zurück, schreibt aber die Antwortdatei sofort).~/Library/Application Support/Iris/iris-claude-sessions/papierkorb/memory/…).Testanleitung: Im Chat sagen: „Bearbeite die Claude-Memory-Datei
<Name>.mdim Projekt<Projekt>.“ Canvas erscheint → Text ändern → „Speichern“. Erwartet: Skript-Ausgabegespeichertim Chat, Datei geändert, Sicherung im Papierkorb. Danach dasselbe mit „Abbrechen“.Offen
memory_editor(Schritt 4) anstelle des einfachen Textfeldes; der Mechanismus (Skript wartet auf die Antwortdatei, Editor-Stand im Feld<block>.result) bleibt derselbe.apply; die direkte Lösung wäre ein App-Hook für Canvas-Klicks (Issue in iris/Iris).PR #207 gemergt: chore(claude-sessions): Version 0.2.0 — Memory von Claude Code (#203)
#207
Commits:
Stand: Version 0.2.0 vorbereitet und veröffentlicht (auf Alfs ausdrücklichen Auftrag „Veröffentliche“, zum Test auf dem MacBook).
Geändert:
plugin.json(Version 0.2.0, Änderungstext),store/changelog.md(Abschnitt 0.2.0),docs/erste-schritte.md(Abschnitt Memory),store/description.md(ein Punkt),PLAN.md(Versionsliste, Stand, Lessons Learned).Geprüft: 74 Tests grün;
publish-plugins.sh iris-claude-sessions --dry-runohne Fehler (Build, Datenschutz-Scan über Manifest, Store-Texte, Anleitung und Paket).Nicht geprüft: Alles aus dem Stand-Kommentar zu
memory editbleibt offen (Test auf dem MacBook: wartender Aufruf mit timeout 600, Klick während des Wartens, Papierkorb-Sicherung, Verhalten des Modells nach dem Turn). Der Marktplatz-Weg (Update im Plugin-Manager) ist nicht ausprobiert.Grenzen: Erste Fassung mit einfachem Textfeld. Keine Store-Bilder. Das Issue bleibt offen (
status/zu-testen).Offen: WebView-Editor
memory_editormit Privat-Check-Knöpfen, Import-Vorschau und Export-Knopf; Canvas-Einstieg für Memory (bisher nur per Chat-Befehl).PR #208 gemergt: fix(claude-sessions): memory edit mit losgelöstem Wächter statt wartendem Aufruf (#203)
#208
Commits:
Stand: Praxistest auf dem MacBook (0.2.0) ergab, dass „Speichern ohne LLM“ im wartenden Aufruf nicht trägt. Umgebaut auf einen losgelösten Wächter. Noch nicht veröffentlicht.
Befund aus dem Test (Iris auf dem MacBook, Test-Memory
tmp-memtest)memory editab, das Canvas erscheint in der App.<Workspace>/canvas_response.jsonan, auch wenn der Aufruf längst abgelaufen ist.timeout: 60(Request-Dump:"timeout":60), obwohl der Skill „timeout 600“ verlangte; Ergebnis[Command timed out after 60s], Exit 124. Der Prozess wurde dabei nicht beendet (Waise).{"submitted_by":"memory_save","values":{}}: Die App schickt ein unbearbeitetes Textfeld nicht mit (CanvasTextInputViewsetztfieldValues[id]nur beim Tippen). Das Skript wertete das als Fehler.Geändert
memory editstartet einen losgelösten Wächter (start_new_session) und kehrt sofort zurück (Statuswartet); es ist keintimeoutmehr nötig. Der Wächter wartet 30 Minuten, speichert den Klick selbst und schreibt<Workspace>/memory_ergebnis.json.--vordergrundbehält das alte Verhalten.memory ergebnis --workspace …undauswahlbeimemory_save/memory_cancelgeben das Ergebnis aus (gespeichert,unveraendert,abgebrochen,fehler,offen,wartet). Skill und Systemprompt: nur melden, wasstatussagt, „gespeichert“ nie ohnestatus: gespeichert.unveraendert(kein Fehler).editlöst einen noch wartenden Wächter im selben Workspace über eine Kennung ab (sonst hätte dessen späteres „offen“ ein gutes Ergebnis überschrieben; im MacBook-Versuch aufgefallen, mit Test belegt).Geprüft
auswahlmit und ohne Klick).tmp-memtest:editkehrt in 0,17 s zurück; der Wächter überlebt das Ende der SSH-Sitzung; ein simulierter Klick (Antwortdatei) speichert den geänderten Text, das Backup liegt im Papierkorb, der Wächter beendet sich; zweiedithintereinander ergeben genau einen Wächter. Testdatei und Test-Papierkorb danach auf den Ausgangszustand zurückgesetzt.Nicht geprüft
auswahl?).Offen
memory_editor(Schritt 4) nach bestandenem Praxistest.PR #210 gemergt: chore(claude-sessions): Version 0.2.1 — Wächter für Memory-Klicks (#203)
#210
Commits:
Stand: Version 0.2.1 veröffentlicht (auf Alfs „Veröffentliche“, zum Test auf dem MacBook). Enthält die Umstellung auf den losgelösten Wächter aus PR #208.
Geändert:
plugin.json(0.2.1, Änderungstext),store/changelog.md,PLAN.md(Versionsliste, Stand).Geprüft: 81 Tests grün;
publish-plugins.sh --dry-runohne Fehler (Build, Datenschutz-Scan).Nicht geprüft: Praxistest von 0.2.1 mit echtem Klick in der App und echtem Hermes-Turn; Update über den Plugin-Manager auf dem MacBook.
Offen: Ergebnis des MacBook-Tests; danach WebView-Editor
memory_editor. Issue bleibt offen (status/zu-testen).PR #211 gemergt: fix(claude-sessions): Memory-Sicherungen in eigenen Ordner, Ergebnis mit eindeutigem Hinweis (#203)
#211
Commits:
Stand: Praxistest von 0.2.1 auf dem MacBook ausgewertet (Chat-Export
…irischat, plus Prüfung per SSH). Das Speichern ohne LLM funktioniert; Korrektur der Formulierung. Noch nicht veröffentlicht.Befund aus dem Chat
unveraendert).memory_ergebnis.json:gespeichert). Auf dem MacBook geprüft: Die Datei liegt an ihrem Platz mit der Änderung (192 Bytes, „Testzeile“), die alte Fassung (181 Bytes) liegt als Kopie im Sicherungsordner, kein Wächter-Prozess übrig.papierkorb/memory/…und das Ergebnisgesichert_inzeigte darauf. Nichts wurde verschoben. Bei „unverändert“ schrieb das Modell außerdem „papierkorblosen Status“ (sinnlos, aus demselben Wort).Geändert
<Daten>/sicherungen/<Projekt>/<Zeit>/stattpapierkorb/memory/…(getrennt vom Papierkorb der Sessions).memory edit/saveträgt einenhinweis: Datei liegt an ihrem Platz, nur eine Kopie der vorherigen Fassung als Sicherung, nichts verschoben, nichts gelöscht.gesichert_inist nur die Sicherung; nie von „verschoben“, „gelöscht“ oder „Papierkorb“ sprechen, nichts zurückholen. Canvas-Text und Anleitung angepasst.Geprüft: 81 Tests grün (Pfade auf
sicherungen, neuer Test aufhinweis). Der Chat-Export und der Zustand auf dem MacBook (lesend) belegen den Befund.Nicht geprüft: Ob das Modell mit dem neuen Hinweis das Ergebnis richtig wiedergibt (Praxistest nach der Veröffentlichung). Alte Sicherungen unter
papierkorb/memory/(nur auf dem MacBook, Testdaten) werden nicht verschoben.Offen: Veröffentlichung als 0.2.2 erst auf Alfs „Veröffentliche“; WebView-Editor
memory_editor.PR #212 gemergt: chore(claude-sessions): Version 0.2.2 — eindeutige Memory-Sicherung (#203)
#212
Commits:
Stand: Version 0.2.2 veröffentlicht (auf Alfs „ja bitte“ zur Frage, ob 0.2.2 veröffentlicht werden soll). Enthält die Korrektur aus PR #211 (Sicherungen in
sicherungen/, Ergebnis mit eindeutigem Hinweis).Geändert:
plugin.json(0.2.2, Änderungstext),store/changelog.md,PLAN.md(Versionsliste, Stand).Geprüft: 81 Tests grün;
publish-plugins.sh --dry-runohne Fehler (Build, Datenschutz-Scan).Nicht geprüft: Ob Hermes mit dem neuen Hinweis das Ergebnis richtig wiedergibt (Praxistest auf dem MacBook nach dem Update); Update über den Plugin-Manager.
Offen: Ergebnis dieses Tests; WebView-Editor
memory_editor. Issue bleibt offen (status/zu-testen).PR #213 gemergt: feat(claude-sessions): Memory-Editor als Canvas-Block, Einstieg über das Sessions-Canvas (#203)
#213
Commits:
Stand: Schritt 5 und 6 gebaut — Memory-Editor als Canvas-Block
memory_editorund Einstieg über das Sessions-Canvas. Noch nicht veröffentlicht (Version bleibt 0.2.2).Was neu ist
memory_editor(web/index.html+web/memory-logik.js, im Manifestprovided_block_typesundweb_view_path): links Dateiliste (Name, Typ, Marken geändert/neu/entfällt/gelöscht, ⚠ Funde, Haken für den Export, Filter, „nur mit Funden“), rechts Reiter Bearbeiten (Textfeld), Vorschau (kleiner Markdown-Renderer mit Kopfdaten) und Funde. Privat-Check mit „Entfernen“/„Stehen lassen“ je Fund, je Datei und für das ganze Memory (mit Rückfrage). Importieren …: .zip oder .md per Ablegen (irisFileDropped) oder Ordner-Auswahl (irisListDirectory), Mergen oder Ersetzen, Konflikte je Eintrag (behalten / übernehmen / beide), Vorschau im Editor, geschrieben wird erst beim Speichern. Datei löschen, Änderungen verwerfen, Nur-Lesen nach dem Absenden.{import-Plan, edits (nur geänderte Dateien), geloescht, export}überirisSubmitFieldValue; die Texte lädt die Seite selbst peririsFetchFile. Das Skript rechnet den Import beim Ausführen noch einmal selbst (claude_memory.endstand).memory editor PROJEKT --workspace … [--datei NAME]: schreibt das Canvas (Block plus Knöpfe Speichern / Exportieren / Abbrechen) und startet den Wächter wie beimemory edit. Speichern: ganzes Memory neu, Kopie der alten Fassung vorher insicherungen/. Exportieren: zip der angehakten Dateien in Downloads (IRIS_CLAUDE_EXPORT_DIRfür Tests), das Memory bleibt unverändert,verbleibende_fundeim Ergebnis. Abbrechen: nichts.auswahl-Zweigememoryundmemedit:<Projekt>).memory edit(einzelne Datei als Textfeld) bleibt als Ausweichlösung für eine App ohne Block-Unterstützung.Geprüft
tests/vektoren.json(ausclaude_memory.pyerzeugt, 52 Fälle: Frontmatter, Index, Zusammenführen/Ersetzen, Privat-Check) wird von Python und vonnodegeprüft. Der Test fand zwei Abweichungen: Fehlermeldungstext, und\b(Python Unicode, JavaScript ASCII), dafür laufen die Muster jetzt mitre.ASCII.tests/webkit_test.swift, echte WKWebView wie in Iris, Brücke nachgebildet, 45 Prüfungen): nimmt das echte Canvas ausmemory editor, bedient die Seite (Bearbeiten, Vorschau, Funde einzeln und alle entfernen, Löschen, Export-Auswahl, Import per Ablegen mit Konflikt und Zip-Müll, einzelne .md, falscher Dateityp, Nur-Lesen), schickt den gemeldeten Stand als Klick „Speichern“ an den Wächter und prüft, dass das Memory auf der Platte genau dem Endstand entspricht, den die Seite zeigte. Screenshots angesehen (Layout, Funde, Import-Dialog, Nach-Import-Ansicht).web/undmemory-logik.jssind drin.Nicht geprüft
irisFileDropped, Zusammenspiel mit den Canvas-Knöpfen, Text im Chat nach dem Klick). Die Brücke im Test ist nachgebaut nachCanvasPluginWebBlockView.swift.irisFetchFile/Ablegen gelöst (kein Speichern-Dialog nötig). Linux-Server als Gegenstelle bleibt außen vor.Offen: Veröffentlichung als 0.3.0 erst auf Alfs „Veröffentliche“ (Version, Changelog); danach Praxistest auf dem MacBook.
Korrektur zum Stand-Kommentar von PR #213:
tests/vektoren.jsonenthält 56 Fälle (nicht 52), der WebKit-Test 44 benannte Prüfungen (nicht 45). Der Rest des Kommentars gilt unverändert.PR #214 gemergt: chore(claude-sessions): Version 0.3.0 — Memory-Editor (#203)
#214
Commits:
Stand: Version 0.3.0 veröffentlicht (auf Alfs „veröffentliche“, zum Test auf dem MacBook). Enthält den Memory-Editor aus PR #213.
Geändert:
plugin.json(0.3.0, Änderungstext),store/changelog.md,PLAN.md(Stand).Geprüft: 100 Tests grün;
publish-plugins.sh --dry-runohne Fehler (Build mitweb/, Datenschutz-Scan über Manifest, Store-Texte, Anleitung und Paket).Nicht geprüft: Der Editor-Block in der echten Iris-App (Höhe, Drop aus dem Finder, Canvas-Knöpfe, Text im Chat nach dem Klick); großes Memory; Update über den Plugin-Manager. Ob das Plugin mit
provided_block_types/web_view_pathauf dem Mac sauber installiert wird, zeigt erst das Update.Offen: Praxistest auf dem MacBook; danach ggf. Korrekturen. Issue bleibt offen (
status/zu-testen).PR #215 gemergt: fix(claude-sessions): Knopf-Kennungen ohne „memory“, Modell hielt sie für den Hermes-Skill (#203)
#215
Commits:
Stand: Praxistest von 0.3.0 auf dem Mac (lokale Iris, Chat „Zeig mir die Claude Code Sessions“) — erster Klick auf „Memory von Claude Code“ schlug fehl. Ursache gefunden und behoben, noch nicht veröffentlicht.
Befund (Job-Daten, Hermes-Log und Request-Dump gelesen)
memory.auswahlaus und antwortete „Hier die letzten 5 Iris-Chats“ mitmemory-pills, mit der Begründung „Ich hole die Iris-Chips aus der Memory-Datenbank“: Es hat die Kennungmemoryfür den Hermes-Skillmemory(Iris-Gesprächshistorie durchsuchen) gehalten.memory_savefunktioniert; die Kennungmemoryist der härteste Fall, die anderen tragen dasselbe Wort.Geändert
memory:cc_liste(stattmemory),ccedit:<Projekt>(stattmemedit:),cc_save/cc_export/cc_cancel(stattmemory_save/memory_export/memory_cancel), Textfeldcc_text, Block-IDcc_editor(Ergebnisfeldcc_editor.result; der Blocktyp heißt weitermemory_editor).memoryoder einen anderen Skill zu laden; das „Memory“ hier ist das von Claude Code.Geprüft: 100 Tests grün (Kennungen in Skript, Tests und WebKit-Test angepasst).
Nicht geprüft: Ob das lokale Modell mit den neuen Kennungen und dem Prompt
auswahlaufruft (Praxistest nach der Veröffentlichung).Beobachtet, nicht behoben: In der Session-Liste erscheinen Sessions als „(OHNE TITEL)“ oder mit dem Titel „Iris Canvas-System Du kannst strukturierte UI-Blöcke …“: Das sind Claude-Code-Sessions, die Iris selbst gestartet hat; ihre erste Nachricht ist der vorangestellte Canvas-Systemprompt. Eigenes Thema (Titel aus der ersten echten Nutzernachricht).
Offen: Veröffentlichung als 0.3.1 auf Alfs „Veröffentliche“.
PR #216 gemergt: chore(claude-sessions): Version 0.3.1 — Knopf-Kennungen (#203)
#216
Commits:
Stand: Version 0.3.1 veröffentlicht (auf Alfs „veröffentliche“, zum Test auf der lokalen Iris). Enthält die Korrektur der Knopf-Kennungen aus PR #215.
Geändert:
plugin.json(0.3.1, Änderungstext),store/changelog.md,PLAN.md(Versionsliste, Stand, Lessons Learned zu Kennungen, die wie ein Skill heißen).Geprüft: 100 Tests grün;
publish-plugins.sh --dry-runohne Fehler (Build, Datenschutz-Scan).Nicht geprüft: Ob das lokale Modell mit den neuen Kennungen
auswahlaufruft und der Editor in der App erscheint (Praxistest).Offen: Ergebnis dieses Tests; Titel der von Iris gestarteten Sessions in der Liste (eigenes Thema). Issue bleibt offen (
status/zu-testen).PR #217 gemergt: feat(claude-sessions): Sitzungs-Wächter setzt alle Klicks des Sessions-Canvas ohne Modell um (#203)
#217
Commits:
Stand: Praxistest von 0.3.1 auf der lokalen Iris — der Klick auf „Memory von Claude Code“ führte wieder zu nichts. Ursache: ein kleines lokales Modell. Gebaut: Sitzungs-Wächter, der alle Klicks selbst umsetzt. Noch nicht veröffentlicht.
Befund (Job-Daten und Hermes-Log gelesen)
cc_liste). Nach dem Klick kam „Canvas-Auswahl bestätigt: Schaltfläche: cc_liste“ an; der Turn bestand aus einem Modellaufruf ohne Werkzeug (api_calls=1, tool_turns=0) und der Antwort „Der Klick hat keine weiteren Feldeingaben mitgebracht — die Liste war reine Anzeige, es ist also nichts zu tun.“swift-1.5-iq3_xxs(klein, stark quantisiert). Auch im ersten Turn improvisierte es (skill_view,terminal,write_filemit einem selbstgebauten Canvas, dann das richtige). Der Prompt war da und eindeutig; ein solches Modell befolgt ihn nicht verlässlich.Geändert
canvasstartet einen losgelösten Sitzungs-Wächter (Kennung/PID inmemory_waechter.json,art: sitzung), der aufcanvas_response.jsonwartet und jeden Klick umsetzt: Fortsetzen/Neue Session (Terminal), Umbenennen (Formular und Speichern), Papierkorb und Zurückholen, Zurück zur Liste, Memory-Projekte, Editor öffnen und darin Speichern/Exportieren/Abbrechen (Ergebnis-Canvas mit „Zurück zur Liste“ und „Memory-Projekte“). Nach jedem Klick schreibt er das nächste Canvas (atomar), bei Fehlern ein Fehler-Canvas; ein Klick beendet den Wächter nie. Wartezeit 30 Minuten ab dem letzten Klick; ein neuescanvas/memory editorim selben Workspace löst ihn ab.auswahlmeldet nur noch das Ergebnis des Wächters (status: vom_waechter_erledigtmitmeldung/ergebnis, oderwartet); ohne laufenden Wächter führt es den Klick wie bisher selbst aus. Protokoll insitzung_log.json.auswahlist alsauswahl_ausfuehrenherausgelöst und wird vom Wächter wiederverwendet.canvas_dateischreibt atomar.auswahlauf, berichtet nur dessen Ausgabe und führt nichts selbst aus.Geprüft
tests/test_sitzung.py(12 Tests, die App wird gespielt): Start und Ablösung, alte Antwort zählt nicht, Umbenennen/Papierkorb/Zurückholen/Zurück, Fehler und unbekannte Knöpfe beenden den Wächter nicht, Memory-Liste → Editor → Speichern (Datei, Sicherung, Ergebnis-Canvas, zurück zur Liste), Export, Abbrechen, kaputtes Editor-Ergebnis,auswahlmit Wächter und ohne, Wartezeit läuft ab.AgentJob.swift) prüft während jedes Modell-Laufs alle 0,5 s aufcanvas_request.jsonund noch einmal beim Ende; ein Klick startet immer einen Lauf, daher wird ein Canvas des Wächters angezeigt, solange der Lauf länger als etwa eine halbe Sekunde dauert.Nicht geprüft
Beobachtet, nicht behoben: Sessions mit dem Titel „Iris Canvas-System …“ oder „(ohne Titel)“ in der Liste (von Iris gestartete Claude-Code-Sessions); der erste Turn eines kleinen Modells baut manchmal ein eigenes Canvas, bevor das richtige kommt.
Offen: Veröffentlichung als 0.3.2 auf Alfs „Veröffentliche“; Praxistest auf der lokalen Iris.
PR #219 gemergt: chore(claude-sessions): Version 0.3.2 — Sitzungs-Wächter (#203)
#219
Commits:
Stand: Version 0.3.2 veröffentlicht (auf Alfs „Veröffentliche“, zum Test auf der lokalen Iris). Enthält den Sitzungs-Wächter aus PR #217.
Geändert:
plugin.json(0.3.2, Änderungstext),store/changelog.md,PLAN.md(Stand).Geprüft: 112 Tests grün;
publish-plugins.sh --dry-runohne Fehler (Build, Datenschutz-Scan).Nicht geprüft: Der Ablauf mit echten Klicks in der App (Canvas erscheint nach dem Klick, Satz des Modells dazu); sehr schnelle Modell-Läufe; Update über den Plugin-Manager.
Offen: Ergebnis des Praxistests; Titel der von Iris gestarteten Sessions in der Liste (eigenes Thema). Issue bleibt offen (
status/zu-testen).PR #221 gemergt: fix(claude-sessions): Wächter zustandslos, canvas direkt nach einem Klick nicht neu zeichnen (#203)
#221
Commits:
Stand: Chat-Export vom ersten Test mit 0.3.2 ausgewertet — der Sitzungs-Wächter funktioniert; aufgefallen ist, dass das Modell danach selbst
canvasaufruft und den Wächter ersetzt. Behoben, noch nicht veröffentlicht.Befund (Chat-Export,
sitzung_log.json, Workspace)canvasauf und sagte „Der Wächter erledigt das direkt.“cc_liste: Der Wächter schrieb das Canvas „Memory von Claude Code“ (Log: „Memory-Projekte als Canvas geschrieben.“). Klickccedit:…: Der Wächter schrieb das Editor-Canvas (Blockmemory_editor, 2 Blöcke).canvasaufgerufen (Wächter-Datei später als der letzte Log-Eintrag). Das ersetzte den Wächter, der sich den Editor-Kontext gemerkt hatte; Speichern im Editor wäre beim neuen Wächter ins Leere gegangen.Geändert
cc_save:<Projekt>,cc_export:<Projekt>,cc_cancel:<Projekt>; ein Klick enthält alles, was der Wächter braucht. Jeder Wächter kann jedes offene Editor-Canvas bedienen (auch nach einem Ersetzen).canvasdirekt nach einem umgesetzten Klick (unter 60 s) zeichnet nichts neu und meldetuebersprungen: truemit dem Hinweis, nichts weiter zu tun;--papierkorb,--sucheund--neuzeichnen immer. Prompt und Skill sagen es.Geprüft: 115 Tests grün (neu: Editor nach Ersetzen des Wächters bedienbar, Überspringen direkt nach dem Klick und seine Ausnahmen, Neuzeichnen nach einer Pause).
Nicht geprüft: Ob der Editor-Block selbst in der App richtig erscheint und bedienbar ist (der Export enthält nur das Canvas, keine Bildschirmaufnahme); Speichern/Exportieren im Editor mit echtem Klick.
Offen: Veröffentlichung als 0.3.3 auf Alfs „Veröffentliche“; der Editor-Praxistest in der App.
PR #222 gemergt: chore(claude-sessions): Version 0.3.3 — Wächter zustandslos (#203)
#222
Commits:
Stand: Version 0.3.3 veröffentlicht (auf Alfs „Veröffentliche das Plugin“). Enthält die Korrektur aus PR #221 (Wächter zustandslos,
canvasdirekt nach einem Klick nicht neu zeichnen).Geändert:
plugin.json(0.3.3, Änderungstext),store/changelog.md,PLAN.md(Versionsliste, Stand).Geprüft: 115 Tests grün;
publish-plugins.sh --dry-runohne Fehler (Build, Datenschutz-Scan).Nicht geprüft: Der Editor-Block in der echten App (Darstellung, Bedienung), Speichern/Exportieren mit echtem Klick; Update über den Plugin-Manager.
Offen: Praxistest des Editors in der App; Titel der von Iris gestarteten Sessions in der Liste (eigenes Thema). Issue bleibt offen (
status/zu-testen).Folge-Entscheidung (2026-10-22): Der Wächter ist die Übergangslösung für das, was ein autonomer Web-Block künftig selbst kann (eigene Aktionen als Skript, eigener Zustand, Start ohne Modell). Spezifikation: iris/Iris#149; Plugin-Seite: iris-plugins#225 (dort auch die Migration des Memory-Editors). Bis das Feature in einem stabilen Release steckt, bleibt der Wächter.