Symbol der App Calíope

Funktionen

Jede Fähigkeit, gegen den Quellcode geprüft.

Calíope wird als eine einzige Anwendung mit den unten aufgeführten Fähigkeiten ausgeliefert, verfügbar auf Mac, iPad, iPhone und Apple Vision Pro. Jeder Eintrag entspricht Code, der heute existiert — das ist ein Katalog, keine Wunschliste. Nutze die Kurzlinks, um zu einer Kategorie zu springen, oder geh die vollständige Liste durch.

Diese Seite beschreibt Calíope 1.7, die Version, die ich gerade baue. Die 1.6 ist im App Store für Mac, iPad, iPhone, Apple Watch, Apple TV und Apple Vision Pro. Das Changelog sagt, in welcher Version jede Funktion kam.

Verbindung und Sicherheit

Nativer SSH-Tunnel

“Dein SSH-Tunnel, ohne Terminal und ohne .ssh/config.”

Erreiche Server hinter einem Bastion-Host aus der macOS-Sandbox heraus — ohne lokales ssh, ohne ~/.ssh/config, ohne Berechtigungsgezerre.

SwiftNIO + NIOSSH. Authentifizierung per Passwort oder privatem Schlüssel (ed25519, ECDSA P-256/P-384/P-521). OpenSSH-Parser und Passphrase-Entschlüsselung im Arbeitsspeicher. Lokaler Proxy auf 127.0.0.1, per SSH direct-tcpip gebrückt.

TOFU-Prüfung des Host-Keys

“Warnt dich, wenn jemand deinen Tunnel abgefangen hat — bevor du etwas eintippst.”

Erkennt einen MITM-Angriff gegen deinen SSH-Bastion, ohne eine known_hosts auf der Platte zu hinterlassen.

Fingerprints im Keychain gespeichert. Die erste Verbindung verlangt eine ausdrückliche Bestätigung; ein geänderter Fingerprint schlägt hart fehl — entspricht StrictHostKeyChecking=yes.

Striktes TLS als Standard

“SSL, das wirklich schützt — kein bloßer Schalter.”

»SSL« zu aktivieren bedeutet verifiziertes SSL. Selbstsignierte Zertifikate verlangen eine CA oder ein ausdrückliches Opt-out mit sichtbarer Warnung.

Eine einzige Richtlinie: die Prüfung zu überspringen ist Opt-in; eine bereitgestellte CA erlaubt eine Prüfung ohne Hostname; ansonsten volle Verifizierung.

Keychain mit iCloud-Synchronisierung per Opt-in

“Deine Passwörter landen nur in iCloud, wenn du sie einlädst.”

Du entscheidest, welche Zugangsdaten zwischen deinen Geräten wandern. Standardmäßig keine.

Der Nur-lokal-Modus legt Zugangsdaten mit WhenUnlockedThisDeviceOnly ab; das Aktivieren der Synchronisierung migriert sie auf AfterFirstUnlock für den iCloud-Schlüsselbund. Der Umschalter ist idempotent.

Optionale biometrische Authentifizierung pro Profil

“Dein Fingerabdruck entsperrt die Produktion, nicht nur deinen schlafenden Mac.”

Setzt vor dem Verbinden mit Produktionsservern eine Touch-ID-/Face-ID-Hürde, pro Profil konfigurierbar.

Aufgebaut auf dem LocalAuthentication-Framework. Pro Verbindungsprofil aktivierbar.

Deterministischer Connection Pool

“Ein Connection Pool, der immer schließt — auch wenn etwas schiefgeht.”

Verbindungen, die keine Ressourcen lecken und die UI nicht blockieren, nicht einmal beim Sitzungswechsel.

SwiftNIO EventLoopGroupConnectionPool, mit einer Obergrenze von 5 Verbindungen pro Event Loop in einer Event-Loop-Gruppe mit einem einzigen Thread. Asynchrones Schließen mit Sicherheits-Timeout und ein sauberes SSH-Schließen, wenn das lokale Binding fehlschlägt.

Native Prepared Statements

“Vorbereitete Bindings statt String-Interpolation — von Grund auf im Stack.”

Die Werte, die Calíopes Werkzeuge für dich senden — ein Filter, eine bearbeitete Zelle, eine eingefügte Zeile —, werden nie an das SQL angehängt: Sie laufen über das Netzwerkprotokoll, getrennt vom Statement. Was du im SQL-Editor schreibst, geht so raus, wie du es geschrieben hast, wie in jedem Client.

Das Prepared Statement der jeweiligen Engine, in einem Client, den ich geschrieben habe: ohne Bindings → einfache Abfrage (COM_QUERY bei MySQL und MariaDB, die einfache Abfrage bei PostgreSQL); mit Bindings → COM_STMT_PREPARE und COM_STMT_EXECUTE bei MySQL und MariaDB, wobei das Statement auf jedem Weg geschlossen wird, auf dem die Verbindung lebt, sodass der Pool nie leckt, und Parse, Bind und Execute bei PostgreSQL, mit $n-Platzhaltern. SQL Server: sp_executesql über RPC, mit typisierten Parametern. Oracle Database: typisierte :1-Binds im Ausführungsaufruf. ClickHouse: typisierte {name:Type}-Parameter, als param_-Felder der HTTP-Anfrage gesendet. Bezeichner laufen weiterhin durch den zentralen Escape-Helper für die verbleibenden DCL-/DDL-Fälle.

Alternativer Host pro Profil

“Ein Server, zwei Adressen — und beide werden versucht.”

Denselben Server erreicht man oft vom Mac unter einer und vom iPad unter einer anderen Adresse. Gib dem Profil eine zweite Adresse, und Calíope versucht sie, wenn die erste nicht antwortet — mit gleichem Port und gleichen Zugangsdaten.

Das Ziel löst connectionEndpoints auf, nie das Host-Feld direkt: die drei Stellen, die einen Pool öffnen, bekommen den Endpoint. Feste Reihenfolge, erst Haupt-, dann Alternativ-Host, ohne zu merken, welcher gewann — genau dieser Zustand kann nicht zwischen Geräten reisen. Akzeptiert host:port für eine Route mit anderem Port. Mit SSH-Tunnel wird er ignoriert, und die Oberfläche sagt das: dort löst der Bastion den Host auf, nicht dein Gerät.

Umgebungsetiketten

“Du weißt, auf welchem Server du bist, bevor du etwas ausführst.”

Jede Verbindung kann ein Etikett mit dem Namen und der Farbe tragen, die du wählst – lokal, Test, Produktion –, und ein Band in seiner Farbe liegt über jedem Werkzeug, mit einer Schutzstufe, die vor Schreibendem nachfragen oder es ganz verweigern kann.

Ein einziger, einmal geschriebener Wächter beurteilt jede Anweisung, bevor sie gesendet wird; schreibgeschützt schaltet außerdem den Server selbst auf schreibgeschützt, wo er das kann – SET SESSION TRANSACTION READ ONLY bei MySQL und MariaDB, default_transaction_read_only beim Start bei PostgreSQL, readonly=2 bei jeder Anfrage an ClickHouse –, während bei SQL Server, Oracle, Redis und MongoDB nur der Client wacht. Es schützt vor Versehen, nicht vor Angreifern: Das ist Aufgabe eines schreibgeschützten Benutzers auf dem Server.

SQL-Editor und Produktivität

Kontextsensitive Autovervollständigung

“Der Editor weiß, ob du im FROM, im WHERE oder in der Spaltenliste bist.”

Tippe weniger und mach weniger Fehler, weil der Vorschlag versteht, wo du im Statement stehst.

Schlägt Spalten der aktiven Tabelle vor, Datenbanknamen, Schema-Tokens (Tabellen, Views, Funktionen), DML-/DDL-/Steuer-Keywords, Datentypen und SQL-Hilfsphrasen, gefiltert nach Engine.

Lexikalischer Linter in Echtzeit

“Unausgewogene Klammern erreichen nie den Server.”

Fängt den offensichtlichen Fehler ab, bevor der Server ihn ablehnt.

Erkennt nicht geschlossene Kommentare, nicht geschlossene Strings, unausgewogene Klammern und Bezeichner mit offenem Backtick. O(n)-Scan, ohne vollständigen Parser.

Formatierer, und ein Safe Mode

“Ein DROP geht nicht aus Versehen raus.”

Lesbare Formatierung für deine Queries und eine Sperre, die ein UPDATE oder ein DROP vom Server fernhält, bis du es wirklich willst.

Der Formatierer schreibt Keywords aus dem eigenen Vokabular der Engine groß. Der Safe Mode, standardmäßig an und pro Profil und Editor-Tab gespeichert, verweigert jedes Statement, das ALTER, CREATE, DELETE, DROP, GRANT, TRUNCATE, UPDATE, REPLACE oder RENAME enthält — im Editor, im Terminal und im SQL Player gleichermaßen. Er sucht das Wort, nicht das WHERE: Auch ein UPDATE mit WHERE wird aufgehalten, und nichts wird gesendet, bis du ihn ausschaltest.

Schwärzung von Zugangsdaten in Logs und Synchronisierung

“Synchronisiere deinen Verlauf, nicht deine Zugangsdaten.”

Dein Query-Log wird nicht zu einer Passwort-Datei in iCloud.

Neutralisiert IDENTIFIED BY, IDENTIFIED WITH … AS, IDENTIFIED BY PASSWORD, SET PASSWORD FOR und PASSWORD(…). Idempotente Schwärzung, angewendet, bevor das Query-Log nach CloudKit exportiert wird.

Visuelle Query-Builder

“Stell Queries per Klick zusammen; sie sind produktionsreif.”

Ein korrektes SELECT … WHERE … JOIN …, ohne die Syntax auswendig zu lernen.

Dedizierte visuelle Builder für die vier häufigsten Formen: SELECT, WHERE, UPDATE und CREATE einer Tabelle.

Symbol-Umbenennung mit Wortgrenzen

“Benenne id um, ohne client_id zu zerstören.”

Refaktoriere Bezeichner sicher, ohne ähnliche Namen zu zerschlagen.

