Ícono de la app Calíope

Características

Cada capacidad, verificada contra el código fuente.

Calíope se distribuye como una única aplicación con las capacidades listadas abajo, disponibles en Mac, iPad, iPhone y Apple Vision Pro. Cada entrada corresponde a código que existe hoy — este es un catálogo, no una lista de deseos. Usa los atajos para saltar a una categoría o recorre la lista completa.

Esta página describe Calíope 1.7, la versión que estoy construyendo ahora mismo. La 1.6 está en la App Store para Mac, iPad, iPhone, Apple Watch, Apple TV y Apple Vision Pro. El changelog dice en qué versión llegó cada función.

Conexión y seguridad

Túnel SSH nativo

“Tu túnel SSH, sin terminal ni .ssh/config.”

Alcanza servidores detrás de un bastión desde el sandbox de macOS — sin ssh local, sin ~/.ssh/config, sin peleas de permisos.

SwiftNIO + NIOSSH. Autenticación por contraseña o clave privada (ed25519, ECDSA P-256/P-384/P-521). Parser OpenSSH y descifrado de passphrase en memoria. Proxy local en 127.0.0.1 puenteado vía SSH direct-tcpip.

Verificación TOFU de host-key

“Te avisa si alguien interceptó tu túnel — antes de que escribas nada.”

Detecta un MITM contra tu bastión SSH sin dejar un known_hosts en disco.

Fingerprints guardados en Keychain. La primera conexión pide confirmación explícita; un fingerprint que cambió falla en seco — equivalente a StrictHostKeyChecking=yes.

TLS estricto por defecto

“SSL que de verdad protege — no un simple interruptor.”

Activar «SSL» significa SSL verificado. Los certificados autofirmados exigen una CA o un opt-out explícito con advertencia visible.

Política única: saltar la verificación es opt-in; una CA suministrada permite verificación sin hostname; en el resto, verificación completa.

Keychain con sincronización iCloud opt-in

“Tus contraseñas no van a iCloud a menos que las invites.”

Tú decides qué credenciales viajan entre tus dispositivos. Por defecto, ninguna.

El modo local-only fija credenciales con WhenUnlockedThisDeviceOnly; activar la sincronización las migra a AfterFirstUnlock para iCloud Keychain. El toggle es idempotente.

Autenticación biométrica opcional por perfil

“Tu huella desbloquea producción, no sólo tu Mac dormido.”

Añade una puerta Touch ID / Face ID antes de conectar a servidores de producción, configurable por perfil.

Construido sobre el framework LocalAuthentication. Activable por perfil de conexión.

Connection pool determinista

“Un connection pool que siempre cierra — incluso cuando algo falla.”

Conexiones que no filtran recursos ni bloquean la UI, ni siquiera al cambiar de sesión.

SwiftNIO EventLoopGroupConnectionPool, con tope de 5 conexiones por event loop en un event-loop group de un solo hilo. Cierre asíncrono con timeout de seguridad, y un cierre SSH limpio cuando falla el binding local.

Prepared statements nativos

“Bindings preparados, no interpolación de strings — desde la base del stack.”

Los valores que las herramientas de Calíope envían por ti —un filtro, una celda editada, una fila insertada— nunca se concatenan al SQL: viajan por el protocolo de red, separados del statement. Lo que escribes en el editor SQL va tal como lo escribiste, como en cualquier cliente.

La sentencia preparada de cada motor, en un cliente que escribí yo: sin bindings → consulta simple (COM_QUERY en MySQL y MariaDB, la consulta simple en PostgreSQL); con bindings → COM_STMT_PREPARE y COM_STMT_EXECUTE en MySQL y MariaDB, con la sentencia cerrada en todo camino en que la conexión sigue viva, así el pool nunca filtra, y Parse, Bind y Execute en PostgreSQL, con marcadores $n. SQL Server: sp_executesql por RPC, con parámetros tipados. Oracle Database: binds :1 tipados en la llamada de ejecución. ClickHouse: parámetros tipados {name:Type}, enviados como campos param_ de la petición HTTP. Los identificadores siguen pasando por el helper de escape centralizado para los casos residuales de DCL/DDL.

Host alternativo por perfil

“Un servidor, dos direcciones — y prueba las dos.”

Al mismo servidor se llega a menudo por una dirección desde el Mac y por otra desde el iPad. Dale al perfil una segunda dirección y Calíope la prueba cuando la primera no responde, con el mismo puerto y las mismas credenciales.

El destino lo resuelve connectionEndpoints, nunca leyendo el campo del host: los tres sitios que abren un pool reciben el endpoint. Orden fijo, principal y luego alternativo, sin recordar cuál ganó — ese estado es justo el que no puede viajar entre dispositivos. Admite host:puerto para la ruta que publique otro puerto. Con túnel SSH se ignora, y la interfaz lo dice: ahí el host lo resuelve el bastión, no tu dispositivo.

Etiquetas de entorno

“Sabes en qué servidor estás antes de ejecutar nada.”

Cada conexión puede llevar una etiqueta con el nombre y el color que elijas —local, pruebas, producción— y una franja de su color encima de todas las herramientas, con un nivel de protección que puede preguntar antes de lo que escribe o negarlo del todo.

Un guarda, escrito una vez, juzga cada sentencia antes de enviarla; en solo lectura, además, el propio servidor se pone en solo lectura donde sabe hacerlo —SET SESSION TRANSACTION READ ONLY en MySQL y MariaDB, default_transaction_read_only al arrancar en PostgreSQL, readonly=2 en cada petición a ClickHouse—, y en SQL Server, Oracle, Redis y MongoDB el guarda es sólo el cliente. Protege contra accidentes, no contra atacantes: eso es trabajo de un usuario de solo lectura en el servidor.

Editor SQL y productividad

Autocompletado sensible al contexto

“El editor sabe si estás en el FROM, el WHERE o la lista de columnas.”

Escribe menos y comete menos errores, porque la sugerencia entiende dónde estás dentro del statement.

Sugiere columnas de la tabla activa, nombres de base de datos, tokens del esquema (tablas, vistas, funciones), keywords DML/DDL/de control, tipos de datos y frases auxiliares SQL filtradas por motor.

Linter léxico en tiempo real

“Los paréntesis desbalanceados nunca llegan al servidor.”

Atrapa el error obvio antes de que el servidor lo rechace.

Detecta comentarios sin cerrar, strings sin cerrar, paréntesis desbalanceados e identificadores con backtick abierto. Escaneo O(n), sin parser completo.

Formateador, y un modo seguro

“Un DROP no sale por accidente.”

Formato legible para tus consultas, y un candado que impide que un UPDATE o un DROP lleguen al servidor antes de que lo decidas.

El formateador pone en mayúsculas las palabras clave con el vocabulario propio del motor. El Modo Seguro, activo por defecto y guardado por perfil y por pestaña del editor, se niega a ejecutar cualquier sentencia que contenga ALTER, CREATE, DELETE, DROP, GRANT, TRUNCATE, UPDATE, REPLACE o RENAME — desde el editor, la Terminal y el SQL Player por igual. Busca la palabra, no el WHERE: un UPDATE con WHERE también se detiene, y no se envía nada hasta que lo desactivas.

Redacción de credenciales en logs y sincronización

“Sincroniza tu historial, no tus credenciales.”

Tu log de consultas no se convierte en un archivo de contraseñas en iCloud.

Neutraliza IDENTIFIED BY, IDENTIFIED WITH … AS, IDENTIFIED BY PASSWORD, SET PASSWORD FOR y PASSWORD(…). Redacción idempotente, aplicada antes de exportar el log de consultas a CloudKit.

Constructores visuales de consultas

“Compón consultas con clics; salen listas para producción.”

