Releases: lifedever/TaskTick
TaskTick v1.11.0
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
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
What's Changed
✨ Log export (#35)
- Export execution logs to a
.logfile (single log), or Export All to a.ziparchive — one.logper 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 2minstead 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
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
tasktickCLI. 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
What's Changed
Bug Fixes
- Fixed the
tasktickCLI crashing when invoked through the Homebrew/PATH symlink. Running any command (e.g.tasktick list) via/opt/homebrew/bin/tasktickor/usr/local/bin/tasktickcrashed with acould not load resource bundlefatal 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
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
What's Changed
✨ Features
- Run macOS Shortcuts as tasks — pick a Shortcut from a dropdown (loaded from
shortcuts list) and TaskTick will trigger it viashortcuts 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
nilfornextRunAt, so the scheduler skipped it forever. Tightened the legacy guard to only fire whenintervalSecondsis 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
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
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
LiveOutputManagerwith an O(1) line buffer; pipe I/O is now coalesced at 50ms before crossing to the main thread; the log viewer renders viaNSTextView(TextKit fragmented layout) instead of SwiftUIText, 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| < 1sto "0秒后" in zh-Hans, and SwiftUI didn't auto-refresh the row. AddedTimelineViewand 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 createCLI command — Create tasks from a script file via the command line:Supportstasktick 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. The GUI owns the SwiftData write — CLI generates the UUID and posts acli.createnotification, then polls the read-only store to confirm.
🔧 Internal
- New
IOBatcher(per-task pipe coalescer) andLogTextView(NSTextView wrapper for virtualized rendering). - 12 new unit tests covering
LineBufferedge 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 窗口内合批后再切到主线程;日志查看器从 SwiftUIText(500KB 字符串撑不住)换成了NSTextView(TextKit 分片布局)。采样显示主线程在 live output 链路上的占用 从 97% 降到 0%。 - 任务列表卡在"0秒后" — 任务列表、Quick Launcher、日志行不再卡死在 "0秒后" 上。系统的相对时间格式化器在中文 short 风格下,会把
|diff| < 1秒量化成 "0秒后",而 SwiftUI 任务完成后不会自动重画那一行。加了TimelineView+ "刚刚" 短路逻辑,每分钟自动 tick 一次。 - 日志截断改为保留末尾而不是开头 — stdout/stderr 超过 512KB 时保留最后 256KB(错误堆栈和退出原因都在那),而不是开头那 256KB。对于编译/启动脚本来说,结尾才是你真正需要的部分。
✨ 新功能
tasktick createCLI 命令 — 从命令行直接创建任务:支持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
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 whosetaskticksymlink 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)
tasktickCLI bundled with the app + the new Raycast extensiontasktick eventssubcommand — 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 主功能(如果你之前跳过了)
tasktickCLI 内置进 app,配合新的 Raycast 扩展tasktick events子命令 —— NDJSON 流式生命周期事件,外部工具可订阅- 操作类系统通知 —— Run / Stop / Restart 任意入口都立即弹横幅
- 全新 App 图标 —— 白色圆角方形、表盘居中、绿对勾内移
- CLI 不弹 Dock 图标 ——
setActivationPolicy(.prohibited),每次 CLI 调用不再蹦时钟
Full Changelog: v1.7.1...v1.8.2