Skip to content

CLI Reference

Quick reference for all CLI commands, options, and behaviors.

Query and filter entities.

tdn list [entity-type] [options]
ArgumentDescriptionDefault
entity-typetasks, projects, or areastasks

Filtering Options:

OptionShortDescription
--status <status>-sFilter by status (comma-separated for OR)
--project <name>-pFilter by project (substring match)
--area <name>-aFilter by area (substring match)
--due <when>-dFilter by due date
--scheduled <when>Filter by scheduled date
--overdueShow overdue tasks
--query <text>-qSearch in title and body

Inclusion Options:

OptionDescription
--include-doneInclude completed entities
--include-droppedInclude dropped entities
--include-closedInclude done and dropped
--include-iceboxInclude icebox tasks
--include-deferredInclude deferred tasks
--include-archivedInclude archived entities
--only-archivedShow only archived entities

Completion Filters:

OptionDescription
--completed-after <date>Completed after date
--completed-before <date>Completed before date
--completed-todayCompleted today
--completed-this-weekCompleted this week

Result Options:

OptionShortDescription
--sort <field>Sort by field
--descDescending order
--limit <n>-lLimit results

Display full entity details including body content.

tdn show <target>
ArgumentDescription
targetTitle (fuzzy match) or file path

Create a new entity.

tdn new [entity-type] <title> [options]
ArgumentDescriptionDefault
entity-typeproject or area(creates task)
titleEntity titleRequired

Task Options:

OptionShortDescription
--status <status>-sInitial status
--project <name>-pAssign to project
--area <name>-aAssign to area
--due <date>-dDue date
--scheduled <date>Scheduled date
--defer-until <date>Defer until date
--dry-runPreview without creating

Project Options:

OptionDescription
--status <status>Initial status
--area <name>Assign to area
--start-date <date>Start date
--end-date <date>End date

Area Options:

OptionDescription
--type <type>Area type

Get expanded context with relationships.

tdn context [entity-type] [target]
ArgumentDescription
entity-typearea, project, or task
targetTitle or path of entity

Without arguments, returns vault overview.


Show today’s actionable tasks.

tdn today

Returns tasks that are: in-progress, overdue, due today, scheduled today, or newly actionable (defer-until = today).


Change entity status.

tdn set status <targets...> <status>
ArgumentDescription
targetsOne or more paths or titles
statusNew status value
OptionDescription
--dry-runPreview without modifying

Automatically manages completed-at field.


Modify entity fields.

tdn update <query> [options]
ArgumentDescription
queryTitle or path of entity
OptionDescription
--set <field=value>Set field (repeatable)
--unset <field>Remove field (repeatable)
--dry-runPreview without modifying

Move entity to archive subdirectory.

tdn archive <queries...>
ArgumentDescription
queriesOne or more paths or titles
OptionDescription
--dry-runPreview without modifying

Open entity in $EDITOR.

tdn open <query>

Human mode only (not available with --ai).


Append text to entity body.

tdn append-body <query> <text>
ArgumentDescription
queryTitle or path of entity
textText to append
OptionDescription
--dry-runPreview without modifying

Appends with timestamp: text [YYYY-MM-DD]


Vault health check.

tdn doctor

Validates configuration, file parsing, field values, and references.


Show current configuration.

tdn config

Interactive configuration setup.

tdn init

Manage shell completions.

tdn completion install # Auto-install
tdn complete <shell> # Generate script (zsh, bash, fish)

FlagsModeFormatPrompts
(none)HumanColored terminalYes
--aiAIStructured MarkdownNo
--jsonJSONJSONNo
--ai --jsonAI-JSONMarkdown in JSON envelopeNo

Entities appear as:

### Entity Title
- **path:** /absolute/path/to/file.md
- **status:** ready
- **field:** value
{
"summary": "Description of result",
"tasks": [{ "path": "...", "title": "...", "status": "..." }]
}
{
"contextType": "project",
"entity": "Project Name",
"summary": "Description",
"content": "# Full markdown content...",
"references": [{ "name": "...", "type": "...", "path": "..." }]
}

Commands accept titles or file paths.

Path detection — Treated as path if:

  • Starts with /, ./, ../, or ~
  • Contains path separators
  • Ends with .md

Fuzzy matching — Title lookups use case-insensitive substring matching.

AI mode writes — Write operations require exact file paths in AI mode.


FormatExampleDescription
Keywordstoday, tomorrowRelative to current date
Weekdaysmonday, friday, wedNext occurrence
Relative+1d, +3d, +1w, +2mDays/weeks/months from today
Specialnext weekMonday of next week
ISO 86012025-01-15Exact date

Output is always ISO 8601 format.


For --due and --scheduled options:

ValueMatches
todayExact date match
tomorrowTomorrow
this-weekWithin 7 days

StatusDescription
inboxNewly captured, not yet processed
readyProcessed and ready to work on
in-progressCurrently being worked on
blockedWaiting on external dependency
iceboxIntentionally deferred indefinitely
doneCompleted
droppedAbandoned
StatusDescription
planningStill being scoped
readyPlanned and ready to begin
in-progressActive work happening
pausedTemporarily on hold
blockedCannot proceed
doneCompleted
StatusDescription
activeCurrent (default)
archivedNo longer active

Within a filter type: OR logic

--status inbox,ready # inbox OR ready

Between filter types: AND logic

--status ready --project "Q1" # ready AND in Q1

FieldEntity Types
titleAll
dueTasks
scheduledTasks
created-atTasks
updated-atTasks
start-dateProjects
end-dateProjects

Undefined values sort last (ascending) or first (descending).


CodeDescription
NOT_FOUNDEntity does not exist
AMBIGUOUSMultiple entities match query
INVALID_STATUSStatus value not in allowed list
INVALID_DATEDate format or value invalid
PARSE_ERRORFile could not be parsed
MISSING_FIELDRequired field absent
INVALID_PATHPath is invalid or inaccessible
REFERENCE_ERRORReferenced entity not found
PERMISSION_ERRORInsufficient permissions
CONFIG_ERRORConfiguration issue
NOT_SUPPORTEDOperation not supported

CodeMeaning
0Success (including empty results)
1Runtime error (file/vault issues)
2Usage error (invalid arguments)

LocationScope
~/.taskdn.jsonUser-wide
./.taskdn.jsonLocal (current directory)

Local config takes precedence over user config.

{
"tasksDir": "~/notes/tasks",
"projectsDir": "~/notes/projects",
"areasDir": "~/notes/areas",
"ignore": ["*.bak", "README.md"]
}
FieldTypeDefault
tasksDirstring./tasks
projectsDirstring./projects
areasDirstring./areas
ignorestring[][]
VariableConfig Field
TASKDN_TASKS_DIRtasksDir
TASKDN_PROJECTS_DIRprojectsDir
TASKDN_AREAS_DIRareasDir

Environment variables override config files.

Patterns use .gitignore-style glob syntax:

PatternMatches
file.mdExact filename
*.bakAny .bak file
temp?.mdtemp1.md, tempA.md
[abc]*.mdFiles starting with a, b, or c

Patterns match filenames only (not paths).


By default, commands show “active” entities:

Active tasks: Status not done, dropped, or icebox; not deferred; not archived

Active projects: Status not done

Active areas: Status active or unset