Un SELECT … WHERE … JOIN … correcto sin memorizar la sintaxis.

Constructores visuales dedicados para las cuatro formas más frecuentes: SELECT, WHERE, UPDATE y CREATE de tabla.

Renombrado de símbolo con límites de palabra

“Renombra id sin romper client_id.”

Refactoriza identificadores con seguridad, sin destrozar nombres similares.

Regex con límites de palabra \b y escape adecuado. Nunca matchea dentro de identificadores más largos.

Paleta Quick Open (⌘⇧O)

“⌘⇧O y estás en la tabla que buscabas.”

Alcanza cualquier objeto del esquema sin bajar por el árbol.

Búsqueda fuzzy incremental sobre tablas, vistas, rutinas y objetos, con navegación por flechas y Enter para abrir.

Gestor de snippets con seeding por motor

“Tus snippets se adaptan al motor, no al revés.”

Tus recetas SQL siempre a mano, filtradas al motor que estás usando.

Se guardan en snippets.json, que viaja por iCloud con el interruptor general de sincronización y se queda en el dispositivo cuando está apagado. Cada snippet declara para qué motores aplica (MySQL, MariaDB, PostgreSQL…). Conectarse a un motor nuevo agrega los defaults sin duplicados. Admite categorización.

Popovers de documentación DDL y de funciones

“La doc de GROUP_CONCAT se abre donde estás escribiendo.”

Documentación sin salir del editor ni abrir un navegador.

Muestra el DDL del objeto del esquema bajo el cursor, o la ficha de la función: firma, descripción, parámetros, un ejemplo y la versión en que llegó. Cada motor tiene sus fichas, SQLite y DuckDB incluidos, y también los operadores de MongoDB en la herramienta Consulta. Sin ratón, ⌥⌘?.

Editor de celda avanzado y edición inline de fila

“Edita la celda, ve el SQL, y decide.”

Cambia datos rápido y previsualiza el SQL exacto que se ejecutará.

Edición tipo hoja de cálculo sobre resultados, con vista previa del UPDATE o DELETE generado antes de ejecutar.

SQL Player — un script, paso a paso

“Reproduce, pausa y avanza por tu script como en un video.”

Ejecuta una migración sentencia por sentencia y comprueba cada resultado antes de que salga la siguiente.

Parte el script del editor en sentencias y las ejecuta una a una, a mano o con un temporizador, con controles de primera, anterior, siguiente y última; la reproducción automática se detiene en el primer error. Cada sentencia enseña su estado, su tiempo y las filas que devolvió o cambió, y queda en el historial de consultas. El Modo Seguro se aplica.

Terminal SQL acoplada al editor

“El prompt mysql>, sin salir de la app.”

Escribe una sentencia, pulsa Retorno y lee la respuesta como texto — como lo hace el cliente de línea de órdenes, al lado de tu script.

