Skip to content

Task Status Cycler

Task Status Cycler changes task and Pomodoro states in Bob's workflow.

Plugin facts

Fact Value
Name Task Status Cycler
ID task-status-cycler
Version 1.42.2
Minimum Obsidian version 1.8.7
Desktop only No
Description Complete Pomodoros while carrying worked-on/deferred links, copying a closed named Pomodoro's name onto the created one, and copying each Task Link sub-bullet's sub-sub-bullets into the linked task's Work Log, toggle empty Pomodoro placeholders/sub-bullets with Ctrl+Alt+] including named placeholders, toggle Obsidian tasks with Ctrl+Shift+] (a Vim count N toggles the cursor item and the next N sibling items together, prompting at most once and sending the whole group to one section) — always prompting for promotion destinations when exact Tasks exists (Enter defaults to Tasks conversion, including in place when already there; typing creates a new section; non-Tasks stays plain; empty non-Tasks source sections are removed) and for demotions from Tasks — cycle Blocked tasks out with option+[/option+], recover affected Blocked dependents, propagate Ctrl+Enter to embedded task transclusions, and preserve embedded-task behavior. Ctrl+Enter on a Task Link closes the linked task and strikes the link, embedded or plain. A versioned api.recoverBlockedDependents lets other plugins recover Blocked dependents without retiring references; dependents with a strictly future scheduled date stay Blocked, and Ctrl+Enter on a Task Link to a Cancelled task shows a notice instead of completing the owning Pomodoro. Depends-On lines (managed ⛓️ DEPENDS ON: child bullets) are never struck, restored, reformatted, or tree-closed: Ctrl+Enter closes or reopens the linked prerequisite only, and Alt+[ / Alt+] cycle the link under the cursor. Ctrl+Enter on the PRE/POST row the bob-navigation-hotkeys review walk just landed on hands off to nav api v2, which completes the row and advances within its group when another live row remains. Alt+[ / Alt+] on a Pomodoro Task Link instead toggles the linked task between Next and In Progress through the nav api.taskLinkLane v1 namespace, never reformatting the bullet. Closing a planned task recovers what it unblocked and offers to pull in successors (hand-offs, project residents, project-finished pull-ins) through nav api.successors v1 — gated on [id::], through open editors or preimage-checked vault writes, honouring plan.link_unblocked — and reports it once: the Unblocked card through nav api.notice v1, the walk toast on review landings, or a plain not-pulled-in notice without nav. Reopening the predecessor the same day through Ctrl+Enter takes back untouched successor links and restores their statuses from an in-memory receipt; Alt+]/Alt+[ moves into Done join the same pass, while moves into Cancelled recover only. Project Schedule comes from the ^prj task; tagged #prj_is_blocked residents stay Blocked until project recovery, which strips the tag from every open resident including those that remain Blocked for their own reasons, never edits closed lines, and records [unblocked::] through ledger-tools v12 when available (otherwise it recovers with a console warning, including on the successor apply path). Alt+] / Alt+[ on a [?] ^prj that leaves the project with no remaining reason — a future date or an open Depends-On target resolved against the vault; a missing id never blocks — recover those open residents in the same gesture, including when Alt+[ cancels ^prj so the note is no longer project(T), and when the cycled ^prj is transcluded from another note. A tagged #prj_is_blocked ^prj inherits its parent project’s Blocked reason and cannot be cycled; closing its last open sub-project pulls in the parent ^prj. LINKS and LINKED FROM rows are not Pomodoro Task Links; Ctrl+Enter and Alt+] / Alt+[ act on their target root-only without formatting the row.

Registered commands

Command Command ID Default hotkey
Cycle task status backward cycle-task-status-backward —
Cycle task status forward cycle-task-status-forward —
Open child bullet line above open-child-bullet-line-above —
Open child bullet line below open-child-bullet-line-below —
Toggle Obsidian task toggle-obsidian-task —
Toggle Pomodoro placeholder/sub-bullet toggle-pomodoro-bullet Ctrl+Alt+]
Toggle task checkbox marker toggle-task-checkbox-marker —
Toggle task open/done toggle-task-open-done —

Completing Pomodoros and tasks

Ctrl+Enter on a Pomodoro completes it: worked-on links carry above deferred #-marked links, each in source order; a closed named Pomodoro's name is copied onto the Pomodoro that completion creates; and each Task Link sub-bullet's sub-sub-bullets are copied as locally dated entries such as *2026-08-26* — Read research notes into that link's task, under a tab-indented managed 🛠️ **WORK LOG** child bullet created when the task has none. A Pomodoro close whose children are all deferred # links deletes the closed entry instead of leaving it childless, carrying the stripped links to the created placeholder.

Ctrl+Enter on a selected Task Link — embedded or plain, including inside an open Pomodoro — closes the linked task and strikes the link through as ~~[[…]]~~; pressing it again reopens both. Plain links close root-only, while embedded links close their transcluded tree. Only links that do not resolve to a task fall back to completing the Pomodoro. Ctrl+Enter on a Task Link to a Cancelled task shows a notice instead and leaves the Pomodoro open. Ctrl+Enter on a task line wrapping an embedded block transclusion closes or reopens the transcluded source task too.

