He visto a personas inteligentes y organizadas usar rastreadores de tiempo manuales, y el modo de fallo siempre es el mismo.

El lunes por la mañana recuerdan arrancar el temporizador. Para el lunes por la tarde han cambiado de contexto seis veces y se olvidaron de cambiar el temporizador con ellas. El martes lo notan y actualizan las entradas del lunes desde la memoria. Para el miércoles, el temporizador lleva cuatro horas en "Email" porque ese era el proyecto que estaba abierto cuando se distrajeron.

Los datos están mal, y la persona que los registra sabe que están mal, lo que significa que confía menos en ellos, lo que significa que los actualiza menos, lo que significa que empeoran. El seguimiento manual del tiempo es un colapso a cámara lenta.

Intenté durante años ser la excepción disciplinada. No lo soy. Nadie que conozca lo es. Entonces la pregunta es: si el seguimiento manual es una fantasía, ¿qué captura realmente el seguimiento automático, y es suficientemente bueno?

Qué significa realmente "automático"

Hay aproximadamente tres cosas que un Mac puede saber sobre lo que estás haciendo en cualquier momento dado, todo sin que levantes un dedo:

  1. Qué app está en primer plano. macOS publica una notificación NSWorkspace cada vez que cambia la aplicación en foco. Es una señal dura — sabe si Slack o Xcode están encima.

  2. Qué dice la ventana enfocada. La mayoría de las apps nombran sus ventanas de forma útil. Xcode dice el proyecto. Slack dice el canal. Chrome dice el título de la pestaña. Es una señal blanda — útil cuando los títulos son descriptivos, inútil cuando no lo son (te miro a ti, Finder).

  3. Cuál es la pestaña activa del navegador. Esto requiere que el navegador exponga su título de pestaña a un cliente de accesibilidad, que en macOS significa pedirle al usuario permiso explícito de Accesibilidad. Solo por invitación.

Un buen rastreador automático de tiempo para Mac escucha las tres. Timex escucha las tres. Lo que almacena es un flujo de filas que se ve más o menos así:

2026-05-21 14:32:01 | Xcode    | timex/AppDelegate.swift
2026-05-21 14:32:02 | Xcode    | timex/AppDelegate.swift
2026-05-21 14:32:03 | Xcode    | timex/AppDelegate.swift
2026-05-21 14:32:04 | Slack    | #engineering
2026-05-21 14:32:05 | Slack    | #engineering
2026-05-21 14:32:06 | Chrome   | github.com — pull request #482

Eso es todo. Tres columnas, una fila por segundo. La franja de color en la vista de Hoy son solo esas filas agrupadas en bloques contiguos y renderizadas a lo largo de una línea de 24 horas.

La decisión de 1 Hz

Me preguntan por qué muestreamos una vez por segundo en lugar de cada cinco segundos, o cada minuto, o cada décima de segundo.

Más lento que 1 Hz pierde los cambios de contexto cortos. Si revisas una notificación de Slack durante nueve segundos y vuelves a Xcode, un muestreador de 60 segundos registrará ese minuto como todo-Xcode o todo-Slack dependiendo de cuál estuviera activo en el momento de la captura. Los dos están mal. Quieres ver el pequeño blip de Slack de nueve segundos.

Más rápido que 1 Hz no revela nada nuevo — los humanos no cambian el foco diez veces por segundo — y hace crecer el archivo SQLite sin ganancia informacional. Una jornada laboral a 1 Hz son unas 30.000 filas. A 10 Hz serían 300.000 filas para el mismo insight. Optimizamos para el número menor.

La otra cosa que te compra 1 Hz es detección honesta de inactividad. macOS expone el tiempo desde la última entrada del usuario. Si la brecha supera un umbral (Timex tiene 90 segundos por defecto), la fila se marca como inactiva. Dos filas inactivas consecutivas se convierten en un bloque inactivo. Los bloques inactivos no cuentan para tu temporizador de descanso, así que una sesión de enfoque profundo no queda injustamente fragmentada por una pausa para el café.

La pregunta de las pestañas del navegador

Esta es la parte del seguimiento automático que pone nerviosa a la gente, y con razón.

Si un rastreador de tiempo para Mac puede ver el título de la pestaña del navegador que estás mirando, en teoría puede ver "Bank of America" o "MyChart Patient Portal" sentados en tu historial. La respuesta más limpia es preguntarle al usuario antes de que pase nada de eso. macOS nos obliga a hacerlo. La primera vez que lanzas Timex, la función de pestañas del navegador está desactivada. Tienes que conceder explícitamente el permiso de Accesibilidad, y puedes revocarlo en cualquier momento desde Ajustes del Sistema.

Cuando lo concedes, lo que se almacena es la cadena del título de ventana que el navegador publica para la pestaña actual — nada más. No leemos la URL. No leemos el contenido de la página. No leemos tu historial de navegación. Almacenamos la misma cadena que es visible en la barra de título de tu navegador en ese momento exacto.

Si prefieres no hacerlo, deja el permiso desactivado y el rastreador sigue funcionando — simplemente ves el navegador como un bloque único ("Chrome — 41m") en lugar del desglose por pestaña.

El modelo de datos en SQLite

Para quien tenga curiosidad sobre la capa de almacenamiento: Timex usa un único archivo SQLite con un pequeño conjunto de tablas. La forma que importa es el log de actividad, que es más o menos:

CREATE TABLE activity_samples (
  ts          INTEGER NOT NULL,   -- unix seconds
  app_bundle  TEXT,               -- e.g. "com.apple.dt.Xcode"
  app_name    TEXT,               -- e.g. "Xcode"
  window_title TEXT,              -- e.g. "AppDelegate.swift"
  browser_tab TEXT,               -- nullable, only when permission granted
  is_idle     INTEGER NOT NULL    -- 0 or 1
);
CREATE INDEX idx_samples_ts ON activity_samples(ts);

