Skip to main content

tali 🧙‍♂️

The CLI magic 🔮 for task alchemists -- Weave productivity spells with symbols that conjure order 📓 from chaos 🌀.

GitHub License PyPI Python Version

tali is a magical command-line task manager. It manipulates tasks with intuitive symbols for fast yet powerful filtering, grouping, sorting and batch operations.

screenshot

Contents

✨ Features

  • 🚀 Fast Symbolic Syntax -- Intuitive symbols for fast task filtering and editing: @tag, /project, ^1week.
  • 🔎 Powerful Filtering, Grouping and Sorting -- Filter, group and sort items with ease: tali /work ! ^today @ =^.
  • 📒 Batch Operations -- Modify multiple filtered tasks at once: tali /grocery @fruit . ,d marks tasks with tag @fruit in /grocery project as done.
  • 😄 Emoji Support -- Use Emoji markups for visual flair: 💥 = :boom:.
  • Undo/Redo -- Never fear accidental changes with -u/--undo and -r/--redo.
  • ⚙️ Highly Customizable -- Configure symbols, aliases, rendering format/style, editor, pager, database location, and more in ~/.config/tali/config.toml.
  • 📁 Folder-specific Task Management -- Organize tasks in specific directories by creating a .tali folder in any directory.
  • 📇 JSON Storage/Export -- Machine-readable output with -j/--json.
  • 📜 Cheat Sheet Built-in -- Always available with -c/--cheatsheet.
  • 1️⃣ Idempotent Operations -- Use interactive editor or scripts to modify tasks.

📦 Installation

  • Using pip

    pip install tali-cli
    
  • Using uv

    uv tool install tali-cli
    
  • From source

    git clone https://github.com/admk/tali && cd tali && pip install .
    
  • Requires Python 3.10+.

📖 Usage Examples

🪄 Basic Usage

tali . "Buy milk" /grocery ^today  # Create a task with project and deadline
tali . "Meeting notes" /work ^"tue 4pm" ,n  # Create a note
tali . "Fix bug" /tali !high @urgent  # Create high-priority task with tag
tali 42 . ,  # Toggle completion for task 42
tali 42 . ,x  # Delete task
tali ^today . @star  # Toggle star tag for all tasks due today

🔎 Filtering & Querying

tali /work !high ^today  # Show high-priority work tasks due today
tali /work + /home  # Show tasks in /work or /home
tali '(/work + /home) @urgent'  # Show urgent tasks in /work or /home
tali /work ~@waiting  # Show /work tasks without the @waiting tag
tali ^fri  # Select tasks that are due by Friday
tali @ =^  # Group tasks by tag sorted by deadline
tali 42 ?^  # Query deadline of task 42

✏️ Task Modifications

tali 42 . ,done  # Mark task 42 as done ☑️
tali 42 . ,  # Toggle task status
tali 42 . @star  # Toggle star tag ⭐
tali 42 . @fav  # Toggle favorite tag ❤️
tali 42 . !h  # Set high priority ‼️
tali 42 . ,x  # Delete task 🗑️
tali 42 . : "Details..."  # Add description
tali 42 . "New title" /newproject ,n  # Edit multiple properties

⏰ Deadline Management

tali 42 . ^+3d  # Postpone deadline by 3 days
tali 42 . ^2mon  # Set to Monday after next
tali 42 . ^M  # Set to end of month
tali 42 . ^oo  # Remove deadline

📒 Batch Operations

tali 1..5 . ,x  # Delete tasks 1-5
tali @urgent . !high  # Set all @urgent tasks to high priority
tali /home .  # Edit all tasks in /home project in text editor

🧪 Advanced Options

tali (-d|--debug) <...>  # Debug mode
tali (-j|--json) <...>  # Output in JSON format
tali (-H|--history)  # Show commit history
tali (-u|--undo)  # Undo last operation; repeat, e.g. -uu, to undo more
tali (-r|--redo)  # Redo last undone operation; repeat, e.g. -rr, to redo more
tali (-R|--re-index)  # Re-index database

📝 Editor Usage

You can invoke an interactive editor by running:

tali (-e|--edit)  # start an empty editor for task editing
tali <selection> .  # or edit tasks filtered by <selection>

In the editor, you can write task editing or adding commands without the tali prefix. When you save and close the editor:

  • Each line will be treated as a separate command
  • Commands will be executed sequentially
  • Supports recursive prefix sharing for faster editing

Example:

. /home/grocery ^today buy
  @fruit
    apples
    oranges
  milk

This would be interpreted as:

. /home/grocery ^today @fruit buy apples
. /home/grocery ^today @fruit buy oranges
. /home/grocery ^today buy milk