Un panel bajo el editor con el prompt propio del motor (mysql>, postgres=#…), resultados como tabla ASCII, “Query OK” con las filas que el servidor dice que cambió, y los avisos del servidor debajo. Su propio historial con las flechas en el Mac y con botones en iPad, iPhone y Apple Vision Pro; cada sentencia va también al historial de la sesión. El Modo Seguro se aplica.

Gráficos del resultado

“De un resultado a un gráfico, sin exportar nada.”

Barras, líneas o una tarta con las filas que acabas de obtener, en un panel del editor.

Los ejes se eligen solos — la primera columna de texto para las categorías, la primera numérica para los valores — y puedes cambiarlos. El gráfico se exporta a PNG o PDF.

Una consulta, dos bases

“¿Staging es igual que producción? Pregúntales a las dos a la vez.”

Ejecuta la misma consulta contra dos conexiones y ve, fila a fila, qué cambia.

Ejecutar en dos bases… envía la sentencia a las dos y sustituye la rejilla por una comparación: celdas cambiadas marcadas, filas que sólo están en un lado, y un filtro para ver sólo las diferencias. Las filas se emparejan por posición, y sólo cuando los dos lados devuelven las mismas columnas.

Barras de ayuda del iPad sobre el teclado

“Teclado del iPad con superpoderes SQL.”

Sugerencias táctiles rápidas justo encima del teclado en pantalla.

Barras contextuales para el objeto o función bajo el cursor, con acceso rápido a «Ver DDL» y parámetros de función.

Barra de herramientas personalizable

“Tu barra, en tu orden.”

Cada persona tiene su ergonomía; los DBAs reordenan una vez y se olvidan.

Reordena u oculta grupos de botones desde una hoja de personalización dedicada. El layout se persiste.

Búsqueda y reemplazo global, en toda la base

“Una búsqueda en todas las columnas de texto que tengas.”

Busca un texto en todas las columnas de texto de todas las tablas a la vez, mira las coincidencias por tabla y columna, previsualiza el resultado que calcula el servidor y reemplaza en bloque dentro de una transacción por tabla.

Enseña dos cifras, no una: la collation suele ignorar mayúsculas y REPLACE() nunca lo hace, así que sin ese aviso una edición masiva anuncia 300 filas y cambia 100 sin que nada falle. El desajuste se mide con CAST(col AS BINARY) y no con una collation concreta. Las columnas generadas, la clave primaria y las únicas quedan fuera por omisión — MariaDB acepta el UPDATE de una columna generada, informa de una fila afectada y no cambia nada. El escape usa |, porque la barra invertida se rompe con NO_BACKSLASH_ESCAPES.

Datos espaciales en un mapa real

“Tus columnas GEOMETRY dejan de ser 25 bytes.”

Puntos, líneas y polígonos dibujados en un mapa acoplado al editor, con estilos satélite y plano, agrupación y un control para encajar los datos. Arrastra un pin o un vértice y Calíope compone la sentencia — te la enseña antes de escribir nada.

El WKB del cable está siempre en (longitud, latitud); lo que cambia es el texto, porque MySQL 8 con un SRID geográfico escribe la latitud primero y MariaDB nunca lo hace. El intercambio vive sólo en la frontera textual, donde el parámetro no tiene valor por omisión: equivocarse no da error, mueve la fila de continente y el servidor lo acepta. El SRID viaja con la geometría, sin clave primaria fiable no se edita y se dice por qué, y no hay CoreLocation en ninguna parte.

Reportes

Una consulta guardada con su salida declarada

“Una consulta guardada que responde dos veces lo mismo.”

Guarda una consulta con sus parámetros declarados y su salida definida —qué columnas, en qué orden, con qué títulos y formatos— y ejecútala cuando quieras, a mano o programada. Expórtala a CSV, TSV, JSON, Markdown, HTML, XML, texto, Excel o PDF paginado. Las definiciones de los reportes viajan con la sincronización de iCloud; sus resultados y su historial de ejecuciones se quedan en el aparato que los ejecutó.

Los parámetros van atados, nunca pegados en el texto de la consulta: nada de lo que se escriba en ellos puede cambiar lo que hace, en ninguno de los dos modos de SQL. El contrato de columnas se comprueba al ejecutar — una columna que deja de llegar, o que llega con otro tipo, se anuncia en vez de dibujarse en silencio. Cada ejecución deja su fila en un historial compartido con los respaldos, con sus parámetros, su recuento y el equipo que la ejecutó. Lo programado abre su propia conexión desde el perfil, y nunca promete correr con la app cerrada.

Tres clases de base, una sola costura

“El mismo reporte, contra tres clases de base distintas.”

El mismo artefacto y la misma pantalla sirven para tu MySQL de producción, el archivo .sqlite de una app, un archivo .duckdb y una colección de MongoDB.

El motor de reportes no cuelga del proveedor de base de datos: tiene su propia costura, más estrecha, con tres miembros y ni uno más. Hay implementaciones para bases relacionales, para archivos SQLite y DuckDB que abriste tú mismo y para MongoDB con find y aggregate. Sumar una fuente es implementar ese protocolo sin tocar el motor. Y ninguna fuente guarda estado de la ejecución anterior — cuando una lo hizo, el segundo reporte se proyectaba con las columnas del primero: una tabla de celdas vacías, sin error y sin aviso.

Reportes que preparan antes de leer

“Prepara, indexa y lee — sobre una sola conexión, y sin tocar tus tablas.”

Los informes que un DBA escribiría como un guion de cinco pasos caben en un reporte, sin renunciar a que no toque tus datos.

No todo reporte sale de una consulta: fijar una variable de sesión, construir una tabla temporal en varias pasadas, indexarla y leerla al final. El lote entero corre sobre una sola conexión prestada — con una conexión por sentencia, la temporal que creó la primera no existiría en la última. Las sentencias de preparación van por lista blanca y sólo pueden escribir en temporales del propio lote, y el tope de filas se aplica a la última.

Nueve formatos de exportación, y un PDF que mide la página

“Nueve formatos, y el PDF sabe dónde termina la página.”

El PDF que mandas a dirección dice «Importe», y el CSV del mismo reporte dice «Importe» — no total_eur.

CSV, TSV, JSON, Markdown, HTML, XML, texto plano y XLSX —escrito por Calíope misma como ZIP más XML, sin dependencias— más un PDF paginado. Se exporta lo que declara la salida, no lo que vino del servidor. Y el troceado del PDF se mide a partir del ascenso, el descenso y el interlineado de la fuente en vez de estimarse con una constante: una constante corta por la mitad la última fila de cada página, y eso sólo se ve una vez impreso.

Administración y catálogo

Catálogos: un árbol de esquema navegable

“Tu esquema, en un árbol que refleja cómo lo piensas.”

Una sola vista para todo el catálogo del servidor.

Bases de datos → tablas / vistas / rutinas / triggers / eventos, con carga perezosa y acciones contextuales: DDL, columnas, índices, importación de datos, WHERE builder.

Comparar esquemas, con generación de ALTER

“Diferencia tu esquema, genera el ALTER, revisa antes de aplicar.”

Promueve un esquema de staging a producción sin recolectar diffs a mano.

Compara dos esquemas y genera el ALTER TABLE necesario para llevar uno al otro. La comparación de columnas corre en paralelo mediante structured concurrency. Fuente de verdad: INFORMATION_SCHEMA.

Auditoría DDL local

“Sabe qué DDL ejecutaste, cuándo, y contra qué servidor.”

Trazabilidad de los cambios de esquema, sin tocar el servidor.

Cada CREATE / ALTER / DROP / RENAME se registra localmente con timestamp y servidor de destino, en el store SQLite local de la app.

Migración de datos entre servidores

“De staging a producción en tres clics — con previsualización.”

Clona objetos entre entornos sin mysqldump ni archivos .sql hechos a mano.

Conexión dual (origen + destino), selección granular de tablas, vistas, rutinas, triggers y eventos, con opciones de REPLACE, incluir datos u omitir claves foráneas. Vista previa del SQL antes de ejecutar.

Editores de objeto avanzados

“Un editor por tipo de objeto, no un .sql genérico para todo.”

Edita rutinas y eventos correctamente, en un editor pensado para el objeto.

Hojas dedicadas para rutinas almacenadas, triggers, eventos, vistas e índices. Cada una emite DDL bien formado.

Constructor de tablas

“Una tabla diseñada columna a columna, no tecleada.”

Crea una tabla o cambia una que ya existe —columnas, tipos, claves, índices, claves foráneas— y lee el CREATE o el ALTER TABLE antes de que se ejecute.

Cada motor declara su propio catálogo de tipos y opciones, así que el constructor ofrece lo que ese servidor tiene, con la llave de ordenamiento y los índices de salto de ClickHouse incluidos. Cambiar una tabla la compara con una instantánea de la original y escribe el ALTER TABLE de lo que cambió, y nada más. Se abre desde Catálogos.

Mantenimiento de tablas

“CHECK, REPAIR, OPTIMIZE, ANALYZE y CHECKSUM, en un botón.”

Mantenimiento de tus tablas, en MySQL, MariaDB, TiDB, PostgreSQL, SQL Server, Oracle Database y ClickHouse, sin memorizar los comandos.

Ejecuta CHECK TABLE, REPAIR TABLE, OPTIMIZE TABLE, ANALYZE TABLE y CHECKSUM TABLE en MySQL y MariaDB, y ANALYZE más VACUUM y REINDEX TABLE CONCURRENTLY en PostgreSQL, y UPDATE STATISTICS, DBCC CHECKTABLE y la reconstrucción de índices en SQL Server, y CHECK TABLE y OPTIMIZE (la tabla entera o una partición) en ClickHouse, y las estadísticas con DBMS_STATS en Oracle Database, con feedback de progreso.

Administración de usuarios y privilegios

“GRANTs y REVOKEs — con casillas.”

Gestiona usuarios del servidor sin escribir cada GRANT a mano.

CREATE / ALTER / DROP USER, más GRANT y REVOKE desde una UI dedicada.

Asesor y editor de índices

“Los índices que te sobran y los que te faltan — con evidencia.”

Identifica índices redundantes o faltantes usando datos que el servidor ya expone.

Vista de asesor que analiza el uso de índices, junto a un editor dedicado al catálogo de índices.

Perfilador de columna

“Perfila la columna, no adivines los datos.”

Entiende la calidad de tus datos antes de escribir la consulta analítica.

Estadísticas de una columna del resultado que tienes cargado: nulls y su proporción, valores distintos, mínimo, máximo y media, y los diez valores más frecuentes, con un gráfico de barras de los ocho primeros.

Diagrama ER interactivo

“El diagrama ER que ya no tienes que dibujar.”

Documenta relaciones sin dibujar cajas en Miro.

Generación automática desde el esquema activo, con visualización de claves foráneas.

MongoDB

MongoDB

“Bases de documentos, con su propio vocabulario.”

Recorre colecciones y documentos, edítalos como JSON, escribe filtros y pipelines de agregación, gestiona índices y mira el servidor, sus operaciones en curso y sus usuarios — sin salir de la app que ya usas para MySQL.

Herramienta autocontenida: nada de MongoDB toca la capa de providers relacionales. Los documentos se muestran como árboles plegables con el tipo de cada valor (ObjectId, decimal128, fechas, binarios), porque una colección no tiene esquema y dos documentos vecinos pueden no compartir ningún campo. JSON extendido en las dos direcciones con analizador propio, así que el orden de los campos y el ancho de los números sobreviven a la ida y vuelta. Reutiliza el perfil de conexión, el Llavero y el túnel SSH nativo. Cursores paginados que se cierran al abandonarlos. Seis herramientas en el navegador: Colecciones MongoDB, Consulta MongoDB, Índices MongoDB, Servidor MongoDB, Comandos MongoDB y Profiler de MongoDB.

Redis y Valkey

Redis

“Claves, memoria y comandos — no tablas disfrazadas.”

Una sesión de Redis abre siete herramientas propias: el Explorador de claves, el Panel del servidor, el Analizador de memoria, Comandos lentos, Clientes conectados, la Consola de comandos y la Topología de nodos. Ves qué prefijo se come la memoria, qué comando pasó del umbral y qué cliente desconectar, desde la misma app que usas para SQL.

Su propio cliente RESP, fuera de la capa de providers relacionales. Las claves se recorren con SCAN, nunca con KEYS, y ninguna colección se lee entera — un HGETALL grande bloquea el servidor igual. En un clúster, MOVED relee el mapa de slots y ASK no; un clúster no se abre por un túnel SSH, porque anuncia direcciones que el túnel no alcanza, y la sesión lo dice antes de abrir. La consola rechaza lo que dejaría estado en la conexión (MULTI, WATCH, SUBSCRIBE…) y los comandos bloqueantes sin tope. El umbral del registro de lentos va en microsegundos, y así está escrito.

Valkey

“Las mismas siete herramientas, en el fork abierto.”

Valkey, el fork de Redis de la Linux Foundation, se abre en las mismas siete herramientas: claves, servidor, memoria, comandos lentos, clientes, consola y topología, clúster incluido. El panel del servidor enseña la versión y el modo propios de Valkey, el prompt de la consola dice valkey>, y Probar conexión lo reconoce y ofrece «Usar Valkey».

El mismo cliente RESP escrito para Redis, porque Valkey habla el mismo protocolo: el producto se lee del saludo del servidor, nunca de una lista de nombres, y lo que cambia entre los dos es una diferencia declarada, no una copia del código. Medido contra Valkey 8.0 y 9.1, suelto y en clúster con ranuras migrando. Fragmentos, Reportes y el Asistente IA también trabajan con Valkey, y los doce capítulos de Redis del Manual del DBA dicen dónde difiere. Valkey 8.0 o posterior.

Funciona sin servidor

Editor SQLite

“Dos motores, una app: tu MySQL remoto y tu SQLite del escritorio.”

Abre y edita el .sqlite de una app iOS o de un script de Python en la misma herramienta donde administras MySQL — con una transacción explícita antes de escribir nada.

Capa autocontenida (actor SQLiteConnection sobre la API C del sistema — no pasa por ningún driver de servidor) con Estructura · Datos · Ejecutar SQL · Pragmas: diseñadores de tabla, índices y vistas, renombrado, búsqueda y filtros, paginación con el mismo tamaño de página que el Editor SQL, orden, editor de celda avanzado, Ejecutar SQL con resaltado de sintaxis, autocompletado con el esquema del archivo y tope de filas en los resultados, transacciones Guardar/Revertir, mantenimiento (integrity_check, VACUUM, ANALYZE, REINDEX), pragmas editables e importación y exportación CSV · JSON · SQL. Compatible con el sandbox mediante security-scoped bookmarks. Solo bases sin cifrar.

Editor DuckDB

“Analítica en tu portátil: un motor columnar sin servidor que instalar.”

Abre un archivo .duckdb, o consulta un Parquet, un CSV o un JSON donde ya están, sin importar nada y sin servidor — en la misma app donde administras MySQL.

DuckDB 1.5.5 compilado dentro de la app (paquete SPM local, DuckDBKit sobre la C API), fuera del proveedor de base de datos igual que el Editor SQLite. Estructura · Datos · Ejecutar SQL · Ajustes, con secuencias, tipos y macros en el árbol, SUMMARIZE, tope de filas y Detener en las consultas largas, exportación e importación de la base entera, Guardar como… para las bases en memoria, y adjuntar otro archivo DuckDB en sólo lectura. Las extensiones no se descargan: las cuatro que vienen dentro son todas. Desde la 1.7 DuckDB va como un framework que la app comparte con su extensión de Vista rápida (Quick Look), así que la barra espaciadora en el Finder o la vista previa en Archivos leen un .duckdb o un Parquet con este mismo motor; y un .parquet abierto desde el Finder o desde Archivos llega aquí, a una base en memoria, con su consulta ya escrita.

Previsualizador de archivos

“Leer un archivo no debería requerir una conexión.”

Lee el .md de la documentación, el .sql de un compañero, el .json de configuración, un .csv exportado, un .rtf que te han pasado o el .log del servidor sin salir de la app, sin conectarte y sin riesgo de ejecutar algo por accidente.

Solo lectura, un archivo a la vez, resuelto por extensión: renderizador de Markdown propio (ATX y setext, listas anidadas, checklists, código con cerca y con sangrado de cuatro espacios, citas, reglas, tablas GFM), resaltador SQL, formateador de JSON, lector de CSV según RFC 4180 con detección de separador, y lector de RTF que conserva estructura y énfasis —encabezados, listas anidadas, negrita, cursiva, subrayado, tachado, enlaces y alineación— mientras la tipografía, los tamaños y los colores siguen siendo los de Calíope, para que el texto escale con el tamaño de letra dinámico y se lea en los dos temas. Todo se interpreta fuera del hilo principal y llega a la vista como datos inertes. Vigila la ruta del archivo con DispatchSource, así que sobrevive al guardado atómico. Techos declarados y avisados al pie: 5 MB de lectura, 500 KB de resaltado SQL, 2 MB de formato JSON, 10 000 filas y 64 columnas de CSV. Nunca abre la red — las imágenes remotas de Markdown muestran su texto alt.

Asistente IA, con o sin clave

Trae tu propia clave. La compra no incluye créditos de IA — usas tu propia API key. Esto se declara abiertamente en el paywall: «El asistente funciona sin clave con Apple Intelligence o con Ollama; los proveedores de nube (OpenAI, Google Gemini, Anthropic Claude) piden tu propia clave, no incluida en la compra.»

Con Apple Intelligence no sale nada del aparato; con Ollama, nada pasa de la máquina a la que lo apuntas. Con OpenAI, Gemini o Claude, el esquema de la base de datos activa — nombres de tablas, columnas y claves foráneas — sí viaja a ese proveedor, con tu propia clave. Las filas y las credenciales no viajan nunca. Salvo que decidas otra cosa: el interruptor Mandar esquema al modelo, en el propio panel del asistente, lo decide antes de cada pregunta y con cualquier proveedor. Apagado, no se envía nada del esquema —ni los nombres de las tablas— y las nombras tú en la pregunta. En macOS, Calíope también puede actuar como servidor MCP para un cliente de IA del mismo Mac: sólo lectura, en 127.0.0.1, apagado de fábrica.

Apple Intelligence y Ollama, sin clave

“Dos proveedores que no cuestan nada y no piden nada.”

Apple Intelligence ejecuta el modelo del sistema en tu propio aparato: sin clave, sin cuenta, sin coste, y tu pregunta no sale del aparato. Ollama ejecuta modelos abiertos donde tú digas —tu máquina, o una de tu red— y Calíope le habla en la dirección que escribas.

Apple Intelligence por FoundationModels; sólo se ofrece donde el sistema dice que está. Ollama por el protocolo de OpenAI contra tu propia URL base, sin cabecera Authorization, y con la lista de modelos sin filtrar — sus nombres son los que hayas descargado. Cuando el esquema no cabe en la ventana local, el asistente lo dice en la conversación y propone qué hacer.

Proveedores OpenAI, Gemini y Claude

“IA que corre con tus tokens, no con tu factura.”

Usa el modelo que ya pagas y no dependas de que Calíope suba los precios por token.

OpenAI (modelos gpt-, o1, o3 y o4) con token Bearer. Google Gemini con API key; filtrado a modelos que exponen generateContent. Anthropic Claude (claude-*) con x-api-key y el system prompt en su propio campo (no dentro de messages). System prompt con el contexto del esquema activo, guardando los últimos tres intercambios.

Redacción de la API key en errores y logs

“Tu clave nunca aparece en un stack trace.”

Si un mensaje de error se filtra a un screenshot o a un canal de Slack, tu API key no viaja con él.

Enmascarado por regex para sk-* (OpenAI), AIza* (Gemini), sk-ant-* (Anthropic Claude, incluidos sk-ant-api03-…) y Bearer … en cualquier mensaje de error del proveedor.

Backoff exponencial con Retry-After

“Si OpenAI dice espera, Calíope espera exactamente eso.”

Los picos de rate-limit no rompen tu sesión.

Ante 429 / 503, reintenta hasta tres veces (1 s / 2 s / 4 s), respetando el header Retry-After. Timeouts: 30 s para generación, 15 s para listar modelos.

Voz a SQL

“Habla la pregunta; ejecuta el SQL.”

Dicta una solicitud y el asistente la convierte en SQL — útil en iPad y en sesiones pair-DBA con las manos ocupadas. Tu voz no sale del dispositivo.

Construido sobre SpeechAnalyzer y DictationTranscriber de Apple (macOS 26 / iPadOS 26 / iOS 26 / visionOS 26): el reconocimiento ocurre en el dispositivo, no se envía audio a ningún servidor y el dictado funciona sin conexión. El modelo del idioma se descarga una vez, con progreso visible, en el idioma que tengas puesto en Calíope — o en cualquier otro que admita el dictado del sistema, elegido en la cápsula que hay junto al micrófono, que dice en cuál está escuchando. Solo se pide permiso de micrófono — el reconocimiento local no necesita el de reconocimiento de voz. Resultados parciales en vivo.

Asistente conversacional persistente

“Una conversación con tu base de datos, no un prompt aislado.”

Preguntas «ahora con un LEFT JOIN» y ya sabe a qué consulta te referías.

Mantiene el contexto del esquema activo más los últimos intercambios, por conversación.

Un servidor MCP para un cliente de IA en tu Mac

“Cursor o Claude Desktop pueden preguntarle a tu base — sólo lectura.”

Un cliente de IA en el mismo Mac puede listar bases, describir tablas y ejecutar consultas de sólo lectura contra las conexiones que decidas exponer.

JSON-RPC 2.0 sobre HTTP, escuchando sólo en 127.0.0.1, en el puerto 41500 salvo que lo cambies. Sólo en macOS, apagado por defecto, y sólo responde mientras Calíope está abierto. Cinco herramientas, documentadas con las descripciones que recibe el cliente en su propia página.

Respaldos, importación y sincronización

Motor de respaldos con credenciales opt-in

“Respaldos con gzip nativo — y sin exportar contraseñas por accidente.”

Dumps compactos y seguros por defecto — nadie exporta hashes de contraseñas sin querer.

Genera .sql con opciones de drop-before, incluir datos, incluir usuarios, incluir credenciales de usuario (opt-in, por defecto off) y compresión gzip nativa. CREATE USER / ALTER USER / GRANT se neutralizan cuando se excluyen credenciales. Eventos de progreso con ETA.

Respaldos programados con retención

“Respaldos que no dependen de que te acuerdes.”

Tu Mac hace el respaldo a tiempo, incluso si estaba dormido, y no llena tu disco.

Programaciones diarias, semanales, en días laborables, mensuales o cada N horas. Usa bookmarks security-scoped al destino para funcionar dentro del sandbox. Maneja programaciones perdidas entre reinicios de la app, nombres de archivo con sufijo en nanosegundos para evitar colisiones, purga por retención y notificaciones de éxito/error/omisión.

Importación CSV / JSON / XLSX

“De una hoja de cálculo a una tabla en tres clics.”

Importa archivos tabulares del mundo real — no sólo el CSV feliz.

CSV estilo RFC 4180 (comillas escapadas, campos con comas), JSON (array de objetos) y XLSX en streaming. Tres modos —Insertar, Saltar duplicados y Reemplazar duplicados— que se ofrecen donde el motor los tiene: los tres en MySQL y MariaDB, los dos primeros en PostgreSQL, y sólo Insertar en SQL Server, Oracle Database y ClickHouse.

Registro de consultas local y persistente

“El comando que ejecutaste el martes, en dos segundos.”

Busca entre miles de consultas pasadas por texto SQL o fecha.

Store SQLite local en Application Support con tablas para consultas ejecutadas y la auditoría DDL, indexado por texto de consulta (asc) y fecha (desc).

Sincronización del log de consultas con iCloud (opt-in, redactada)

“Tu historial SQL, en tu iCloud, sin tus credenciales.”

Busca en el historial de tu Mac desde tu iPad — con las credenciales quitadas.

Contenedor CloudKit iCloud.org.caliope.caliope, lotes de 400 registros, retención configurable (por defecto 90 días). Aplica la redacción de credenciales antes de subir. Verifica el estado de la cuenta iCloud antes de sincronizar.

Toggles de sincronización por sección

“Tú decides qué va a iCloud.”

Sincroniza sólo lo que te importa — no todo o nada.

Junto al interruptor general de iCloud, otros independientes para lo que se copia a tu iCloud: en Ajustes, el Llavero de iCloud, el registro de errores de la app y los mensajes del sistema; el log de consultas, desde su propia herramienta, y las conversaciones del asistente de IA, desde su panel de historial.

Volcados de muchos gigabytes

“722 MB volcados con 68 MB de memoria.”

Respaldar y restaurar ya no dependen de la RAM del equipo. Un volcado de 722 MB con 4 millones de filas hace pico en 68 MB; restaurarlo tarda 19 segundos usando 14 MB. Cancelar detiene el volcado de verdad, en vez de dejarlo correr hasta el final.

El motor orquesta y el provider escribe SQL: sumar un motor al respaldo es implementar BackupDataSource y nada más — el arnés de pruebas lo implementa en memoria con dialectos de SQLite y de Postgres sin tocar el motor. La restauración pide una sentencia cada vez en lugar de recibirlas empujadas, porque un flujo con buffer descarta sentencias en silencio y termina anunciando éxito. La lectura usa read(2) y no un archivo mapeado: el mismo troceo marcó +201 MB residentes con FileHandle y 1,1 MB así.

Un respaldo de tu configuración

“Antes de tocar iCloud hay una copia.”

Exporta e importa todo lo que Calíope guarda fuera del dispositivo — perfiles, grupos, preferencias — con copias programadas al contenedor de iCloud y puntos de restauración locales que se toman solos antes de cada operación peligrosa: activar o desactivar la sincronización, borrar, importar.

Existe por un incidente medido: activar la sincronización en un iPad reemplazó un connections.json de 16 470 bytes con 28 perfiles por otro de 514 bytes con un perfil de ejemplo. Los secretos son opt-in y siempre cifrados (AES-GCM, PBKDF2-SHA256 con 210 000 iteraciones, sal y coste escritos en el propio archivo). Lo que queda fuera se escribe en la copia con su motivo — una copia que calla sus ausencias es la que hace creer que se puede restaurar todo. Restaurar fusiona; un respaldo nunca borra.

Todas las pantallas de Apple

Calíope en tu iPhone

“El cliente entero, sin el Mac delante.”

La misma Calíope, dispuesta para el teléfono — el cliente entero, no un visor. Conecta a tus servidores y ejecuta tus consultas, con el editor SQL, el explorador de esquema, el tablero, el diagrama ER y los reportes ahí mismo; y tus perfiles de conexión, tus fragmentos guardados, tu historial y tus conversaciones con el asistente ya están esperándote, traídos por tu propio iCloud. Face ID para desbloquear, cinco idiomas y un modo de demostración para mirar antes de conectar nada. Se instala desde la misma página de la App Store que el Mac y el iPad, y trae a la pantalla de inicio los mismos dos widgets: las métricas del servidor que fijes, también en la pantalla de bloqueo, y la salud de toda la granja.

Es el binario de iOS, y es el mismo código que el del iPad: no se le quita ni una herramienta, y no hay una sola comprobación de aparato en todo el árbol — lo que cambia es la disposición, no la lista de funciones. Los perfiles de conexión se fusionan sobre el archivo compartido de iCloud en vez de reemplazarlo, para que los campos que una pantalla estrecha no llega a enseñar — túnel SSH, certificados, juego de caracteres — se conserven intactos. Sin iCloud dice qué interruptor está cerrado, en vez de mostrar una pantalla vacía y dejarte suponer que todo va bien.

Calíope en tu Apple Watch

“Lo que hicieron tus servidores, sin sacar el teléfono.”

Calíope en la muñeca, que llega con Calíope en el iPhone y la cubre la misma compra, sin comprar nada aparte. Enseña los mensajes del sistema que Calíope publica: diecisiete tipos en siete grupos, con los respaldos y reportes que terminaron o fallaron, las consultas que tardaron, los túneles SSH que se cayeron y volvieron, la sincronización de iCloud que falló y los servidores que rozaron tus umbrales. Agrupados por días, con avisos opcionales en un interruptor propio, y un modo de demostración que también te enseña las pantallas vacías.

Los mensajes viajan como identificador más sus cifras crudas, nunca como una frase ya escrita: el reloj está en otro idioma que el Mac más veces de las que no, así que la frase se escribe en la muñeca. La cadencia que eliges es un mínimo y no una promesa —con la app cerrada, watchOS decide cuándo despertarla— y la app lo dice arriba en su propia pantalla de ajustes, no al pie en gris. La marca de agua es del último mensaje entregado y no del reloj de pared, porque los despertares se saltan y preguntar «¿algo de los últimos quince minutos?» descarta el resto sin fallar. Sólo lee: no abre ninguna conexión a ningún servidor tuyo.

Calíope en tu Apple TV

“La salud de la granja, desde el otro lado de la sala.”

Un panel de pared para tus servidores MySQL, MariaDB, TiDB, PostgreSQL, SQL Server, Oracle Database y ClickHouse: una tarjeta por cada uno, con su estado —Correcto, Aviso, Crítico, Inalcanzable o Sin datos— y, cuando algo va mal, qué es lo que va mal. Tiempo encendido, conexiones, hilos en ejecución, consultas por segundo, tasa de acierto de caché, consulta más larga y retraso de la réplica. Dos pestañas, porque un televisor no es un aparato en el que se navegue, y una granja de demostración de ocho servidores para mirar antes. Coloca Calíope en la fila de arriba de la pantalla de inicio y la franja de encima enseña tus servidores publicados, los más urgentes primero, y después los vídeos de demostración de este sitio; elegir una tarjeta abre ese servidor.

La frescura la calcula quien lee, derivada de la cadencia que Calíope declara: quien publicó no sabe que dejó de publicar, así que un Mac apagado el viernes dejaría el panel en verde todo el fin de semana. El estado nunca se distingue sólo por color, y los umbrales son de Calíope: el televisor pinta, no juzga. El Apple TV no tiene iCloud Drive ni Llavero de iCloud, así que «sólo lee» lo sostiene la plataforma y no una promesa.

Calíope en el Apple Vision Pro

“El cliente entero, colgado en la habitación.”

Desde la 1.6, Calíope es una app nativa de visionOS en el Apple Vision Pro: el editor SQL, el navegador de esquema, el diagrama ER, los respaldos, los reportes, el constructor de consultas — todas las herramientas, sin quitar ninguna. Se conecta a tus servidores y escribe. El navegador de herramientas y las pestañas abiertas van en ornamentos fuera del cristal, cada control tiene el tamaño de la mirada y se ilumina cuando lo miras, y puedes abrir varias ventanas y dejar cada una donde quieras en la habitación. Los widgets se cuelgan en una pared o se apoyan en una mesa. Viene de la misma página de la App Store y de la misma compra que el Mac y el iPad.

Es la misma app que en el iPad, compilada para visionOS en vez de ejecutada en modo compatible: el cristal del sistema en lugar de fondos opacos, las barras como ornamentos, blancos de 60 puntos con el realce de la mirada, hojas con el tamaño de la ventana, y Optic ID donde el iPad dice Face ID. Antes tuve un panel nativo y no lo publiqué, porque hacía menos que la app de iPad; éste hace todo lo que hace el iPad. Hasta la 1.6, Calíope corría en el Apple Vision Pro como la app de iPad, en modo compatible.

Monitoreo, diagnóstico y replicación

Motor de monitoreo con tu propio almacenamiento

“Métricas de tus servidores, guardadas en un servidor tuyo.”

Monitoreo histórico sin instalar Prometheus.

Un colector dedicado escribe snapshots en un servidor de almacenamiento que tú eliges, provisionando tablas para muestras (CPU, memoria, conexiones, QPS) y eventos (rupturas de umbral, lag de replicación). Retención automática.

Visual EXPLAIN interactivo

“Tu plan de consulta como un diagrama que respira.”

Detecta el full scan que está matando tu consulta sin leer JSON ni XML a mano.

Le pide a cada motor su propio plan sin ejecutar la consulta — EXPLAIN FORMAT=JSON en MySQL y MariaDB, EXPLAIN FORMAT='tidb_json' en TiDB, EXPLAIN (FORMAT JSON) en PostgreSQL, SHOWPLAN_XML en SQL Server, EXPLAIN PLAN en Oracle Database, EXPLAIN PLAN json = 1 en ClickHouse — y lo dibuja como un árbol. Codificado por color según el tipo de acceso: full scan, range / index merge, optimizado, sort, join. Tooltips con access_type, filas estimadas y tiempos. Zoom con la rueda, con el pellizco del trackpad o con los botones de la barra — la escala está siempre a la vista, y ⌘+ / ⌘− / ⌘0 hacen lo mismo sin trackpad. Pan arrastrando.

Perfilador de consulta

“Ve dónde estás perdiendo los milisegundos.”

Localiza qué fase de la consulta se está llevando el tiempo.

En MySQL y MariaDB, construido sobre SHOW PROFILE; en ClickHouse, que no lo tiene, lee la fila de la consulta en system.query_log. Tabla más gráfico de barras por fase (starting, Sending data, etc.) con tiempos en milisegundos. En PostgreSQL, SQL Server y Oracle Database el botón no está.

Registro de consultas lentas, en el motor que toque

“Lo que tu servidor ya apuntó de las consultas que tardaron de más.”

Lees lo que el servidor registró —de todos los clientes que se conectan a él, no sólo de Calíope— y desde la misma pantalla enciendes el log, mueves el umbral y lo vacías. Un botón lleva la consulta al editor, y el perfilador está allí mismo.

Cada motor con su vocabulario. MySQL y MariaDB: las entradas salen de mysql.slow_log cuando el servidor escribe a tabla, y el resumen por sentencia de performance_schema; el umbral es long_query_time. PostgreSQL: pg_stat_statements, agregado por forma de sentencia y no una fila por ejecución, y el umbral se escribe con ALTER SYSTEM más pg_reload_conf() —uno que vino de la línea de órdenes con la que se arrancó el servidor se declara imposible de cambiar desde aquí en vez de fallar sin decirlo—. Oracle Database: la caché de cursores de V$SQL, con el umbral aplicado al leer, porque Oracle no guarda un registro de lentas; AWR se queda fuera, porque exige un paquete de pago. SQL Server: la caché de planes de sys.dm_exec_query_stats, agregada por sentencia —tampoco guarda un registro de lentas, y no hay que encender nada para leerla—. ClickHouse: system.query_log, con el umbral en milisegundos y el registro volcado antes de leerlo. TiDB: CLUSTER_SLOW_QUERY y el resumen por sentencia de STATEMENTS_SUMMARY, con el umbral en milisegundos. Redis y Valkey: herramienta propia, Comandos lentos, con el umbral en microsegundos. MongoDB: herramienta propia, porque el profiler es por base de datos. Una lista vacía nunca es la respuesta: si el log va a un archivo de la máquina del servidor, si performance_schema está apagado o si la extensión no está creada en esa base, ese motivo exacto se lee en pantalla. En Aurora los ajustes son de sólo lectura —viven en el parameter group del clúster—. Sin gráficos, y nada se copia a Calíope: ves la ventana que el servidor guarda, con el reloj del servidor.

Lista de procesos, con KILL guiado

“Un KILL para la consulta que colgó tu producción.”

Termina una consulta descontrolada sin abrir una terminal.

SHOW FULL PROCESSLIST con columnas para id, user, host, database, command, time, state e info. Acciones para KILL QUERY y KILL CONNECTION. En PostgreSQL la lista sale de pg_stat_activity y se detiene con pg_cancel_backend o pg_terminate_backend; en SQL Server, de sys.dm_exec_sessions y sys.dm_exec_requests, y se detiene con KILL; en Oracle Database, de V$SESSION, cada sesión nombrada por SID,SERIAL#, y se detiene con ALTER SYSTEM CANCEL SQL o ALTER SYSTEM KILL SESSION; en ClickHouse, de system.processes, donde lo que corre es una consulta y no una conexión, así que hay una sola acción, KILL QUERY.

Monitor de replicación (vocabulario viejo y nuevo)

“Réplicas viejas y nuevas, en el mismo panel.”

Observa el lag de la réplica sin pelearte con el vocabulario legacy vs. el nuevo.

SHOW REPLICA STATUS en MySQL 8.0.22+ y MariaDB 10.5.1+, con fallback automático a SHOW SLAVE STATUS en las versiones anteriores. En ClickHouse, donde la replicación es por tabla, enseña las tablas replicadas, Keeper, el peor retraso en segundos y la cola en entradas. Métricas: IO/SQL running, segundos por detrás del source, últimos errores con timestamp, GTID sets, posiciones de log. Auto-refresh configurable.

Topología de replicación

“Una réplica puede decir cero segundos mientras va horas por detrás. Aquí se ve.”

Ves el grupo entero de una vez, y dejas de fiarte de un «0 segundos» que en realidad significa «acabo de reconectar».

Declaras qué máquina es la primaria y cuáles son las réplicas. Nada se autodetecta: SHOW REPLICA HOSTS sólo ve lo conectado en ese instante, así que un grupo detectado cambiaría solo y «esta réplica ya no está» sería indistinguible de «esta réplica está caída». Esa consulta se usa para contradecir una configuración incoherente, nunca para reconfigurarla. Que una réplica lea de otra máquina se decide por server_id, jamás por nombre de host — detrás de Docker, NAT, una VPN o un túnel, comparar cadenas da un aviso permanente y falso. Un hilo IO parado es crítico aunque el retraso diga cero, y a su lado va la deriva de GTID, que se cuenta por origen en vez de restarse. Un miembro que no responde no tumba a los demás: «7 de 9» es una lectura normal, y los que faltan se nombran. Sólo lee — nunca opera sobre el grupo. El diagrama lleva una tabla como alternativa accesible, y ningún estado se distingue sólo por color.

Visor de binlog con filtros y PURGE

“Tu binlog, filtrable y purgable — desde la app.”

Audita qué eventos produjeron tus statements sin bajar a mysqlbinlog.

SHOW BINLOG EVENTS con categorización en DDL / DML / Sistema, búsqueda por texto y un límite de filas configurable (por defecto 300). Soporta binlogs encriptados (MySQL 8.0.14+). PURGE BINARY LOGS TO con confirmación explícita. Sólo MySQL y MariaDB: los demás motores no llevan binary log, y allí la herramienta no se ofrece.

Tablero, Información del servidor y Monitor de salud del servidor

“El pulso de tu servidor, en una sola vista.”

Consolida la salud del servidor sin abrir cinco clientes.

Información del servidor en varias pestañas (variables globales y de sesión, status global y de sesión, uso de HDD), un Tablero con gráficos en vivo y un Monitor de salud del servidor.

Benchmark en vivo

“Dos consultas en la balanza; una gana.”

Elige entre dos consultas con evidencia, no con intuición.

Compara tiempos de ejecución de variantes de consulta lado a lado.

Alertas y notificaciones locales

“Tu Mac te avisa cuando la réplica se atrasa.”

El sistema te avisa — no tienes que quedarte mirando la app.

Alertas por umbral en CPU, memoria, conexiones y lag de replicación. Notificaciones nativas de macOS/iOS.

Alertas SQL

“Tu propia regla, escrita en SQL, vigilada por ti.”

Escribe una consulta que devuelva un valor, elige un operador y un umbral, y Calíope la vuelve a ejecutar con el intervalo que pongas y marca la regla cuando cruza la línea.

Operadores >, <, = y <>, comparados como decimales exactos y no como dobles, y = y <> también sobre texto. Seis estados, no un sí o un no: sin medir todavía, OK, alerta, sin filas, fallida con el mensaje del propio servidor, y rechazada porque escribe bajo una etiqueta de entorno que protege. Las reglas viajan por iCloud con el interruptor general; las mediciones se quedan en la sesión, así que una lectura vieja nunca se enseña como actual.

Todo lo que corre, en un solo sitio

“Lo que está corriendo ya no desaparece al cambiar de pestaña.”

Consultas, respaldos, migraciones y trabajos programados se registran en un único sitio, con tiempo transcurrido, destino y un Detener que detiene de verdad. Se ve desde el pie de la barra lateral, desde la pestaña que trabaja y desde el conmutador de servidores.

Las operaciones se inscriben solas — nada sondea banderas ajenas, porque un registro que adivina acaba mintiendo en los dos sentidos. Las tareas (que empiezan y terminan) y los modos (que están encendidos hasta que alguien los apaga) son tipos distintos, así que un modo no lleva barra de progreso ni cronómetro. Un lote sobrevive a que se destruya su vista: el controlador vive en un store indexado por pestaña, no en el estado de la vista. Umbral de 0,8 s antes de que aparezca nada — una consulta de 40 ms no es un proceso.

Errores que se explican — y que tu teléfono puede leer

“Un fallo con su causa, su sugerencia y su registro.”

Cuando algo falla, Calíope dice qué pasó, sugiere qué comprobar y enlaza al tema de ayuda que corresponde. Todo queda en un registro con su fecha y su dispositivo, que la app para iPhone puede leer desde donde estés.

Ningún código de error nombra un motor: la tabla de códigos nativos vive con su provider, así que sumar uno es implementar un protocolo. El número nativo se lee del paquete tipado, no se saca del mensaje — el driver de antes no lo escribía, así que un fallo de credenciales se clasificaba como fallo de conexión y te mandaba a comprobar el puerto. El teléfono es de sólo lectura: podar y borrar se quedan en el escritorio. Y «no hay errores» es una afirmación — se distinguen seis motivos distintos de pantalla vacía, porque dar la buena noticia cuando lo que pasa es que el canal está cerrado es su propia clase de mentira.

Widgets nativos

Widget de escritorio macOS

“Estado del servidor, de un vistazo, en tu escritorio.”

Ve el pulso de tu servidor sin abrir Calíope.

Familias Small, Medium, Large y ExtraLarge. Los snapshots se leen desde un app group compartido con file coordination para lecturas concurrentes seguras. Se rechazan payloads mayores a un umbral seguro (protección DoS).

Widgets de pantalla de inicio y pantalla de bloqueo del iPhone y del iPad

“Tu servidor en la pantalla de bloqueo.”

Métricas del servidor en la pantalla de bloqueo de tu iPhone o tu iPad — a segundos de distancia.

Siete familias en el iPad —Small, Medium, Large, ExtraLarge, más las accesorias Rectangular, Circular e Inline— y seis en el iPhone, que no tiene ExtraLarge.

Widgets en la pared, en el Apple Vision Pro

“El pulso de tu servidor, colgado junto a la ventana.”

El mismo widget, puesto en una pared de la habitación: las métricas del servidor que fijes, donde levantas la vista y las ves.

Small, Medium, Large y ExtraLarge, las cuatro del Mac: visionOS no tiene pantalla de bloqueo. Textura de cristal, para que se vea la pared a través, y empotrado en la pared o sobresaliendo de ella, a tu elección al colocarlo.

Widget de salud de la granja

“Todos los servidores que vigilas, y cuál está peor.”

Un segundo widget que mira la granja entera en vez de un servidor: cuántos servidores vigilas y cómo está el peor, en el escritorio del Mac, en la pantalla de inicio del iPhone y del iPad, y en una pared en el Apple Vision Pro.

Familias Small, Medium y Large, las mismas en el Mac, en iOS y en visionOS. Lee lo que el monitor de salud midió en ese aparato, a través del app group compartido; la extensión no consulta nada por su cuenta. Sin ExtraLarge y sin familias de pantalla de bloqueo, a propósito.

Deep-linking al perfil fijado

“Toca el widget → el dashboard del servidor correcto, en un solo movimiento.”

Un toque y estás en el dashboard del servidor correcto.

URL del widget caliope://server/<uuid> cuando hay un perfil vinculado; en caso contrario, cae a caliope://.

Selección basada en AppIntent

“Un widget por servidor — editable como un widget del tiempo.”

Fija un widget distinto a cada servidor — configurado en segundos.

Configurable desde la UI de edición de widget del sistema mediante un AppIntentConfiguration. No requiere código del usuario.

Refresco en segundo plano con presupuesto del sistema

“Se actualiza cuando importa; duerme cuando no.”

El widget no drena tu batería y aun así muestra datos frescos.

La política de timeline delega el control a WidgetKit, respetando el presupuesto de refresco del sistema. Cae al último snapshot cuando no hay datos frescos.

Integraciones del sistema

Siri y App Intents

“Un SELECT COUNT(*) desde Siri, sin abrir Calíope.”

Ejecuta una consulta o lista bases de datos desde Atajos, sin abrir la app.

Intents registrados: conectar a servidor, ejecutar consulta (devuelve TSV con cabeceras), listar bases de datos, abrir pestaña del workspace. Respaldado por un puente interno que expone los session y database managers a AppIntents.

Menús macOS y manejo de archivos .sql

“Sabe abrir desde Spotlight con un .sql — como cualquier app nativa.”

Se comporta como una app real de Mac — no como un port de Windows o Electron.

Barra de menú completa: Acerca de, Abrir archivo SQL, Archivos recientes, Quick Open, navegación por pestañas, Ayuda, Novedades, Política de privacidad, Soporte. Maneja aperturas de archivos .sql vía NotificationCenter.

Ítem en la barra de menú

“Un ícono en la barra de menú: sabes si estás conectado sin cambiar de ventana.”

Contexto de conexión de un vistazo, sin traer la app al frente.

Ícono en la barra de menú que refleja el estado de conexión y el perfil activo.

Onboarding con TipKit

“Descubre lo que necesitas, cuando lo necesitas.”

Aprende sobre las funciones en el momento en que son relevantes.

Consejos contextuales por todas las herramientas —Quick Open, el constructor de WHERE, la importación de datos, Visual EXPLAIN y el árbol de esquema entre ellas—, uno por herramienta y por visita, y en orden, para que nunca se amontonen.

Continuidad por iCloud, gestos del iPad y trackpad

“El SQL que escribes en el Mac te espera en el iPad — aunque el Mac esté apagado.”

En iPad con Magic Keyboard, trabajas igual que en el Mac.

La sincronización opcional por iCloud lleva tus conexiones, el contenido del editor y tus preferencias de un dispositivo a otro — sin necesidad de proximidad ni Bluetooth. Manejo nativo del puntero y del teclado en iPad. Gestos: pellizcar para escalar la fuente en el editor y en la rejilla de resultados, pellizcar para acercar la imagen de una celda, swipe en filas de resultados, mantener pulsado para menús contextuales, pan y zoom en el diagrama ER y en Visual EXPLAIN, separadores de panel arrastrables. Split View.

Modo screenshot

“Capturas listas para docs — no capturas amateur.”

Toma capturas listas para documentación con un aspecto consistente.

Cmd+Opt+P en macOS produce PNGs con estilo listo para documentación y marketing.

«Novedades» dentro de la app

“Cosas nuevas, dentro de la app — no en un changelog.”

Aprende qué hay de nuevo sin leer las notas de versión de la App Store.

Highlights por versión, con estado local de «ya visto».

UI en cinco idiomas (español, inglés, francés, alemán, italiano)

“Calíope habla tu idioma — español, inglés, francés, alemán o italiano.”

Una app diseñada primero en español, así no se siente traducción automática.

Bundles completos de recursos en, es, fr, de e it. El idioma es el que eliges para Calíope en los ajustes del sistema, por app, y los widgets lo siguen. Fallback a inglés.

Privacidad, sandbox y cumplimiento

Sandbox de App Store activo

“Sandbox activo — hace lo que declara, y nada más.”

Calíope no puede acceder a nada fuera de los entitlements declarados. El sistema lo garantiza.

App sandbox habilitado con un set estrecho de entitlements: cliente y servidor de red (para el proxy SSH), entrada de audio (voz a SQL), archivos seleccionados por el usuario (documentos), app groups (para los widgets), impresión e iCloud (CloudKit, Cloud Documents y el almacén clave-valor).

Servicio de borrado de datos

“Un botón, y no queda nada atrás.”

Un botón para dejar la máquina limpia antes de devolverla o venderla.

Borrado bajo demanda de todo lo que Calíope guarda, en los seis sitios que enumera “Borrarlo todo” más abajo.

Lo que cuesta la IA, dicho antes de pagar

“Precio honesto — qué asistente pide clave, dicho al comprar.”

Sabes exactamente qué paga la compra y qué no.

El paywall dice que Apple Intelligence y Ollama no piden clave y que OpenAI, Gemini y Claude piden la tuya, que la compra no incluye, junto a las condiciones de la compra: un solo cargo, sin renovaciones, restaurable en todos tus aparatos.

Compra única con 60 días de prueba

“Sesenta días gratis, sin trucos.”

Prueba Calíope sesenta días sin costo; si te la quedas, pagas una sola vez.

Producto no consumible de StoreKit 2 con 60 días de prueba gratis como no consumible a precio cero (guía 3.1.1 de App Review). Verificación vía AppTransaction.shared y Transaction.latest(for:) de StoreKit 2. Restauración vía AppStore.sync(). El precio siempre se presenta desde product.displayPrice.

Borrarlo todo, y que te digan qué pasó

“Seis sitios, un informe, sin fallos mudos.”

El botón de borrado alcanza los archivos locales, el Llavero, el contenedor de iCloud Drive, el almacén de clave-valor, CloudKit y los datos del widget — y publica una marca para que tus otros dispositivos borren también en vez de volver a subirlo todo.

Un borrado remoto no consulta el interruptor de sincronización: el interruptor dice si se sube de ahora en adelante, no si hay algo arriba, y quien lo activó, subió y lo apagó es justo el caso que un borrado de privacidad no puede dejar fuera. La propagación es asimétrica para que no entre en bucle, y la comparación es > y no !=, para que una marca vieja republicada por un dispositivo dormido no dispare un segundo borrado. El informe lleva una línea por canal con su recuento y su fallo — la versión anterior estaba escrita con try? mudos y terminaba siempre en «todos tus datos han sido eliminados correctamente», una frase que no podía ser falsa ni con CloudKit caído.

¿Listo para probar Calíope?

Cada capacidad de esta página está incluida en la compra única. Sesenta días gratis y, después, se compra una vez y es tuya para siempre.

Probar gratis 60 días →