From 0fe53d2c57e8d52d8330f8255e9bf3dc36b8b1ad Mon Sep 17 00:00:00 2001
From: Saeed Marzban
Date: Wed, 21 Oct 2026 08:19:07 +0200
Subject: [PATCH 1/3] Final docs pass before #120: docs vs code, CHANGELOG,
What's new 6, llms.txt, landing, skill (T319)
---
CHANGELOG.md | 6 +++---
README.md | 5 +++--
packaging/README.md | 8 ++++++--
site/public/llms.txt | 2 +-
site/src/content/docs/docs/board.md | 12 ++++++------
site/src/content/docs/docs/capture.md | 11 ++++++-----
site/src/content/docs/docs/cli.md | 7 +++----
site/src/content/docs/docs/index.mdx | 1 +
site/src/content/docs/docs/keys.md | 6 +++---
site/src/content/docs/docs/storage.md | 3 ++-
site/src/content/docs/docs/task-page.md | 10 +++++-----
site/src/pages/index.astro | 2 +-
skills/tsk-cli/SKILL.md | 2 ++
src/announcements/catalog.toml | 2 +-
src/setup_agent.rs | 2 +-
15 files changed, 44 insertions(+), 35 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2f1b8bba..aea552c1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -27,9 +27,10 @@ first added in the same Unreleased section is not an entry: edit that entry inst
- `m` on the cleanup card merges the task's pull request with `gh`, then completes the task and cleans up. `[merge] method` in `config.toml` picks the method; CLI: `--merge`.
- Block with a reason: `ctrl+b` asks why and what you need. Answer on the task page, under the row (`r`), or with `tsk reply`. Unblocking sends replies to the agent.
- Review with checks: `ctrl+r` asks what was done and what to check. Mark checks, give feedback (`r`, `tsk reply`), then approve (`ctrl+d`) or send back (`ctrl+s`).
-- Change who a block or review waits on, keeping its replies: `Enter` on its top line, palette **set waiting on…**, or `tsk edit --on`.
+- Change who a block or review waits on, keeping its replies: `w` on its task page, palette **set waiting on…**, or `tsk edit --on`.
+- A blocked or review row addressed to you shows the asker's words on a dim line under it. `z` hides these lines, leaving `✉`; `[board] messages` sets the default.
- Paper trail: the task page lists who did what, newest first, below the steps, and drops created and updated dates from its footer. `tsk list T12` shows it as `activity`.
-- After: a task can wait for other tasks in any project (`!w T202`, the After field, `tsk edit --after`). When the last one is done, a waiting ready task starts.
+- After: a task can wait for other tasks in any project (`!w T202`, the After field's search picker, `tsk edit --after`). When the last one is done, a waiting ready task starts.
- Agents block and hand back for review with `tsk status`, and use `tsk dispatch`, `tsk clean`, and `tsk reply`. Agent skill 1.6.0 covers them; `tsk update` refreshes installed copies.
- `ctrl+u` undoes status changes, step changes, and archiving; a marked set is one step. Undoing a start that launched an agent leaves the agent running. Thanks @LukasGold (#173).
- Group and sort by assignee with `g` and `s` or `tsk list --group assignee` and `--sort assignee`. The `t` filter gains an `@assignees` tab.
@@ -60,7 +61,6 @@ first added in the same Unreleased section is not an entry: edit that entry inst
- `Esc` on a selected Thread on the task page cancels only the thread, not the whole edit.
- `ctrl+x` in a new step's row discards that row, instead of removing the step above it or deleting a task.
- `tsk steps` takes `--` before step text that starts with `-`, as `tsk reply` does.
-- `tsk restore` of an older version keeps task numbering going, so new tasks never reuse a number a deleted task still holds.
- `tsk trash restore` gives a task the next free number when another task holds its old one, so no two tasks share a number.
- `tsk capture --state-dir ` saves into that store instead of the default one; any other argument is refused.
diff --git a/README.md b/README.md
index 6d1fd1b3..95a0f12c 100644
--- a/README.md
+++ b/README.md
@@ -72,8 +72,9 @@ herdr server reload-config
### Give your agent the skill
-The skill teaches your agent to read the board, add tasks, and update their status
-and steps:
+Two skills: `tsk-cli` teaches your agent to read the board, add tasks, and update
+their status and steps. `tsk-coordinator` lets it brief builder agents, review their
+pull requests, and report back on the board:
```sh
tsk setup
diff --git a/packaging/README.md b/packaging/README.md
index 1b27d07b..8b47215e 100644
--- a/packaging/README.md
+++ b/packaging/README.md
@@ -105,10 +105,14 @@ python3 scripts/release.py assemble
that installer from `releases/download/vX.Y.Z/` instead.
- Smoke `tsk setup herdr` under isolated roots ([AGENTS.md](../AGENTS.md#isolated-state)).
- Rehearse the update path against a throwaway `HOME` holding an outdated skill and a
- Herdr config on a custom key:
+ Herdr config on a custom key. Isolate every root the update touches: `HOME`,
+ `TSK_STATE_DIR`, `XDG_CONFIG_HOME`, `XDG_STATE_HOME`, and `HERDR_SOCKET_PATH`. Any one
+ left out lets the refresh reach the daily Herdr plugin, skills, or store:
```sh
- env HOME=/tmp/x/home XDG_CONFIG_HOME=/tmp/x/home/.config HERDR_SOCKET_PATH=/tmp/x/none.sock \
+ env HOME=/tmp/x/home TSK_STATE_DIR=/tmp/x/state \
+ XDG_CONFIG_HOME=/tmp/x/home/.config XDG_STATE_HOME=/tmp/x/home/.local/state \
+ HERDR_SOCKET_PATH=/tmp/x/none.sock \
TSK_VERSION=vX.Y.Z TSK_UPDATE=1 TSK_CURRENT_VERSION=vPREV TSK_INSTALL_DIR=/tmp/x/bin \
sh /tmp/x/install.sh
```
diff --git a/site/public/llms.txt b/site/public/llms.txt
index eb515718..57c3032a 100644
--- a/site/public/llms.txt
+++ b/site/public/llms.txt
@@ -29,7 +29,7 @@ The human works the board in a TUI; agents read and write the same tasks with th
- Run `tsk guide` first: it prints the workflow and the rules. `tsk help ` is the syntax reference.
- Read with `tsk list --json`. `tsk list T12 --json` returns one task in full: notes, steps, block, review, dispatch, and `activity`.
-- Write with `tsk add`, `tsk edit`, and `tsk steps`. Read the exit code before any retry; `tsk dispatch`, `tsk edit --append-notes`, and some `tsk steps` commands are not idempotent.
+- Write with `tsk add`, `tsk edit`, and `tsk steps`. Read the exit code before any retry; `tsk reply`, `tsk dispatch`, `tsk edit --append-notes`, and some `tsk steps` commands are not idempotent.
- When your work is finished, hand it back: `tsk status T12 review --done "…" --check "…"`. Set `done` only when the user says so.
- When you need the human: `tsk status T12 blocked --why "…" --option "…"`, then stop. `tsk reply T12 "…"` answers a block or adds review feedback.
- `tsk dispatch T12` launches an assigned project task's agent in Herdr. `tsk clean T12` removes its worktree and merged branch; never clean the worktree you run in.
diff --git a/site/src/content/docs/docs/board.md b/site/src/content/docs/docs/board.md
index cda93dc6..41ca91fc 100644
--- a/site/src/content/docs/docs/board.md
+++ b/site/src/content/docs/docs/board.md
@@ -142,8 +142,8 @@ A row addressed to you carries a dim **live line** under it, starting `└─`,
| Row | Live line |
| --- | --- |
-| Blocked on you | Their newest reply, else the block's needs or why: `@claude: the client id from the provider · 2h` |
-| In review on you | Their newest reply, else what was done: `@claude: Built the widget; empty input now handled. · 40m` |
+| Blocked on you | Their newest reply after yours, else the block's needs or why: `@claude: the client id from the provider · 2h` |
+| In review on you | Their newest reply after yours, else what was done: `@claude: Built the widget; empty input now handled. · 40m` |
| Blocked on a task that is now done or deleted | `T202 is done · unblock it · 1h` |
The age is how old the message is, and the asker is left out when it is you. A block or review with nothing said has no live line. Neither do rows waiting elsewhere, started and done rows, or notices. When a blocking task is done, the blocked task returns to NEEDS YOU, but its status does not change.
@@ -154,13 +154,13 @@ Press `z` to hide every live line, so each task takes one row. A row whose line
Below 110 columns, a click or `→` opens a **peek** under the row. A wider pane opens the details beside the board instead ([Wide layout](#wide-layout)). The peek shows up to five wrapped note lines, then a footer: `@assignee · ⎇ · #thread · project`, without what is unset or already said.
-A blocked task's peek shows the block instead of notes: who it waits on, the why, then the options or needs. A review's peek shows what was done and every check: `○` open, `✓` passed, `✗` failed. A task with prerequisites lists them with their status, such as `after T202 · started`. The [task page](/docs/task-page/) shows everything.
+A blocked task's peek shows the block instead of notes: who it waits on, the why, then the options or needs. A review's peek shows what was done and every check: `○` open, `✓` passed, `✗` failed. A task with prerequisites lists them with their status, such as `after T202 · started`, then the tasks waiting on it, such as `before T205`. The [task page](/docs/task-page/) shows everything.
## Multi-select
`shift+M` turns on multi-select. Mark tasks with `Space`, `shift+↑`/`shift+↓`, or a click; marked rows show `▪`.
-With tasks marked, these act on the whole set as one save and one undo step: status changes, delete, archive, assignee, base, and after. `Enter`, editing, task-page actions, and relaunch stay on the cursor.
+With tasks marked, these act on the whole set as one save and one undo step: status changes, delete, archive, assignee, base, after, and waiting on. `Enter`, editing, task-page actions, and relaunch stay on the cursor.
- Starting a set that would launch agents opens [one card first](/docs/dispatch/#start-a-marked-set).
- Starting moves only open and ready tasks. It skips marked done tasks, and the status row counts them.
@@ -220,9 +220,9 @@ When the last prerequisite is done, each waiting **ready** task starts in the sa
### Task picker
-The task picker is a search box titled `T5 runs after`. The tasks it runs after sit pinned at the top, a done one marked `· done`.
+The task picker is a search box titled `T12 runs after`, or `3 tasks run after` for a marked set. The tasks it runs after sit pinned at the top, marked `✓`, a done one also `· done`.
-1. Type a task number (`202` or `T202`) or words from its title, such as `login timeout`. Matches list below the pinned tasks, this project's first. Others show their project.
+1. Type a task number (`202` or `T202`) or words from its title, such as `login timeout`. Matches list below the pinned tasks, this project's first. Others show their project. Done and archived tasks are not offered.
2. `Enter` or a click on a match pins it and clears the search. `Enter` or a click on a pinned task unpins it. `ctrl+x` unpins every task.
3. `shift+Enter` saves exactly the pinned tasks. With none pinned, the task runs after nothing.
diff --git a/site/src/content/docs/docs/capture.md b/site/src/content/docs/docs/capture.md
index 8dbee634..e60d72ea 100644
--- a/site/src/content/docs/docs/capture.md
+++ b/site/src/content/docs/docs/capture.md
@@ -80,15 +80,16 @@ In Herdr, press `prefix+a` after [setup](/docs/install/#add-to-herdr). A popup o
- `Esc` discards it, after first closing an open step editor or picker.
- A failed save keeps the draft open to retry or cancel.
-To open the popup from a script:
+To open the popup from a script, invoke the plugin action for your platform:
-```sh
-herdr plugin action invoke quick-capture --plugin herdr-tsk
-```
+| Platform | Command |
+| --- | --- |
+| macOS, Linux | `herdr plugin action invoke quick-capture --plugin herdr-tsk` |
+| Windows | `herdr plugin action invoke quick-capture-windows --plugin herdr-tsk` |
## In the terminal
-`tsk capture` opens the same capture flow in your terminal, as does `TSK_MODE=capture tsk`. It exits after a save or a discard.
+`tsk capture` opens the same capture flow in your terminal, as does `TSK_MODE=capture tsk`. It exits after a save or a discard. `--state-dir ` saves into another store ([`tsk capture`](/docs/cli/#commands)).
## From an agent or script
diff --git a/site/src/content/docs/docs/cli.md b/site/src/content/docs/docs/cli.md
index 06ee32e9..8038b2e4 100644
--- a/site/src/content/docs/docs/cli.md
+++ b/site/src/content/docs/docs/cli.md
@@ -579,7 +579,7 @@ tsk project archive atlas
## trash
-Restores a deleted task with its number.
+Restores a deleted task with its number, or the next free one.
```text
tsk trash restore [--state-dir ]
@@ -597,7 +597,7 @@ tsk trash restore T12
## backup
-Backs the task store and `config.toml` up to git repositories. Targets, frequency, and what is pushed: [git backups](/docs/storage/#git-backups).
+Backs the task store and `config.toml` up to git repositories. Targets, frequency, and what is pushed: [git backups](/docs/storage/#git-backups). `backup` and `restore` print a URL's credentials as `***` ([credentials](/docs/storage/#credentials)).
```text
tsk backup setup [--repo ] [--state-dir ]
@@ -634,11 +634,10 @@ tsk restore [] [--all] [--state-dir ]
| `` | Restore this version without asking, including one only `--all` lists |
| `--all` | List every version, not the newest 20 per machine |
-- The list shows each version's id, time, host, task count, and target, newest first. In a terminal it then asks which to restore; Enter cancels.
+- The list shows each version's id, time, machine, task count, and target, newest first. In a terminal it then asks which to restore; Enter cancels.
- A restore keeps the replaced store beside it and prints its path. It never changes `config.toml`.
- It refuses and replaces nothing when there are no targets or the id is unknown. It also refuses while a board or quick capture is open, and for a version from a newer tsk.
- `tsk restore T12` is not a version: it points at `tsk trash restore T12`. A bare number, such as a `#` from the list, refuses and asks for the id.
-- A backup URL's credentials print as `***` ([credentials](/docs/storage/#credentials)).
**Refusals:** a message with no code, exit 1 ([exit contract](#exit-contract)). A failure while replacing the store exits 3.
diff --git a/site/src/content/docs/docs/index.mdx b/site/src/content/docs/docs/index.mdx
index cdce2aec..fe2370f3 100644
--- a/site/src/content/docs/docs/index.mdx
+++ b/site/src/content/docs/docs/index.mdx
@@ -48,5 +48,6 @@ You or your agent set a task's status. Checking off every step, or an agent sess
| Break work into a checklist | [Steps](/docs/steps/) |
| Hand a task to an agent | [Dispatch](/docs/dispatch/) |
| See what my agent reads | [tsk for agents](/docs/agents/) |
+| Have my agent run builder agents | [Coordinator skill](/docs/coordinator/) |
| Script the board | [CLI](/docs/cli/) |
| Configure tsk, back it up, or restore it | [Storage](/docs/storage/) |
diff --git a/site/src/content/docs/docs/keys.md b/site/src/content/docs/docs/keys.md
index 0d6028d0..7d1d9415 100644
--- a/site/src/content/docs/docs/keys.md
+++ b/site/src/content/docs/docs/keys.md
@@ -32,7 +32,7 @@ Status, edit, delete, and archive keys take `ctrl`. Bare letters move, open, and
| Sort by recent, project, thread, title, or assignee | `s` |
| Fold / unfold the cursor's group | `f` |
| Fold / unfold every group in view | `shift+F` |
-| Hide / show the [live lines](/docs/board/#rows) under rows | `z` |
+| Hide / show agent messages, the [live lines](/docs/board/#rows) under rows | `z` |
| Open the desk / last project / Projects view | `1` / `2` / `3` |
| Pick a project | `p` |
| Filter by thread, project, or assignee | `t` |
@@ -209,11 +209,11 @@ In the Herdr popup, `shift+Enter` saves and closes it. `Esc` or `ctrl+c` discard
| Project picker, archive | `ctrl+f` archives the selected project · on the archived tab, `ctrl+f` or `ctrl+u` restores |
| Archived project's board | `ctrl+u` restores · `Esc`, `p`, or `1`–`3` leaves |
| Filter and view pickers (`t`, `v`) | type to filter · `↑` / `↓` select · `Tab` or `←` / `→` switch tabs, `shift+Tab` back · `Enter` chooses · `Esc` closes |
-| Group, sort, assignee, and base pickers | type to filter · `↑` / `↓` or `Tab` select · `Enter` applies · `Esc` closes with no change |
+| Group, sort, assignee, and base pickers | type to filter · `↑` / `↓` or `Tab` / `shift+Tab` select · `Enter` applies · `Esc` closes with no change |
| Assignee and waiting-on pickers, **type a name…** | the row shows what you typed, such as `@dana` · `Enter` applies it |
| Assignee picker, a person selected | `ctrl+x` [removes the name](/docs/dispatch/#remove-a-name-from-the-list) from the list · `ctrl+u` puts it back |
| Waiting-on picker | as the assignee picker, and `←` / `→` also move |
-| After picker | type a number or words · `↑` / `↓` select · `Enter` pins a match or unpins a pinned task · `ctrl+x` unpins every task · `shift+Enter` saves the pinned tasks · `Esc` closes with no change |
+| [After picker](/docs/board/#task-picker) | type a number or words · `↑` / `↓` select · `Enter` pins a match or unpins a pinned task · `ctrl+x` unpins every task · `shift+Enter` saves the pinned tasks · `Esc` closes with no change |
| Board search (`/`) | type or paste · `Backspace` · `Enter` pins the query · `Esc` clears and closes |
| Palette (`:`) | type to filter · `↑` / `↓` or `Tab` / `shift+Tab` select · `Enter` runs · `Esc` closes |
| Help (`?`) | type to filter by key or action · `↑` / `↓`, page keys, or the wheel scroll · `Esc` clears the search, then closes |
diff --git a/site/src/content/docs/docs/storage.md b/site/src/content/docs/docs/storage.md
index a862daf9..03440829 100644
--- a/site/src/content/docs/docs/storage.md
+++ b/site/src/content/docs/docs/storage.md
@@ -34,7 +34,8 @@ Where tsk keeps your tasks and settings, how to configure it, and how to back it
| `backup-repos/` | Local clones of backup targets |
| `update.json` | The cached [update check](#update-check) |
| `fetch-stamps.json` | When each repository's remote was last fetched. Dispatch, the base picker, and cleanup reuse a fetch from the last 60 seconds. Safe to delete |
-| `launchers\`, `cleanups\` | Windows only: dispatch launchers and cleanup progress |
+| `launchers/` | Dispatch launchers. Each one deletes itself once its agent starts |
+| `cleanups/` | Marks of worktree removals under way, so an interrupted cleanup resumes |
## Configuration
diff --git a/site/src/content/docs/docs/task-page.md b/site/src/content/docs/docs/task-page.md
index 184dcfb4..a78ddec2 100644
--- a/site/src/content/docs/docs/task-page.md
+++ b/site/src/content/docs/docs/task-page.md
@@ -17,17 +17,17 @@ From the top: the title and status, a BLOCKED or REVIEW section while the task h
Click the task's `T` number to copy it.
-The footer reads `@assignee · ⎇ · after T202 · before T203 · #thread · project`:
+The footer reads `@assignee · ⎇ · after T202 · before T205 · #thread · project`:
| Slot | Shows |
| --- | --- |
| `@assignee` | The [assignee](/docs/dispatch/#assign): an agent profile, you, or a person. An unassigned task shows `+ assign` when at least one [agent profile](/docs/storage/#configuration) exists. Click to pick |
-| `⎇ ` | The base branch. Unset, it shows the repository default, such as `⎇ main (default)`. Click to pick |
-| `after T202, T205` | The tasks this one [runs after](/docs/board/#after). Shown only when set. Click to pick |
-| `before T203` | The tasks that run after this one. Read-only: it changes when you edit theirs. Click a number to open that task |
+| `⎇ ` | The base branch. Unset, it shows the repository default, such as `⎇ main (default)`, or `⎇ default` on the desk. Click to pick |
+| `after T202` | The tasks this one [runs after](/docs/board/#after). Shown only when set, or during an edit. Click to pick |
+| `before T205` | The tasks that run after this one. Read-only: it changes when you edit theirs. Click a number to open that task |
| `#thread · project` | The thread and the project, or desk |
-Below it, the action bar lists the page's keys. In view mode it reads `ctrl+e edit`, the task's status actions, `esc close`, and `: commands`. Each one is clickable; `: commands` opens the command palette.
+Below it, the action bar lists the page's keys. In view mode it reads `ctrl+e edit`, the task's status actions, `esc close`, and `: commands`. During an edit it reads `shift+enter save`, `ctrl+a add step`, `esc cancel`, and `: commands`. Each one is clickable; `: commands` opens the command palette.
## Edit
diff --git a/site/src/pages/index.astro b/site/src/pages/index.astro
index e0609c3f..cab6de6e 100644
--- a/site/src/pages/index.astro
+++ b/site/src/pages/index.astro
@@ -328,7 +328,7 @@ const softwareApplication = {
chord away: ctrl+u.
enter open · ctrl+d done · ctrl+n next ·
-ctrl+o inbox · ctrl+b block · ? help
+ctrl+o inbox · ctrl+b block · : commands · ? help
diff --git a/skills/tsk-cli/SKILL.md b/skills/tsk-cli/SKILL.md
index 6dd7e7eb..2c55fb12 100644
--- a/skills/tsk-cli/SKILL.md
+++ b/skills/tsk-cli/SKILL.md
@@ -76,6 +76,8 @@ task's running agent, add `--send`: it sends only that reply and prints `sent to
for your own bookkeeping ([steps](https://gettsk.sh/docs/cli.md#steps)).
11. **Many tasks at once:** `cat plan.json | tsk add`; on exit 1, retry only the `failed` items
([JSON plans](https://gettsk.sh/docs/cli.md#json-plans)).
+12. **A restored task may change number.** `tsk trash restore T12` prints the number it got; use that
+ one from then on ([trash](https://gettsk.sh/docs/cli.md#trash)).
## Reading the board
diff --git a/src/announcements/catalog.toml b/src/announcements/catalog.toml
index 38e8a877..44a1b8e1 100644
--- a/src/announcements/catalog.toml
+++ b/src/announcements/catalog.toml
@@ -26,4 +26,4 @@ notes = "Rows now show their thread and project. Press g to group the board by p
[[announcement]]
id = 6
title = "Hand tasks to your agents"
-notes = "- **Agents:** define profiles in `config.toml` (the starter file has examples), then press `@` on a task to assign it. In Herdr, `ctrl+s` on an assigned project task launches its agent in its own worktree.\n- **Cleanup:** `ctrl+d` on a dispatched task offers to remove its worktree and merged branch. `m` merges its pull request with `gh` first.\n- **Blocks and reviews:** `ctrl+b` and `ctrl+r` open a card that asks why, or what was done and what to check. Answer with `r`, mark checks with `Enter`.\n- **After and paper trail:** `!w T202` makes a task wait for T202. A waiting ready task starts once T202 is done. The task page lists who did what, below the steps.\n- **Backup and undo:** `tsk backup setup` backs up your tasks to a private GitHub repository. `ctrl+u` undoes status changes, steps, and archiving too.\n\nChangelog: https://github.com/smarzban/tsk/blob/main/CHANGELOG.md"
+notes = "- **Agents:** define profiles in `config.toml` (the starter file has examples), then press `@` on a task to assign it. In Herdr, `ctrl+s` on an assigned project task launches its agent in its own worktree.\n- **Cleanup:** `ctrl+d` on a dispatched task offers to remove its worktree and merged branch. `m` merges its pull request with `gh` first.\n- **Blocks and reviews:** `ctrl+b` and `ctrl+r` open a card that asks why, or what was done and what to check. Answer with `r`, mark checks with `Enter`. `z` hides agent messages under rows.\n- **After and paper trail:** `!w T202` makes a task wait for T202. A waiting ready task starts once T202 is done. The task page lists who did what, below the steps.\n- **Backup and undo:** `tsk backup setup` backs up your tasks to a private GitHub repository, and `tsk restore` brings a version back. `ctrl+u` undoes status changes, steps, and archiving too.\n\nChangelog: https://github.com/smarzban/tsk/blob/main/CHANGELOG.md"
diff --git a/src/setup_agent.rs b/src/setup_agent.rs
index 2fec604d..2722b3cd 100644
--- a/src/setup_agent.rs
+++ b/src/setup_agent.rs
@@ -1226,7 +1226,7 @@ mod tests {
hash = hash.wrapping_mul(0x0000_0100_0000_01b3);
}
assert_eq!(
- hash, 0x5ff6_42dc_678d_1e61,
+ hash, 0x19c7_7b6a_688f_e6bc,
"skills/tsk-cli/SKILL.md changed: refresh this hash pin, and bump `version:` only if this is the first skill edit since the last release"
);
}
From d367a7cbf38fd32f15704e82249e4578c5497d91 Mon Sep 17 00:00:00 2001
From: Saeed Marzban
Date: Wed, 21 Oct 2026 08:23:04 +0200
Subject: [PATCH 2/3] tsk --help: edit names who it waits on; backup takes
several repositories (T319)
---
src/cli/presenter.rs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/cli/presenter.rs b/src/cli/presenter.rs
index dde78b9c..9ecc3fa6 100644
--- a/src/cli/presenter.rs
+++ b/src/cli/presenter.rs
@@ -202,7 +202,7 @@ pub fn top_level_help() -> String {
" add create a task, or every task in a JSON plan\n",
" list read tasks\n",
" status set a task's status, block it, or put it up for review\n",
- " edit change a task's title, notes, assignee, base, or after list\n",
+ " edit change title, notes, assignee, base, after list, or who it waits on\n",
" steps add, toggle, rename, move, or remove a step\n",
" reply answer a block, or give feedback on a review\n",
" dispatch launch a task's assigned agent in its own worktree\n",
@@ -212,7 +212,7 @@ pub fn top_level_help() -> String {
" unarchive put an archived task back\n",
" project archive or unarchive a project\n",
" trash restore a deleted task\n",
- " backup back the store up to a git repository\n",
+ " backup back the store up to one or more git repositories\n",
" restore put a backed-up version of the store back\n\n",
"Setup\n",
" setup register Herdr, or install the agent skill\n",
From 99cd5e70a9da23aece11e8d0f5a9838b7d141950 Mon Sep 17 00:00:00 2001
From: Saeed Marzban
Date: Wed, 21 Oct 2026 08:28:33 +0200
Subject: [PATCH 3/3] Docs pass review fixes: cleanups/ refuses not resumes,
HERDR_CONFIG_PATH in update rehearsal, After changelog line within 30 words
(T319)
---
CHANGELOG.md | 2 +-
packaging/README.md | 6 ++++--
site/src/content/docs/docs/storage.md | 2 +-
site/src/content/docs/docs/task-page.md | 2 +-
4 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index aea552c1..1b8fdff6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -30,7 +30,7 @@ first added in the same Unreleased section is not an entry: edit that entry inst
- Change who a block or review waits on, keeping its replies: `w` on its task page, palette **set waiting on…**, or `tsk edit --on`.
- A blocked or review row addressed to you shows the asker's words on a dim line under it. `z` hides these lines, leaving `✉`; `[board] messages` sets the default.
- Paper trail: the task page lists who did what, newest first, below the steps, and drops created and updated dates from its footer. `tsk list T12` shows it as `activity`.
-- After: a task can wait for other tasks in any project (`!w T202`, the After field's search picker, `tsk edit --after`). When the last one is done, a waiting ready task starts.
+- After: a task can wait for other tasks in any project (`!w T202`, the After field, `tsk edit --after`). When the last one is done, a waiting ready task starts.
- Agents block and hand back for review with `tsk status`, and use `tsk dispatch`, `tsk clean`, and `tsk reply`. Agent skill 1.6.0 covers them; `tsk update` refreshes installed copies.
- `ctrl+u` undoes status changes, step changes, and archiving; a marked set is one step. Undoing a start that launched an agent leaves the agent running. Thanks @LukasGold (#173).
- Group and sort by assignee with `g` and `s` or `tsk list --group assignee` and `--sort assignee`. The `t` filter gains an `@assignees` tab.
diff --git a/packaging/README.md b/packaging/README.md
index 8b47215e..ca66bdd1 100644
--- a/packaging/README.md
+++ b/packaging/README.md
@@ -106,11 +106,13 @@ python3 scripts/release.py assemble
- Smoke `tsk setup herdr` under isolated roots ([AGENTS.md](../AGENTS.md#isolated-state)).
- Rehearse the update path against a throwaway `HOME` holding an outdated skill and a
Herdr config on a custom key. Isolate every root the update touches: `HOME`,
- `TSK_STATE_DIR`, `XDG_CONFIG_HOME`, `XDG_STATE_HOME`, and `HERDR_SOCKET_PATH`. Any one
- left out lets the refresh reach the daily Herdr plugin, skills, or store:
+ `TSK_STATE_DIR`, `HERDR_CONFIG_PATH`, `XDG_CONFIG_HOME`, `XDG_STATE_HOME`, and
+ `HERDR_SOCKET_PATH`. Any one left out lets the refresh reach the daily Herdr plugin,
+ skills, or store:
```sh
env HOME=/tmp/x/home TSK_STATE_DIR=/tmp/x/state \
+ HERDR_CONFIG_PATH=/tmp/x/home/.config/herdr/config.toml \
XDG_CONFIG_HOME=/tmp/x/home/.config XDG_STATE_HOME=/tmp/x/home/.local/state \
HERDR_SOCKET_PATH=/tmp/x/none.sock \
TSK_VERSION=vX.Y.Z TSK_UPDATE=1 TSK_CURRENT_VERSION=vPREV TSK_INSTALL_DIR=/tmp/x/bin \
diff --git a/site/src/content/docs/docs/storage.md b/site/src/content/docs/docs/storage.md
index 03440829..f3e53a62 100644
--- a/site/src/content/docs/docs/storage.md
+++ b/site/src/content/docs/docs/storage.md
@@ -35,7 +35,7 @@ Where tsk keeps your tasks and settings, how to configure it, and how to back it
| `update.json` | The cached [update check](#update-check) |
| `fetch-stamps.json` | When each repository's remote was last fetched. Dispatch, the base picker, and cleanup reuse a fetch from the last 60 seconds. Safe to delete |
| `launchers/` | Dispatch launchers. Each one deletes itself once its agent starts |
-| `cleanups/` | Marks of worktree removals under way, so an interrupted cleanup resumes |
+| `cleanups/` | Marks of worktree removals under way. After an interrupted removal, the next cleanup refuses and says how to finish by hand |
## Configuration
diff --git a/site/src/content/docs/docs/task-page.md b/site/src/content/docs/docs/task-page.md
index a78ddec2..cfa51e7b 100644
--- a/site/src/content/docs/docs/task-page.md
+++ b/site/src/content/docs/docs/task-page.md
@@ -27,7 +27,7 @@ The footer reads `@assignee · ⎇ · after T202 · before T205 · #threa
| `before T205` | The tasks that run after this one. Read-only: it changes when you edit theirs. Click a number to open that task |
| `#thread · project` | The thread and the project, or desk |
-Below it, the action bar lists the page's keys. In view mode it reads `ctrl+e edit`, the task's status actions, `esc close`, and `: commands`. During an edit it reads `shift+enter save`, `ctrl+a add step`, `esc cancel`, and `: commands`. Each one is clickable; `: commands` opens the command palette.
+Below it, the action bar lists the page's keys. In view mode it reads `ctrl+e edit`, the task's status actions, `esc close`, and `: commands`. During an edit, with no field open, it reads `shift+enter save`, `ctrl+a add step`, `esc cancel`, and `: commands`. Each one is clickable; `: commands` opens the command palette.
## Edit