Skip to content

Releases: lifedever/TaskTick

TaskTick v1.11.0

27 Jun 16:45

Choose a tag to compare

What's Changed

✨ Features

  • Script notification directive @tasktick:notify — a running script can print @tasktick:notify {"title":"…","body":"…"} to fire a native TaskTick notification at any point, as many as it wants (capped at 20 per run). The directive line is stripped from the script's output, logs, and live view.
  • Per-task action-feedback toggle — in the task editor's Notifications tab, control whether running/stopping/restarting a task shows a "Started/Stopped/Restarted" banner. Off by default.
  • Richer list sorting — sort tasks by Created time or Last-run time, ascending or descending (replaces the old newest/oldest toggle).

🔧 Improvements

  • Renamed the editor's "Action" tab to "Command", moved before "Schedule".
  • New docs page at /guide/ covering CLI, Raycast, and script notifications (EN + 简中).

更新内容

✨ 新功能

  • 脚本通知指令 @tasktick:notify — 脚本运行中途打印一行 @tasktick:notify {"title":"…","body":"…"} 即可弹出 TaskTick 原生通知,可在任意时刻、发任意多条(每次运行最多 20 条)。该指令行会自动从输出/日志/实时视图剥离。
  • 每个任务的「操作反馈通知」开关 — 任务编辑器 → 通知,单独控制运行/停止/重启该任务时是否弹「已启动」等反馈横幅,默认关闭。
  • 列表排序增强 — 可按「创建时间」或「最后运行时间」升序/降序排序(替代原来的「最新/最早在前」)。

🔧 改进

  • 编辑器「动作」标签改名为「命令」,移到「调度」之前。
  • 新增官网文档页 /guide/,介绍 CLI、Raycast、脚本通知用法(中英双语)。

Full Changelog: v1.10.2...v1.11.0

TaskTick v1.10.2

16 Jun 09:59

Choose a tag to compare

What's Changed

