Terminal

A command line task manager, tsk

tsk add 'review the quote $work tomorrow !p1' and the task is in your list. One binary for Linux, macOS and Windows, and every command also takes --json.

  • One binary, no dependencies
  • Linux, macOS and Windows
  • Every command takes --json
  • The same quick-add line as the web app

Commands

Capture, list, complete

tsk has login, add, ls, show, edit, mv, done, reopen, rm, restore and version. The quick-add line understands a workspace ($work), tags (#client), an assignee (@anna), a priority (!p0 to !p3) and dates such as tomorrow, fri, 2026-10-03 or in 2w. Tags, categories and priorities are also flags: tsk ls --tag client --priority 1, tsk edit 1234 --tag +client --priority 2, tsk edit 1234 --category Home/Garden.

  • Exit codes 0, 1, 2 and 3 for scripts
  • TSK_TOKEN and TSK_URL for CI and servers
  • Configuration in ~/.config/tsk/config.toml, readable only by you
                    $ tsk add 'Review the quote $work tomorrow 14:00 !p1'
$ tsk ls --tag client --priority 1
$ tsk edit 1234 --tag +client --category Clients/Active
$ tsk done 1234
                  

Subtasks

Break a task into subtasks, in one go

tsk add -p '#34' 'Book the offsite' creates a subtask under #34, in the workspace of its parent. --item and stdin add several at once, tsk mv re-parents or moves them, and tsk ls shows subtasks indented under their parent. A task and its subtasks are one level deep.

  • If only a subtask matches the view, the parent shows as a context row
  • `tsk ls --json` stays flat
  • Batch adds stop at the first error, tasks already created stay
  • Subtasks work in the web app and over MCP too
                    $ tsk add -p '#34' --item 'Get a quote' --item 'Book a date'
$ printf 'Get a quote\nBook a date\n' | tsk add -p '#34' -
$ tsk mv '#35' --parent '#40'
$ tsk mv '#35' --parent none
$ tsk mv '#34' --workspace private
                  

Jira and GitLab

Bring in Jira and GitLab from your laptop

tsk sync gitlab and tsk sync jira send the issues assigned to you to tasks, with the login glab and jira-cli already keep on your laptop. tsk sync gitlab setup picks which project goes to which workspace, and --verbose shows what a sync fetched, where each issue went and what the server counted.

  • No Jira or GitLab token on our server
  • `--map` sets the mapping in scripts, without a terminal menu
  • `--verbose` writes to stderr, `--json` stays unchanged
                    $ tsk sync gitlab setup
$ tsk sync gitlab --verbose
$ tsk sync jira --watch 10m
                  

Download tsk

The current version for your system. Check the file against sha256sums.txt before you run it.

          file=tsk-linux-amd64
base=https://me-squibble-tasks--production.s3.eu-central-2.amazonaws.com/public/tsk/latest
curl -fLO "$base/$file" -fLO "$base/sha256sums.txt"
grep " ${file}\$" sha256sums.txt | shasum -a 256 -c -
chmod +x "$file" && mv "$file" ~/.local/bin/tsk
        

Then sign in with tsk login. The guide shows every step.

Set up in three steps

  1. Create your account

    Sign up for free and create a token under API tokens in the settings.

  2. Install tsk

    Download the binary for your system, check the checksum and put it on your path.

  3. Sign in and capture

    tsk login stores the token, tsk add creates your first task.

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.

What limits apply?

To keep the free service fair, limits per account are planned: for owned workspaces, tasks per workspace, personal access tokens, calendar feeds and links per task. The exact numbers are in the table on the pricing page and in the terms of use. They are set so that you do not notice them in daily use. We also limit how many requests a token may make per minute, so a faulty script slows nobody down.

How do Jira and GitLab issues show up in tasks?

Issues assigned to you appear next to your own tasks, with their key, their source and a link to the original. tsk sync gitlab and tsk sync jira read them on your laptop, GitLab through your logged-in glab, Jira with jira-cli’s stored login, and send them to tasks. From GitLab you also get the merge requests waiting for your review. They are as fresh as your last sync: run once, with --watch 10m or on a timer.

Which project lands in which workspace you set once with tsk sync gitlab setup or tsk sync jira setup. Projects without a mapping are not sent, and tsk names them after each sync.

Title, due date and status stay read-only and follow the original. Priority, tags, category, start date and a note are yours to set in tasks; they survive every sync. Recently closed issues show as done or cancelled and then move to the archive.

Capture tasks without leaving the terminal

The account is free. Setting up tsk takes a few minutes.