Interactive terminal UI for managing Obsidian TaskNotes tasks
Project description
Obsidian Task TUI
A keyboard-driven terminal UI for managing Obsidian tasks stored in TaskNotes format. It works directly on Markdown files, stays usable without Obsidian running, and refreshes when files change.
Highlights
- Browse, sort, create, edit, complete, and delete tasks without leaving the terminal.
- Use any TaskNotes status workflow; categories are discovered from the vault or the TaskNotes plugin configuration.
- Preserve custom status values, priorities, tags, and unrecognized frontmatter.
- Complete recurring instances without closing the recurring task itself.
- Enter dates as ISO values or shortcuts such as
tomorrow,+3d, andnext mon. - Choose dark, light, and colorblind-friendly themes in a responsive interface.
- Keep Obsidian edits in sync through live file watching.
Install and run
Requires uv and Python 3.11 or newer; uv can install a compatible Python automatically. Run the app without installing it permanently:
uvx obsidian-task-tui --vault /path/to/your/vault
Or install it as a persistent command:
uv tool install obsidian-task-tui
obsidian-task-tui --vault /path/to/your/vault
If the installed command is not on PATH, run uv tool update-shell once and
restart the shell. Pin a release with
uvx obsidian-task-tui@1.0.0 --vault /path/to/your/vault or
uv tool install obsidian-task-tui@1.0.0. The legacy obsidian-tasks command
remains available after installation.
To run the latest unreleased GitHub version instead:
uvx --from git+https://github.com/mharlass/obsidian-task-tui obsidian-task-tui \
--vault /path/to/your/vault
Usage
Pass a vault root, a TaskNotes directory, or configure a default:
obsidian-task-tui --vault ~/Documents/my-vault
obsidian-task-tui --tasks-dir ~/Documents/my-vault/TaskNotes/Tasks
obsidian-task-tui --config ~/.config/obsidian-task-tui/config.toml
obsidian-task-tui --theme github-dark-colorblind
| Option | Purpose | Default |
|---|---|---|
--vault PATH |
Obsidian vault root | ~/Documents/work |
--tasks-dir PATH |
TaskNotes task directory | TaskNotes setting or <vault>/TaskNotes/Tasks |
--config PATH |
TOML configuration file | ~/.config/obsidian-task-tui/config.toml |
--theme THEME |
dark, light, obsidian-night, github-dark-colorblind, or github-light-colorblind |
Config value or dark |
--version |
Print the installed version |
For applicable settings, precedence is CLI arguments, environment variables,
the TUI config file, TaskNotes data.json, task-file discovery, then built-in
defaults. Supported environment variables are OBSIDIAN_VAULT_PATH,
OBSIDIAN_TASKS_DIR, OBSIDIAN_TASK_TUI_CONFIG, and
OBSIDIAN_TASK_TUI_THEME. The selected task directory must already exist and
be writable. --tasks-dir selects files directly; also pass --vault if the
app should load that vault's TaskNotes plugin metadata.
Configuration and TaskNotes compatibility
The config file is optional; --vault is enough for most users. See the
complete example
for every setting. A minimal config looks like this:
[paths]
vault_path = "/path/to/your/vault"
[tasks]
task_tag = "task"
[ui]
theme = "dark"
table_categories = ["backlog", "doing", "done"]
default_status = "backlog"
[status_values] # exact vault status -> built-in semantic role
done = "complete"
When .obsidian/plugins/tasknotes/data.json exists, the app reads its task
folder, task tag, category order, labels, colors, completed categories, and
default status. The built-in task tag is task. Task files add previously
unseen statuses; an entirely custom workflow can replace the built-in tabs
through discovery.
Arbitrary status values work without mapping. In [status_values], each key is
an exact vault status and each value is a built-in semantic role: complete
enables completion fields, recurring enables per-instance completion, and
task-pile selects the preferred reopen destination. The x shortcut writes
the exact status of the first complete category in tab order, so configure one
completion destination when possible. Use [priority_values] when the vault has
custom priority names. Without plugin metadata or overrides, the default
statuses are recurring, task-pile, to-do-week, in-progress-today,
In-progress, and complete. Status values are case-sensitive.
Task notes need YAML frontmatter with a non-empty status and the configured
task tag; standard TaskNotes property names such as status, priority, and
due are expected. The app loads matching top-level .md files. Files it
cannot parse are left untouched and skipped, with an in-app warning when the
error can be identified. When rewriting a task, the parser preserves unknown
top-level fields, nested or multiline frontmatter, unmapped values, and note
bodies. A runnable custom-vault example is available in
examples/other-vault.
Completing a recurring task toggles the current date in complete_instances.
Deleting with D permanently removes the underlying Markdown file after
confirmation, so keep the vault backed up or under version control.
Scheduled and due dates accept YYYY-MM-DD, today, tomorrow, yesterday,
signed day offsets such as +3d, and weekdays such as next tuesday. In a
focused date field, ↑ and ↓ move the date by one day.
Keyboard shortcuts
| Key | Action |
|---|---|
Tab / Shift+Tab |
Next / previous status tab |
j / k or ↓ / ↑ |
Select the next / previous task |
Enter |
Open task details |
n |
Create a task |
e |
Edit the open task |
Ctrl+S |
Save a created or edited task |
Escape |
Cancel or go back |
1–5 |
Move the task to the corresponding displayed category |
x |
Complete the task or the current recurring instance |
D |
Delete the selected task after confirmation |
s |
Cycle the table sort |
t |
Cycle the theme |
r |
Reload tasks from disk |
? |
Open help |
q |
Quit or return from details |
Number keys cover the first five categories; open and edit a task to select any additional category.
Development
git clone https://github.com/mharlass/obsidian-task-tui.git
cd obsidian-task-tui
uv sync --all-groups --locked
uv run ruff check .
uv run ruff format .
uv run pytest -q
uv build --no-sources
See RELEASING.md for the PyPI release process.
License
Released under the MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file obsidian_task_tui-1.0.0.tar.gz.
File metadata
- Download URL: obsidian_task_tui-1.0.0.tar.gz
- Upload date:
- Size: 82.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bca217e797d12aee977700f5138b9215837470d14df15b721dbff4854094d73e
|
|
| MD5 |
4a63bc32416f52c0576cacfebb9e0c9d
|
|
| BLAKE2b-256 |
a40dd87e76cbf27ff84ac37dc0f5644da44240937734e044ef70960d7f7923cc
|
Provenance
The following attestation bundles were made for obsidian_task_tui-1.0.0.tar.gz:
Publisher:
release.yml on mharlass/obsidian-task-tui
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
obsidian_task_tui-1.0.0.tar.gz -
Subject digest:
bca217e797d12aee977700f5138b9215837470d14df15b721dbff4854094d73e - Sigstore transparency entry: 2205330276
- Sigstore integration time:
-
Permalink:
mharlass/obsidian-task-tui@4d552e844e7a999e3454d70faf72e6c3703006ea -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/mharlass
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4d552e844e7a999e3454d70faf72e6c3703006ea -
Trigger Event:
release
-
Statement type:
File details
Details for the file obsidian_task_tui-1.0.0-py3-none-any.whl.
File metadata
- Download URL: obsidian_task_tui-1.0.0-py3-none-any.whl
- Upload date:
- Size: 54.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84f03e15cb7af7de1f5f476db5281498c296de0b5d247e1e54a30f2899831d7c
|
|
| MD5 |
c7384de9587e5337eb1b94deece93f17
|
|
| BLAKE2b-256 |
8c7ab918c2c855d452f57470ad7f518b48f36a9037474ee54da7f438ec8d3d45
|
Provenance
The following attestation bundles were made for obsidian_task_tui-1.0.0-py3-none-any.whl:
Publisher:
release.yml on mharlass/obsidian-task-tui
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
obsidian_task_tui-1.0.0-py3-none-any.whl -
Subject digest:
84f03e15cb7af7de1f5f476db5281498c296de0b5d247e1e54a30f2899831d7c - Sigstore transparency entry: 2205330306
- Sigstore integration time:
-
Permalink:
mharlass/obsidian-task-tui@4d552e844e7a999e3454d70faf72e6c3703006ea -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/mharlass
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4d552e844e7a999e3454d70faf72e6c3703006ea -
Trigger Event:
release
-
Statement type: