Icona dell'app Calíope

Funzionalità

Ogni funzionalità, verificata rispetto al codice sorgente.

Calíope si distribuisce come un'unica applicazione con le funzionalità elencate qui sotto, disponibili su macOS e iPad. Ogni voce corrisponde a codice che esiste oggi — questo è un catalogo, non una lista dei desideri. Usa le scorciatoie per saltare a una categoria o scorri l'elenco completo.

Connessione e sicurezza

Tunnel SSH nativo

“Il tuo tunnel SSH, senza terminale né .ssh/config.”

Raggiungi server dietro un bastion dal sandbox di macOS — senza ssh locale, senza ~/.ssh/config, senza lotte di permessi.

SwiftNIO + NIOSSH. Autenticazione tramite password o chiave privata (ed25519, ECDSA P-256/P-384/P-521). Parser OpenSSH e decifratura della passphrase in memoria. Proxy locale su 127.0.0.1 collegato tramite SSH direct-tcpip.

Verifica TOFU della host-key

“Ti avvisa se qualcuno ha intercettato il tuo tunnel — prima che tu scriva qualcosa.”

Rileva un MITM contro il tuo bastion SSH senza lasciare un known_hosts su disco.

Fingerprint salvati nel Keychain. La prima connessione richiede una conferma esplicita; un fingerprint cambiato fallisce di netto — equivalente a StrictHostKeyChecking=yes.

TLS rigoroso di default

“SSL che protegge davvero — non un semplice interruttore.”

Attivare «SSL» significa SSL verificato. I certificati autofirmati richiedono una CA o un opt-out esplicito con avviso visibile.

Politica unica: saltare la verifica è opt-in; una CA fornita permette la verifica senza hostname; in tutti gli altri casi, verifica completa.

Keychain con sincronizzazione iCloud opt-in

“Le tue password non vanno su iCloud a meno che tu non le inviti.”

Decidi tu quali credenziali viaggiano tra i tuoi dispositivi. Di default, nessuna.

La modalità solo-locale imposta le credenziali con WhenUnlockedThisDeviceOnly; attivare la sincronizzazione le migra ad AfterFirstUnlock per iCloud Keychain. Il toggle è idempotente.

Autenticazione biometrica opzionale per profilo

“La tua impronta sblocca la produzione, non solo il tuo Mac in sospensione.”

Aggiunge un varco Touch ID / Face ID prima di connettersi ai server di produzione, configurabile per profilo.

Costruito sul framework LocalAuthentication. Attivabile per profilo di connessione.

Connection pool deterministico

“Un connection pool che si chiude sempre — anche quando qualcosa va storto.”

Connessioni che non disperdono risorse né bloccano la UI, nemmeno quando cambi sessione.

SwiftNIO EventLoopGroupConnectionPool, con un limite di 5 connessioni per event loop in un event-loop group a thread singolo. Chiusura asincrona con timeout di sicurezza e una chiusura SSH pulita quando il binding locale fallisce.

Prepared statement nativi

“Binding preparati, non interpolazione di stringhe — dalla base dello stack.”

I valori che scrivi non vengono mai concatenati all'SQL — viaggiano sul protocollo di rete, separati dallo statement.

Prepared statement nativi di MySQLNIO: senza binding → percorso rapido simpleQuery; con binding → conn.query(sql, [MySQLData]). Gli statement si chiudono automaticamente in done(), così il pool non disperde mai. Gli identificatori passano comunque per l'helper di escape centralizzato nei casi DCL/DDL residui.

Editor SQL e produttività

Completamento automatico sensibile al contesto

“L'editor sa se sei nel FROM, nel WHERE o nell'elenco delle colonne.”

Scrivi meno e commetti meno errori, perché il suggerimento capisce dove ti trovi all'interno dello statement.

Suggerisce le colonne della tabella attiva, i nomi dei database, i token dello schema (tabelle, viste, funzioni), le keyword DML/DDL/di controllo, i tipi di dati e le frasi ausiliarie SQL filtrate per motore.

Linter lessicale in tempo reale

“Le parentesi sbilanciate non arrivano mai al server.”

Cattura l'errore evidente prima che MySQL lo rifiuti.

Rileva commenti non chiusi, stringhe non chiuse, parentesi sbilanciate e identificatori con backtick aperto. Scansione O(n), senza parser completo.

