Repository navigation
ThinkWatch Core 0.60.0
This release gives client helper requests two modes instead of three: answered locally, or forwarded. A forwarded helper request goes through the routing rules like any other request and carries its class, so a rule with when.intent takes effect as soon as it is written. An older core no longer clears a request history written by a newer one.
Upgrade notes
- The control-plane protocol version (
CONTROL_API_VERSION) goes from 35 to 36. ThinkWatch Lite connects only to a core with the same protocol version. ThinkWatch Lite 2026.10.1 includes 0.59.0 (protocol 35) and does not connect to 0.60.0. A server used with it stays on 0.59.0 until the app is updated to a release that includes 0.60.0;sudo twcore upgrade --version 0.59.0 --restartswitches a server back. - The request store's schema is unchanged (25): upgrading from 0.59.0 keeps the request history.
client_probestakesinterceptorforward.passthroughandrouteare gone, and a configuration that still sets either does not load. Change them toforward, or delete the line: health checks and warm-ups default tointercept, titles, topic detection and suggestions toforward. A configuration that never setclient_probesis not affected.- Changed in the protocol:
ProbeModeisintercept|forward.DryRunOutcomeno longer haspassthrough. A dry run of a forwarded helper request evaluates the rules and ends inroute,deny,no_matchorunavailable, like any other request.RouteSave.route_probesis removed. Saving a route no longer changesclient_probes.
- Message codes, compared with 0.59.0:
control.unknown_probe_classis removed, along withroute_probes. No code is added and no sentence changes.
Helper requests. Clients such as Claude Code send requests of their own: health checks, warm-ups, session titles, topic detection and suggestions. passthrough and route both sent such a request through the routing rules. They differed only in whether it carried its class, and so in whether a when.intent condition could match it. The names suggested that passthrough skipped routing, and the dry run said so too: it stopped before the rules and reported passthrough, while the gateway evaluated the rules for that request like for any other.
forwardreplaces both. The request carries its class, sowhen: { intent: titling }orwhen: { intent: assistant_internal }matches it without any other setting.interceptis unchanged: the gateway answers the request itself, nothing is sent upstream, and no rule is evaluated. Awhen.intentcondition never matches a class set tointercept.- Defaults are unchanged in effect: health checks and warm-ups are answered locally; titles, topic detection and suggestions are forwarded.
Request history across versions. Core rebuilt the request store, bodies included, whenever its schema differed from the build's own, in either direction. An older core opening a store written by a newer one therefore cleared a history the newer version would have read again: after installing an older release over a newer one, or with a second copy of the app on the same machine that has not updated yet. Now only an older store is rebuilt. A newer one is left as it is: core records nothing while it runs, forwarding is unaffected, /storage reports recording: false, and the newer version opens the store unchanged later.
Downloads
| Platform | Binary | Archive for server installation |
|---|---|---|
| Linux, x86_64 | twcore-x86_64-unknown-linux-gnu |
twcore-x86_64-unknown-linux-gnu.tar.gz |
| Linux, aarch64 | twcore-aarch64-unknown-linux-gnu |
twcore-aarch64-unknown-linux-gnu.tar.gz |
| macOS, Apple silicon | twcore-aarch64-apple-darwin |
— |
| Windows, x64 | twcore-x86_64-pc-windows-msvc.exe |
— |
| Windows, ARM64 | twcore-aarch64-pc-windows-msvc.exe |
— |
Each file is published with a .sha256 file beside it. A Linux archive contains twcore, the systemd unit twcore.service and LICENSE. ThinkWatch Lite includes its own copy of twcore; the files here are for running core separately, such as on a server.
Server installation
On Linux (x86_64 or aarch64), the install script sets up twcore as a systemd service. This installs 0.60.0:
curl -fsSL https://raw.githubusercontent.com/ThinkWatchProject/ThinkWatch-Core/main/scripts/install.sh | sudo sh -s -- --version 0.60.0An installation made with the script switches to 0.60.0 with:
sudo twcore upgrade --version 0.60.0 --restartConfiguration, the remote control port and connecting ThinkWatch Lite are described in docs/server.md.
Verifying a download
A .sha256 file holds the SHA-256 of the file followed by its name. With both files in the current directory, on Linux:
sha256sum -c twcore-x86_64-unknown-linux-gnu.tar.gz.sha256On macOS:
shasum -a 256 -c twcore-aarch64-apple-darwin.sha256On Windows, in PowerShell, the following prints True when the binary matches:
(Get-FileHash .\twcore-x86_64-pc-windows-msvc.exe).Hash -eq (Get-Content .\twcore-x86_64-pc-windows-msvc.exe.sha256).Split()[0]The install script and twcore upgrade check the SHA-256 themselves.
What's Changed
- Keep a request database written by a newer version by @fylorn in #280
- Two modes for client helper requests: answer locally or forward by @fylorn in #281
- chore: v0.60.0 by @fylorn in #282
Full Changelog: v0.59.0...v0.60.0