Skip to main content

wshlst is a simple task manager CLI

Project description

wshlst v0.1.0

wshlst is a small Markdown-first task manager for the command line.

It keeps your tasks in plain .md files under a local .tasks/ directory, with YAML frontmatter for metadata and optional Markdown body content for notes, checklists, or copied source material.

Features

  • Add tasks from a title, Markdown file, or URL reference.
  • Store tags, priority, due date, status, timestamps, and source metadata.
  • List tasks by status, tag, priority, or due date.
  • Show the raw Markdown file for a task.
  • Update titles, metadata, body content, file sources, and link references.
  • Mark tasks as done or archive them without deleting their files.
  • Resolve tasks by slug, path, or explicit task(000001) reference.

Installation

This project requires Python 3.11 or newer.

The easiest way to run it locally is with uv:

uv sync
uv run wshlst --help

You can also install it into your current Python environment:

pip install .
wshlst --help

Usage

Run commands from the directory where you want your task list to live. wshlst creates .tasks/ automatically the first time you add a task.

Add tasks

wshlst add "Write project README"
wshlst add "Review API notes" --file notes/api.md
wshlst add "Read release notes" --link https://example.com/release
wshlst add "Ship docs" --tag docs --tag release --priority high --due 2026-06-30

Tasks are stored as numbered Markdown files:

.tasks/
  000001-write-project-readme.md
  000002-review-api-notes.md

Each file contains YAML frontmatter followed by optional Markdown body content:

---
id: '000001'
title: Write project README
status: todo
source:
  type: manual
  value: null
created_at: '2026-06-16T12:00:00Z'
updated_at: '2026-06-16T12:00:00Z'
finished_at: null
priority: normal
tags: []
due: null
---

List tasks

wshlst list
wshlst list --all
wshlst list --done
wshlst list --archived
wshlst list --tag docs --priority high --due-before 2026-07-01

The list output is compact and sortable:

000001 high 2026-06-30 todo Ship docs [#docs #release]

Tasks are sorted by due date first, then priority, then creation time.

Show a task

wshlst show write-project-readme
wshlst show 'task(000001)'
wshlst show .tasks/000001-write-project-readme.md

show prints the full Markdown file, including frontmatter and body.

Update a task

wshlst update write-project-readme --title "Write usage README"
wshlst update 'task(000001)' --body "# Notes\n\nKeep it concise."
wshlst update 'task(000001)' --file notes/replacement.md
wshlst update 'task(000001)' --link https://example.com/new-reference
wshlst update 'task(000001)' --tag docs --tag cli --priority normal --due 2026-07-05

Updating a title does not rename the task file. Content sources are mutually exclusive: use one of --body, --file, or --link per update.

Finish or archive

wshlst finish 'task(000001)'
wshlst rm write-project-readme

finish sets the task status to done and records finished_at. rm archives the task in place by setting the status to archived; it does not delete the Markdown file.

Task References

Commands that operate on an existing task accept:

  • Slug: write-project-readme
  • Explicit ID: task(000001)
  • File path: .tasks/000001-write-project-readme.md

Bare numeric IDs are intentionally rejected, so use task(000001) when you want to reference a task by ID.

Development

Install dependencies:

uv sync --dev

Run the test suite:

uv run pytest

Run the CLI from the working tree:

uv run wshlst --help

License

No license file is currently included in this repository.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wshlst-0.1.0.tar.gz (15.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wshlst-0.1.0-py3-none-any.whl (9.5 kB view details)

Uploaded Python 3

File details

Details for the file wshlst-0.1.0.tar.gz.

File metadata

  • Download URL: wshlst-0.1.0.tar.gz
  • Upload date:
  • Size: 15.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for wshlst-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d9a43092c2e58bd996f1b6b25bf010f0f58153a9e0472cd91c8970bc7a0fb540
MD5 08718d47450afc84576e7591ef3eeb4d
BLAKE2b-256 f190f30ab4995557d75aa8f832b52309d8645f3686240759076577985a346eb5

See more details on using hashes here.

File details

Details for the file wshlst-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: wshlst-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for wshlst-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ac704ad866d121796020135bada46f8b683ca6dc811037cba413a9ef33e8f018
MD5 9ac9b7a43361d4a7d31ba14d1799c778
BLAKE2b-256 45a5b11fd717fce5328f6f8d60b4ed07204b6e2a989223f11cce1b012e9d5e29

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page