Formattatore con modalità sicura

“Formatta le tue query — non riscrive mai il tuo UPDATE.”

Formattazione elegante per SELECT, senza sorprese su un UPDATE senza WHERE.

Conosce oltre 150 keyword, tipi e funzioni. La modalità sicura blocca la formattazione automatica sugli statement distruttivi (ALTER, CREATE, DELETE, DROP, GRANT, TRUNCATE, UPDATE, REPLACE, RENAME) per prevenire riscritture accidentali.

Oscuramento delle credenziali nei log e nella sincronizzazione

“Sincronizza la tua cronologia, non le tue credenziali.”

Il tuo log delle query non diventa un archivio di password su iCloud.

Neutralizza IDENTIFIED BY, IDENTIFIED WITH … AS, IDENTIFIED BY PASSWORD, SET PASSWORD FOR e PASSWORD(…). Oscuramento idempotente, applicato prima di esportare il log delle query su CloudKit.

Costruttori visuali di query

“Componi le query con dei clic; escono pronte per la produzione.”

Un SELECT … WHERE … JOIN … corretto senza memorizzare la sintassi.

Costruttori visuali dedicati per le quattro forme più frequenti: SELECT, WHERE, UPDATE e CREATE di tabella.

Rinomina di simbolo con confini di parola

“Rinomina id senza rompere client_id.”

Rifattorizza gli identificatori in sicurezza, senza rovinare i nomi simili.

Regex con confini di parola \b ed escape adeguato. Non matcha mai all'interno di identificatori più lunghi.

Palette Quick Open (⌘⇧O)

“⌘⇧O e sei nella tabella che cercavi.”

Raggiungi qualsiasi oggetto dello schema senza scendere lungo l'albero.

Ricerca fuzzy incrementale su tabelle, viste, routine e oggetti, con navigazione tramite frecce ed Enter per aprire.

Gestore di snippet con seeding per motore

“I tuoi snippet si adattano al motore, non il contrario.”

Le tue ricette SQL sempre a portata di mano, filtrate sul motore che stai usando.

Archiviazione JSON locale. Ogni snippet dichiara per quali motori vale (MySQL, MariaDB…). Connettersi a un nuovo motore aggiunge i default senza duplicati. Supporta la categorizzazione.

Popover di documentazione DDL e di funzioni

“La doc di GROUP_CONCAT si apre dove stai scrivendo.”

Documentazione senza uscire dall'editor né aprire un browser.

Mostra la firma della funzione SQL o il DDL dell'oggetto dello schema sotto il cursore.

Editor di cella avanzato e modifica inline di riga

“Modifica la cella, guarda l'SQL e decidi.”

Modifica i dati rapidamente e visualizza in anteprima l'SQL esatto che verrà eseguito.

Modifica in stile foglio di calcolo sui risultati, con anteprima dell'UPDATE o del DELETE generato prima di eseguire.

SQL Player — cronologia di esecuzione

“Riproduci la tua sessione SQL come un video.”

Esegui il debug di un batch di query statement per statement, senza rieseguire tutto.

Riproduzione in stile timeline degli statement eseguiti, legata alla cronologia persistente delle query.

Barre di aiuto dell'iPad sopra la tastiera

“Tastiera dell'iPad con superpoteri SQL.”

Suggerimenti tattili rapidi proprio sopra la tastiera a schermo.

Barre contestuali per l'oggetto o la funzione sotto il cursore, con accesso rapido a «Vedi DDL» e ai parametri di funzione.

Barra degli strumenti personalizzabile

“La tua barra, nel tuo ordine.”

Ognuno ha la propria ergonomia; i DBA riordinano una volta e se ne dimenticano.

Riordina o nascondi gruppi di pulsanti da un pannello di personalizzazione dedicato. Il layout viene mantenuto.

Amministrazione e catalogo

Albero dello schema navigabile

“Il tuo schema, in un albero che riflette come lo pensi.”

Una sola vista per tutto il catalogo del server.

Database → tabelle / viste / routine / trigger / eventi, con caricamento pigro e azioni contestuali: DDL, colonne, indici, importazione di dati, WHERE builder.

Schema Diff con generazione di ALTER

