Aufgenommen auf der VM-Flotte (0.3.0, echte App): Popups nach Auto-
Aktivierung der paketierten Extensions; Panel-Shots über ein Demo-Projekt
mit Inhalten über die Panel-Kanaldateien.
- Neu cinnamon.rs: erweitert org.cinnamon enabled-extensions idempotent um
ai-control-popup@local; Aufruf im SNI-Zweig von init_tray (is_cinnamon).
- README: GNOME-/Cinnamon-Extension und KWin-Script mit Pfad und Aufgabe
benannt, Auto-Aktivierung dokumentiert (inkl. GNOME-Randfall nach
Erstinstallation); Cinnamon-X11-Aussage korrigiert (Initial-Fokus).
Erster Start aus DMG oder Downloads bietet einmalig an, sich nach
~/Applications zu kopieren und von dort neu zu starten — der Weg dorthin
braucht kein Administrator-Passwort, anders als /Applications. Ein DMG
kann das nicht selbst leisten: der Applications-Alias darin ist ein
absoluter Symlink auf /Applications.
Die Kopie erbt per ditto die Quarantäne des Downloads, deshalb wird sie
am Ziel gelöst — sonst käme beim Neustart erneut die Gatekeeper-Warnung
für dieselbe, gerade laufende App. Ablehnen merkt sich die App
(moveOfferDismissed), im Debug-Build fragt sie nie.
README: ~/Applications als gleichwertiger Installationsort, dazu der
Weg über System-Einstellungen -> Datenschutz & Sicherheit fuer alle, die
kein Terminal aufmachen wollen.
0.8 ist fuer den Windows-Stand reserviert.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
"Claude and Anthropic" führt jetzt mit den beiden Punkten, auf die es
ankommt: keine Verbindung zu Anthropic, und kein Einfluss auf Lizenz
oder Nutzung — was mit Claude Code erlaubt ist, ist es hier auch, nicht
mehr und nicht weniger; jede Anfrage läuft unter dem eigenen Login.
Die Belege bleiben darunter: keine Tokens in der App, /login macht
claude selbst, Credentials im Keychain, Warnung vor dem Datei-Fallback.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Neuer Abschnitt Architecture: die drei Prozessrollen des einen Binaries
(aus Project layout hierher gezogen, dort steht jetzt ein Verweis), der
gemeinsame Look über die Plattformen und der Anchor-Kontrakt als
Tabelle — ein Codepfad show_popup, drei Herkünfte der Platzierung.
Dazu der ehrliche Linux-Absatz: Desktop x Sessiontyp x Tray-Host ist
eine breite Matrix, die kein Release ganz testet; auf einer ungetesteten
Kombination läuft das Popup, kann aber beim ersten Mal woanders landen
als am Icon.
Die CSP-Zeile im Sicherheitsmodell nennt jetzt style-src ohne
unsafe-inline und den Grund, warum die Fenster-Styles in eigenen
CSS-Dateien liegen. An tauri.conf.json gegengelesen: unsafe-inline gibt
es nur in der devCsp.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Beides konnte die App längst, stand aber nur weiter unten zwischen den
Konzepten — für den Verbrauch gab es sogar einen Screenshot, aber keine
Zeile Text.
Zeitraum und Kostenangabe an der UI abgelesen: UsageList bietet 7 oder
30 Tage, die Spalte weist die Kosten als Schätzung aus.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Wer claude schon benutzt, hat einen fertigen Login in ~/.claude. Bisher
begann ai-control trotzdem bei null: jeder Pool war ein neu angelegtes
Verzeichnis, der erste Sessionstart verlangte /login. Ein Pool kann jetzt
stattdessen auf ein bestehendes Verzeichnis zeigen.
pool.json trägt dafür optional `dir` (home-kontrahiert). Der Pool-Ordner
ist dann nur die Hülle für diese Datei; pool_config_dir() löst auf und
ist die einzige Stelle, über die Sessionstart, Verbrauchsstatistik,
Panel-Provisionierung und Keychain-Name gehen.
Zeigt ein Pool auf claudes Default-Verzeichnis, bleibt CLAUDE_CONFIG_DIR
ungesetzt: claude nimmt dieses Verzeichnis von sich aus und damit den
unsuffixierten Keychain-Eintrag, an dem der bestehende Login hängt (am
Keychain gegengeprüft — "Claude Code-credentials" ohne Suffix neben den
suffixierten Pool-Einträgen). Ein Verweis auf ein anderes Verzeichnis
setzt die Variable wie gewohnt.
Das verwiesene Verzeichnis gehört der App nicht: dort entsteht nur die
Panel-Ausstattung (Skill, MCP-Eintrag, Freigabe-Ergänzung, alles
additiv), keine settings.json-Grundausstattung. Löschen trifft nur die
Hülle; Runtime-Symlinks und das Zurücksetzen des Keychain-Eintrags sind
gesperrt. Ein Verzeichnis kann nur ein Pool belegen, Ziele innerhalb von
pools/ sind ausgeschlossen.
In der UI erscheint der Knopf nur, wenn ~/.claude existiert und noch
kein Pool darauf zeigt; die Liste zeigt den Pfad unter dem Namen und
statt "Zurücksetzen" den Hinweis, dass die Anmeldung claude gehört.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
README trägt jetzt aICentral mit der Tagline "Get Claude Code organized"
als eigene Zeile, dazu ein Hinweis auf die Unabhängigkeit von Anthropic
(Claude/Claude Code als fremde Marken, rein beschreibend genannt).
Sichtbare Stellen mitgezogen: Hauptfenster-Titel, Überschrift der
Verwaltung, Seitentitel, Linux-Tray-Titel und der AppImage-Hinweis
unter GNOME. Technische Bezeichner bleiben ai-control — Binary,
Identifier, SNI-Id und der Popup-Fenstertitel, auf den KWin-Script und
GNOME-Extension matchen.
Außerdem im README: deploy-macos.sh und deploy-windows.ps1 ergänzt, die
Installationswege pro OS beschrieben (macOS nach ~/Applications, das
Build-Bundle wandert danach nach macos.noindex), Panel-Tabs englisch
benannt und die Zweisprachigkeit der Oberfläche erwähnt.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- SNI-Activate-Koordinaten gehen als Anchor::Click durch; Cinnamon liefert
echte Werte, bei (0,0) bleibt der Cursor-Fallback (KDE/XFCE).
- Neue Cinnamon-Extension ai-control-popup@local: platziert das Popup unter
Wayland am Zeiger (Work-Area-geklemmt, set_position ist dort wirkungslos)
und gibt ihm unter X11 den initialen Fokus (Muffins Focus-Stealing-
Prevention verwirft das present() der App).
- Extension in deb/rpm nach /usr/share/cinnamon/extensions paketiert.
- README: Cinnamon-Abschnitte und Installer-Teststand aktualisiert.
Verifiziert in der VM-Flotte: Cinnamon Wayland + X11, XFCE, KDE (Wayland),
GNOME (Wayland).
- Projekt-Config zieht von ai-control.json nach .ai-control/config.json um,
das Icon liegt daneben und synct mit dem Projekt.
- Jedes Projekt trägt eine UUID (id) und den Anzeigenamen (name) in der
Config; die UUID ist Registry-Schlüssel und project-Parameter aller
Commands, der Name reine Darstellung.
- Pool-Zuordnung ist maschinenlokal und liegt in der projects.json-Registry,
nicht mehr in der syncbaren Projekt-Config.
- open_terminal prüft die ID im Ordner gegen die Registry (verschobene oder
ersetzte Ordner scheitern laut).
- Import übernimmt eine mitgebrachte ID, legt Arbeitsordner und Archiv-Home
an und zieht die Archiv-Permission nach.
- Migration beim App-Start: Alt-Datei umziehen, Pool in die Registry,
Icons aus ~/.config/ai-control/icons ins Projekt, Registry auf UUIDs.
- ProjectConfig reicht unbekannte Keys per serde(flatten) durch den
Round-Trip (Regressionstest config_roundtrip_erhaelt_fremde_keys).
- Archiv-Home pro Projekt (archiveHome in ai-control.json); archive_panel
mit Ordner, Beschreibung und Schlagwörtern (Frontmatter + Zeitstempel-Stem)
- Archiv-Index (archive_index.rs): Scan mit Frontmatter, Wikilinks,
Backlinks; Wiki-Seiten als strukturierte Daten (Übersicht/Tag-Seiten)
- FTS5-Suche (archive_search.rs, rusqlite bundled): in-memory-Index pro
Anfrage; MCP search_archive und Panel-Suchfeld (search_run) teilen die Engine
- Panel: vier Puffer/Ansichten (Dokument, Befehle, Suche, Wiki) mit Tabs im
Fenster-Header; gemeinsame Verdrahtung panel-wiring.ts, Kachel-CSS,
Wiki-View mit Tag-Chips, Ordner-Sektionen und Backlinks
- Archivieren speichert offene Bearbeitung (flush); Tab-Wechsel speichert
statt zu blockieren; Fehler sichtbar als Panel-Toast
- Abgelöstes Fenster: rahmenlos (Linux), eigene Kopfleiste mit Tabs und
Fensterknöpfen, Theme-Kopplung über gemeinsames themes.ts
- MCP-Tools show_commands, show_archive; Befehls-History mit Kachel-Löschen