Gestiona tareas en Things 3 mediante AppleScript: crea, lista y completa tareas. Actívalo cuando el usuario diga "crea una tarea en Things 3", "añade esto a Things", "ponlo en Things", "recuérdame en Things que...", "agrega a mi lista de tareas en Things", "muéstrame mis tareas de Things", "qué tengo pendiente en Things", "lista mis tareas", "completa la tarea X en Things", "marca como hecha", "tacha eso de Things", o cualquier variante que implique crear, listar, consultar o completar tareas en Things 3.
Este skill permite tres operaciones: crear, listar y completar tareas en Things 3.
Detecta la intención del usuario y ejecuta el flujo correspondiente.
Antes de crear nada, presenta al usuario el formulario completo en un solo bloque. No ejecutes ningún script hasta tener al menos el título confirmado.
Para crear la tarea en Things 3 necesito estos datos:
1. **Título** (obligatorio):
2. **Notas** (opcional):
3. **Fecha de inicio** (opcional, ej: "mañana", "el lunes", "en 2 semanas"):
4. **Fecha límite / deadline** (opcional):
5. **Etiquetas** (opcional, separadas por comas):
6. **Área o Proyecto** (opcional — si no indicas nada, va al Inbox):
Espera respuesta completa antes de continuar.
date "dd/MM/yyyy"Usa esta plantilla. Incluye solo los campos que el usuario haya rellenado:
tell application "Things3"
set newTask to make new to do with properties { ¬
name: "TÍTULO" ¬
[, notes: "NOTAS"] ¬
[, activation date: date "DD/MM/YYYY"] ¬
[, due date: date "DD/MM/YYYY"] ¬
[, tag names: "etiqueta1, etiqueta2"] ¬
}
[move newTask to area "NOMBRE"]
[move newTask to project "NOMBRE"]
end tell
Notas de implementación:
activation date = fecha de inicio en Things 3due date = deadlinemovemove newTask to area "NOMBRE" o move newTask to project "NOMBRE" según correspondaEjecuta el script con el conector Control your Mac → osascript.
Si el conector no está disponible, entrega el script completo (con los valores reales ya sustituidos) para que el usuario lo ejecute en Terminal. Por ejemplo, para una tarea sin campos opcionales:
osascript << 'EOF'
tell application "Things3"
set newTask to make new to do with properties {name: "TÍTULO"}
end tell
EOF
Sustituye siempre TÍTULO y cualquier otro campo por los valores reales del usuario. Nunca uses ... como placeholder en el script de fallback.
Tras ejecutar, confirma brevemente: título, destino, fechas y etiquetas (si las hay). Ofrece en una línea la posibilidad de mover la tarea o añadir fechas si no se especificaron.
Identifica qué quiere listar el usuario. Opciones posibles:
Si el usuario no especifica ámbito, siempre ejecuta primero el script de listar áreas y presenta el resultado antes de preguntar. No preguntes sin mostrar las opciones disponibles — el usuario puede no recordar los nombres exactos.
Según el ámbito, usa una de estas plantillas:
Listar tareas de un área:
tell application "Things3"
set todoNames to {}
set allToDos to to dos of area "NOMBRE_AREA"
repeat with t in allToDos
set tName to name of t
set tNotes to notes of t
if tNotes is "" then set tNotes to "(sin notas)"
set end of todoNames to tName & " || " & tNotes
end repeat
set AppleScript's text item delimiters to linefeed
set output to todoNames as string
set AppleScript's text item delimiters to ""
return output
end tell
Listar tareas de un proyecto:
tell application "Things3"
set todoNames to {}
set allToDos to to dos of project "NOMBRE_PROYECTO"
repeat with t in allToDos
set tName to name of t
set tNotes to notes of t
if tNotes is "" then set tNotes to "(sin notas)"
set end of todoNames to tName & " || " & tNotes
end repeat
set AppleScript's text item delimiters to linefeed
set output to todoNames as string
set AppleScript's text item delimiters to ""
return output
end tell
Listar tareas de Today:
tell application "Things3"
set todoNames to {}
set allToDos to to dos of list "Today"
repeat with t in allToDos
set tName to name of t
set end of todoNames to tName
end repeat
set AppleScript's text item delimiters to linefeed
set output to todoNames as string
set AppleScript's text item delimiters to ""
return output
end tell
Listar todas las áreas:
tell application "Things3"
return name of every area
end tell
Listar proyectos de un área:
tell application "Things3"
set projNames to {}
set allProjects to projects of area "NOMBRE_AREA"
repeat with p in allProjects
set end of projNames to name of p
end repeat
set AppleScript's text item delimiters to linefeed
set output to projNames as string
set AppleScript's text item delimiters to ""
return output
end tell
Contar tareas de un área:
tell application "Things3"
return count of to dos of area "NOMBRE_AREA"
end tell
Presenta las tareas de forma clara y concisa. Incluye notas si las hay. Si hay muchas tareas, agrupa por proyecto si es posible.
El usuario puede referirse a la tarea por:
Antes de ejecutar el script de completar, obtén la lista de candidatas con el texto de búsqueda. Si la búsqueda devuelve más de una tarea, o si el usuario no especificó área, usa el script de búsqueda global (ver abajo). Presenta las candidatas y pide confirmación explícita antes de marcar ninguna como completada.
Si el usuario no especifica área o proyecto, busca en el Inbox primero, luego itera por todas las áreas:
tell application "Things3"
set matches to {}
-- Buscar en Inbox
set inboxTasks to to dos of list "Inbox"
repeat with t in inboxTasks
if name of t contains "TEXTO_BUSQUEDA" then
set end of matches to name of t & " [Inbox]"
end if
end repeat
-- Buscar en todas las áreas
set allAreas to every area
repeat with a in allAreas
set areaTasks to to dos of a
repeat with t in areaTasks
if name of t contains "TEXTO_BUSQUEDA" then
set end of matches to name of t & " [" & name of a & "]"
end if
end repeat
end repeat
set AppleScript's text item delimiters to linefeed
set output to matches as string
set AppleScript's text item delimiters to ""
return output
end tell
Presenta los resultados al usuario y pide que confirme cuál completar.
Una vez confirmada la tarea y conocida su ubicación exacta:
tell application "Things3"
set targetToDo to first to do of area "NOMBRE_AREA" whose name contains "TEXTO_BUSQUEDA"
set status of targetToDo to completed
return name of targetToDo & " → completada"
end tell
Si la tarea está en un proyecto:
tell application "Things3"
set targetToDo to first to do of project "NOMBRE_PROYECTO" whose name contains "TEXTO_BUSQUEDA"
set status of targetToDo to completed
return name of targetToDo & " → completada"
end tell
Confirma brevemente qué tarea se ha completado. Si el usuario estaba trabajando con una lista, ofrece continuar con la siguiente.
| Campo | Default |
|---|---|
| Destino | Inbox |
| Fecha de inicio | ninguna |
| Deadline | ninguna |
| Etiquetas | ninguna |
| Notas | ninguna |
linefeed en lugar de return para separadores de texto en cadenas concatenadasresult — está reservada en AppleScript. Usa output u otro nombre<< 'EOF') para evitar problemas con comillas simples dentro del scriptremind me at (Things 3 no soporta recordatorios vía AppleScript en versiones recientes)... como placeholder en scripts de fallback — sustituye siempre los valores reales