Regex mit Wortgrenzen \b und korrektem Escaping. Trifft nie innerhalb längerer Bezeichner.

Quick-Open-Palette (⌘⇧O)

“⌘⇧O und du bist in der Tabelle, die du gesucht hast.”

Erreiche jedes Schema-Objekt, ohne den Baum hinabzuklettern.

Inkrementelle Fuzzy-Suche über Tabellen, Views, Routinen und Objekte, mit Navigation per Pfeiltasten und Enter zum Öffnen.

Snippet-Verwaltung mit Seeding pro Engine

“Deine Snippets passen sich der Engine an, nicht umgekehrt.”

Deine SQL-Rezepte immer griffbereit, gefiltert nach der Engine, die du gerade nutzt.

Gespeichert in snippets.json, das mit dem allgemeinen Sync-Schalter über iCloud reist und auf dem Gerät bleibt, wenn er aus ist. Jedes Snippet deklariert, für welche Engines es gilt (MySQL, MariaDB, PostgreSQL…). Das Verbinden mit einer neuen Engine fügt die Standards ohne Duplikate hinzu. Kategorisierung wird unterstützt.

Doku-Popovers für DDL und Funktionen

“Die Doku zu GROUP_CONCAT öffnet sich dort, wo du gerade tippst.”

Dokumentation, ohne den Editor zu verlassen oder einen Browser zu öffnen.

Zeigt das DDL des Schema-Objekts unter dem Cursor oder den Eintrag der Funktion: Signatur, Beschreibung, Parameter, ein Beispiel und die Version, mit der sie kam. Jede Engine hat ihre eigenen Einträge, SQLite und DuckDB eingeschlossen, ebenso die MongoDB-Operatoren im Werkzeug Abfrage. Ohne Maus: ⌥⌘?.

Erweiterter Zelleneditor und Inline-Bearbeitung von Zeilen

“Bearbeite die Zelle, sieh das SQL und entscheide.”

Ändere Daten schnell und sieh das exakte SQL, das ausgeführt wird, in der Vorschau.

Tabellenkalkulationsartige Bearbeitung über Ergebnissen, mit Vorschau des generierten UPDATE oder DELETE vor der Ausführung.

SQL Player — ein Skript, Schritt für Schritt

“Spiel dein Skript ab, pausiere und geh es Schritt für Schritt durch wie ein Video.”

Führe eine Migration Statement für Statement aus und prüfe jedes Ergebnis, bevor das nächste rausgeht.

Zerlegt das Skript des Editors in Statements und führt sie einzeln aus, von Hand oder im Takt, mit Steuerung für erstes, vorheriges, nächstes und letztes; die automatische Wiedergabe stoppt beim ersten Fehler. Jedes Statement zeigt seinen Status, seine Zeit und die Zeilen, die es geliefert oder geändert hat, und landet im Query-Verlauf. Der Safe Mode gilt auch hier.

SQL-Terminal im Editor

“Der mysql>-Prompt, ohne die App zu verlassen.”

Statement tippen, Return drücken, die Antwort als Text lesen — so wie der Kommandozeilen-Client, direkt neben deinem Skript.