“Confronta il tuo schema, genera l'ALTER, rivedi prima di applicare.”

Promuovi uno schema da staging a produzione senza raccogliere i diff a mano.

Confronta due schemi e genera l'ALTER TABLE necessario per portare l'uno all'altro. Il confronto delle colonne gira in parallelo tramite structured concurrency. Fonte di verità: INFORMATION_SCHEMA.

Audit DDL locale

“Sa quale DDL hai eseguito, quando e su quale server.”

Tracciabilità delle modifiche allo schema, senza toccare il server.

Ogni CREATE / ALTER / DROP / RENAME viene registrato localmente con timestamp e server di destinazione, nello store SQLite locale dell'app.

Migrazione di oggetti tra server

“Da staging a produzione in tre clic — con anteprima.”

Clona oggetti tra ambienti senza mysqldump né file .sql fatti a mano.

Connessione doppia (origine + destinazione), selezione granulare di tabelle, viste, routine, trigger ed eventi, con opzioni di REPLACE, includere i dati o omettere le chiavi esterne. Anteprima dell'SQL prima di eseguire.

Editor di oggetti avanzati

“Un editor per tipo di oggetto, non un .sql generico per tutto.”

Modifica routine ed eventi correttamente, in un editor pensato per l'oggetto.

Pannelli dedicati per routine memorizzate, trigger, eventi, viste e indici. Ognuno emette DDL ben formato.

Manutenzione delle tabelle

“OPTIMIZE, ANALYZE e REPAIR, in un pulsante.”

Manutenzione delle tabelle MyISAM/InnoDB senza memorizzare i comandi.

Esegue OPTIMIZE TABLE, REPAIR TABLE e ANALYZE TABLE con feedback di avanzamento.

Amministrazione di utenti e privilegi

“GRANT e REVOKE — con delle caselle.”

Gestisci gli utenti del server senza scrivere ogni GRANT a mano.

CREATE / ALTER / DROP USER, più GRANT e REVOKE da una UI dedicata.

Advisor ed editor di indici

“Gli indici che ti avanzano e quelli che ti mancano — con le prove.”

Identifica gli indici ridondanti o mancanti usando dati che il server già espone.

Vista advisor che analizza l'uso degli indici, insieme a un editor dedicato al catalogo degli indici.

Profiler di colonna

“Profila la colonna, non indovinare i dati.”

Comprendi la qualità dei tuoi dati prima di scrivere la query analitica.

Distribuzioni per colonna: istogramma, percentili e cardinalità.

Diagramma ER interattivo

“Il diagramma ER che non devi più disegnare.”

Documenta le relazioni senza disegnare caselle su Miro.

Generazione automatica dallo schema attivo, con visualizzazione delle chiavi esterne.

Assistente IA (BYOK)

