Guides

Install tsk and sign in

Updated

tsk is the command line of tasks: a single file without dependencies for macOS, Linux and Windows. Use it to add tasks from the terminal, list them and tick them off, and give scripts clean data with --json.

1. Download

Pick the file for your system and get the checksums with it:

Or in a terminal. Put your file into file:

base=https://me-squibble-tasks--production.s3.eu-central-2.amazonaws.com/public/tsk/latest
file=tsk-darwin-arm64
curl -fsSLO "$base/$file"
curl -fsSLO "$base/sha256sums.txt"

2. Verify the checksum

This makes sure the file reached you unchanged:

grep " ${file}\$" sha256sums.txt | shasum -a 256 -c -

The output must read tsk-darwin-arm64: OK. On Linux, sha256sum -c - works in place of shasum -a 256 -c -. On Windows, compare the output of Get-FileHash tsk-windows-amd64.exe -Algorithm SHA256 in PowerShell with the matching line of sha256sums.txt.

3. Install

mkdir -p ~/.local/bin
install -m 0755 "$file" ~/.local/bin/tsk
tsk version

tsk version prints the version and the address tsk talks to. If ~/.local/bin is not on your path yet, add it in your shell configuration. On Windows, rename the file to tsk.exe and put it into a folder on your PATH. If macOS refuses to start it, run xattr -d com.apple.quarantine ~/.local/bin/tsk.

4. Sign in

In tasks, create a token under Settings → API tokens with Read tasks and Write tasks. Without the write scope only ls and show work. Then:

tsk login

tsk asks for the token without echoing it, checks it with tasks and lists your workspaces. It stores the token in ~/.config/tsk/config.toml, readable only by you. A wrong token is never stored. In scripts and CI, set the environment variable TSK_TOKEN instead.

5. The main commands

tsk add '$family #garden !p1 fri Cut hedge'
tsk ls
tsk ls --upcoming
tsk ls --inbox --json
tsk done 4
tsk add -p '#4' --item 'Buy shears' --item 'Rent a hedge trimmer'
tsk mv '#5' --parent none
  • tsk add understands the same quick add syntax as the web app. Put the line in single quotes, or the shell reads # and ! itself.
  • tsk ls shows Today, --upcoming what is coming up, --inbox the inbox.
  • tsk show 4, tsk edit 4 --due 2026-10-30, tsk done 4, tsk reopen 4, tsk rm 4 and tsk restore 4 work with the task number.
  • Subtasks: tsk add -p '#4' 'Text' (or --parent) creates a subtask under #4, in its workspace. Repeat --item 'Text' or pipe lines in with - to add several at once, with or without -p. A batch stops at the first error; tasks already created stay. Output looks like #5 Buy shears (under #4). Quote '#4' so the shell does not read it; 4 or the uuid work too.
  • tsk mv '#5' --parent '#9' re-parents, --parent none makes it a top-level task again, and tsk mv '#4' --workspace private moves a task to another workspace, subtasks along. mv takes several tasks per call.
  • tsk ls shows subtasks indented under their parent; if only the subtask matches, the parent appears as a context row. tsk ls --json stays flat.
  • Tags, priority and category are options: tsk ls --tag garden --priority 1, tsk edit 4 --tag +garden --priority 2 --category Home/Garden.
  • Every command takes --json. tsk <command> --help lists all options.

If it does not work

tsk exits with a code scripts can rely on:

CodeMeaning
0All good
1tasks said no, for example an unknown workspace
2Wrong usage, --help shows the options
3Not signed in or the token is invalid: run tsk login again

Frequently asked questions

How does `tsk` work in the terminal?

tsk is a single program for Linux, macOS and Windows, with no dependencies. Download it, check the checksum and sign in with tsk login and an access token. After that, tsk add 'Send quote $client-a tomorrow !p1' adds a task in one line.

ls, show, edit, mv, done, reopen, rm and restore list, edit, move and complete tasks. tsk add -p '#34' --item 'A' --item 'B' adds several subtasks under #34, tsk mv re-parents them. Every command gives machine-readable output with --json for scripts.

Try it now