The empty-placeholder toggle Ctrl+Alt+] toggles empty Pomodoro placeholders and sub-bullets, including named empty placeholders. The Obsidian task toggle Ctrl+Shift+] / Ctrl+} converts a task to or from a normal bullet; a Vim count N<Ctrl+Shift+]> toggles the cursor item and the next N sibling items together, prompting at most once and sending the whole group to one section. Every eligible plain-bullet promotion in a note with an exact Tasks section routes through a section picker (blank Enter chooses Tasks and converts once to checkbox, #task, and created, including in-place when the bullet is already there; other destinations keep the bullet plain). Demoting from Tasks prompts for an existing or new destination; other demotions go to the next Markdown section, and emptied non-Tasks source sections are removed.

A Blocked [?] task cycles to Ready or Cancelled with Alt+] / Alt+[ — retiring its own uniquely future scheduled date and prepending a 🔓 unblocked by hand entry to an existing Schedule Log without ever creating one — and recovers the affected Blocked dependents. Blocked dependents with a strictly future scheduled date stay Blocked.

Depends-On ⛓️ DEPENDS ON: lines are never struck, restored, reformatted, or tree-closed: Ctrl+Enter on one closes or reopens the linked prerequisite only, and Alt+[ / Alt+] cycle the link under the cursor. The same guard covers malformed lines; VS16-emoji, lowercase, unmarked, and blockquoted shapes stay unguarded. 🧱 BLOCKS: lines are likewise never struck, restored, reformatted, or tree-closed; Ctrl+Enter closes the dependent root-only and Alt+[/] cycles it without reformatting. Pomodoro and successor scanners skip managed lines.

🪢 **LINKS:** and 🪢 **LINKED FROM:** are managed relation lines too. Their links never become Pomodoro Task Links or successor offers. Ctrl+Enter and Alt+] / Alt+[ on one act on the selected task root-only; the line is never struck, restored, tree-closed, or reformatted.

Successor offers and take-backs

Closing a planned task recovers what it unblocked and offers to pull in successors (hand-offs, project residents, project-finished pull-ins): the Unblocked card, the walk toast on review landings, or a plain not-pulled-in notice reports the outcome exactly once. Successor picks carrying a destination override insert at the verified existing entry or a created - [ ] () — NAME placeholder.

Reopening the predecessor the same day through Ctrl+Enter takes back untouched successor links and restores their statuses from an in-memory receipt — nothing is stored — deleting every open entry the take-back empties. Alt+] / Alt+[ moves into Done join the same pass, while moves into Cancelled recover only.

Lanes, projects, and review handoffs

Alt+[ / Alt+] cycling to an open status (including leaving Blocked, counted lines, and transcluded targets) and Ctrl+Enter reopening stamp the task's freshness ([fresh:: today]) through Bob Ledger Tools. On a Pomodoro Task Link line, Alt+[ / Alt+] instead delegate to the navigation lane toggle to move the linked task between Next and In Progress — asking once for an optional Work Log summary when moving back to Next — never reformatting the bullet.

Ctrl+Enter on the PRE/POST row the navigation review walk just landed on hands off to that walk to complete the row and move within its group when another live row remains. Ctrl+Enter on a lane or other landed row closes it and continues the walk once, never onto a checklist row.

Project Schedule comes from the ^prj task: tagged #prj_is_blocked residents stay Blocked until recovery, which strips the tag from every open resident including those that remain Blocked for their own reasons, never edits closed lines, and records [unblocked::] through the ledger-tools namespace when available (otherwise it recovers with a console warning). Alt+] / Alt+[ on a [?] ^prj that leaves the project with no remaining reason — a future date or an open Depends-On target resolved against the vault; a missing id never blocks — recover those open residents in the same gesture, including when Alt+[ cancels ^prj so the note is no longer a project, and when the cycled ^prj is transcluded from another note. A tagged #prj_is_blocked ^prj inherits its parent project's Blocked reason and cannot be cycled; closing its last open sub-project pulls in the parent ^prj.

The plugin exposes a versioned cross-plugin surface the same way the other plugins do (plugins never import one another's main.js): recoverBlockedDependents runs the same Blocked-dependent recovery Ctrl+Enter uses — including the strictly-future-scheduled guard — without retiring references, and completeTaskAtCursor closes the cursor #task through the Tasks command so recurrence fires, appending its additive successorNotice line to the walk toast on review landings.

Settings

This plugin adds no settings tab and reads no per-plugin settings. Lane, schedule, and freshness inputs come from the task lines themselves and the shared bob config file.

Tested rolling snapshot bob-cli 41afa14 bob-mac-capture 556bb67 bob-plugins af1e691 Built 2026-10-24T22:34:13Z (zensical) build.json