Command-line interface for the TaskNotes Obsidian plugin. Requires TaskNotes with the HTTP API enabled.
git clone https://github.com/callumalpass/tasknotes-cli.git
cd tasknotes-cli
npm install
npm link # Creates global 'tn' commandtn configThis will auto-discover the TaskNotes API or prompt for host/port.
# Create task (natural language parsed)
tn "Review PR #123 tomorrow high priority @work"
# Interactive mode
tn
# List tasks
tn list
tn list --today
tn list --overdue
tn list --completed
tn list --filter "priority:urgent AND tags:work"
tn list --json
# Task operations
tn complete <taskId>
tn toggle <taskId>
tn archive <taskId>
tn delete <taskId> --force
tn update <taskId> --status completed --priority high --due 2025-08-20
# Update tags/contexts/projects
tn update <taskId> --add-tags "urgent,bug" --remove-tags "low-priority"
tn update <taskId> --add-contexts "office" --add-projects "Website"
# Search
tn search "groceries"tn timer start --task <taskId>
tn timer status
tn timer stop
tn timer log --date 2025-08-13tn pomodoro start --task <taskId> --duration 25
tn pomodoro status
tn pomodoro pause
tn pomodoro resume
tn pomodoro stop
tn pomodoro stats
tn pomodoro sessions --limit 10tn projects list
tn projects show "Website Redesign"
tn projects create "New Project" --description "Description"
tn projects stats "Website Redesign" --period monthtn calendars list
tn calendars google
tn calendars microsoft
tn calendars subscriptions
tn calendars events
tn calendars events --start 2026-01-01 --end 2026-01-31tn recurring create --title "Weekly standup" --pattern "every monday" --time "09:00"
tn recurring list
tn recurring show --id <id>
tn recurring instances --id <id>
tn recurring disable --id <id>
tn recurring enable --id <id>
tn recurring-complete <taskId> <instanceDate>tn stats
tn filter-options
tn filter-help
tn api-docs
tn config --list
tn config --set host=192.168.1.100# Properties
tn list --filter "priority:urgent"
tn list --filter "status:in-progress"
tn list --filter "tags:project"
tn list --filter "due:before:2025-08-20"
# Operators
tn list --filter "priority:urgent AND tags:work"
tn list --filter "priority:urgent OR priority:high"
tn list --filter "(priority:urgent OR priority:high) AND tags:project"Properties: title, status, priority, tags, contexts, projects, due, scheduled, completed, created, modified, archived, estimate
Operators: is, is-not, contains, does-not-contain, before, after, empty, not-empty, greater-than, less-than
Run tn filter-help for full syntax.
Requires fzf installed.
tn-fzf
tn-fzf "priority:urgent"
tn-fzf --today --limit 50Keybindings:
Enter- Open in ObsidianCtrl-E- Open in $EDITORAlt-A- Add new taskCtrl-R- Refresh
All commands support --json for scripting:
tn list --filter "priority:urgent" --json | jq -r '.data.tasks[].title'
tn list --json | jq -r '.data.vault.path as $vault | .data.tasks[] | $vault + "/" + .path'The tn command parses:
- Dates:
tomorrow,friday,next week,2024-12-25 - Priority:
high priority,urgent,!!! - Tags:
#personal,#work - Contexts:
@home,@office - Projects:
+website - Estimates:
2h,30min - Recurrence:
daily,every monday
tn "Fix bug #456 due friday high priority @backend estimate 2h"Config stored at ~/.tasknotes-cli/config.json:
{
"host": "localhost",
"port": 8080,
"authToken": null,
"maxResults": 20
}- Node.js 14+
- TaskNotes plugin with API enabled
- Optional:
fzf,jq,bat
MIT