Esa es la forma completa de "qué hiciste hoy". Abre el archivo con cualquier cliente SQLite. Lanza una consulta. La respuesta está a unas filas de distancia.

Ya compartí este schema antes en Your data, your file — el argumento más profundo de por qué la capa de almacenamiento es el producto. La versión corta: una herramienta cuyo único output es un dashboard en la nube propietario envejece mal. Una herramienta cuyo único output es un archivo SQLite envejece contigo.

Las preguntas que el seguimiento automático puede responder

Estas son las consultas que realmente ejecutamos sobre nuestros propios datos:

  • ¿A dónde fue la mañana? Arrastra al tramo de 09:00–12:00 de la franja. Los totales se filtran a esa ventana. Toca la app de arriba. Expande para ver qué ventanas se comieron el tramo.

  • ¿Avancé en lo correcto esta semana? Suma el tiempo en filas Xcode con títulos de ventana que coincidan con el nombre del proyecto activo. Si es menor de lo esperado, es un problema de calendario, no de rastreador.

  • ¿Cuándo estuve realmente pensando profundamente? Busca el bloque contiguo más largo de is_idle=0 en una sola app. Si el más largo es 28 minutos, la respuesta es "nunca esta semana" — y eso es un dato sobre el que puedes actuar.

  • ¿Qué se comió Chrome? Filtra a filas donde app_name='Google Chrome'. Agrupa por browser_tab. Ordena por recuento. Lo de arriba de la lista es, deprimentemente, a menudo Reddit. O Hacker News. O uno de los dos proveedores de IA cuyos nombres riman.

Las preguntas que no puede responder

Quiero ser claro sobre los límites.

No puede decirte qué pretendías hacer. Solo ve cuál era tu app en primer plano. Si pasaste cuarenta minutos en Hacker News investigando algo para el trabajo, el rastreador ve Hacker News. El clasificador de "¿mereció la pena?" está en tu cabeza, no en los datos. Nosotros no intentamos automatizar eso. No creemos que se pueda.

No puede etiquetar proyectos automáticamente. Algunas apps lo hacen fácil (el título de ventana de Xcode es la ruta del archivo, que se mapea a un proyecto). Otras no (el título de ventana de Chrome es el título de la página, que no dice nada sobre el trabajo). La respuesta de v1 es leer la franja tú mismo y usar los ojos. Una versión posterior puede añadir etiquetado basado en reglas ("si el título de ventana contiene X, etiquetar como proyecto Y") para quienes quieran estructura de proyecto ligera.

No puede reconstruir sesiones para las que no lo tenías abierto. Esa es la obvia. Instálalo hoy y tienes desde hoy en adelante. No hay relleno mágico retroactivo.

Inactividad, suspensión y bloqueo de pantalla

Tres casos límite que vale la pena mencionar, porque la mayoría de los rastreadores automáticos los gestionan de forma inconsistente:

Inactivo — el timeout de entrada del usuario. 90 segundos por defecto. Marcado en la fila, usado para omitir los recuentos del temporizador de descanso, pero los datos siguen registrándose para que la franja muestre el hueco honestamente.

Suspensión de pantalla — cuando macOS atenúa la pantalla por inactividad del sistema. Pausamos el muestreador por completo. No se escriben filas. La franja muestra un hueco limpio.

Bloqueo de pantalla — cuando pulsas Ctrl+Cmd+Q o te alejas el tiempo suficiente para que se active el bloqueo. Igual que la suspensión de pantalla: el muestreador se pausa, no hay filas, hueco limpio.

El principio: si no estás en el Mac, los datos no pueden afirmar que lo estabas.

"¿Y los proyectos?"

Esto sale suficientes veces como para merecer una respuesta explícita.

Si tu trabajo es facturar horas a un cliente, necesitas de verdad un selector de proyectos. Un rastreador automático que no conoce tu estructura de proyectos no puede generar una factura. Toggl y Harvest están diseñados para esto. Tienen el selector de proyectos, la fricción de inicio/parada y el pipeline de exportación en el que confía tu contable.

Si tu trabajo es entender tu propia semana, no necesitas un selector de proyectos. Necesitas mirar la franja y notar que el martes por la tarde fueron cuatro horas de Slack sin nada en alcance de Cmd+Tab del código. Ese es el insight. No necesita etiqueta de proyecto.

La mayoría de las personas para las que construí esto están en el segundo grupo. Ya están dentro de Claude Code y Cursor y las ejecuciones del agente Octomind que se comieron el miércoles por la mañana. Quieren ver dónde aterrizaron las horas, no meterlas en códigos de facturación.

El test del miércoles

Aquí está el test que hago con cualquier rastreador de tiempo antes de plantearme confiar en él.

Es miércoles por la mañana. La standup pregunta qué hiciste el lunes. Abres el rastreador.

  • Si los datos fueron reconstruidos desde tu memoria del martes por la tarde, mienten. Recuerdas mal Slack como Xcode y Xcode como Slack. La respuesta de la standup está confiadamente equivocada.
  • Si los datos son automáticos, es la misma verdad aburrida que la franja te mostró el lunes por la tarde. La lees. La dices. Sigues.

Esa es la brecha que el seguimiento automático realmente cierra. No productividad. No enfoque. Ni siquiera memoria. Solo que la versión del día que informa tu rastreador coincida con la versión que realmente ocurrió.

Si quieres ver cómo se ve eso en tu Mac, descarga la prueba de 100 horas. Tres Macs, sin cuenta, sin nube. La franja es la misma que usamos en nuestros propios portátiles cada día.