To add nested tasks without knowing the parent's ID, start each nested child line with .:

. /work release checklist
  . draft outline
  . collect screenshots
    . crop hero image

Indented lines without a leading . still use prefix sharing. This also works inside nested blocks:

. /work
  release checklist
    @urgent
      . draft outline
      . collect screenshots

For multi-line descriptions in editor mode, use indented : lines under the task:

. /work release checklist
  : First description line.
  : Second description line.

For longer descriptions, use a fenced block. The fence defaults to """ and can be changed with token.description_fence:

. /work release checklist : """
First description line.
Second description line.
"""

⚙️ Configuration

Global configuration is stored in ~/.config/tali/config.yaml (or $XDG_CONFIG_HOME/tali/config.yaml). It also uses .tali/config.yaml in your project directory for project-specific setting overrides if it exists. Edit with:

tali --edit-rc

See config.yaml for all default configurations. See Configuration Guide for details of how to customize tali.

📜 Symbol Cheat Sheet

Token Name Description Example
. separator Separates selection from action 1..3 . ,done
.. id range Range of item IDs 1..5
, status Task status (see values below) ,pending
/ project Project category /work
@ tag Custom tag @critical
! priority Priority level (see values below) !high
^ deadline Due date/time expression ^tomorrow
= sort Sort results =! (priority)
? query Query attributes ?^ (deadline)
: description Long description : details...
+ or OR between selection clauses /work + /home
~ not Negate the next selection filter ~@waiting
( group open Opens a selection expression (/work + /home
) group close Closes a selection expression /home) @tag
- stdin Read from standard input -

Settable token values:

  • Status accepts pending, done, note, archive, and delete. Default aliases are p, d/c, n, a, and x. A bare , action toggles pending/done.
  • Priority accepts high, normal, and low. Default aliases are h, n, and l. A bare ! action sets high priority; !+ raises priority and !- lowers it.
  • Deadline accepts date expressions such as today, tomorrow, feb21, 10am, mon, +3d, -1w, and +M1d. Quote values with spaces, for example ^"tue 4pm". In actions, ^oo clears the deadline.
  • Selection adjacency is AND, a standalone + is OR, and ~ negates the next selection filter. Parentheses group selection expressions; through a shell, quote or escape them, for example '(/work + /home) @urgent'. These defaults are configured with token.or, token.not, token.open_paren, and token.close_paren.

🚀 Productivity Tips

📟 Shell Aliases

Use t as an alias for tali. For example:

  1. Add the following line to your ~/.bashrc or ~/.zshrc:
    alias t='tali'
    
  2. source ~/.bashrc or source ~/.zshrc to apply the changes.
  3. Use t <...> instead of tali <...> for extra speed.

🎨 Syntax Highlighting

🧙‍♂️ Contribute

💡 Inspired by

  • taskbook: Tasks, boards & notes for the command-line habitat.
  • taskwarrior: A command line task list management utility.

Download files

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

Source Distribution

tali_cli-0.3.0.tar.gz (63.8 kB view details)

Uploaded Source

Built Distribution

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

tali_cli-0.3.0-py3-none-any.whl (55.2 kB view details)

Uploaded Python 3

File details

Details for the file tali_cli-0.3.0.tar.gz.

File metadata

  • Download URL: tali_cli-0.3.0.tar.gz
  • Upload date:
  • Size: 63.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tali_cli-0.3.0.tar.gz
Algorithm Hash digest
SHA256 e9d62a5a6c5764dccb5f9c8ed5b720d232817cfa963ebab51aadd671488588c0
MD5 91dd98b617c2102bc83f2c36173707af
BLAKE2b-256 da95e8cf8c94ec518c7e5f9a35c60e4e261aba7bb59d1fb0535c8eaec124abe5

See more details on using hashes here.

Provenance

The following attestation bundles were made for tali_cli-0.3.0.tar.gz:

Publisher: publish.yml on admk/tali

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tali_cli-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: tali_cli-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 55.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tali_cli-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 214700333a2bc5f58a94cd4e18edd324b86a42aba884b9cf15229a0591fe758b
MD5 e643e2e3b91eaaea1a1318e1e95b2173
BLAKE2b-256 15ed5af4b227fa93fd6e64c285cffa7b959502e4912f792a48bac607cb90f530

See more details on using hashes here.

Provenance

The following attestation bundles were made for tali_cli-0.3.0-py3-none-any.whl:

Publisher: publish.yml on admk/tali

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 files

0.2.4

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.6

2 files

0.1.0

2 files

Supported by

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