Porta la tua chiave. L'abbonamento non include crediti IA — usi la tua API key. Questo viene dichiarato apertamente nel paywall: «L'assistente IA richiede la tua chiave di OpenAI, Google Gemini o Anthropic Claude (non inclusa nell'abbonamento).»

Provider OpenAI, Gemini e Claude

“IA che gira con i tuoi token, non con la tua fattura dell'abbonamento.”

Usa il modello che già paghi e non dipendere dagli aumenti di prezzo per token di Calíope.

OpenAI (GPT-4, GPT-4o, o1, o3) con token Bearer. Google Gemini con API key; filtrato ai modelli che espongono generateContent. Anthropic Claude (claude-*) con x-api-key e il system prompt nel suo campo dedicato (non dentro messages). System prompt bilingue con il contesto dello schema attivo, conservando gli ultimi tre scambi.

Oscuramento dell'API key negli errori e nei log

“La tua chiave non appare mai in uno stack trace.”

Se un messaggio di errore finisce in uno screenshot o in un canale Slack, la tua API key non viaggia con esso.

Mascheramento tramite regex per sk-* (OpenAI), AIza* (Gemini), sk-ant-* (Anthropic Claude, inclusi sk-ant-api03-…) e Bearer … in qualsiasi messaggio di errore del provider.

Backoff esponenziale con Retry-After

“Se OpenAI dice di aspettare, Calíope aspetta esattamente quello.”

I picchi di rate-limit non rompono la tua sessione.

In caso di 429 / 503, riprova fino a tre volte (1 s / 2 s / 4 s), rispettando l'header Retry-After. Timeout: 30 s per la generazione, 15 s per elencare i modelli.

Voce in SQL

“Pronuncia la domanda; esegui l'SQL.”

Detta una richiesta e l'assistente la converte in SQL — utile su iPad e nelle sessioni pair-DBA con le mani occupate.

Costruito su Speech e AVFoundation di Apple. Rileva la lingua, con fallback a es-ES. Permessi separati per il riconoscimento vocale e il microfono. Risultati parziali in tempo reale.

Assistente conversazionale persistente

“Una conversazione con il tuo database, non un prompt isolato.”

Chiedi «ora con un LEFT JOIN» e sa già a quale query ti riferivi.

Mantiene il contesto dello schema attivo più gli ultimi scambi, per conversazione.

Backup, importazione e sincronizzazione

Motore di backup con credenziali opt-in

“Backup con gzip nativo — e senza esportare password per sbaglio.”

Dump compatti e sicuri di default — nessuno esporta hash di password senza volerlo.

Genera .sql con opzioni di drop-before, includere i dati, includere gli utenti, includere le credenziali utente (opt-in, off di default) e compressione gzip nativa. CREATE USER / ALTER USER / GRANT vengono neutralizzati quando si escludono le credenziali. Eventi di avanzamento con ETA.

Backup programmati con retention

“Backup che non dipendono dal fatto che tu te ne ricordi.”

Il tuo Mac esegue il backup in tempo, anche se era in sospensione, e non riempie il tuo disco.

Pianificazioni giornaliere o settimanali. Usa bookmark security-scoped alla destinazione per funzionare dentro il sandbox. Gestisce le pianificazioni perse tra i riavvii dell'app, nomi di file con suffisso in nanosecondi per evitare collisioni, purga per retention e notifiche di successo/errore/omissione.

Importazione CSV / JSON / XLSX

“Da un foglio di calcolo a una tabella in tre clic.”

Importa file tabulari del mondo reale — non solo il CSV ideale.

CSV in stile RFC 4180 (virgolette con escape, campi con virgole), JSON (array di oggetti) e XLSX in streaming. Modalità: INSERT, INSERT IGNORE, REPLACE.

Log locale persistente delle query

“Il comando che hai eseguito martedì, in due secondi.”

Cerca tra migliaia di query passate per testo SQL o data.

Store SQLite locale in Application Support con tabelle per le query eseguite e l'audit DDL, indicizzato per testo della query (asc) e data (desc).

Sincronizzazione del log delle query con iCloud (opt-in, oscurata)

“La tua cronologia SQL, nel tuo iCloud, senza le tue credenziali.”

Cerca nella cronologia del tuo Mac dal tuo iPad — con le credenziali rimosse.

Contenitore CloudKit iCloud.org.caliope.caliope, lotti di 400 record, retention configurabile (30 giorni di default). Applica l'oscuramento delle credenziali prima del caricamento. Verifica lo stato dell'account iCloud prima di sincronizzare.

Toggle di sincronizzazione per sezione

“Decidi tu cosa va su iCloud.”

Sincronizza solo ciò che ti interessa — non tutto o niente.

Toggle indipendenti per la sincronizzazione iCloud del Keychain e del log delle query, dalle Preferenze.

Monitoraggio, diagnostica e replicazione

Motore di monitoraggio con il tuo storage

“Metriche del tuo MySQL, salvate nel tuo MySQL.”

Monitoraggio storico senza installare Prometheus.

Un collector dedicato scrive snapshot su un server di storage che scegli tu, predisponendo tabelle per i campioni (CPU, memoria, connessioni, QPS) e gli eventi (superamenti di soglia, lag di replicazione). Retention automatica.

Visual EXPLAIN interattivo

“Il tuo piano di query come un diagramma che respira.”

Individua l'ALL che sta uccidendo la tua query senza leggere il JSON a mano.

Prende EXPLAIN FORMAT=JSON e lo disegna come un albero. Codificato a colori secondo il tipo di accesso: full scan, range / index merge, ottimizzato, sort, join. Tooltip con access_type, righe stimate e tempi. Zoom e pan con la rotellina del mouse.

Profiler di query

“Guarda dove stai perdendo i millisecondi.”

Individua quale fase della query si sta prendendo il tempo.

Costruito su SHOW PROFILE. Tabella più grafico a barre per fase (starting, Sending data, ecc.) con tempi in millisecondi.

Process List con KILL guidato

“Un KILL per la query che ha bloccato la tua produzione.”

Termina una query fuori controllo senza aprire un terminale.

SHOW FULL PROCESSLIST con colonne per id, user, host, database, command, time, state e info. Azioni per KILL QUERY e KILL CONNECTION.

Monitor di replicazione (MySQL 8 e legacy)

“Repliche di MySQL 8 e 5.7, nello stesso pannello.”

Osserva il lag della replica senza combattere con il vocabolario legacy vs. 8.0.

SHOW REPLICA STATUS (MySQL 8) con fallback automatico a SHOW SLAVE STATUS (MariaDB 10.5 / MySQL 5.7). Metriche: IO/SQL running, secondi di ritardo rispetto al source, ultimi errori con timestamp, GTID set, posizioni di log. Auto-refresh configurabile.

Visualizzatore di binlog con filtri e PURGE

“Il tuo binlog, filtrabile e purgabile — dall'app.”

Verifica quali eventi hanno prodotto i tuoi statement senza scendere a mysqlbinlog.

SHOW BINLOG EVENTS con categorizzazione in DDL / DML / Sistema, ricerca per testo e un limite di righe configurabile (300 di default). Supporta i binlog crittografati (MySQL 8.0.14+). PURGE BINARY LOGS TO con conferma esplicita.

Dashboard, Server Info e Health

“Il battito del tuo MySQL, in una sola vista.”

Consolida lo stato di salute del server senza aprire cinque client.

Server Info a più schede (variabili globali e di sessione, status globale e di sessione, uso dell'HDD), Server Dashboard con grafici in tempo reale e un Server Health Monitor.

Benchmark in tempo reale

“Due query sulla bilancia; una vince.”

Scegli tra due query con le prove, non con l'intuito.

Confronta i tempi di esecuzione di varianti di query fianco a fianco.

Avvisi e notifiche locali

“Il tuo Mac ti avvisa quando la replica va in ritardo.”

Il sistema ti avvisa — non devi restare a fissare l'app.

Avvisi per soglia su CPU, memoria, connessioni e lag di replicazione. Notifiche native di macOS/iOS.

Widget nativi

Widget desktop macOS

“Stato del server, a colpo d'occhio, sulla tua scrivania.”

Guarda il battito del tuo server senza aprire Calíope.

Famiglie Small, Medium e Large. Gli snapshot vengono letti da un app group condiviso con file coordination per letture concorrenti sicure. I payload superiori a una soglia di sicurezza vengono rifiutati (protezione DoS).

Widget della schermata Home e della schermata di blocco dell'iPad

“Il tuo MySQL sulla schermata di blocco dell'iPad.”

Metriche del server sulla schermata di blocco del tuo iPad — a pochi secondi di distanza.

Sette famiglie in totale: Small, Medium, Large, ExtraLarge, più le accessorie Rectangular, Circular e Inline (iOS 16.1+).

Deep-linking al profilo fissato

“Tocca il widget → la dashboard del server giusto, in un solo movimento.”

Un tocco e sei nella dashboard del server giusto.

URL del widget caliope://server/<uuid> quando c'è un profilo collegato; altrimenti, ripiega su caliope://.

Selezione basata su AppIntent

“Un widget per server — modificabile come un widget del meteo.”

Assegna un widget diverso a ogni server — configurato in pochi secondi.

Configurabile dalla UI di modifica dei widget di sistema tramite un AppIntentConfiguration. Non richiede codice dell'utente.

Aggiornamento in background con budget di sistema

“Si aggiorna quando serve; dorme quando no.”

Il widget non prosciuga la tua batteria e mostra comunque dati aggiornati.

La policy di timeline delega il controllo a WidgetKit, rispettando il budget di aggiornamento del sistema. Ripiega sull'ultimo snapshot quando non ci sono dati aggiornati.

Integrazioni di sistema

Siri e App Intents

“Un SELECT COUNT(*) da Siri, senza aprire Calíope.”

Esegui una query o elenca i database da Comandi rapidi, senza aprire l'app.

Intent registrati: connettersi a un server, eseguire una query (restituisce TSV con intestazioni), elencare i database, aprire una tab del workspace. Supportato da un bridge interno che espone i session e database manager agli AppIntents.

Menu macOS e gestione dei file .sql

“Sa aprire da Spotlight con un .sql — come qualsiasi app nativa.”

Si comporta come una vera app per Mac — non come un port da Windows o Electron.

Barra dei menu completa: Informazioni, Apri file SQL, File recenti, Quick Open, navigazione tra le tab, Aiuto, Novità, Informativa sulla privacy, Supporto. Gestisce le aperture di file .sql tramite NotificationCenter.

Elemento nella barra dei menu

“Un'icona nella barra dei menu: sai se sei connesso senza cambiare finestra.”

Contesto di connessione a colpo d'occhio, senza portare l'app in primo piano.

Icona nella barra dei menu che riflette lo stato di connessione e il profilo attivo.

Onboarding con TipKit

“Scopri ciò che ti serve, quando ti serve.”

Impara le funzionalità nel momento in cui sono rilevanti.

Tip contestuali per Quick Open, WHERE Builder, importazione di dati, audit DDL, visualizzatore di binlog, monitor di replicazione, migrazione di oggetti, Visual EXPLAIN, profiler di query e albero dello schema.

Handoff, gesti dell'iPad e trackpad

“iPad + Magic Keyboard = un Mac da DBA portatile.”

Su iPad con Magic Keyboard, lavori proprio come sul Mac.

Gestione nativa del puntatore e della tastiera su iPad. Gesti: swipe tra le tab, pinch-zoom nell'editor. Split View.

Modalità screenshot

“Screenshot pronti per la documentazione — non screenshot amatoriali.”

Cattura screenshot pronti per la documentazione con un aspetto coerente.

Cmd+Opt+P su macOS produce PNG con uno stile pronto per la documentazione e il marketing.

«Novità» dentro l'app

“Novità, dentro l'app — non in un changelog.”

Scopri le novità senza leggere le note di versione dell'App Store.

Highlight per versione, con stato locale di «già visto».

Interfaccia in cinque lingue (spagnolo, inglese, francese, tedesco, italiano)

“Calíope parla la tua lingua — spagnolo, inglese, francese, tedesco o italiano.”

Un'app progettata prima in spagnolo, così non sembra una traduzione automatica.

Bundle di risorse completi en, es, fr, de e it, con un manager di lingua a runtime e un helper di localizzazione. Fallback all'inglese.

Privacy, sandbox e conformità

Sandbox App Store attivo

“Sandbox attivo — fa ciò che dichiara, e nulla più.”

Calíope non può accedere a nulla al di fuori degli entitlement dichiarati. Il sistema lo garantisce.

App sandbox abilitato con un set ristretto di entitlement: client e server di rete (per il proxy SSH), ingresso audio (voce in SQL), file selezionati dall'utente (documenti), app group (per i widget) e iCloud (CloudKit e Cloud Documents).

Servizio di cancellazione dei dati

“Un pulsante, e non resta nulla.”

Un pulsante per lasciare la macchina pulita prima di restituirla o venderla.

Cancellazione sicura su richiesta di sessioni, credenziali e log delle query.

BYOK con disclosure formale

“Abbonamento onesto — l'IA va con la tua chiave, e lo diciamo.”

Sai esattamente cosa paga l'abbonamento e cosa no.

Il paywall mostra una nota BYOK e un avviso di rinnovo automatico, in conformità con la §3.1.2c dell'App Store.

Abbonamento con StoreKit 2 e prova di 7 giorni

“Una settimana gratis, senza trucchi.”

Prova Calíope una settimana senza costi e annulla dal tuo Apple ID.

Prodotto annuale con una settimana gratuita. Verifica tramite AppTransaction.shared e Transaction.latest(for:) di StoreKit 2. Ripristino tramite AppStore.sync(). Il prezzo viene sempre presentato da product.displayPrice.

Pronto a provare Calíope?

Ogni funzionalità di questa pagina è inclusa nell'abbonamento annuale. Una settimana di prova gratuita, annullabile in qualsiasi momento dal tuo Apple ID.

Prova gratis per una settimana →