🐛 Bug Fixes

  • Duration formatting: The "Recent Executions" panel in task detail and the run-finished/failed notifications still showed raw milliseconds (e.g. 15,883,804ms). They now use the same human-readable format as everywhere else (4h 24m · 1.2s · 120ms). (#36)

Thanks @bigpin for the report!


更新内容

🐛 问题修复

  • 时长格式化:任务详情的「最近执行」面板以及运行完成/失败通知里仍然显示原始毫秒(如 15,883,804ms),现在统一改为与其他位置一致的可读格式(4h 24m · 1.2s · 120ms)。(#36)

感谢 @bigpin 反馈!

Full Changelog: v1.10.1...v1.10.2

TaskTick v1.10.1

16 Jun 05:15

Choose a tag to compare

What's Changed

✨ Log export (#35)

  • Export execution logs to a .log file (single log), or Export All to a .zip archive — one .log per entry, named by date, mirroring the log list.
  • Export available from both the Logs window and a task's logs view.
  • On success, the exported file is revealed in Finder.

💅 Readable durations (#35)

  • Log durations now display as 120ms / 1.2s / 1m 5s / 1h 2m instead of raw milliseconds.

更新内容

✨ 日志导出 (#35)

  • 支持将执行日志导出为 .log 文件(单条),或「导出全部」为 .zip 压缩包 —— 每条日志一个 .log、按日期命名,与日志列表一一对应。
  • 日志窗口和任务日志详情都新增了导出入口。
  • 导出成功后自动在 Finder 中定位并选中文件。

💅 耗时可读化 (#35)

  • 日志耗时不再一律显示毫秒,改为 120ms / 1.2s / 1m 5s / 1h 2m

Full Changelog: v1.10.0...v1.10.1

TaskTick v1.10.0

11 Jun 02:56

Choose a tag to compare

What's Changed

🚀 TaskTick is now on the Raycast Store!

The official TaskTick extension is live on the Raycast Store — search, run, stop, and restart your scheduled tasks right from Raycast, without leaving your keyboard.

The extension talks to TaskTick through the tasktick CLI. Enable it once in Settings → Command Line.

✨ Improvements

  • Settings → Command Line now has a direct link to get the Raycast extension

更新内容

🚀 Raycast 插件正式上线!

官方 TaskTick 扩展已上架 Raycast Store——在 Raycast 中直接搜索、运行、停止和重启你的定时任务,双手不离键盘。

扩展通过 tasktick 命令行与 TaskTick 通信,在 设置 → 命令行 中启用一次即可。

✨ 改进

  • 设置 → 命令行 新增「获取 TaskTick 的 Raycast 扩展」直达链接

Full Changelog: v1.9.2...v1.10.0

TaskTick v1.9.2

02 Jun 08:52

Choose a tag to compare

What's Changed

Bug Fixes

  • Fixed the tasktick CLI crashing when invoked through the Homebrew/PATH symlink. Running any command (e.g. tasktick list) via /opt/homebrew/bin/tasktick or /usr/local/bin/tasktick crashed with a could not load resource bundle fatal error — the localization resource bundle wasn't found when the binary was reached through a symlink. The CLI now resolves symlinks and locates the bundle inside the app, so the command line and third‑party integrations (e.g. the Raycast extension) work reliably.

更新内容

问题修复

  • 修复通过 Homebrew/PATH 软链调用 tasktick 命令行时崩溃的问题。 之前通过 /opt/homebrew/bin/tasktick(或 /usr/local/bin/tasktick)执行任何命令(如 tasktick list)都会报 could not load resource bundle 致命错误并崩溃——原因是经软链调用时找不到本地化资源 bundle。现已修复:CLI 会解析软链并在应用内正确定位 bundle,命令行及第三方集成(如 Raycast 扩展)可正常使用。

Full Changelog: v1.9.1...v1.9.2

TaskTick v1.9.1

28 May 06:50

Choose a tag to compare

What's Changed

✨ New: Multiple fire times per task (#34)

A task with a day-aligned repeat (Daily / Weekdays / Weekends / Weekly / Biweekly) can now carry several time-of-day fire points in addition to its main time.

For example, one task can fire at 09:00, 12:00, and 18:00 every weekday — no need to clone the task three times.

  • Chip-flow UI in the editor: each time is a stepper-field chip, click ⊗ to remove, ⊕ to add. Insertion order is preserved while editing — values never jump around.
  • Repeat-type aware: the ⊕ button only shows for day-aligned repeats. Switching to an unsupported repeat type hides the extras but keeps the data — switch back and they're still there.
  • Detail view collapses all times into a single row, e.g. 时间 14:40, 14:42, 14:44.
  • Export/import + duplicate carry the new field.
  • Translated into all 11 supported languages.

更新内容

✨ 新功能:单任务支持多个触发时间 (#34)

按天 / 工作日 / 周末 / 每周 / 每两周重复的任务,现在除了主时间外还可以添加多个时间点

比如同一个任务,可以在每个工作日的 09:00、12:00、18:00 各执行一次 —— 不用再复制三份任务。

  • 编辑器里新的芯片排版:每个时间是一个 stepperField 芯片,点 ⊗ 删除,点 ⊕ 添加。编辑时间过程中位置不会跳。
  • 跟重复类型联动:只有支持的重复类型才显示 ⊕ 加号;切换到不支持的类型时 extras 数据保留,切回来还在。
  • 任务详情里把所有时间合并到一行,例如 时间 14:40, 14:42, 14:44
  • 导入导出、复制任务都带这个新字段。
  • 11 种语言全部翻译。

Full Changelog: v1.9.0...v1.9.1

TaskTick v1.9.0

22 May 06:57

Choose a tag to compare

What's Changed

✨ Features

  • Run macOS Shortcuts as tasks — pick a Shortcut from a dropdown (loaded from shortcuts list) and TaskTick will trigger it via shortcuts run. The "Script" tab is now called "Action" to cover both shell scripts and Shortcuts. Shell / pre-run / working-directory fields auto-hide for Shortcut tasks.
  • Sub-minute custom intervals — the "Custom" repeat unit now includes Seconds and Minutes, so you can finally schedule a task every 30 seconds.

🐛 Fixes

  • #30 Scheduled task didn't auto-execute when no date/time set — a task with the new repeat system (e.g. "Every Minute") but no date/time anchor was silently falling into a legacy code path and returning nil for nextRunAt, so the scheduler skipped it forever. Tightened the legacy guard to only fire when intervalSeconds is actually set.

更新内容

✨ 新功能

  • 支持调用 macOS 快捷指令 — 编辑器里新增「快捷指令」动作来源,下拉直接选本机的 Shortcut,TaskTick 通过 shortcuts run 触发。「脚本」tab 改名为「动作」以涵盖两种执行方式。选了 Shortcut 时,Shell / 前置命令 / 工作目录字段自动隐藏。
  • 自定义重复支持秒 / 分钟 — 重复选「自定义」时,单位下拉新增「秒」和「分钟」,可以做「每 30 秒跑一次」这种调度。

🐛 修复

  • #30 没设日期/时间的定时任务不会自动执行 — 走新调度系统(如「每分钟」)但日期/时间都关时,会错误命中 legacy 分支返回 nil,导致 nextRunAt 永远为 nil,调度器一直跳过。修复后兜底逻辑正常生效。

Full Changelog: v1.8.4...v1.9.0

TaskTick v1.8.4

12 May 07:12

Choose a tag to compare

What's Changed

Quick Launcher visual overhaul

  • Native macOS standard window shadow (replaces the compact popup-style shadow previous versions used)
  • Rounded corners on all four sides (top-only before)
  • Translucent material background matching the Spotlight / Raycast idiom
  • Footer hints now sit flush with the card bottom — no more empty space below them
  • Search field still auto-focuses without TaskTick stealing foreground from the previous app

Task list selection contrast

  • Status dots and the running spinner now use a white tint when their row is selected, so they stay legible against the accent-coloured highlight (the running blue dot used to disappear into the blue background)
  • Colour change happens in the same frame as the selection highlight — no more visible "lag" while the dot fades from green to white

Localization

  • 9 locales (de, es, fr, id, it, ja, ko, ru, zh-Hant) backfilled to full parity with English — Quick Launcher, CLI settings, backup dialogs, error messages, and other recent UI no longer fall back to English for non-English/Chinese users
  • 988 new translations across all 9 locales

更新内容

快捷启动器视觉重构

  • 原生 macOS 标准窗口阴影(替代之前的紧凑弹出式阴影)
  • 四个角全部圆角(之前仅顶部圆角)
  • 半透明 material 背景,与 Spotlight / Raycast 一致
  • 底部快捷键提示贴合卡片底边,不再有大块空白
  • 搜索框依然自动聚焦,不抢前台 App 焦点

任务列表选中态对比度

  • 状态圆点和运行中转圈在选中行(蓝色高亮)上改用白色——之前运行中的蓝点几乎和蓝色背景融为一体
  • 颜色切换与选中高亮在同一帧完成,不再有"圆点慢慢从绿渐变到白"的视觉延迟

多语言

  • 德/西/法/印尼/意/日/韩/俄/繁中 9 个语言补全所有缺失翻译,快捷启动器、CLI 设置、备份对话框、错误提示等界面不再对非中英用户回退英文
  • 跨 9 个语言共新增 988 条翻译

Full Changelog: v1.8.3...v1.8.4

TaskTick v1.8.3

11 May 09:18

Choose a tag to compare

What's Changed

🐛 Bug Fixes

  • #28 UI freeze with high-output scripts — Running scripts that emit heavy log streams (npm run dev + Spring Boot dual-streaming) no longer pegs the main thread and freezes the UI. Replaced the per-chunk O(N) string concatenation in LiveOutputManager with an O(1) line buffer; pipe I/O is now coalesced at 50ms before crossing to the main thread; the log viewer renders via NSTextView (TextKit fragmented layout) instead of SwiftUI Text, which choked on the 512KB ceiling. Sample shows main-thread time in the live-output pipeline went from 97% → 0%.
  • "0秒后" stuck in task rows — Task list, Quick Launcher, and log rows no longer freeze on "0秒后" / "in 0 seconds" after a task completes. The relative-time formatter quantizes |diff| < 1s to "0秒后" in zh-Hans, and SwiftUI didn't auto-refresh the row. Added TimelineView and a "just now" / "刚刚" short-circuit; rows now tick every minute.
  • Log truncation now keeps the suffix instead of prefix — When stdout/stderr exceeds 512KB, the last 256KB is kept (with the stack trace and exit reason) rather than the first 256KB. For build/start scripts this is the part you actually need.

✨ New Features

  • tasktick create CLI command — Create tasks from a script file via the command line:
    tasktick create "stress test" --script /path/to/script.sh --manual
    tasktick create "daily backup" --script ~/scripts/backup.sh --repeat daily --at 08:00
    Supports --shell, --cwd, --timeout, --manual, --repeat, --at, --no-enable, --json. The GUI owns the SwiftData write — CLI generates the UUID and posts a cli.create notification, then polls the read-only store to confirm.

🔧 Internal

  • New IOBatcher (per-task pipe coalescer) and LogTextView (NSTextView wrapper for virtualized rendering).
  • 12 new unit tests covering LineBuffer edge cases (CR / CRLF, amortized trim, pending overflow). All 23 tests pass.

更新内容

🐛 Bug 修复

  • #28 大量日志输出会卡死 UI — 跑日志输出量大的脚本(比如 npm run dev + Spring Boot 同时输出)不再把主线程占满、界面卡死。重写了 LiveOutputManager:用 O(1) 行缓冲替代之前每个 chunk 都做 O(N) 字符串拼接和截断;I/O 在 50ms 窗口内合批后再切到主线程;日志查看器从 SwiftUI Text(500KB 字符串撑不住)换成了 NSTextView(TextKit 分片布局)。采样显示主线程在 live output 链路上的占用 从 97% 降到 0%
  • 任务列表卡在"0秒后" — 任务列表、Quick Launcher、日志行不再卡死在 "0秒后" 上。系统的相对时间格式化器在中文 short 风格下,会把 |diff| < 1秒 量化成 "0秒后",而 SwiftUI 任务完成后不会自动重画那一行。加了 TimelineView + "刚刚" 短路逻辑,每分钟自动 tick 一次。
  • 日志截断改为保留末尾而不是开头 — stdout/stderr 超过 512KB 时保留最后 256KB(错误堆栈和退出原因都在那),而不是开头那 256KB。对于编译/启动脚本来说,结尾才是你真正需要的部分。

✨ 新功能

  • tasktick create CLI 命令 — 从命令行直接创建任务:
    tasktick create "stress test" --script /path/to/script.sh --manual
    tasktick create "daily backup" --script ~/scripts/backup.sh --repeat daily --at 08:00
    支持 --shell--cwd--timeout--manual--repeat--at--no-enable--json。CLI 只生成 UUID 并发送 cli.create 通知,由 GUI 负责实际写入 SwiftData,避免多进程写库竞争。

🔧 内部改进

  • 新增 IOBatcher(每任务一个的管道合批器)和 LogTextView(NSTextView wrapper,虚拟化渲染)。
  • 12 个新单测覆盖 LineBuffer 边界情况(CR / CRLF、amortized trim、pending 溢出等),全部 23 个测试通过。

Full Changelog: v1.8.2...v1.8.3

TaskTick v1.8.2

09 May 06:44

Choose a tag to compare

v1.8.2 fixes a launch-blocking bug shipped in v1.8.0 (CLI/GUI binaries colliding inside Contents/MacOS/ on default case-insensitive APFS) and adds an auto-repair flow for users whose tasktick symlink got pointed at the now-relocated CLI binary. Recommended for everyone on v1.8.0 / v1.8.1.

What's Changed

Auto-Repair Stale CLI Symlinks

v1.8.x relocated the CLI binary from Contents/MacOS/tasktick to Contents/cli/tasktick (necessary to avoid a case-insensitive APFS collision with the GUI binary TaskTick). DMG users who had previously installed the CLI symlink — /usr/local/bin/tasktick or /opt/homebrew/bin/tasktick — were left with a stale link.

On launch, TaskTick now automatically detects the broken symlink and offers a single-click in-place repair via Touch ID / admin password — no Terminal, no Settings navigation. Click "Update Now" once and you're done.

Settings → Enable CLI Path Fix

The "Enable CLI…" button in Settings → Command Line now generates the correct sudo ln -sf command targeting the new Contents/cli/tasktick path. (Previously generated a sudo command targeting the old Contents/MacOS/ path which would silently resolve to the GUI binary on case-insensitive disks.)

From v1.8.x (recap, in case you skipped earlier)

  • tasktick CLI bundled with the app + the new Raycast extension
  • tasktick events subcommand — NDJSON lifecycle stream for real-time integrations
  • Action toasts — instant system banner when you Run / Stop / Restart from any entry point
  • Redesigned app icon — white squircle, centered clock, properly inset green check
  • CLI hides Dock icon via setActivationPolicy(.prohibited) — no more clock icon flashing on every CLI invocation

更新内容

v1.8.2 修复 v1.8.0 引入的启动崩溃 bug(CLI 与 GUI 二进制在 case-insensitive APFS 上的 Contents/MacOS/ 内同名冲突),并新增自动修复 — 用户从旧版升级时不再需要手动改 symlink。v1.8.0 / v1.8.1 用户强烈建议升级。

自动修复过期的 CLI Symlink

v1.8.x 把 CLI 二进制从 Contents/MacOS/tasktick 改到了 Contents/cli/tasktick(避免与 GUI 二进制 TaskTick 在 case-insensitive APFS 上同名冲突)。已经手动启用过 CLI(/usr/local/bin/tasktick/opt/homebrew/bin/tasktick)的 DMG 用户的 symlink 会指向旧路径。

启动时 TaskTick 会自动检测过期 symlink,弹一次"立即更新"对话框,走 Touch ID / 管理员密码一键修复 —— 不用打开终端、不用进设置。点一下"立即更新"即可。

Settings → 启用 CLI 路径修正

"Enable CLI…" 按钮现在生成的 sudo 命令指向新的 Contents/cli/tasktick 路径(之前指向旧的 Contents/MacOS/,在 case-insensitive 磁盘上会被悄悄解析到 GUI 二进制)。

1.8.x 主功能(如果你之前跳过了)

  • tasktick CLI 内置进 app,配合新的 Raycast 扩展
  • tasktick events 子命令 —— NDJSON 流式生命周期事件,外部工具可订阅
  • 操作类系统通知 —— Run / Stop / Restart 任意入口都立即弹横幅
  • 全新 App 图标 —— 白色圆角方形、表盘居中、绿对勾内移
  • CLI 不弹 Dock 图标 —— setActivationPolicy(.prohibited),每次 CLI 调用不再蹦时钟

Full Changelog: v1.7.1...v1.8.2