Ein Panel unter dem Editor mit dem eigenen Prompt der Engine (mysql>, postgres=#…), Ergebnissen als ASCII-Tabelle, „Query OK“ mit den Zeilen, die laut Server geändert wurden, und den Warnungen des Servers darunter. Eigener Verlauf mit den Pfeiltasten auf dem Mac und mit Schaltflächen auf iPad, iPhone und Apple Vision Pro; jedes Statement landet auch im Verlauf der Sitzung. Der Safe Mode gilt auch hier.

Ergebnis-Diagramme

“Vom Ergebnis zum Diagramm, ohne etwas zu exportieren.”

Balken, Linien oder ein Kreis aus den Zeilen, die du gerade bekommen hast, in einem Panel des Editors.

Die Achsen werden für dich gewählt — die erste Textspalte für die Kategorien, die erste numerische für die Werte —, und du kannst sie ändern. Das Diagramm lässt sich als PNG oder PDF exportieren.

Eine Abfrage, zwei Datenbanken

“Ist Staging dasselbe wie Produktion? Frag beide gleichzeitig.”

Führe dieselbe Abfrage auf zwei Verbindungen aus und sieh Zeile für Zeile, was sich unterscheidet.

In zwei Datenbanken ausführen… schickt das Statement an beide und ersetzt das Raster durch einen Vergleich: geänderte Zellen markiert, Zeilen, die nur auf einer Seite stehen, und ein Filter, der nur die Unterschiede zeigt. Die Zeilen werden nach Position zugeordnet, und nur, wenn beide Seiten dieselben Spalten liefern.

iPad-Hilfsleisten über der Tastatur

“iPad-Tastatur mit SQL-Superkräften.”

Schnelle Touch-Vorschläge direkt über der Bildschirmtastatur.

Kontextuelle Leisten für das Objekt oder die Funktion unter dem Cursor, mit Schnellzugriff auf »DDL anzeigen« und Funktionsparameter.

Anpassbare Werkzeugleiste

“Deine Leiste, in deiner Reihenfolge.”

Jeder Mensch hat seine Ergonomie; DBAs ordnen einmal um und vergessen es dann.

Ordne Button-Gruppen neu an oder blende sie aus, über ein dediziertes Anpassungsblatt. Das Layout bleibt erhalten.

Globales Suchen und Ersetzen, in der ganzen Datenbank

“Eine Suche über alle Textspalten, die du hast.”

Suche eine Zeichenkette in allen Textspalten aller Tabellen auf einmal, sieh die Treffer pro Tabelle und Spalte, prüfe die vom Server berechnete Vorschau und ersetze in großem Umfang in einer Transaktion pro Tabelle.

Es werden zwei Zahlen gezeigt, nicht eine: die Kollation ignoriert meist Groß-/Kleinschreibung, REPLACE() nie — ohne diesen Hinweis meldet eine Massenänderung 300 Zeilen und ändert 100, ohne dass etwas fehlschlägt. Die Abweichung wird mit CAST(col AS BINARY) gemessen, nicht mit einer benannten Kollation. Generierte Spalten, Primärschlüssel und Unique bleiben standardmäßig außen vor — MariaDB akzeptiert das UPDATE einer generierten Spalte, meldet eine betroffene Zeile und ändert nichts. Escaping mit |, weil der Backslash unter NO_BACKSLASH_ESCAPES bricht.

Geodaten auf einer echten Karte

“Deine GEOMETRY-Spalten sind nicht mehr 25 Byte.”

Punkte, Linien und Polygone auf einer im Editor angedockten Karte, mit Satelliten- und Flachstil, Clustering und einer Taste zum Einpassen der Daten. Zieh eine Stecknadel oder einen Stützpunkt, und Calíope setzt die Anweisung zusammen — sie wird dir gezeigt, bevor etwas geschrieben wird.

Das WKB auf der Leitung ist immer (Länge, Breite); was sich ändert, ist der Text, denn MySQL 8 gibt unter einem geografischen SRID die Breite zuerst aus und MariaDB nie. Der Tausch lebt nur an der Textgrenze, wo der Parameter keinen Standardwert hat: ein Fehler dort erzeugt keine Fehlermeldung, er verschiebt die Zeile auf einen anderen Kontinent, und der Server akzeptiert das. Die SRID reist mit der Geometrie, ohne verlässlichen Primärschlüssel wird nicht bearbeitet und es wird gesagt warum, und CoreLocation kommt nirgends vor.

Berichte

Eine gespeicherte Abfrage mit deklarierter Ausgabe

“Eine gespeicherte Abfrage, die zweimal dasselbe antwortet.”

Speichere eine Abfrage mit deklarierten Parametern und definierter Ausgabe — welche Spalten, in welcher Reihenfolge, mit welchen Titeln und Formaten — und führe sie aus, wann du willst, von Hand oder geplant. Exportiere sie nach CSV, TSV, JSON, Markdown, HTML, XML, Text, Excel oder als paginiertes PDF. Die Berichtsdefinitionen reisen mit der iCloud-Synchronisierung; ihre Ergebnisse und ihr Ausführungsverlauf bleiben auf dem Gerät, das sie ausgeführt hat.

Parameter werden gebunden, nie in den Abfragetext eingefügt: nichts, was dort eingegeben wird, kann ändern, was sie tut — in keinem der beiden SQL-Modi. Der Spaltenvertrag wird zur Laufzeit geprüft — eine Spalte, die ausbleibt oder mit anderem Typ ankommt, wird angesagt statt stillschweigend gezeichnet. Jeder Lauf hinterlässt seine Zeile in einem mit den Backups geteilten Verlauf, mit Parametern, Zeilenzahl und ausführendem Gerät. Geplante Läufe öffnen ihre eigene Verbindung aus dem Profil und versprechen nie, bei geschlossener App zu laufen.

Drei Arten von Datenbank, eine Naht

“Derselbe Bericht, gegen drei verschiedene Arten von Datenbank.”

Dasselbe Artefakt und derselbe Bildschirm dienen deinem Produktions-MySQL, der .sqlite-Datei einer App, einer .duckdb-Datei und einer MongoDB-Sammlung.

Die Bericht-Engine hängt nicht am Datenbank-Provider: sie hat ihre eigene, schmalere Naht mit drei Mitgliedern und keinem mehr. Es gibt Implementierungen für relationale Datenbanken, für selbst geöffnete SQLite- und DuckDB-Dateien und für MongoDB mit find und aggregate. Eine Quelle hinzuzufügen heißt, dieses Protokoll zu implementieren, ohne die Engine anzufassen. Und keine Quelle behält Zustand vom vorherigen Lauf — als eine es tat, wurde der zweite Bericht mit den Spalten des ersten projiziert: eine Tabelle leerer Zellen, ohne Fehler und ohne Hinweis.

Berichte, die vorbereiten, bevor sie lesen

“Vorbereiten, indizieren und lesen — über eine einzige Verbindung, ohne deine Tabellen anzufassen.”

Berichte, die eine DBA als fünfstufiges Skript schreiben würde, passen in einen Bericht — ohne die Garantie aufzugeben, dass er deine Daten nicht anfasst.

Nicht jeder Bericht kommt aus einer Abfrage: eine Sitzungsvariable setzen, eine temporäre Tabelle in mehreren Durchgängen bauen, sie indizieren und am Ende lesen. Der ganze Stapel läuft über eine einzige geliehene Verbindung — bei einer Verbindung pro Anweisung existierte die temporäre Tabelle der ersten bei der letzten nicht mehr. Vorbereitungsanweisungen laufen über eine Positivliste und dürfen nur in temporäre Tabellen des eigenen Stapels schreiben; die Zeilenobergrenze gilt für die letzte.

Neun Exportformate, und ein PDF, das die Seite misst

“Neun Formate, und das PDF weiß, wo die Seite endet.”

Das PDF, das du nach oben schickst, sagt „Betrag“, und das CSV desselben Berichts sagt „Betrag“ — nicht total_eur.

CSV, TSV, JSON, Markdown, HTML, XML, Klartext und XLSX — von Calíope selbst als ZIP plus XML geschrieben, ohne Abhängigkeiten — dazu ein paginiertes PDF. Exportiert wird, was die Ausgabe deklariert, nicht was vom Server kam. Und die PDF-Umbruchhöhe wird aus Ascent, Descent und Zeilenabstand der Schrift gemessen statt mit einer Konstante geschätzt: eine Konstante halbiert die letzte Zeile jeder Seite, und das sieht man erst im Druck.

Administration und Katalog

Kataloge: ein navigierbarer Schema-Baum

“Dein Schema, in einem Baum, der widerspiegelt, wie du es denkst.”

Eine einzige Ansicht für den gesamten Server-Katalog.

Datenbanken → Tabellen / Views / Routinen / Trigger / Events, mit Lazy Loading und Kontextaktionen: DDL, Spalten, Indizes, Datenimport, WHERE-Builder.

Schemas vergleichen, mit ALTER-Generierung

“Vergleiche dein Schema, generiere das ALTER, prüfe es vor dem Anwenden.”

Befördere ein Staging-Schema in die Produktion, ohne Diffs von Hand zusammenzutragen.

Vergleicht zwei Schemata und generiert das ALTER TABLE, das nötig ist, um das eine in das andere zu überführen. Der Spaltenvergleich läuft parallel über Structured Concurrency. Quelle der Wahrheit: INFORMATION_SCHEMA.

Lokales DDL-Audit

“Weiß, welches DDL du ausgeführt hast, wann und gegen welchen Server.”

Nachvollziehbarkeit der Schema-Änderungen, ohne den Server anzufassen.

Jedes CREATE / ALTER / DROP / RENAME wird lokal mit Zeitstempel und Zielserver erfasst, im lokalen SQLite-Store der App.

Datenmigration zwischen Servern

“Von Staging in die Produktion in drei Klicks — mit Vorschau.”

Klone Objekte zwischen Umgebungen ohne mysqldump oder handgemachte .sql-Dateien.

Duale Verbindung (Quelle + Ziel), granulare Auswahl von Tabellen, Views, Routinen, Triggern und Events, mit Optionen für REPLACE, Daten einbeziehen oder Fremdschlüssel weglassen. SQL-Vorschau vor der Ausführung.

Erweiterte Objekt-Editoren

“Ein Editor pro Objekttyp, kein generisches .sql für alles.”

Bearbeite Routinen und Events korrekt, in einem Editor, der für das Objekt gedacht ist.

Dedizierte Blätter für gespeicherte Routinen, Trigger, Events, Views und Indizes. Jedes gibt wohlgeformtes DDL aus.

Tabellen-Builder

“Eine Tabelle, Spalte für Spalte entworfen, nicht abgetippt.”

Lege eine Tabelle an oder ändere eine bestehende — Spalten, Typen, Schlüssel, Indizes, Fremdschlüssel — und lies das CREATE oder ALTER TABLE, bevor es ausgeführt wird.

Jede Engine deklariert ihren eigenen Katalog an Typen und Optionen, also bietet der Builder an, was dieser Server hat, Sortierschlüssel und Skip-Indizes von ClickHouse eingeschlossen. Eine Tabelle zu ändern vergleicht sie mit einem Schnappschuss des Originals und schreibt das ALTER TABLE für das, was sich geändert hat, und nichts sonst. Öffnet sich aus den Katalogen.

Tabellenwartung

“CHECK, REPAIR, OPTIMIZE, ANALYZE und CHECKSUM, auf einen Knopfdruck.”

Wartung deiner Tabellen, unter MySQL, MariaDB, TiDB, PostgreSQL, SQL Server, Oracle Database und ClickHouse, ohne die Befehle auswendig zu lernen.

Führt unter MySQL und MariaDB CHECK TABLE, REPAIR TABLE, OPTIMIZE TABLE, ANALYZE TABLE und CHECKSUM TABLE aus, unter PostgreSQL ANALYZE sowie VACUUM und REINDEX TABLE CONCURRENTLY, unter SQL Server UPDATE STATISTICS, DBCC CHECKTABLE und den Neuaufbau der Indizes und bei ClickHouse CHECK TABLE und OPTIMIZE (ganze Tabelle oder eine Partition) und bei Oracle Database die Statistiken mit DBMS_STATS, jeweils mit Fortschritts-Feedback.

Benutzerverwaltung: Benutzer und Rechte

“GRANTs und REVOKEs — mit Kontrollkästchen.”

Verwalte Server-Benutzer, ohne jedes GRANT von Hand zu schreiben.

CREATE / ALTER / DROP USER, dazu GRANT und REVOKE über eine dedizierte UI.

Index-Berater und -Editor

“Die Indizes, die du zu viel hast, und die, die dir fehlen — mit Belegen.”

Erkennt redundante oder fehlende Indizes anhand von Daten, die der Server ohnehin bereitstellt.

Eine Berateransicht, die die Index-Nutzung analysiert, samt einem Editor für den Index-Katalog.

Spalten-Profiler

“Profiliere die Spalte, statt die Daten zu erraten.”

Verstehe die Qualität deiner Daten, bevor du die analytische Query schreibst.

Statistiken einer Spalte des geladenen Ergebnisses: Nulls und ihr Anteil, eindeutige Werte, Minimum, Maximum und Mittelwert sowie die zehn häufigsten Werte, mit einem Balkendiagramm der ersten acht.

Interaktives ER-Diagramm

“Das ER-Diagramm, das du nicht mehr zeichnen musst.”

Dokumentiere Beziehungen, ohne Kästchen in Miro zu malen.

Automatische Generierung aus dem aktiven Schema, mit Visualisierung der Fremdschlüssel.

MongoDB

MongoDB

“Dokumentdatenbanken, in ihrem eigenen Vokabular.”

Sammlungen und Dokumente durchsuchen, als JSON bearbeiten, Filter und Aggregations-Pipelines schreiben, Indizes verwalten und Server, laufende Vorgänge und Benutzer ansehen — ohne die App zu verlassen, die du schon für MySQL nutzt.

Eigenständiges Werkzeug: Nichts von MongoDB berührt die relationale Provider-Schicht. Dokumente erscheinen als zusammenklappbare Bäume mit dem Typ jedes Werts (ObjectId, decimal128, Datum, Binärdaten), denn eine Sammlung hat kein Schema und zwei benachbarte Dokumente haben womöglich kein Feld gemeinsam. Erweitertes JSON in beide Richtungen mit eigenem Parser, sodass Feldreihenfolge und Zahlenbreite den Hin- und Rückweg überstehen. Nutzt Verbindungsprofil, Schlüsselbund und den nativen SSH-Tunnel weiter. Seitenweise Cursor, die beim Verlassen geschlossen werden. Sechs Werkzeuge im Navigator: MongoDB-Sammlungen, MongoDB-Abfrage, MongoDB-Indizes, MongoDB-Server, MongoDB-Befehle und MongoDB-Profiler.

Redis und Valkey

Redis

“Schlüssel, Speicher und Befehle — keine Tabellen, die so tun als ob.”

Eine Redis-Sitzung öffnet sieben eigene Werkzeuge: Schlüssel-Explorer, Server-Übersicht, Speicheranalyse, Langsame Befehle, Verbundene Clients, Befehlskonsole und Knotentopologie. Du siehst, welches Präfix den Speicher frisst, welcher Befehl die Schwelle überschritten hat und welchen Client du trennen solltest — in derselben App, die du für SQL nutzt.

Ein eigener RESP-Client, außerhalb der relationalen Provider-Schicht. Schlüssel werden mit SCAN durchlaufen, nie mit KEYS, und keine Sammlung wird ganz gelesen — ein großes HGETALL blockiert den Server genauso. Im Cluster lädt MOVED die Slot-Karte neu und ASK nicht; ein Cluster wird nicht über einen SSH-Tunnel geöffnet, weil er Adressen ankündigt, die der Tunnel nicht erreicht, und die Sitzung sagt das, bevor sie öffnet. Die Konsole verweigert, was Zustand auf der Verbindung hinterlassen würde (MULTI, WATCH, SUBSCRIBE…), und blockierende Befehle ohne Timeout. Die Schwelle des Slow Logs ist in Mikrosekunden, und so steht sie auch da.

Valkey

“Dieselben sieben Werkzeuge, beim offenen Fork.”

Valkey, der Redis-Fork der Linux Foundation, öffnet sich in denselben sieben Werkzeugen: Schlüssel, Server, Speicher, langsame Befehle, Clients, Konsole und Topologie, Cluster inklusive. Das Server-Panel zeigt die eigene Version und den Modus von Valkey, der Prompt der Konsole lautet valkey>, und Verbindung testen erkennt es und bietet „Valkey verwenden“ an.

Derselbe für Redis geschriebene RESP-Client, weil Valkey dasselbe Protokoll spricht: Das Produkt wird aus der Begrüßung des Servers gelesen, nie aus einer Namensliste, und was sich zwischen beiden ändert, ist ein deklarierter Unterschied, keine Kopie des Codes. Gemessen gegen Valkey 8.0 und 9.1, einzeln und im Cluster mit wandernden Slots. Snippets, Berichte und der KI-Assistent arbeiten ebenfalls mit Valkey, und die zwölf Redis-Kapitel des DBA-Handbuchs sagen, wo es abweicht. Valkey 8.0 oder neuer.

Cassandra und ScyllaDB

Apache Cassandra

„Keyspaces, der Ring und CQL – keine verkleideten Tabellen.“

Eine Cassandra-Sitzung öffnet sieben eigene Werkzeuge: CQL-Abfrage, Keyspace-Explorer, Cluster, Knoten, Verbundene Clients, Traces und langsame Abfragen sowie Rollen und Berechtigungen. Du wählst die Konsistenz jeder Abfrage und liest ihre Ergebnisse Seite für Seite, siehst, wie der Ring seine Tokens verteilt und ob alle Knoten beim Schema übereinstimmen, bearbeitest eine Zeile über ihren vollständigen Primärschlüssel und tracst eine Abfrage, um zu lesen, wohin ihre Zeit ging – in derselben App, die du für SQL nutzt.

Ein eigener Client für das native CQL-Protokoll, Version 4, außerhalb der Schicht der relationalen Provider und nach der veröffentlichten Spezifikation geschrieben: Anmeldung mit Passwort, TLS mit optionalem Client-Zertifikat, SSH-Tunnel und ein Ausweich-Host, falls der erste nicht antwortet. Gebundene Werte gehen über Prepared Statements, und eine Zeile wird nur über ihren vollständigen Primärschlüssel bearbeitet, als leichtgewichtige Transaktion, nach einer Bestätigung, die nennt, was sich ändert. Was nodetool tut – reparieren, kompaktieren, Snapshots – bleibt draußen, und es gibt keine Sicherung: Die von Cassandra ist ein Snapshot der Dateien jedes Knotens. Gemessen gegen Cassandra 5.0.9, auf einem Knoten und auf einem Ring aus drei. Cassandra 4.1 oder neuer.

ScyllaDB

„Dieselben sieben Werkzeuge, bei der Neufassung in C++.“

ScyllaDB öffnet sich in denselben sieben Werkzeugen. Der Tab Knoten liest, was ScyllaDB über sich selbst veröffentlicht, Traces und langsame Abfragen nimmt das Log langsamer Abfragen hinzu, das ScyllaDB führt, und Verbindung testen erkennt es und bietet „ScyllaDB verwenden“ an.

Derselbe für Cassandra geschriebene CQL-Client, weil ScyllaDB dasselbe Protokoll spricht: Das Produkt wird aus den SCYLLA_*-Schlüsseln gelesen, die der Server vor der Anmeldung schickt, nie aus einer Namensliste, und was sich zwischen beiden ändert, ist ein deklarierter Unterschied, keine Kopie des Codes. Gemessen gegen ScyllaDB 2026.3.3. Snippets, Berichte, das Query-Log und der KI-Assistent arbeiten ebenfalls mit Cassandra und ScyllaDB, und das DBA-Handbuch hat elf Kapitel zu Cassandra und ein zwölftes darüber, worin sich ScyllaDB unterscheidet. ScyllaDB 2025.1 oder neuer.

Ohne Server

SQLite-Editor

“Zwei Engines, eine App: dein entferntes MySQL und dein lokales SQLite.”

Öffne und bearbeite die .sqlite einer iOS-App oder eines Python-Skripts im selben Werkzeug, in dem du MySQL verwaltest — mit einer expliziten Transaktion, bevor etwas geschrieben wird.

Eigenständige Schicht (SQLiteConnection-Actor über der C-API des Systems — ohne Server-Treiber) mit Struktur · Daten · SQL ausführen · Pragmas: Designer für Tabellen, Indizes und Views, Umbenennen, Suche und Filter, Paginierung mit derselben Seitengröße wie im SQL-Editor, Sortierung, erweiterter Zelleneditor, SQL ausführen mit Syntaxhervorhebung, Autovervollständigung aus dem Schema der Datei und Zeilengrenze für die Ergebnisse, Speichern/Verwerfen-Transaktionen, Wartung (integrity_check, VACUUM, ANALYZE, REINDEX), editierbare Pragmas sowie CSV-, JSON- und SQL-Import/Export. Sandbox-fähig über Security-Scoped Bookmarks. Nur unverschlüsselte Datenbanken.

DuckDB-Editor

“Analytik auf dem eigenen Rechner: eine spaltenorientierte Engine ohne Server.”

Öffne eine .duckdb-Datei oder frage ein Parquet, ein CSV oder ein JSON dort ab, wo es liegt — ohne Import und ohne Server, in derselben App, in der du MySQL verwaltest.

DuckDB 1.5.5 in die App kompiliert (lokales SPM-Paket, DuckDBKit über die C-API), außerhalb des Datenbank-Providers wie der SQLite-Editor. Struktur · Daten · SQL ausführen · Einstellungen, mit Sequenzen, Typen und Makros im Baum, SUMMARIZE, Zeilengrenze und Stopp bei langen Abfragen, Export und Import der ganzen Datenbank, Sichern unter… für Datenbanken im Arbeitsspeicher und das Anhängen einer weiteren DuckDB-Datei nur lesend. Erweiterungen werden nicht geladen: die vier mitgelieferten sind alles. Seit 1.7 ist DuckDB ein Framework, das die App mit ihrer Übersicht-Erweiterung (Quick Look) teilt: Die Leertaste im Finder oder die Vorschau in der Dateien-App liest eine .duckdb- oder Parquet-Datei mit derselben Engine, und eine .parquet-Datei, die aus dem Finder oder der Dateien-App geöffnet wird, landet hier, in einer Datenbank im Arbeitsspeicher, mit fertig geschriebener Abfrage.

Dateivorschau

“Eine Datei zu lesen sollte keine Verbindung brauchen.”

Lies die .md der Dokumentation, die .sql eines Kollegen, die .json der Konfiguration, eine exportierte .csv, eine zugeschickte .rtf oder das .log des Servers, ohne die App zu verlassen, ohne Verbindung und ohne Gefahr, versehentlich etwas auszuführen.

Schreibgeschützt, eine Datei auf einmal, nach Endung aufgelöst: eigener Markdown-Renderer (ATX und Setext, verschachtelte Listen, Checklisten, Code mit Fence und mit vier Leerzeichen eingerückt, Zitate, Trennlinien, GFM-Tabellen), SQL-Highlighter, JSON-Formatierer, CSV-Leser nach RFC 4180 mit Trennzeichenerkennung und ein RTF-Leser, der Struktur und Hervorhebungen bewahrt — Überschriften, verschachtelte Listen, Fett, Kursiv, Unterstreichung, Durchstreichung, Links und Ausrichtung — während Schriftart, Schriftgrade und Farben die von Calíope bleiben, damit der Text mit der dynamischen Schriftgröße skaliert und in beiden Erscheinungsbildern lesbar ist. Alles wird außerhalb des Main-Threads geparst und erreicht die View als inerte Daten. Überwacht den Pfad der Datei mit DispatchSource und übersteht damit atomare Speichervorgänge. Deklarierte Obergrenzen, im Fuß genannt: 5 MB Lesen, 500 KB SQL-Hervorhebung, 2 MB JSON-Formatierung, 10 000 Zeilen und 64 CSV-Spalten. Öffnet nie das Netzwerk — entfernte Markdown-Bilder zeigen ihren alt-Text.

KI-Assistent, mit oder ohne Schlüssel

Bring Your Own Key. Der Kauf enthält keine KI-Credits — du nutzt deinen eigenen API-Key. Das wird an der Paywall offen erklärt: »Der Assistent funktioniert ganz ohne Key mit Apple Intelligence oder Ollama; die Cloud-Anbieter (OpenAI, Google Gemini, Anthropic Claude) verlangen deinen eigenen Key, der nicht im Kauf enthalten ist.«

Mit Apple Intelligence verlässt nichts das Gerät; mit Ollama geht nichts über den Rechner hinaus, auf den du ihn richtest. Mit OpenAI, Gemini oder Claude geht das Schema der aktiven Datenbank — Tabellennamen, Spalten und Fremdschlüssel — sehr wohl an diesen Anbieter, unter deinem eigenen Key. Zeilen und Zugangsdaten nie. Außer du entscheidest anders: Der Schalter Schema an das Modell senden im Bereich des Assistenten selbst entscheidet das vor jeder Frage und bei jedem Anbieter. Ist er aus, wird nichts vom Schema gesendet — nicht einmal die Tabellennamen —, und du nennst die Tabellen selbst in deiner Frage. Auf macOS kann Calíope außerdem als MCP-Server für einen KI-Client auf demselben Mac arbeiten: nur lesend, auf 127.0.0.1, ab Werk aus.

Apple Intelligence und Ollama, ohne Key

“Zwei Anbieter, die nichts kosten und nichts verlangen.”

Apple Intelligence führt das Systemmodell auf deinem eigenen Gerät aus: kein Key, kein Konto, keine Kosten — und deine Frage verlässt das Gerät nicht. Ollama führt offene Modelle dort aus, wo du willst — dein Rechner oder einer in deinem Netz —, und Calíope spricht mit ihm unter der Adresse, die du einträgst.

Apple Intelligence über FoundationModels; es wird nur angeboten, wo das System sagt, dass es da ist. Ollama über das OpenAI-Protokoll gegen deine eigene Basis-URL, ohne Authorization-Header und mit ungefilterter Modellliste — die Namen sind die, die du heruntergeladen hast. Passt das Schema nicht in das lokale Fenster, sagt der Assistent das im Gespräch und schlägt vor, was zu tun ist.

Anbieter OpenAI, Gemini und Claude

“KI, die mit deinen Tokens läuft, nicht mit deiner Rechnung.”

Nutze das Modell, für das du ohnehin schon zahlst, und hänge nicht davon ab, dass Calíope die Preise pro Token erhöht.

OpenAI (Modelle gpt-, o1, o3 und o4) mit Bearer-Token. Google Gemini mit API-Key; gefiltert auf Modelle, die generateContent bereitstellen. Anthropic Claude (claude-*) mit x-api-key und dem System-Prompt in einem eigenen Feld (nicht innerhalb von messages). System-Prompt mit dem Kontext des aktiven Schemas, der die letzten drei Austausche behält.

Schwärzung des API-Keys in Fehlern und Logs

“Dein Key taucht nie in einem Stack Trace auf.”

Falls eine Fehlermeldung in einen Screenshot oder einen Slack-Kanal durchsickert, wandert dein API-Key nicht mit.

Maskierung per Regex für sk-* (OpenAI), AIza* (Gemini), sk-ant-* (Anthropic Claude, inklusive sk-ant-api03-…) und Bearer … in jeder Fehlermeldung des Anbieters.

Exponentielles Backoff mit Retry-After

“Wenn OpenAI sagt warte, wartet Calíope genau so lange.”

Rate-Limit-Spitzen zerbrechen deine Sitzung nicht.

Bei 429 / 503 wird bis zu dreimal wiederholt (1 s / 2 s / 4 s), unter Beachtung des Headers Retry-After. Timeouts: 30 s für die Generierung, 15 s für das Auflisten von Modellen.

Sprache zu SQL

“Sprich die Frage; führ das SQL aus.”

Diktiere eine Anfrage und der Assistent wandelt sie in SQL um — nützlich auf dem iPad und in Pair-DBA-Sitzungen, wenn die Hände beschäftigt sind. Deine Stimme verlässt das Gerät nicht.

Aufgebaut auf SpeechAnalyzer und DictationTranscriber von Apple (macOS 26 / iPadOS 26 / iOS 26 / visionOS 26): Die Erkennung läuft auf dem Gerät, es wird kein Audio an einen Server gesendet und das Diktat funktioniert offline. Das Sprachmodell wird einmal geladen, mit sichtbarem Fortschritt, in der in Calíope eingestellten Sprache — oder in jeder anderen Sprache, die das Diktat des Systems unterstützt, ausgewählt in der Kapsel neben dem Mikrofon, die auch anzeigt, in welcher gerade zugehört wird. Es wird nur die Mikrofon-Berechtigung angefragt — die lokale Erkennung braucht keine Spracherkennungs-Berechtigung. Live-Teilergebnisse.

Persistenter Konversationsassistent

“Ein Gespräch mit deiner Datenbank, kein isolierter Prompt.”

Du fragst »jetzt mit einem LEFT JOIN« und er weiß schon, welche Query du meintest.

Behält den Kontext des aktiven Schemas plus die letzten Austausche, pro Konversation.

Ein MCP-Server für einen KI-Client auf deinem Mac

“Cursor oder Claude Desktop können deine Datenbank fragen — nur lesend.”

Ein KI-Client auf demselben Mac kann Datenbanken auflisten, Tabellen beschreiben und lesende Abfragen auf den Verbindungen ausführen, die du freigibst.

JSON-RPC 2.0 über HTTP, lauscht nur auf 127.0.0.1, auf Port 41500, solange du ihn nicht änderst. Nur macOS, standardmäßig aus, und er antwortet nur, solange Calíope offen ist. Fünf Werkzeuge, dokumentiert mit den Beschreibungen, die der Client erhält, auf ihrer eigenen Seite.

Backups, Import und Synchronisierung

Backup-Engine mit Zugangsdaten per Opt-in

“Backups mit nativem gzip — und ohne versehentlich Passwörter zu exportieren.”

Kompakte Dumps, standardmäßig sicher — niemand exportiert versehentlich Passwort-Hashes.

Erzeugt .sql mit Optionen für Drop-before, Daten einbeziehen, Benutzer einbeziehen, Benutzer-Zugangsdaten einbeziehen (Opt-in, standardmäßig aus) und native gzip-Kompression. CREATE USER / ALTER USER / GRANT werden neutralisiert, wenn Zugangsdaten ausgeschlossen sind. Fortschrittsereignisse mit ETA.

Geplante Backups mit Aufbewahrung

“Backups, die nicht davon abhängen, dass du dich erinnerst.”

Dein Mac macht das Backup pünktlich, auch wenn er geschlafen hat, und füllt deine Platte nicht voll.

Tägliche, wöchentliche, werktägliche, monatliche Zeitpläne oder alle N Stunden. Nutzt Security-Scoped-Bookmarks auf das Ziel, um innerhalb der Sandbox zu funktionieren. Verarbeitet verpasste Zeitpläne über App-Neustarts hinweg, Dateinamen mit Nanosekunden-Suffix zur Kollisionsvermeidung, Aufbewahrungs-Bereinigung und Benachrichtigungen bei Erfolg/Fehler/Auslassung.

CSV-/JSON-/XLSX-Import

“Von einer Tabellenkalkulation zu einer Tabelle in drei Klicks.”

Importiere tabellarische Dateien aus der echten Welt — nicht nur das glückliche CSV.

CSV im Stil von RFC 4180 (escapte Anführungszeichen, Felder mit Kommas), JSON (Array von Objekten) und XLSX im Streaming. Drei Modi — Einfügen, Duplikate überspringen und Duplikate ersetzen —, angeboten, wo die Engine sie hat: alle drei bei MySQL und MariaDB, die ersten beiden bei PostgreSQL und nur Einfügen bei SQL Server, Oracle Database und ClickHouse.

Lokales persistentes Query-Log

“Der Befehl, den du am Dienstag ausgeführt hast, in zwei Sekunden.”

Durchsuche Tausende vergangener Queries nach SQL-Text oder Datum.

Lokaler SQLite-Store in Application Support mit Tabellen für ausgeführte Queries und das DDL-Audit, indexiert nach Query-Text (aufsteigend) und Datum (absteigend).

Synchronisierung des Query-Logs mit iCloud (Opt-in, geschwärzt)

“Dein SQL-Verlauf, in deiner iCloud, ohne deine Zugangsdaten.”

Durchsuche den Verlauf deines Macs von deinem iPad aus — ohne die Zugangsdaten.

CloudKit-Container iCloud.org.caliope.caliope, Stapel von 400 Datensätzen, konfigurierbare Aufbewahrung (standardmäßig 90 Tage). Wendet die Schwärzung der Zugangsdaten vor dem Hochladen an. Prüft den Status des iCloud-Kontos vor der Synchronisierung.

Synchronisierungs-Schalter pro Bereich

“Du entscheidest, was in iCloud geht.”

Synchronisiere nur, was dir wichtig ist — nicht alles oder nichts.

Neben dem allgemeinen iCloud-Schalter weitere, unabhängige für das, was in dein iCloud kopiert wird: in den Einstellungen der iCloud-Schlüsselbund, das Fehlerprotokoll der App und die Systemnachrichten; das Query-Log in seinem eigenen Werkzeug und die Gespräche mit dem KI-Assistenten in ihrem Verlaufsbereich.

Dumps von vielen Gigabyte

“722 MB gedumpt mit 68 MB Speicher.”

Sichern und Zurückspielen hängen nicht mehr vom RAM der Maschine ab. Ein Dump von 722 MB mit 4 Millionen Zeilen erreicht 68 MB Spitze; das Zurückspielen dauert 19 Sekunden bei 14 MB. Abbrechen stoppt den Dump wirklich, statt ihn bis zum Ende laufen zu lassen.

Die Engine orchestriert, der Provider schreibt SQL: eine Engine zum Backup hinzuzufügen heißt, BackupDataSource zu implementieren und sonst nichts — das Test-Harness implementiert es im Speicher mit SQLite- und Postgres-Dialekten, ohne die Engine anzufassen. Die Wiederherstellung zieht eine Anweisung nach der anderen, statt sie geschoben zu bekommen, denn ein gepufferter Strom verwirft Anweisungen stillschweigend und meldet am Ende Erfolg. Gelesen wird mit read(2) und nicht über eine gemappte Datei: dasselbe Zerteilen maß +201 MB resident mit FileHandle und 1,1 MB so.

Ein Backup deiner Einstellungen

“Bevor iCloud angefasst wird, gibt es eine Kopie.”

Exportiere und importiere alles, was Calíope außerhalb des Geräts aufbewahrt — Profile, Gruppen, Einstellungen — mit geplanten Kopien in den iCloud-Container und lokalen Wiederherstellungspunkten, die vor jedem riskanten Schritt automatisch entstehen: Synchronisierung ein- oder ausschalten, löschen, importieren.

Es existiert wegen eines gemessenen Vorfalls: das Einschalten der Synchronisierung auf einem iPad ersetzte eine connections.json von 16 470 Byte mit 28 Profilen durch eine von 514 Byte mit einem Beispielprofil. Geheimnisse sind Opt-in und immer verschlüsselt (AES-GCM, PBKDF2-SHA256 mit 210 000 Iterationen, Salt und Kosten in der Datei selbst). Was draußen bleibt, wird mit Begründung in die Kopie geschrieben — eine Kopie, die ihre Lücken verschweigt, lässt dich glauben, du könntest alles zurückholen. Wiederherstellen führt zusammen; ein Backup löscht nie.

Jeder Apple-Bildschirm

Calíope auf deinem iPhone

“Der ganze Client, ohne den Mac vor dir.”

Dieselbe Calíope, fürs Telefon eingerichtet — der ganze Client, kein Betrachter. Sie verbindet sich mit deinen Servern und führt deine Abfragen aus, mit dem SQL-Editor, dem Schema-Browser, dem Dashboard, dem ER-Diagramm und den Berichten direkt darin; und deine Verbindungsprofile, deine gespeicherten Snippets, dein Abfrageverlauf und deine Assistenz-Unterhaltungen warten schon dort, über deine eigene iCloud. Face ID zum Entsperren, fünf Sprachen und ein Demomodus, um dich umzusehen, bevor du irgendetwas verbindest. Sie installiert sich von derselben App-Store-Seite wie der Mac und das iPad und bringt dieselben zwei Widgets auf den Home-Bildschirm: die Metriken deines angehefteten Servers, auch auf dem Sperrbildschirm, und den Zustand der ganzen Flotte. Ein Backup, eine Wiederherstellung oder eine lange Abfrage zeigt ihren Fortschritt als Live-Aktivität, auf dem Sperrbildschirm und in der Dynamic Island, und ein Tippen bringt dich zu ihrem Tab zurück. Das läuft, solange Calíope offen ist, und ich sage es offen: Verlässt du die App, während ein Backup läuft, pausiert es nach etwa einer halben Minute mit dem Erledigten gespeichert und läuft weiter, wenn du zurückkommst. Mehr in der Hilfe.

Es ist das iOS-Binary, und es ist derselbe Code wie auf dem iPad: keine einzige Funktion fehlt, und im ganzen Baum steht keine Geräteabfrage — was sich ändert, ist das Layout, nicht der Funktionsumfang. Verbindungsprofile werden in die gemeinsame iCloud-Datei zusammengeführt statt sie zu ersetzen, damit die Felder, die ein schmaler Bildschirm gar nicht zeigt — SSH-Tunnel, Zertifikate, Zeichensatz — unangetastet bleiben. Ohne iCloud nennt sie den geschlossenen Schalter, statt einen leeren Bildschirm zu zeigen und dich annehmen zu lassen, es sei alles in Ordnung.

Calíope auf deiner Apple Watch

“Was deine Server gemacht haben, ohne das Telefon herauszuholen.”

Calíope am Handgelenk, die mit Calíope auf dem iPhone kommt und vom selben Kauf abgedeckt ist, ohne getrennten Kauf. Sie zeigt die Systemmeldungen, die Calíope veröffentlicht: zwanzig Arten in sieben Gruppen, mit Backups, Wiederherstellungen und Berichten, die abgeschlossen sind oder fehlschlugen, zu lange gelaufenen Abfragen, SSH-Tunneln, die abbrachen und wiederkamen, fehlgeschlagener iCloud-Synchronisierung, Servern nahe an deinen Schwellenwerten und ausgelösten SQL-Warnungen. Nach Tagen gruppiert, mit optionalen Mitteilungen auf einem eigenen Schalter und einem Demomodus, der auch die leeren Bildschirme zeigt. Ein Backup, eine Wiederherstellung oder eine lange Abfrage, die du auf dem iPhone verfolgst, erscheint auch im Smart Stack der Uhr: Das ist die Live-Aktivität des iPhone, sie braucht also weder iCloud noch die Schalter der Uhr.

Meldungen reisen als Kennung samt ihrer rohen Zahlen, nie als fertiger Satz: Die Uhr ist häufiger auf eine andere Sprache eingestellt als der Mac, also wird der Satz am Handgelenk geschrieben. Die Kadenz, die du wählst, ist ein Minimum und kein Versprechen — bei geschlossener App entscheidet watchOS, wann sie geweckt wird — und die App sagt das oben in ihrem eigenen Einstellungsbildschirm, nicht grau ganz unten. Die Marke gehört zur zuletzt gelieferten Meldung und nicht zur Wanduhr, denn Weckvorgänge fallen aus, und die Frage „irgendetwas aus den letzten fünfzehn Minuten?“ verwirft den Rest, ohne zu scheitern. Sie liest nur: Sie öffnet keine Verbindung zu irgendeinem deiner Server.

Calíope auf deinem Apple TV

“Der Zustand der Server, quer durch den Raum lesbar.”

Eine Wandanzeige für deine Server mit MySQL, MariaDB, TiDB, PostgreSQL, SQL Server, Oracle Database und ClickHouse: je eine Kachel, mit ihrem Zustand — In Ordnung, Warnung, Kritisch, Nicht erreichbar oder Keine Daten — und, wenn etwas nicht stimmt, was nicht stimmt. Laufzeit, Verbindungen, laufende Threads, Abfragen pro Sekunde, Cache-Trefferquote, längste Abfrage und Replikat-Verzögerung. Zwei Tabs, weil ein Fernseher kein Gerät ist, in dem man navigiert, und eine Demo-Umgebung aus acht Servern, um sich vorher umzusehen. Leg Calíope in die obere Reihe des Home-Bildschirms, und das Band darüber zeigt deine veröffentlichten Server – die dringendsten zuerst –, danach die Demovideos dieser Website; eine Karte zu wählen öffnet diesen Server.

Die Aktualität rechnet der Lesende selbst aus, aus der Kadenz, die Calíope angibt: Wer veröffentlicht hat, weiß nicht, dass er aufgehört hat zu veröffentlichen — ein am Freitag ausgeschalteter Mac ließe die Anzeige sonst das ganze Wochenende grün. Der Zustand wird nie allein über Farbe unterschieden, und die Schwellenwerte gehören Calíope: Der Fernseher malt, er urteilt nicht. Apple TV hat weder iCloud Drive noch iCloud-Schlüsselbund — „sie liest nur“ trägt also die Plattform und kein Versprechen.

Calíope auf der Apple Vision Pro

“Der ganze Client, im Raum aufgehängt.”

Ab 1.6 ist Calíope auf der Apple Vision Pro eine native visionOS-App: der SQL-Editor, der Schema-Browser, das ER-Diagramm, die Backups, die Berichte, der Abfrage-Builder — jedes Werkzeug, ohne dass eines fehlt. Sie verbindet sich mit deinen Servern und sie schreibt. Der Werkzeug-Navigator und deine geöffneten Tabs liegen in Ornamenten außerhalb des Glases, jedes Bedienelement hat Blickgröße und leuchtet auf, wenn du es ansiehst, und du kannst mehrere Fenster öffnen und jedes im Raum lassen, wo du willst. Die Widgets hängen an einer Wand oder stehen auf einem Tisch. Sie kommt von derselben App-Store-Seite und aus demselben Kauf wie der Mac und das iPad.

Es ist dieselbe App wie auf dem iPad, für visionOS gebaut statt im Kompatibilitätsmodus ausgeführt: das Glas des Systems statt deckender Hintergründe, Leisten als Ornamente, Ziele von 60 Punkt mit der Blickhervorhebung, Sheets in Fenstergröße und Optic ID, wo das iPad Face ID sagt. Ich hatte schon ein natives Panel und habe es nicht veröffentlicht, weil es weniger konnte als die iPad-App; diese kann alles, was das iPad kann. Bis 1.6 lief Calíope auf der Apple Vision Pro als iPad-App, im Kompatibilitätsmodus.

Monitoring, Diagnose und Replikation

Monitoring-Engine mit deinem eigenen Speicher

“Metriken deiner Server, gespeichert auf einem Server von dir.”

Historisches Monitoring, ohne Prometheus zu installieren.

Ein dedizierter Kollektor schreibt Snapshots auf einen Speicherserver deiner Wahl und provisioniert Tabellen für Messwerte (CPU, Arbeitsspeicher, Verbindungen, QPS) und Ereignisse (Schwellenwert-Überschreitungen, Replikationsverzögerung). Automatische Aufbewahrung.

Interaktives Visual EXPLAIN

“Dein Query-Plan als lebendiges Diagramm.”

Erkenne den Full Scan, der deine Query umbringt, ohne JSON oder XML von Hand zu lesen.

Fragt jede Engine nach ihrem eigenen Plan, ohne die Query auszuführen — EXPLAIN FORMAT=JSON bei MySQL und MariaDB, EXPLAIN FORMAT='tidb_json' bei TiDB, EXPLAIN (FORMAT JSON) bei PostgreSQL, SHOWPLAN_XML bei SQL Server, EXPLAIN PLAN bei Oracle Database, EXPLAIN PLAN json = 1 bei ClickHouse — und zeichnet ihn als Baum. Farbcodiert nach Zugriffstyp: Full Scan, Range / Index Merge, optimiert, Sort, Join. Tooltips mit access_type, geschätzten Zeilen und Zeiten. Zoomen mit dem Mausrad, mit dem Trackpad-Kneifen oder mit den Schaltflächen der Leiste — der Maßstab ist immer sichtbar, und ⌘+ / ⌘− / ⌘0 tun dasselbe ohne Trackpad. Verschieben durch Ziehen.

Query-Profiler

“Sieh, wo du die Millisekunden verlierst.”

Finde heraus, welche Phase der Query die Zeit frisst.

Bei MySQL und MariaDB aufgebaut auf SHOW PROFILE; bei ClickHouse, das keins hat, liest er die Zeile der Query in system.query_log. Tabelle plus Balkendiagramm pro Phase (starting, Sending data, usw.) mit Zeiten in Millisekunden. Bei PostgreSQL, SQL Server und Oracle Database gibt es die Schaltfläche nicht.

Langsame Abfragen, auf der Engine, mit der du gerade arbeitest

“Was dein Server über die zu langsamen Abfragen längst notiert hat.”

Du liest, was der Server aufgezeichnet hat — von allen Clients, die sich mit ihm verbinden, nicht nur von Calíope — und schaltest auf derselben Seite das Protokoll ein, verschiebst den Schwellwert und leerst es. Ein Knopf schickt die Abfrage in den Editor, und der Profiler ist genau dort.

Jede Engine in ihrem eigenen Vokabular. MySQL und MariaDB: die Einträge kommen aus mysql.slow_log, wenn der Server in eine Tabelle schreibt, und die Zusammenfassung pro Anweisung aus performance_schema; der Schwellwert ist long_query_time. PostgreSQL: pg_stat_statements, aggregiert nach Anweisungsform statt einer Zeile pro Ausführung, und den Schwellwert schreibt ALTER SYSTEM plus pg_reload_conf() — einer, der aus der Kommandozeile des Serverstarts kommt, wird als von hier nicht änderbar ausgewiesen, statt stillschweigend zu scheitern. Oracle Database: der Cursor-Cache in V$SQL, mit dem Schwellenwert beim Lesen angewendet, weil Oracle kein Protokoll langsamer Abfragen führt; AWR bleibt draußen, es verlangt ein kostenpflichtiges Pack. SQL Server: der Plan-Cache in sys.dm_exec_query_stats, pro Anweisung zusammengefasst — auch er führt kein Protokoll langsamer Abfragen, und zum Lesen muss nichts eingeschaltet werden. ClickHouse: system.query_log, mit dem Schwellenwert in Millisekunden und dem Protokoll vor dem Lesen auf die Platte geschrieben. TiDB: CLUSTER_SLOW_QUERY und die Zusammenfassung pro Anweisung aus STATEMENTS_SUMMARY, mit dem Schwellenwert in Millisekunden. Redis und Valkey: ein eigenes Werkzeug, Langsame Befehle, mit dem Schwellenwert in Mikrosekunden. MongoDB: ein eigenes Werkzeug, denn der Profiler gilt pro Datenbank. Eine leere Liste ist nie die Antwort: schreibt der Server sein Protokoll in eine Datei auf seiner Maschine, ist performance_schema aus oder ist die Extension in dieser Datenbank nicht angelegt, steht genau dieser Grund auf dem Bildschirm. Auf Aurora sind die Einstellungen nur lesbar — sie liegen in der Parametergruppe des Clusters. Keine Diagramme, und nichts wird nach Calíope kopiert: du siehst das Fenster, das der Server führt, mit der Uhr des Servers.

Prozessliste, mit geführtem KILL

“Ein KILL für die Query, die deine Produktion aufgehängt hat.”

Beende eine außer Kontrolle geratene Query, ohne ein Terminal zu öffnen.

SHOW FULL PROCESSLIST mit Spalten für id, user, host, database, command, time, state und info. Aktionen für KILL QUERY und KILL CONNECTION. Unter PostgreSQL kommt die Liste aus pg_stat_activity und gestoppt wird mit pg_cancel_backend oder pg_terminate_backend; unter SQL Server aus sys.dm_exec_sessions und sys.dm_exec_requests, gestoppt wird mit KILL; unter Oracle Database aus V$SESSION, jede Sitzung benannt durch SID,SERIAL#, gestoppt wird mit ALTER SYSTEM CANCEL SQL oder ALTER SYSTEM KILL SESSION; bei ClickHouse aus system.processes, wo eine Abfrage läuft und keine Verbindung, daher gibt es eine einzige Aktion, KILL QUERY.

Replikations-Monitor (altes und neues Vokabular)

“Alte und neue Replikate, im selben Panel.”

Beobachte die Verzögerung des Replikats, ohne dich mit dem alten und dem neuen Vokabular herumzuschlagen.

SHOW REPLICA STATUS bei MySQL 8.0.22+ und MariaDB 10.5.1+, mit automatischem Fallback auf SHOW SLAVE STATUS bei älteren Versionen. Bei ClickHouse, wo pro Tabelle repliziert wird, zeigt er die replizierten Tabellen, Keeper, die größte Verzögerung in Sekunden und die Warteschlange in Einträgen. Metriken: IO/SQL running, Sekunden hinter der Source, letzte Fehler mit Zeitstempel, GTID-Sets, Log-Positionen. Konfigurierbares Auto-Refresh.

Replikationstopologie

“Eine Replika kann null Sekunden melden, während sie Stunden hinterherhinkt. Hier sieht man es.”

Du siehst die ganze Gruppe auf einmal und vertraust keinem „0 Sekunden“ mehr, das in Wahrheit „ich habe gerade neu verbunden“ heißt.

Du deklarierst, welche Maschine die primäre ist und welche die Replikate sind. Nichts wird automatisch erkannt: SHOW REPLICA HOSTS sieht nur, was in diesem Augenblick verbunden ist, also würde sich eine erkannte Gruppe von selbst ändern und „diese Replika ist weg“ wäre nicht von „diese Replika ist ausgefallen“ zu unterscheiden. Diese Abfrage dient dazu, eine widersprüchliche Konfiguration zu widerlegen, nie sie umzukonfigurieren. Ob eine Replika von einer anderen Maschine liest, entscheidet die server_id, niemals der Hostname — hinter Docker, NAT, VPN oder Tunnel ergibt ein Zeichenkettenvergleich eine dauerhafte und falsche Warnung. Ein gestoppter IO-Thread ist kritisch, auch wenn der Rückstand null anzeigt, und daneben steht der GTID-Drift, der pro Ursprung gezählt und nicht subtrahiert wird. Ein Mitglied, das nicht antwortet, reißt die anderen nicht mit: „7 von 9“ ist eine normale Anzeige, und die fehlenden werden benannt. Sie liest nur — sie operiert nie an der Gruppe. Das Diagramm trägt eine Tabelle als barrierefreie Alternative, und kein Zustand wird allein durch Farbe unterschieden.

Binlog-Viewer mit Filtern und PURGE

“Dein Binlog, filterbar und purge-bar — aus der App.”

Prüfe, welche Ereignisse deine Statements erzeugt haben, ohne zu mysqlbinlog hinabzusteigen.

SHOW BINLOG EVENTS mit Kategorisierung in DDL / DML / System, Textsuche und einem konfigurierbaren Zeilenlimit (standardmäßig 300). Unterstützt verschlüsselte Binlogs (MySQL 8.0.14+). PURGE BINARY LOGS TO mit ausdrücklicher Bestätigung. Nur MySQL und MariaDB: Die anderen Engines führen kein Binary Log, und dort wird das Werkzeug nicht angeboten.

Dashboard, Serverinformationen und Server-Health-Monitor

“Der Puls deines Servers, in einer einzigen Ansicht.”

Bündelt die Server-Gesundheit, ohne fünf Clients zu öffnen.

Serverinformationen in mehreren Tabs (globale und Sitzungs-Variablen, globaler und Sitzungs-Status, HDD-Nutzung), ein Dashboard mit Live-Diagrammen und ein Server-Health-Monitor.

Live-Benchmark

“Zwei Queries auf der Waage; eine gewinnt.”

Wähle zwischen zwei Queries mit Belegen, nicht mit Bauchgefühl.

Vergleicht die Ausführungszeiten von Query-Varianten nebeneinander.

Alerts und lokale Benachrichtigungen

“Dein Mac warnt dich, wenn das Replikat zurückfällt.”

Das System warnt dich — du musst nicht auf die App starren.

Schwellenwert-Alerts für CPU, Arbeitsspeicher, Verbindungen und Replikationsverzögerung. Native Benachrichtigungen von macOS/iOS.

SQL-Warnungen

“Deine eigene Regel, in SQL geschrieben, für dich überwacht.”

Schreib eine Abfrage, die einen Wert liefert, wähle einen Operator und einen Schwellenwert, und Calíope führt sie im eingestellten Intervall erneut aus und markiert die Regel, wenn sie die Linie überschreitet.

Operatoren >, <, = und <>, als exakte Dezimalzahlen verglichen statt als Doubles, und = und <> auch auf Text. Sechs Zustände, kein Ja oder Nein: noch nicht gemessen, OK, Warnung, keine Zeilen, fehlgeschlagen mit der Meldung des Servers selbst, und abgelehnt, weil sie unter einem schützenden Umgebungs-Tag schreibt. Die Regeln reisen mit dem allgemeinen Schalter über iCloud; die Messungen bleiben in der Sitzung, damit ein alter Wert nie als aktuell erscheint.

Alles, was läuft, an einem Ort

“Was läuft, verschwindet nicht mehr beim Tabwechsel.”

Abfragen, Backups, Migrationen und geplante Jobs werden an einer Stelle registriert, mit verstrichener Zeit, Ziel und einem Stopp, der wirklich stoppt. Sichtbar aus dem Fuß der Seitenleiste, aus dem arbeitenden Tab und aus dem Server-Umschalter.

Operationen tragen sich selbst ein — nichts fragt fremde Flags ab, denn ein Register, das rät, lügt am Ende in beide Richtungen. Aufgaben (die beginnen und enden) und Modi (die an bleiben, bis jemand sie ausschaltet) sind verschiedene Typen, also hat ein Modus weder Fortschrittsbalken noch Stoppuhr. Ein Lauf überlebt die Zerstörung seiner View: der Controller lebt in einem Store, indiziert nach Tab, nicht im State der View. Schwelle von 0,8 s, bevor überhaupt etwas erscheint — eine Abfrage von 40 ms ist kein Prozess.

Fehler, die sich erklären — und die dein Telefon lesen kann

“Ein Fehler mit Ursache, Vorschlag und Eintrag.”

Wenn etwas schiefgeht, sagt Calíope, was passiert ist, schlägt vor, was zu prüfen ist, und verlinkt das passende Hilfethema. Alles landet in einem Protokoll mit Datum und Gerät, das die iPhone-App von überall lesen kann.

Kein Fehlercode nennt eine Engine: die Tabelle der nativen Codes lebt bei ihrem Provider, eine hinzuzufügen heißt also, ein Protokoll zu implementieren. Die native Nummer wird aus dem typisierten Paket gelesen, nicht aus der Meldung gekratzt — der frühere Treiber schrieb sie nicht, weshalb ein Zugangsdaten-Fehler früher als Verbindungsfehler eingestuft wurde und dich den Port prüfen ließ. Das Telefon liest nur: Aufräumen und Löschen bleiben am Schreibtisch. Und „keine Fehler“ ist eine Aussage — sechs verschiedene Gründe für einen leeren Bildschirm werden unterschieden, denn die gute Nachricht zu geben, während der Kanal schlicht zu ist, ist eine eigene Art von Lüge.

Native Widgets

macOS-Schreibtisch-Widget

“Server-Status auf einen Blick, auf deinem Schreibtisch.”

Sieh den Puls deines Servers, ohne Calíope zu öffnen.

Familien Small, Medium, Large und ExtraLarge. Die Snapshots werden aus einer geteilten App Group mit File Coordination für sichere gleichzeitige Lesevorgänge gelesen. Payloads über einem sicheren Schwellenwert werden abgelehnt (DoS-Schutz).

Home-Bildschirm- und Sperrbildschirm-Widgets von iPhone und iPad

“Dein Server auf dem Sperrbildschirm.”

Server-Metriken auf dem Sperrbildschirm deines iPhone oder iPad — Sekunden entfernt.

Sieben Familien auf dem iPad — Small, Medium, Large, ExtraLarge, dazu die Zubehör-Familien Rectangular, Circular und Inline — und sechs auf dem iPhone, das kein ExtraLarge hat.

Widgets an der Wand, in der Apple Vision Pro

“Der Puls deines Servers, neben dem Fenster aufgehängt.”

Dasselbe Widget, an eine Wand des Raums gesetzt: die Metriken deines angehefteten Servers, dort, wo du aufblickst und sie siehst.

Small, Medium, Large und ExtraLarge, die vier des Mac: visionOS hat keinen Sperrbildschirm. Glastextur, damit die Wand durchscheint, und in die Wand eingelassen oder aus ihr hervorstehend, wie du es beim Platzieren wählst.

Widget für die Gesundheit der Flotte

“Jeder Server, den du beobachtest, und welcher am schlechtesten dasteht.”

Ein zweites Widget, das auf die ganze Flotte statt auf einen Server schaut: wie viele Server du beobachtest und wie es dem schlechtesten geht, auf dem Mac-Schreibtisch, auf dem Home-Bildschirm von iPhone und iPad und an einer Wand in der Apple Vision Pro.

Die Familien Small, Medium und Large, auf dem Mac, unter iOS und unter visionOS gleich. Es liest, was der Server-Gesundheitsmonitor auf diesem Gerät gemessen hat, über die gemeinsame App Group; die Extension fragt selbst nichts ab. Kein ExtraLarge und keine Sperrbildschirm-Familien, mit Absicht.

Deep-Linking zum angehefteten Profil

“Tippe auf das Widget → das Dashboard des richtigen Servers, in einer einzigen Bewegung.”

Ein Tipp und du bist im Dashboard des richtigen Servers.

Widget-URL caliope://server/<uuid>, wenn ein Profil verknüpft ist; andernfalls fällt es auf caliope:// zurück.

Auswahl auf Basis von AppIntent

“Ein Widget pro Server — editierbar wie ein Wetter-Widget.”

Hefte jedem Server ein anderes Widget an — in Sekunden konfiguriert.

Konfigurierbar über die Widget-Bearbeitungs-UI des Systems mittels einer AppIntentConfiguration. Erfordert keinen Code vom Nutzer.

Hintergrund-Aktualisierung mit System-Budget

“Aktualisiert, wenn es wichtig ist; schläft, wenn nicht.”

Das Widget entlädt deinen Akku nicht und zeigt trotzdem frische Daten.

Die Timeline-Richtlinie überlässt die Kontrolle WidgetKit und beachtet das Aktualisierungs-Budget des Systems. Fällt auf den letzten Snapshot zurück, wenn keine frischen Daten vorliegen.

System-Integrationen

Siri und App Intents

“Ein SELECT COUNT(*) aus Siri, ohne Calíope zu öffnen.”

Führe eine Query aus oder liste Datenbanken auf, direkt aus Kurzbefehlen, ohne die App zu öffnen.

Registrierte Intents: mit Server verbinden, Query ausführen (gibt TSV mit Kopfzeilen zurück), Datenbanken auflisten, Workspace-Tab öffnen. Gestützt durch eine interne Brücke, die die Session- und Database-Manager für AppIntents bereitstellt.

macOS-Menüs und Umgang mit .sql-Dateien

“Kann eine .sql aus Spotlight öffnen — wie jede native App.”

Verhält sich wie eine echte Mac-App — nicht wie ein Windows- oder Electron-Port.

Vollständige Menüleiste: Über, SQL-Datei öffnen, Zuletzt benutzte Dateien, Quick Open, Tab-Navigation, Hilfe, Neuigkeiten, Datenschutzerklärung, Support. Verarbeitet das Öffnen von .sql-Dateien über NotificationCenter.

Eintrag in der Menüleiste

“Ein Symbol in der Menüleiste: du weißt, ob du verbunden bist, ohne das Fenster zu wechseln.”

Verbindungskontext auf einen Blick, ohne die App in den Vordergrund zu holen.

Symbol in der Menüleiste, das den Verbindungsstatus und das aktive Profil widerspiegelt.

Onboarding mit TipKit

“Entdecke, was du brauchst, wenn du es brauchst.”

Lerne die Funktionen in dem Moment kennen, in dem sie relevant sind.

Kontextuelle Tipps in allen Werkzeugen — unter anderem Quick Open, der WHERE-Builder, der Datenimport, Visual EXPLAIN und der Schema-Baum —, einer pro Werkzeug und Besuch, der Reihe nach, damit sie sich nie stapeln.

iCloud-Kontinuität, iPad-Gesten und Trackpad

“Das SQL, das du auf dem Mac schreibst, wartet auf dem iPad — auch wenn der Mac aus ist.”

Auf dem iPad mit Magic Keyboard arbeitest du genauso wie auf dem Mac.

Die optionale iCloud-Synchronisierung überträgt Verbindungen, Editor-Inhalte und Einstellungen zwischen deinen Geräten — ohne Nähe oder Bluetooth. Native Verarbeitung von Zeiger und Tastatur auf dem iPad. Gesten: Kneifen zum Skalieren der Schrift im Editor und im Ergebnisraster, Kneifen zum Vergrößern eines Zellenbilds, Swipe auf Ergebniszeilen, langes Drücken für Kontextmenüs, Verschieben und Zoomen in ER-Diagrammen und Visual EXPLAIN, verschiebbare Panel-Trenner. Split View.

Screenshot-Modus

“Doku-reife Aufnahmen — keine Amateur-Screenshots.”

Mach Aufnahmen, die dokumentationsreif sind und ein einheitliches Aussehen haben.

Cmd+Opt+P auf macOS erzeugt PNGs mit einem Stil, der für Dokumentation und Marketing bereit ist.

»Neuigkeiten« innerhalb der App

“Neues, direkt in der App — nicht in einem Changelog.”

Erfahre, was neu ist, ohne die Versionshinweise im App Store zu lesen.

Highlights pro Version, mit lokalem »bereits gesehen«-Status.

Oberfläche in fünf Sprachen (Spanisch, Englisch, Französisch, Deutsch, Italienisch)

“Calíope spricht deine Sprache — Spanisch, Englisch, Französisch, Deutsch oder Italienisch.”

Eine App, die zuerst auf Spanisch entworfen wurde, sodass sie sich nicht wie eine maschinelle Übersetzung anfühlt.

Vollständige Ressourcen-Bundles en, es, fr, de und it. Die Sprache ist die, die du in den Systemeinstellungen für Calíope wählst, pro App, und die Widgets folgen ihr. Fallback auf Englisch.

Datenschutz, Sandbox und Compliance

Aktive App-Store-Sandbox

“Aktive Sandbox — sie tut, was sie deklariert, und nichts weiter.”

Calíope kann auf nichts außerhalb der deklarierten Entitlements zugreifen. Das System garantiert es.

App-Sandbox aktiviert mit einem engen Satz von Entitlements: Netzwerk-Client und -Server (für den SSH-Proxy), Audio-Eingang (Sprache zu SQL), vom Nutzer ausgewählte Dateien (Dokumente), App Groups (für die Widgets), Drucken und iCloud (CloudKit, Cloud Documents und der Key-Value-Speicher).

Dienst zum Löschen der Daten

“Ein Knopf, und es bleibt nichts zurück.”

Ein Knopf, um die Maschine sauber zu hinterlassen, bevor du sie zurückgibst oder verkaufst.

Löschen auf Abruf von allem, was Calíope speichert, an den sechs Orten, die „Alles löschen“ weiter unten aufzählt.

Was die KI kostet, gesagt vor dem Bezahlen

“Ehrlicher Preis — welcher Assistent einen Key braucht, steht beim Kauf.”

Du weißt genau, was der Kauf bezahlt und was nicht.

Die Paywall sagt, dass Apple Intelligence und Ollama keinen Key brauchen und OpenAI, Gemini und Claude deinen eigenen, den der Kauf nicht enthält, und daneben die Kaufbedingungen: eine Abbuchung, keine Verlängerungen, auf jedem Gerät wiederherstellbar.

Einmaliger Kauf mit 60 Tagen Testphase

“Sechzig Tage gratis, ohne Tricks.”

Teste Calíope sechzig Tage kostenlos; wenn du sie behältst, zahlst du einmal.

Nicht verbrauchbares StoreKit-2-Produkt mit 60 Tagen kostenloser Testphase als nicht verbrauchbares Produkt zum Preis null (App-Review-Richtlinie 3.1.1). Verifizierung über AppTransaction.shared und Transaction.latest(for:) von StoreKit 2. Wiederherstellung über AppStore.sync(). Der Preis wird immer aus product.displayPrice dargestellt.

Alles löschen — und erfahren, was passiert ist

“Sechs Orte, ein Bericht, keine stummen Fehler.”

Der Löschknopf erreicht lokale Dateien, den Schlüsselbund, den iCloud-Drive-Container, den Key-Value-Store, CloudKit und die Daten des Widgets — und veröffentlicht eine Marke, damit deine anderen Geräte ebenfalls löschen, statt alles wieder hochzuladen.

Ein entferntes Löschen fragt den Sync-Schalter nicht: der Schalter sagt, ob ab jetzt hochgeladen wird, nicht ob oben schon etwas liegt — und wer ihn einschaltete, hochlud und wieder ausschaltete, ist genau der Fall, den ein Datenschutz-Löschen nicht auslassen darf. Die Ausbreitung ist asymmetrisch, damit keine Schleife entsteht, und der Vergleich ist > statt !=, damit eine alte, von einem schlafenden Gerät erneut veröffentlichte Marke kein zweites Löschen auslöst. Der Bericht hat eine Zeile pro Kanal mit Anzahl und Fehler — die Vorgängerversion war mit stummen try? geschrieben und endete immer mit „alle Daten wurden erfolgreich gelöscht“, einem Satz, der selbst bei ausgefallenem CloudKit nicht falsch sein konnte.

Bereit, Calíope auszuprobieren?

Jede Fähigkeit auf dieser Seite ist im einmaligen Kauf enthalten. Sechzig Tage gratis, danach einmal kaufen und für immer behalten.

60 Tage kostenlos testen →