···6162# Add a book to your reading list
63noteleaf media book add "The Name of the Wind"
00064```
6566## Status
···6162# Add a book to your reading list
63noteleaf media book add "The Name of the Wind"
64+65+# Generate docs
66+noteleaf docgen --format docusaurus --out ./website/docs/manual
67```
6869## Status
···34}
3536func (c *MovieCommand) Create() *cobra.Command {
37+ root := &cobra.Command{
38+ Use: "movie",
39+ Short: "Manage movie watch queue",
40+ Long: `Track movies you want to watch.
41+42+Search TMDB for movies and add them to your queue. Mark movies as watched when
43+completed. Maintains a history of your movie watching activity.`,
44+ }
4546 addCmd := &cobra.Command{
47 Use: "add [search query...]",
···66 root.AddCommand(&cobra.Command{
67 Use: "list [--all|--watched|--queued]",
68 Short: "List movies in queue with status filtering",
69+ Long: `Display movies in your queue with optional status filters.
70+71+Shows movie titles, release years, and current status. Filter by --all to show
72+everything, --watched for completed movies, or --queued for unwatched items.
73+Default shows queued movies only.`,
74 RunE: func(cmd *cobra.Command, args []string) error {
75 var status string
76 if len(args) > 0 {
···94 Use: "watched [id]",
95 Short: "Mark movie as watched",
96 Aliases: []string{"seen"},
97+ Long: "Mark a movie as watched with current timestamp. Moves the movie from queued to watched status.",
98 Args: cobra.ExactArgs(1),
99 RunE: func(cmd *cobra.Command, args []string) error {
100 return c.handler.MarkWatched(cmd.Context(), args[0])
···105 Use: "remove [id]",
106 Short: "Remove movie from queue",
107 Aliases: []string{"rm"},
108+ Long: "Remove a movie from your watch queue. Use this for movies you no longer want to track.",
109 Args: cobra.ExactArgs(1),
110 RunE: func(cmd *cobra.Command, args []string) error {
111 return c.handler.Remove(cmd.Context(), args[0])
···126}
127128func (c *TVCommand) Create() *cobra.Command {
129+ root := &cobra.Command{
130+ Use: "tv",
131+ Short: "Manage TV show watch queue",
132+ Long: `Track TV shows and episodes.
133+134+Search TMDB for TV shows and add them to your queue. Track which shows you're
135+currently watching, mark episodes as watched, and maintain a complete history
136+of your viewing activity.`,
137+ }
138139 addCmd := &cobra.Command{
140 Use: "add [search query...]",
···159 root.AddCommand(&cobra.Command{
160 Use: "list [--all|--queued|--watching|--watched]",
161 Short: "List TV shows in queue with status filtering",
162+ Long: `Display TV shows in your queue with optional status filters.
163+164+Shows show titles, air dates, and current status. Filter by --all, --queued,
165+--watching for shows in progress, or --watched for completed series. Default
166+shows queued shows only.`,
167 RunE: func(cmd *cobra.Command, args []string) error {
168 var status string
169 if len(args) > 0 {
···188 root.AddCommand(&cobra.Command{
189 Use: "watching [id]",
190 Short: "Mark TV show as currently watching",
191+ Long: "Mark a TV show as currently watching. Use this when you start watching a series.",
192 Args: cobra.ExactArgs(1),
193 RunE: func(cmd *cobra.Command, args []string) error {
194 return c.handler.MarkTVShowWatching(cmd.Context(), args[0])
···199 Use: "watched [id]",
200 Short: "Mark TV show/episodes as watched",
201 Aliases: []string{"seen"},
202+ Long: `Mark TV show episodes or entire series as watched.
203+204+Updates episode tracking and completion status. Can mark individual episodes
205+or complete seasons/series depending on ID format.`,
206 Args: cobra.ExactArgs(1),
207 RunE: func(cmd *cobra.Command, args []string) error {
208 return c.handler.MarkWatched(cmd.Context(), args[0])
···213 Use: "remove [id]",
214 Short: "Remove TV show from queue",
215 Aliases: []string{"rm"},
216+ Long: "Remove a TV show from your watch queue. Use this for shows you no longer want to track.",
217 Args: cobra.ExactArgs(1),
218 RunE: func(cmd *cobra.Command, args []string) error {
219 return c.handler.Remove(cmd.Context(), args[0])
···234}
235236func (c *BookCommand) Create() *cobra.Command {
237+ root := &cobra.Command{
238+ Use: "book",
239+ Short: "Manage reading list",
240+ Long: `Track books and reading progress.
241+242+Search Google Books API to add books to your reading list. Track which books
243+you're reading, update progress percentages, and maintain a history of finished
244+books.`,
245+ }
246247 addCmd := &cobra.Command{
248 Use: "add [search query...]",
···263 root.AddCommand(&cobra.Command{
264 Use: "list [--all|--reading|--finished|--queued]",
265 Short: "Show reading queue with progress",
266+ Long: `Display books in your reading list with progress indicators.
267+268+Shows book titles, authors, and reading progress percentages. Filter by --all,
269+--reading for books in progress, --finished for completed books, or --queued
270+for books not yet started. Default shows queued books only.`,
271 RunE: func(cmd *cobra.Command, args []string) error {
272 var status string
273 if len(args) > 0 {
···291 root.AddCommand(&cobra.Command{
292 Use: "reading <id>",
293 Short: "Mark book as currently reading",
294+ Long: "Mark a book as currently reading. Use this when you start a book from your queue.",
295 Args: cobra.ExactArgs(1),
296 RunE: func(cmd *cobra.Command, args []string) error {
297 return c.handler.UpdateStatus(cmd.Context(), args[0], "reading")
···302 Use: "finished <id>",
303 Short: "Mark book as completed",
304 Aliases: []string{"read"},
305+ Long: "Mark a book as finished with current timestamp. Sets reading progress to 100%.",
306 Args: cobra.ExactArgs(1),
307 RunE: func(cmd *cobra.Command, args []string) error {
308 return c.handler.UpdateStatus(cmd.Context(), args[0], "finished")
···313 Use: "remove <id>",
314 Short: "Remove from reading list",
315 Aliases: []string{"rm"},
316+ Long: "Remove a book from your reading list. Use this for books you no longer want to track.",
317 Args: cobra.ExactArgs(1),
318 RunE: func(cmd *cobra.Command, args []string) error {
319 return c.handler.UpdateStatus(cmd.Context(), args[0], "removed")
···323 root.AddCommand(&cobra.Command{
324 Use: "progress <id> <percentage>",
325 Short: "Update reading progress percentage (0-100)",
326+ Long: `Set reading progress for a book.
327+328+Specify a percentage value between 0 and 100 to indicate how far you've
329+progressed through the book. Automatically updates status to 'reading' if not
330+already set.`,
331 Args: cobra.ExactArgs(2),
332 RunE: func(cmd *cobra.Command, args []string) error {
333 progress, err := strconv.Atoi(args[1])
···341 root.AddCommand(&cobra.Command{
342 Use: "update <id> <status>",
343 Short: "Update book status (queued|reading|finished|removed)",
344+ Long: `Change a book's status directly.
345+346+Valid statuses are: queued (not started), reading (in progress), finished
347+(completed), or removed (no longer tracking).`,
348 Args: cobra.ExactArgs(2),
349 RunE: func(cmd *cobra.Command, args []string) error {
350 return c.handler.UpdateStatus(cmd.Context(), args[0], args[1])
···365}
366367func (c *NoteCommand) Create() *cobra.Command {
368+ root := &cobra.Command{
369+ Use: "note",
370+ Short: "Manage notes",
371+ Long: `Create and organize markdown notes with tags.
372+373+Write notes in markdown format, organize them with tags, browse them in an
374+interactive TUI, and edit them in your preferred editor. Notes are stored as
375+files on disk with metadata tracked in the database.`,
376+ }
377378 createCmd := &cobra.Command{
379 Use: "create [title] [content...]",
380 Short: "Create a new note",
381 Aliases: []string{"new"},
382+ Long: `Create a new markdown note.
383+384+Provide a title and optional content inline, or use --interactive to open an
385+editor. Use --file to import content from an existing markdown file. Notes
386+support tags for organization and full-text search.
387+388+Examples:
389+ noteleaf note create "Meeting notes" "Discussed project timeline"
390+ noteleaf note create -i
391+ noteleaf note create --file ~/documents/draft.md`,
392 RunE: func(cmd *cobra.Command, args []string) error {
393 interactive, _ := cmd.Flags().GetBool("interactive")
394 editor, _ := cmd.Flags().GetBool("editor")
···441 Use: "read [note-id]",
442 Short: "Display formatted note content with syntax highlighting",
443 Aliases: []string{"view"},
444+ Long: `Display note content with formatted markdown rendering.
445+446+Shows the note with syntax highlighting, proper formatting, and metadata.
447+Useful for quick viewing without opening an editor.`,
448 Args: cobra.ExactArgs(1),
449 RunE: func(cmd *cobra.Command, args []string) error {
450 if noteID, err := parseID("note", args); err != nil {
···459 root.AddCommand(&cobra.Command{
460 Use: "edit [note-id]",
461 Short: "Edit note in configured editor",
462+ Long: `Open note in your configured text editor.
463+464+Uses the editor specified in your noteleaf configuration or the EDITOR
465+environment variable. Changes are automatically saved when you close the
466+editor.`,
467 Args: cobra.ExactArgs(1),
468 RunE: func(cmd *cobra.Command, args []string) error {
469 if noteID, err := parseID("note", args); err != nil {
···479 Use: "remove [note-id]",
480 Short: "Permanently removes the note file and metadata",
481 Aliases: []string{"rm", "delete", "del"},
482+ Long: `Delete a note permanently.
483+484+Removes both the markdown file and database metadata. This operation cannot be
485+undone. You will be prompted for confirmation before deletion.`,
486 Args: cobra.ExactArgs(1),
487 RunE: func(cmd *cobra.Command, args []string) error {
488 if noteID, err := parseID("note", args); err != nil {
···508}
509510func (c *ArticleCommand) Create() *cobra.Command {
511+ root := &cobra.Command{
512+ Use: "article",
513+ Short: "Manage saved articles",
514+ Long: `Save and archive web articles locally.
515+516+Parse articles from supported websites, extract clean content, and save as
517+both markdown and HTML. Maintains a searchable archive of articles with
518+metadata including author, title, and publication date.`,
519+ }
520521 addCmd := &cobra.Command{
522 Use: "add <url>",
···562 Use: "view <id>",
563 Short: "View article details and content preview",
564 Aliases: []string{"show"},
565+ Long: `Display article metadata and summary.
566+567+Shows article title, author, publication date, URL, and a brief content
568+preview. Use 'read' command to view the full article content.`,
569 Args: cobra.ExactArgs(1),
570 RunE: func(cmd *cobra.Command, args []string) error {
571 if articleID, err := parseID("article", args); err != nil {
···600 Use: "remove <id>",
601 Short: "Remove article and associated files",
602 Aliases: []string{"rm", "delete"},
603+ Long: `Delete an article and its files permanently.
604+605+Removes the article metadata from the database and deletes associated markdown
606+and HTML files. This operation cannot be undone.`,
607 Args: cobra.ExactArgs(1),
608 RunE: func(cmd *cobra.Command, args []string) error {
609 if articleID, err := parseID("article", args); err != nil {
···13 "github.com/stormlightlabs/noteleaf/internal/store"
14 "github.com/stormlightlabs/noteleaf/internal/ui"
15 "github.com/stormlightlabs/noteleaf/internal/utils"
16+ "github.com/stormlightlabs/noteleaf/tools"
17)
1819var (
···59 return &cobra.Command{
60 Use: "status",
61 Short: "Show application status and configuration",
62+ Long: `Display comprehensive application status information.
63+64+Shows database location, configuration file path, data directories, and current
65+settings. Use this command to verify your noteleaf installation and diagnose
66+configuration issues.`,
67 RunE: func(cmd *cobra.Command, args []string) error {
68 return handlers.Status(cmd.Context(), args, cmd.OutOrStdout())
69 },
···74 return &cobra.Command{
75 Use: "reset",
76 Short: "Reset the application (removes all data)",
77+ Long: `Remove all application data and return to initial state.
78+79+This command deletes the database, all media files, notes, and articles. The
80+configuration file is preserved. Use with caution as this operation cannot be
81+undone. You will be prompted for confirmation before deletion proceeds.`,
82 RunE: func(cmd *cobra.Command, args []string) error {
83 return handlers.Reset(cmd.Context(), args)
84 },
···88func rootCmd() *cobra.Command {
89 root := &cobra.Command{
90 Use: "noteleaf",
091 Short: "A TaskWarrior-inspired CLI with notes, media queues and reading lists",
92+ Long: `noteleaf - personal information manager for the command line
93+94+A comprehensive CLI tool for managing tasks, notes, articles, and media queues.
95+Inspired by TaskWarrior, noteleaf combines todo management with reading lists,
96+watch queues, and a personal knowledge base.
97+98+Core features include hierarchical tasks with dependencies, recurring tasks,
99+time tracking, markdown notes with tags, article archiving, and media queue
100+management for books, movies, and TV shows.`,
101 RunE: func(c *cobra.Command, args []string) error {
102 if len(args) == 0 {
103 return c.Help()
···126 root := &cobra.Command{
127 Use: "setup",
128 Short: "Initialize and manage application setup",
129+ Long: `Initialize noteleaf for first use.
130+131+Creates the database, configuration file, and required data directories. Run
132+this command after installing noteleaf or when setting up a new environment.
133+Safe to run multiple times as it will skip existing resources.`,
134 RunE: func(c *cobra.Command, args []string) error {
135 return handlers.Setup(c.Context(), args)
136 },
···218 root.AddCommand(cmd)
219 }
220221+ mediaCmd := &cobra.Command{
222+ Use: "media",
223+ Short: "Manage media queues (books, movies, TV shows)",
224+ Long: `Track and manage reading lists and watch queues.
225+226+Organize books, movies, and TV shows you want to consume. Search external
227+databases to add items, track reading/watching progress, and maintain a
228+history of completed media.`,
229+ }
230 mediaCmd.GroupID = "core"
231 mediaCmd.AddCommand(NewMovieCommand(movieHandler).Create())
232 mediaCmd.AddCommand(NewTVCommand(tvHandler).Create())
···239 cmd.GroupID = "management"
240 root.AddCommand(cmd)
241 }
242+243+ root.AddCommand(tools.NewDocGenCommand(root))
244245 opts := []fang.Option{
246 fang.WithVersion("0.1.0"),
···18}
1920func (c *TaskCommand) Create() *cobra.Command {
21+ root := &cobra.Command{
22+ Use: "todo",
23+ Aliases: []string{"task"},
24+ Short: "task management",
25+ Long: `Manage tasks with TaskWarrior-inspired features.
26+27+Track todos with priorities, projects, contexts, and tags. Supports hierarchical
28+tasks with parent/child relationships, task dependencies, recurring tasks, and
29+time tracking. Tasks can be filtered by status, priority, project, or context.`,
30+ }
3132 for _, init := range []func(*handlers.TaskHandler) *cobra.Command{
33 addTaskCmd, listTaskCmd, viewTaskCmd, updateTaskCmd, editTaskCmd,
···47 Use: "add [description]",
48 Short: "Add a new task",
49 Aliases: []string{"create", "new"},
50+ Long: `Create a new task with description and optional attributes.
51+52+Tasks can be created with priority levels (low, medium, high, urgent), assigned
53+to projects and contexts, tagged for organization, and configured with due dates
54+and recurrence rules. Dependencies can be established to ensure tasks are
55+completed in order.
56+57+Examples:
58+ noteleaf todo add "Write documentation" --priority high --project docs
59+ noteleaf todo add "Weekly review" --recur "FREQ=WEEKLY" --due 2024-01-15`,
60 Args: cobra.MinimumNArgs(1),
61 RunE: func(c *cobra.Command, args []string) error {
62 description := strings.Join(args, " ")
···120 viewCmd := &cobra.Command{
121 Use: "view [task-id]",
122 Short: "View task by ID",
123+ Long: `Display detailed information for a specific task.
124+125+Shows all task attributes including description, status, priority, project,
126+context, tags, due date, creation time, and modification history. Use --json
127+for machine-readable output or --no-metadata to show only the description.`,
128 Args: cobra.ExactArgs(1),
129 RunE: func(cmd *cobra.Command, args []string) error {
130 format, _ := cmd.Flags().GetString("format")
···144 updateCmd := &cobra.Command{
145 Use: "update [task-id]",
146 Short: "Update task properties",
147+ Long: `Modify attributes of an existing task.
148+149+Update any task property including description, status, priority, project,
150+context, due date, recurrence rule, or parent task. Add or remove tags and
151+dependencies. Multiple attributes can be updated in a single command.
152+153+Examples:
154+ noteleaf todo update 123 --priority urgent --due tomorrow
155+ noteleaf todo update 456 --add-tag urgent --project website`,
156 Args: cobra.ExactArgs(1),
157 RunE: func(cmd *cobra.Command, args []string) error {
158 taskID := args[0]
···193 Use: "projects",
194 Short: "List projects",
195 Aliases: []string{"proj"},
196+ Long: `Display all projects with task counts.
197+198+Shows each project used in your tasks along with the number of tasks in each
199+project. Use --todo-txt to format output with +project syntax for compatibility
200+with todo.txt tools.`,
201 RunE: func(c *cobra.Command, args []string) error {
202 static, _ := c.Flags().GetBool("static")
203 todoTxt, _ := c.Flags().GetBool("todo-txt")
···217 Use: "tags",
218 Short: "List tags",
219 Aliases: []string{"t"},
220+ Long: `Display all tags used across tasks.
221+222+Shows each tag with the number of tasks using it. Tags provide flexible
223+categorization orthogonal to projects and contexts.`,
224 RunE: func(c *cobra.Command, args []string) error {
225 static, _ := c.Flags().GetBool("static")
226 defer h.Close()
···235 cmd := &cobra.Command{
236 Use: "start [task-id]",
237 Short: "Start time tracking for a task",
238+ Long: `Begin tracking time spent on a task.
239+240+Records the start time for a work session. Only one task can be actively
241+tracked at a time. Use --note to add a description of what you're working on.`,
242 Args: cobra.ExactArgs(1),
243 RunE: func(c *cobra.Command, args []string) error {
244 taskID := args[0]
···256 return &cobra.Command{
257 Use: "stop [task-id]",
258 Short: "Stop time tracking for a task",
259+ Long: `End time tracking for the active task.
260+261+Records the end time and calculates duration for the current work session.
262+Duration is added to the task's total time tracked.`,
263 Args: cobra.ExactArgs(1),
264 RunE: func(c *cobra.Command, args []string) error {
265 taskID := args[0]
···296 Use: "edit [task-id]",
297 Short: "Edit task interactively with status picker and priority toggle",
298 Aliases: []string{"e"},
299+ Long: `Open interactive editor for task modification.
300+301+Provides a user-friendly interface with status picker and priority toggle.
302+Easier than using multiple command-line flags for complex updates.`,
303 Args: cobra.ExactArgs(1),
304 RunE: func(c *cobra.Command, args []string) error {
305 taskID := args[0]
···313 return &cobra.Command{
314 Use: "delete [task-id]",
315 Short: "Delete a task",
316+ Long: `Permanently remove a task from the database.
317+318+This operation cannot be undone. Consider updating the task status to
319+'deleted' instead if you want to preserve the record for historical purposes.`,
320 Args: cobra.ExactArgs(1),
321 RunE: func(c *cobra.Command, args []string) error {
322 defer h.Close()
···330 Use: "contexts",
331 Short: "List contexts (locations)",
332 Aliases: []string{"con", "loc", "ctx", "locations"},
333+ Long: `Display all contexts with task counts.
334+335+Contexts represent locations or environments where tasks can be completed (e.g.,
336+@home, @office, @errands). Use --todo-txt to format output with @context syntax
337+for compatibility with todo.txt tools.`,
338 RunE: func(c *cobra.Command, args []string) error {
339 static, _ := c.Flags().GetBool("static")
340 todoTxt, _ := c.Flags().GetBool("todo-txt")
···353 Use: "done [task-id]",
354 Short: "Mark task as completed",
355 Aliases: []string{"complete"},
356+ Long: `Mark a task as completed with current timestamp.
357+358+Sets the task status to 'completed' and records the completion time. For
359+recurring tasks, generates the next instance based on the recurrence rule.`,
360 Args: cobra.ExactArgs(1),
361 RunE: func(c *cobra.Command, args []string) error {
362 defer h.Close()
···370 Use: "recur",
371 Short: "Manage task recurrence",
372 Aliases: []string{"repeat"},
373+ Long: `Configure recurring task patterns.
374+375+Create tasks that repeat on a schedule using iCalendar recurrence rules (RRULE).
376+Supports daily, weekly, monthly, and yearly patterns with optional end dates.`,
377 }
378379 setCmd := &cobra.Command{
380 Use: "set [task-id]",
381 Short: "Set recurrence rule for a task",
382+ Long: `Apply a recurrence rule to create repeating task instances.
383+384+Uses iCalendar RRULE syntax (e.g., "FREQ=DAILY" for daily tasks, "FREQ=WEEKLY;BYDAY=MO,WE,FR"
385+for specific weekdays). When a recurring task is completed, the next instance is
386+automatically generated.
387+388+Examples:
389+ noteleaf todo recur set 123 --rule "FREQ=DAILY"
390+ noteleaf todo recur set 456 --rule "FREQ=WEEKLY;BYDAY=MO" --until 2024-12-31`,
391 Args: cobra.ExactArgs(1),
392 RunE: func(c *cobra.Command, args []string) error {
393 rule, _ := c.Flags().GetString("rule")
···402 clearCmd := &cobra.Command{
403 Use: "clear [task-id]",
404 Short: "Clear recurrence rule from a task",
405+ Long: `Remove recurrence from a task.
406+407+Converts a recurring task to a one-time task. Existing future instances are not
408+affected.`,
409 Args: cobra.ExactArgs(1),
410 RunE: func(c *cobra.Command, args []string) error {
411 defer h.Close()
···416 showCmd := &cobra.Command{
417 Use: "show [task-id]",
418 Short: "Show recurrence details for a task",
419+ Long: `Display recurrence rule and schedule information.
420+421+Shows the RRULE pattern, next occurrence date, and recurrence end date if
422+configured.`,
423 Args: cobra.ExactArgs(1),
424 RunE: func(c *cobra.Command, args []string) error {
425 defer h.Close()
···436 Use: "depend",
437 Short: "Manage task dependencies",
438 Aliases: []string{"dep", "deps"},
439+ Long: `Create and manage task dependencies.
440+441+Establish relationships where one task must be completed before another can
442+begin. Useful for multi-step workflows and project management.`,
443 }
444445 addCmd := &cobra.Command{
446 Use: "add [task-id] [depends-on-uuid]",
447 Short: "Add a dependency to a task",
448+ Long: `Make a task dependent on another task's completion.
449+450+The first task cannot be started until the second task is completed. Use task
451+UUIDs to specify dependencies.`,
452 Args: cobra.ExactArgs(2),
453 RunE: func(c *cobra.Command, args []string) error {
454 defer h.Close()
···460 Use: "remove [task-id] [depends-on-uuid]",
461 Short: "Remove a dependency from a task",
462 Aliases: []string{"rm"},
463+ Long: "Delete a dependency relationship between two tasks.",
464 Args: cobra.ExactArgs(2),
465 RunE: func(c *cobra.Command, args []string) error {
466 defer h.Close()
···472 Use: "list [task-id]",
473 Short: "List dependencies for a task",
474 Aliases: []string{"ls"},
475+ Long: "Show all tasks that must be completed before this task can be started.",
476 Args: cobra.ExactArgs(1),
477 RunE: func(c *cobra.Command, args []string) error {
478 defer h.Close()
···483 blockedByCmd := &cobra.Command{
484 Use: "blocked-by [task-id]",
485 Short: "Show tasks blocked by this task",
486+ Long: "Display all tasks that depend on this task's completion.",
487 Args: cobra.ExactArgs(1),
488 RunE: func(c *cobra.Command, args []string) error {
489 defer h.Close()
···1+---
2+id: articles
3+title: Articles
4+sidebar_position: 3
5+description: Save and archive web articles
6+---
7+8+## article
9+10+Save and archive web articles locally.
11+12+Parse articles from supported websites, extract clean content, and save as
13+both markdown and HTML. Maintains a searchable archive of articles with
14+metadata including author, title, and publication date.
15+16+```bash
17+noteleaf article
18+```
19+20+### Subcommands
21+22+#### add
23+24+Parse and save article content from a supported website.
25+26+The article will be parsed using domain-specific XPath rules and saved
27+as both Markdown and HTML files. Article metadata is stored in the database.
28+29+**Usage:**
30+31+```bash
32+noteleaf article add <url>
33+```
34+35+#### list
36+37+List saved articles with optional filtering.
38+39+Use query to filter by title, or use flags for more specific filtering.
40+41+**Usage:**
42+43+```bash
44+noteleaf article list [query] [flags]
45+```
46+47+**Options:**
48+49+```
50+ --author string Filter by author
51+ -l, --limit int Limit number of results (0 = no limit)
52+```
53+54+**Aliases:** ls
55+56+#### view
57+58+Display article metadata and summary.
59+60+Shows article title, author, publication date, URL, and a brief content
61+preview. Use 'read' command to view the full article content.
62+63+**Usage:**
64+65+```bash
66+noteleaf article view <id>
67+```
68+69+**Aliases:** show
70+71+#### read
72+73+Read the full markdown content of an article with beautiful formatting.
74+75+This displays the complete article content using syntax highlighting and proper formatting.
76+77+**Usage:**
78+79+```bash
80+noteleaf article read <id>
81+```
82+83+#### remove
84+85+Delete an article and its files permanently.
86+87+Removes the article metadata from the database and deletes associated markdown
88+and HTML files. This operation cannot be undone.
89+90+**Usage:**
91+92+```bash
93+noteleaf article remove <id>
94+```
95+96+**Aliases:** rm, delete
97+
···1+---
2+id: books
3+title: Books
4+sidebar_position: 4
5+description: Manage reading list and track progress
6+---
7+8+## book
9+10+Track books and reading progress.
11+12+Search Google Books API to add books to your reading list. Track which books
13+you're reading, update progress percentages, and maintain a history of finished
14+books.
15+16+```bash
17+noteleaf media book
18+```
19+20+### Subcommands
21+22+#### add
23+24+Search for books and add them to your reading list.
25+26+By default, shows search results in a simple list format where you can select by number.
27+Use the -i flag for an interactive interface with navigation keys.
28+29+**Usage:**
30+31+```bash
32+noteleaf media book add [search query...] [flags]
33+```
34+35+**Options:**
36+37+```
38+ -i, --interactive Use interactive interface for book selection
39+```
40+41+#### list
42+43+Display books in your reading list with progress indicators.
44+45+Shows book titles, authors, and reading progress percentages. Filter by --all,
46+--reading for books in progress, --finished for completed books, or --queued
47+for books not yet started. Default shows queued books only.
48+49+**Usage:**
50+51+```bash
52+noteleaf media book list [--all|--reading|--finished|--queued]
53+```
54+55+#### reading
56+57+Mark a book as currently reading. Use this when you start a book from your queue.
58+59+**Usage:**
60+61+```bash
62+noteleaf media book reading <id>
63+```
64+65+#### finished
66+67+Mark a book as finished with current timestamp. Sets reading progress to 100%.
68+69+**Usage:**
70+71+```bash
72+noteleaf media book finished <id>
73+```
74+75+**Aliases:** read
76+77+#### remove
78+79+Remove a book from your reading list. Use this for books you no longer want to track.
80+81+**Usage:**
82+83+```bash
84+noteleaf media book remove <id>
85+```
86+87+**Aliases:** rm
88+89+#### progress
90+91+Set reading progress for a book.
92+93+Specify a percentage value between 0 and 100 to indicate how far you've
94+progressed through the book. Automatically updates status to 'reading' if not
95+already set.
96+97+**Usage:**
98+99+```bash
100+noteleaf media book progress <id> <percentage>
101+```
102+103+#### update
104+105+Change a book's status directly.
106+107+Valid statuses are: queued (not started), reading (in progress), finished
108+(completed), or removed (no longer tracking).
109+110+**Usage:**
111+112+```bash
113+noteleaf media book update <id> <status>
114+```
115+
···1+---
2+id: configuration
3+title: Configuration
4+sidebar_position: 7
5+description: Manage application configuration
6+---
7+8+## config
9+10+Manage noteleaf configuration
11+12+```bash
13+noteleaf config
14+```
15+16+### Subcommands
17+18+#### get
19+20+Display configuration values.
21+22+If no key is provided, displays all configuration values.
23+Otherwise, displays the value for the specified key.
24+25+**Usage:**
26+27+```bash
28+noteleaf config get [key]
29+```
30+31+#### set
32+33+Update a configuration value.
34+35+Available keys:
36+ database_path - Custom database file path
37+ data_dir - Custom data directory
38+ date_format - Date format string (default: 2006-01-02)
39+ color_scheme - Color scheme (default: default)
40+ default_view - Default view mode (default: list)
41+ default_priority - Default task priority
42+ editor - Preferred text editor
43+ articles_dir - Articles storage directory
44+ notes_dir - Notes storage directory
45+ auto_archive - Auto-archive completed items (true/false)
46+ sync_enabled - Enable synchronization (true/false)
47+ sync_endpoint - Synchronization endpoint URL
48+ sync_token - Synchronization token
49+ export_format - Default export format (default: json)
50+ movie_api_key - API key for movie database
51+ book_api_key - API key for book database
52+53+**Usage:**
54+55+```bash
56+noteleaf config set <key> <value>
57+```
58+59+#### path
60+61+Display the path to the configuration file being used.
62+63+**Usage:**
64+65+```bash
66+noteleaf config path
67+```
68+69+#### reset
70+71+Reset all configuration values to their defaults.
72+73+**Usage:**
74+75+```bash
76+noteleaf config reset
77+```
78+
+37
website/docs/manual/index.md
···0000000000000000000000000000000000000
···1+---
2+id: index
3+title: CLI Reference
4+sidebar_label: Overview
5+sidebar_position: 0
6+description: Complete command-line reference for noteleaf
7+---
8+9+# noteleaf CLI Reference
10+11+noteleaf - personal information manager for the command line
12+13+A comprehensive CLI tool for managing tasks, notes, articles, and media queues.
14+Inspired by TaskWarrior, noteleaf combines todo management with reading lists,
15+watch queues, and a personal knowledge base.
16+17+Core features include hierarchical tasks with dependencies, recurring tasks,
18+time tracking, markdown notes with tags, article archiving, and media queue
19+management for books, movies, and TV shows.
20+21+## Usage
22+23+```bash
24+noteleaf
25+```
26+27+## Command Groups
28+29+- **[Task Management](tasks)** - Manage todos, projects, and time tracking
30+- **[Notes](notes)** - Create and organize markdown notes
31+- **[Articles](articles)** - Save and archive web articles
32+- **[Books](books)** - Track reading list and progress
33+- **[Movies](movies)** - Manage movie watch queue
34+- **[TV Shows](tv-shows)** - Track TV show watching
35+- **[Configuration](configuration)** - Manage settings
36+- **[Management](management)** - Application management
37+
···1+---
2+id: management
3+title: Management
4+sidebar_position: 8
5+description: Application management commands
6+---
7+8+## status
9+10+Display comprehensive application status information.
11+12+Shows database location, configuration file path, data directories, and current
13+settings. Use this command to verify your noteleaf installation and diagnose
14+configuration issues.
15+16+```bash
17+noteleaf status
18+```
19+20+## setup
21+22+Initialize noteleaf for first use.
23+24+Creates the database, configuration file, and required data directories. Run
25+this command after installing noteleaf or when setting up a new environment.
26+Safe to run multiple times as it will skip existing resources.
27+28+```bash
29+noteleaf setup
30+```
31+32+### Subcommands
33+34+#### seed
35+36+Add sample tasks, books, and notes to the database for testing and demonstration purposes
37+38+**Usage:**
39+40+```bash
41+noteleaf setup seed [flags]
42+```
43+44+**Options:**
45+46+```
47+ -f, --force Clear existing data and re-seed
48+```
49+50+## reset
51+52+Remove all application data and return to initial state.
53+54+This command deletes the database, all media files, notes, and articles. The
55+configuration file is preserved. Use with caution as this operation cannot be
56+undone. You will be prompted for confirmation before deletion proceeds.
57+58+```bash
59+noteleaf reset
60+```
61+
···1+---
2+id: movies
3+title: Movies
4+sidebar_position: 5
5+description: Track movies in watch queue
6+---
7+8+## movie
9+10+Track movies you want to watch.
11+12+Search TMDB for movies and add them to your queue. Mark movies as watched when
13+completed. Maintains a history of your movie watching activity.
14+15+```bash
16+noteleaf media movie
17+```
18+19+### Subcommands
20+21+#### add
22+23+Search for movies and add them to your watch queue.
24+25+By default, shows search results in a simple list format where you can select by number.
26+Use the -i flag for an interactive interface with navigation keys.
27+28+**Usage:**
29+30+```bash
31+noteleaf media movie add [search query...] [flags]
32+```
33+34+**Options:**
35+36+```
37+ -i, --interactive Use interactive interface for movie selection
38+```
39+40+#### list
41+42+Display movies in your queue with optional status filters.
43+44+Shows movie titles, release years, and current status. Filter by --all to show
45+everything, --watched for completed movies, or --queued for unwatched items.
46+Default shows queued movies only.
47+48+**Usage:**
49+50+```bash
51+noteleaf media movie list [--all|--watched|--queued]
52+```
53+54+#### watched
55+56+Mark a movie as watched with current timestamp. Moves the movie from queued to watched status.
57+58+**Usage:**
59+60+```bash
61+noteleaf media movie watched [id]
62+```
63+64+**Aliases:** seen
65+66+#### remove
67+68+Remove a movie from your watch queue. Use this for movies you no longer want to track.
69+70+**Usage:**
71+72+```bash
73+noteleaf media movie remove [id]
74+```
75+76+**Aliases:** rm
77+
···1+---
2+id: notes
3+title: Notes
4+sidebar_position: 2
5+description: Create and organize markdown notes
6+---
7+8+## note
9+10+Create and organize markdown notes with tags.
11+12+Write notes in markdown format, organize them with tags, browse them in an
13+interactive TUI, and edit them in your preferred editor. Notes are stored as
14+files on disk with metadata tracked in the database.
15+16+```bash
17+noteleaf note
18+```
19+20+### Subcommands
21+22+#### create
23+24+Create a new markdown note.
25+26+Provide a title and optional content inline, or use --interactive to open an
27+editor. Use --file to import content from an existing markdown file. Notes
28+support tags for organization and full-text search.
29+30+Examples:
31+ noteleaf note create "Meeting notes" "Discussed project timeline"
32+ noteleaf note create -i
33+ noteleaf note create --file ~/documents/draft.md
34+35+**Usage:**
36+37+```bash
38+noteleaf note create [title] [content...] [flags]
39+```
40+41+**Options:**
42+43+```
44+ -e, --editor Prompt to open note in editor after creation
45+ -f, --file string Create note from markdown file
46+ -i, --interactive Open interactive editor
47+```
48+49+**Aliases:** new
50+51+#### list
52+53+Opens interactive TUI browser for navigating and viewing notes
54+55+**Usage:**
56+57+```bash
58+noteleaf note list [--archived] [--static] [--tags=tag1,tag2] [flags]
59+```
60+61+**Options:**
62+63+```
64+ -a, --archived Show archived notes
65+ -s, --static Show static list instead of interactive TUI
66+ --tags string Filter by tags (comma-separated)
67+```
68+69+**Aliases:** ls
70+71+#### read
72+73+Display note content with formatted markdown rendering.
74+75+Shows the note with syntax highlighting, proper formatting, and metadata.
76+Useful for quick viewing without opening an editor.
77+78+**Usage:**
79+80+```bash
81+noteleaf note read [note-id]
82+```
83+84+**Aliases:** view
85+86+#### edit
87+88+Open note in your configured text editor.
89+90+Uses the editor specified in your noteleaf configuration or the EDITOR
91+environment variable. Changes are automatically saved when you close the
92+editor.
93+94+**Usage:**
95+96+```bash
97+noteleaf note edit [note-id]
98+```
99+100+#### remove
101+102+Delete a note permanently.
103+104+Removes both the markdown file and database metadata. This operation cannot be
105+undone. You will be prompted for confirmation before deletion.
106+107+**Usage:**
108+109+```bash
110+noteleaf note remove [note-id]
111+```
112+113+**Aliases:** rm, delete, del
114+
···1+---
2+id: task-management
3+title: Task Management
4+sidebar_position: 1
5+description: Manage tasks with TaskWarrior-inspired features
6+---
7+8+## todo
9+10+Manage tasks with TaskWarrior-inspired features.
11+12+Track todos with priorities, projects, contexts, and tags. Supports hierarchical
13+tasks with parent/child relationships, task dependencies, recurring tasks, and
14+time tracking. Tasks can be filtered by status, priority, project, or context.
15+16+```bash
17+noteleaf todo
18+```
19+20+### Subcommands
21+22+#### add
23+24+Create a new task with description and optional attributes.
25+26+Tasks can be created with priority levels (low, medium, high, urgent), assigned
27+to projects and contexts, tagged for organization, and configured with due dates
28+and recurrence rules. Dependencies can be established to ensure tasks are
29+completed in order.
30+31+Examples:
32+ noteleaf todo add "Write documentation" --priority high --project docs
33+ noteleaf todo add "Weekly review" --recur "FREQ=WEEKLY" --due 2024-01-15
34+35+**Usage:**
36+37+```bash
38+noteleaf todo add [description] [flags]
39+```
40+41+**Options:**
42+43+```
44+ -c, --context string Set task context
45+ --depends-on string Set task dependencies (comma-separated UUIDs)
46+ -d, --due string Set due date (YYYY-MM-DD)
47+ --parent string Set parent task UUID
48+ -p, --priority string Set task priority
49+ --project string Set task project
50+ --recur string Set recurrence rule (e.g., FREQ=DAILY)
51+ -t, --tags strings Add tags to task
52+ --until string Set recurrence end date (YYYY-MM-DD)
53+```
54+55+**Aliases:** create, new
56+57+#### list
58+59+List tasks with optional filtering and display modes.
60+61+By default, shows tasks in an interactive TaskWarrior-like interface.
62+Use --static to show a simple text list instead.
63+Use --all to show all tasks, otherwise only pending tasks are shown.
64+65+**Usage:**
66+67+```bash
68+noteleaf todo list [flags]
69+```
70+71+**Options:**
72+73+```
74+ -a, --all Show all tasks (default: pending only)
75+ --context string Filter by context
76+ -i, --interactive Force interactive mode (default)
77+ --priority string Filter by priority
78+ --project string Filter by project
79+ --static Use static text output instead of interactive
80+ --status string Filter by status
81+```
82+83+**Aliases:** ls
84+85+#### view
86+87+Display detailed information for a specific task.
88+89+Shows all task attributes including description, status, priority, project,
90+context, tags, due date, creation time, and modification history. Use --json
91+for machine-readable output or --no-metadata to show only the description.
92+93+**Usage:**
94+95+```bash
96+noteleaf todo view [task-id] [flags]
97+```
98+99+**Options:**
100+101+```
102+ --format string Output format (detailed, brief) (default "detailed")
103+ --json Output as JSON
104+ --no-metadata Hide creation/modification timestamps
105+```
106+107+#### update
108+109+Modify attributes of an existing task.
110+111+Update any task property including description, status, priority, project,
112+context, due date, recurrence rule, or parent task. Add or remove tags and
113+dependencies. Multiple attributes can be updated in a single command.
114+115+Examples:
116+ noteleaf todo update 123 --priority urgent --due tomorrow
117+ noteleaf todo update 456 --add-tag urgent --project website
118+119+**Usage:**
120+121+```bash
122+noteleaf todo update [task-id] [flags]
123+```
124+125+**Options:**
126+127+```
128+ --add-depends string Add task dependencies (comma-separated UUIDs)
129+ --add-tag strings Add tags to task
130+ -c, --context string Set task context
131+ --description string Update task description
132+ -d, --due string Set due date (YYYY-MM-DD)
133+ --parent string Set parent task UUID
134+ -p, --priority string Set task priority
135+ --project string Set task project
136+ --recur string Set recurrence rule (e.g., FREQ=DAILY)
137+ --remove-depends string Remove task dependencies (comma-separated UUIDs)
138+ --remove-tag strings Remove tags from task
139+ --status string Update task status
140+ -t, --tags strings Add tags to task
141+ --until string Set recurrence end date (YYYY-MM-DD)
142+```
143+144+#### edit
145+146+Open interactive editor for task modification.
147+148+Provides a user-friendly interface with status picker and priority toggle.
149+Easier than using multiple command-line flags for complex updates.
150+151+**Usage:**
152+153+```bash
154+noteleaf todo edit [task-id]
155+```
156+157+**Aliases:** e
158+159+#### delete
160+161+Permanently remove a task from the database.
162+163+This operation cannot be undone. Consider updating the task status to
164+'deleted' instead if you want to preserve the record for historical purposes.
165+166+**Usage:**
167+168+```bash
169+noteleaf todo delete [task-id]
170+```
171+172+#### projects
173+174+Display all projects with task counts.
175+176+Shows each project used in your tasks along with the number of tasks in each
177+project. Use --todo-txt to format output with +project syntax for compatibility
178+with todo.txt tools.
179+180+**Usage:**
181+182+```bash
183+noteleaf todo projects [flags]
184+```
185+186+**Options:**
187+188+```
189+ --static Use static text output instead of interactive
190+ --todo-txt Format output with +project prefix for todo.txt compatibility
191+```
192+193+**Aliases:** proj
194+195+#### tags
196+197+Display all tags used across tasks.
198+199+Shows each tag with the number of tasks using it. Tags provide flexible
200+categorization orthogonal to projects and contexts.
201+202+**Usage:**
203+204+```bash
205+noteleaf todo tags [flags]
206+```
207+208+**Options:**
209+210+```
211+ --static Use static text output instead of interactive
212+```
213+214+**Aliases:** t
215+216+#### contexts
217+218+Display all contexts with task counts.
219+220+Contexts represent locations or environments where tasks can be completed (e.g.,
221+@home, @office, @errands). Use --todo-txt to format output with @context syntax
222+for compatibility with todo.txt tools.
223+224+**Usage:**
225+226+```bash
227+noteleaf todo contexts [flags]
228+```
229+230+**Options:**
231+232+```
233+ --static Use static text output instead of interactive
234+ --todo-txt Format output with @context prefix for todo.txt compatibility
235+```
236+237+**Aliases:** con, loc, ctx, locations
238+239+#### done
240+241+Mark a task as completed with current timestamp.
242+243+Sets the task status to 'completed' and records the completion time. For
244+recurring tasks, generates the next instance based on the recurrence rule.
245+246+**Usage:**
247+248+```bash
249+noteleaf todo done [task-id]
250+```
251+252+**Aliases:** complete
253+254+#### start
255+256+Begin tracking time spent on a task.
257+258+Records the start time for a work session. Only one task can be actively
259+tracked at a time. Use --note to add a description of what you're working on.
260+261+**Usage:**
262+263+```bash
264+noteleaf todo start [task-id] [flags]
265+```
266+267+**Options:**
268+269+```
270+ -n, --note string Add a note to the time entry
271+```
272+273+#### stop
274+275+End time tracking for the active task.
276+277+Records the end time and calculates duration for the current work session.
278+Duration is added to the task's total time tracked.
279+280+**Usage:**
281+282+```bash
283+noteleaf todo stop [task-id]
284+```
285+286+#### timesheet
287+288+Show time tracking summary for tasks.
289+290+By default shows time entries for the last 7 days.
291+Use --task to show timesheet for a specific task.
292+Use --days to change the date range.
293+294+**Usage:**
295+296+```bash
297+noteleaf todo timesheet [flags]
298+```
299+300+**Options:**
301+302+```
303+ -d, --days int Number of days to show in timesheet (default 7)
304+ -t, --task string Show timesheet for specific task ID
305+```
306+307+#### recur
308+309+Configure recurring task patterns.
310+311+Create tasks that repeat on a schedule using iCalendar recurrence rules (RRULE).
312+Supports daily, weekly, monthly, and yearly patterns with optional end dates.
313+314+**Usage:**
315+316+```bash
317+noteleaf todo recur
318+```
319+320+**Aliases:** repeat
321+322+##### set
323+324+Apply a recurrence rule to create repeating task instances.
325+326+Uses iCalendar RRULE syntax (e.g., "FREQ=DAILY" for daily tasks, "FREQ=WEEKLY;BYDAY=MO,WE,FR"
327+for specific weekdays). When a recurring task is completed, the next instance is
328+automatically generated.
329+330+Examples:
331+ noteleaf todo recur set 123 --rule "FREQ=DAILY"
332+ noteleaf todo recur set 456 --rule "FREQ=WEEKLY;BYDAY=MO" --until 2024-12-31
333+334+**Usage:**
335+336+```bash
337+noteleaf todo recur set [task-id] [flags]
338+```
339+340+**Options:**
341+342+```
343+ --rule string Recurrence rule (e.g., FREQ=DAILY)
344+ --until string Recurrence end date (YYYY-MM-DD)
345+```
346+347+##### clear
348+349+Remove recurrence from a task.
350+351+Converts a recurring task to a one-time task. Existing future instances are not
352+affected.
353+354+**Usage:**
355+356+```bash
357+noteleaf todo recur clear [task-id]
358+```
359+360+##### show
361+362+Display recurrence rule and schedule information.
363+364+Shows the RRULE pattern, next occurrence date, and recurrence end date if
365+configured.
366+367+**Usage:**
368+369+```bash
370+noteleaf todo recur show [task-id]
371+```
372+373+#### depend
374+375+Create and manage task dependencies.
376+377+Establish relationships where one task must be completed before another can
378+begin. Useful for multi-step workflows and project management.
379+380+**Usage:**
381+382+```bash
383+noteleaf todo depend
384+```
385+386+**Aliases:** dep, deps
387+388+##### add
389+390+Make a task dependent on another task's completion.
391+392+The first task cannot be started until the second task is completed. Use task
393+UUIDs to specify dependencies.
394+395+**Usage:**
396+397+```bash
398+noteleaf todo depend add [task-id] [depends-on-uuid]
399+```
400+401+##### remove
402+403+Delete a dependency relationship between two tasks.
404+405+**Usage:**
406+407+```bash
408+noteleaf todo depend remove [task-id] [depends-on-uuid]
409+```
410+411+**Aliases:** rm
412+413+##### list
414+415+Show all tasks that must be completed before this task can be started.
416+417+**Usage:**
418+419+```bash
420+noteleaf todo depend list [task-id]
421+```
422+423+**Aliases:** ls
424+425+##### blocked-by
426+427+Display all tasks that depend on this task's completion.
428+429+**Usage:**
430+431+```bash
432+noteleaf todo depend blocked-by [task-id]
433+```
434+435+## todo
436+437+Manage tasks with TaskWarrior-inspired features.
438+439+Track todos with priorities, projects, contexts, and tags. Supports hierarchical
440+tasks with parent/child relationships, task dependencies, recurring tasks, and
441+time tracking. Tasks can be filtered by status, priority, project, or context.
442+443+```bash
444+noteleaf todo
445+```
446+447+### Subcommands
448+449+#### add
450+451+Create a new task with description and optional attributes.
452+453+Tasks can be created with priority levels (low, medium, high, urgent), assigned
454+to projects and contexts, tagged for organization, and configured with due dates
455+and recurrence rules. Dependencies can be established to ensure tasks are
456+completed in order.
457+458+Examples:
459+ noteleaf todo add "Write documentation" --priority high --project docs
460+ noteleaf todo add "Weekly review" --recur "FREQ=WEEKLY" --due 2024-01-15
461+462+**Usage:**
463+464+```bash
465+noteleaf todo add [description] [flags]
466+```
467+468+**Options:**
469+470+```
471+ -c, --context string Set task context
472+ --depends-on string Set task dependencies (comma-separated UUIDs)
473+ -d, --due string Set due date (YYYY-MM-DD)
474+ --parent string Set parent task UUID
475+ -p, --priority string Set task priority
476+ --project string Set task project
477+ --recur string Set recurrence rule (e.g., FREQ=DAILY)
478+ -t, --tags strings Add tags to task
479+ --until string Set recurrence end date (YYYY-MM-DD)
480+```
481+482+**Aliases:** create, new
483+484+#### list
485+486+List tasks with optional filtering and display modes.
487+488+By default, shows tasks in an interactive TaskWarrior-like interface.
489+Use --static to show a simple text list instead.
490+Use --all to show all tasks, otherwise only pending tasks are shown.
491+492+**Usage:**
493+494+```bash
495+noteleaf todo list [flags]
496+```
497+498+**Options:**
499+500+```
501+ -a, --all Show all tasks (default: pending only)
502+ --context string Filter by context
503+ -i, --interactive Force interactive mode (default)
504+ --priority string Filter by priority
505+ --project string Filter by project
506+ --static Use static text output instead of interactive
507+ --status string Filter by status
508+```
509+510+**Aliases:** ls
511+512+#### view
513+514+Display detailed information for a specific task.
515+516+Shows all task attributes including description, status, priority, project,
517+context, tags, due date, creation time, and modification history. Use --json
518+for machine-readable output or --no-metadata to show only the description.
519+520+**Usage:**
521+522+```bash
523+noteleaf todo view [task-id] [flags]
524+```
525+526+**Options:**
527+528+```
529+ --format string Output format (detailed, brief) (default "detailed")
530+ --json Output as JSON
531+ --no-metadata Hide creation/modification timestamps
532+```
533+534+#### update
535+536+Modify attributes of an existing task.
537+538+Update any task property including description, status, priority, project,
539+context, due date, recurrence rule, or parent task. Add or remove tags and
540+dependencies. Multiple attributes can be updated in a single command.
541+542+Examples:
543+ noteleaf todo update 123 --priority urgent --due tomorrow
544+ noteleaf todo update 456 --add-tag urgent --project website
545+546+**Usage:**
547+548+```bash
549+noteleaf todo update [task-id] [flags]
550+```
551+552+**Options:**
553+554+```
555+ --add-depends string Add task dependencies (comma-separated UUIDs)
556+ --add-tag strings Add tags to task
557+ -c, --context string Set task context
558+ --description string Update task description
559+ -d, --due string Set due date (YYYY-MM-DD)
560+ --parent string Set parent task UUID
561+ -p, --priority string Set task priority
562+ --project string Set task project
563+ --recur string Set recurrence rule (e.g., FREQ=DAILY)
564+ --remove-depends string Remove task dependencies (comma-separated UUIDs)
565+ --remove-tag strings Remove tags from task
566+ --status string Update task status
567+ -t, --tags strings Add tags to task
568+ --until string Set recurrence end date (YYYY-MM-DD)
569+```
570+571+#### edit
572+573+Open interactive editor for task modification.
574+575+Provides a user-friendly interface with status picker and priority toggle.
576+Easier than using multiple command-line flags for complex updates.
577+578+**Usage:**
579+580+```bash
581+noteleaf todo edit [task-id]
582+```
583+584+**Aliases:** e
585+586+#### delete
587+588+Permanently remove a task from the database.
589+590+This operation cannot be undone. Consider updating the task status to
591+'deleted' instead if you want to preserve the record for historical purposes.
592+593+**Usage:**
594+595+```bash
596+noteleaf todo delete [task-id]
597+```
598+599+#### projects
600+601+Display all projects with task counts.
602+603+Shows each project used in your tasks along with the number of tasks in each
604+project. Use --todo-txt to format output with +project syntax for compatibility
605+with todo.txt tools.
606+607+**Usage:**
608+609+```bash
610+noteleaf todo projects [flags]
611+```
612+613+**Options:**
614+615+```
616+ --static Use static text output instead of interactive
617+ --todo-txt Format output with +project prefix for todo.txt compatibility
618+```
619+620+**Aliases:** proj
621+622+#### tags
623+624+Display all tags used across tasks.
625+626+Shows each tag with the number of tasks using it. Tags provide flexible
627+categorization orthogonal to projects and contexts.
628+629+**Usage:**
630+631+```bash
632+noteleaf todo tags [flags]
633+```
634+635+**Options:**
636+637+```
638+ --static Use static text output instead of interactive
639+```
640+641+**Aliases:** t
642+643+#### contexts
644+645+Display all contexts with task counts.
646+647+Contexts represent locations or environments where tasks can be completed (e.g.,
648+@home, @office, @errands). Use --todo-txt to format output with @context syntax
649+for compatibility with todo.txt tools.
650+651+**Usage:**
652+653+```bash
654+noteleaf todo contexts [flags]
655+```
656+657+**Options:**
658+659+```
660+ --static Use static text output instead of interactive
661+ --todo-txt Format output with @context prefix for todo.txt compatibility
662+```
663+664+**Aliases:** con, loc, ctx, locations
665+666+#### done
667+668+Mark a task as completed with current timestamp.
669+670+Sets the task status to 'completed' and records the completion time. For
671+recurring tasks, generates the next instance based on the recurrence rule.
672+673+**Usage:**
674+675+```bash
676+noteleaf todo done [task-id]
677+```
678+679+**Aliases:** complete
680+681+#### start
682+683+Begin tracking time spent on a task.
684+685+Records the start time for a work session. Only one task can be actively
686+tracked at a time. Use --note to add a description of what you're working on.
687+688+**Usage:**
689+690+```bash
691+noteleaf todo start [task-id] [flags]
692+```
693+694+**Options:**
695+696+```
697+ -n, --note string Add a note to the time entry
698+```
699+700+#### stop
701+702+End time tracking for the active task.
703+704+Records the end time and calculates duration for the current work session.
705+Duration is added to the task's total time tracked.
706+707+**Usage:**
708+709+```bash
710+noteleaf todo stop [task-id]
711+```
712+713+#### timesheet
714+715+Show time tracking summary for tasks.
716+717+By default shows time entries for the last 7 days.
718+Use --task to show timesheet for a specific task.
719+Use --days to change the date range.
720+721+**Usage:**
722+723+```bash
724+noteleaf todo timesheet [flags]
725+```
726+727+**Options:**
728+729+```
730+ -d, --days int Number of days to show in timesheet (default 7)
731+ -t, --task string Show timesheet for specific task ID
732+```
733+734+#### recur
735+736+Configure recurring task patterns.
737+738+Create tasks that repeat on a schedule using iCalendar recurrence rules (RRULE).
739+Supports daily, weekly, monthly, and yearly patterns with optional end dates.
740+741+**Usage:**
742+743+```bash
744+noteleaf todo recur
745+```
746+747+**Aliases:** repeat
748+749+##### set
750+751+Apply a recurrence rule to create repeating task instances.
752+753+Uses iCalendar RRULE syntax (e.g., "FREQ=DAILY" for daily tasks, "FREQ=WEEKLY;BYDAY=MO,WE,FR"
754+for specific weekdays). When a recurring task is completed, the next instance is
755+automatically generated.
756+757+Examples:
758+ noteleaf todo recur set 123 --rule "FREQ=DAILY"
759+ noteleaf todo recur set 456 --rule "FREQ=WEEKLY;BYDAY=MO" --until 2024-12-31
760+761+**Usage:**
762+763+```bash
764+noteleaf todo recur set [task-id] [flags]
765+```
766+767+**Options:**
768+769+```
770+ --rule string Recurrence rule (e.g., FREQ=DAILY)
771+ --until string Recurrence end date (YYYY-MM-DD)
772+```
773+774+##### clear
775+776+Remove recurrence from a task.
777+778+Converts a recurring task to a one-time task. Existing future instances are not
779+affected.
780+781+**Usage:**
782+783+```bash
784+noteleaf todo recur clear [task-id]
785+```
786+787+##### show
788+789+Display recurrence rule and schedule information.
790+791+Shows the RRULE pattern, next occurrence date, and recurrence end date if
792+configured.
793+794+**Usage:**
795+796+```bash
797+noteleaf todo recur show [task-id]
798+```
799+800+#### depend
801+802+Create and manage task dependencies.
803+804+Establish relationships where one task must be completed before another can
805+begin. Useful for multi-step workflows and project management.
806+807+**Usage:**
808+809+```bash
810+noteleaf todo depend
811+```
812+813+**Aliases:** dep, deps
814+815+##### add
816+817+Make a task dependent on another task's completion.
818+819+The first task cannot be started until the second task is completed. Use task
820+UUIDs to specify dependencies.
821+822+**Usage:**
823+824+```bash
825+noteleaf todo depend add [task-id] [depends-on-uuid]
826+```
827+828+##### remove
829+830+Delete a dependency relationship between two tasks.
831+832+**Usage:**
833+834+```bash
835+noteleaf todo depend remove [task-id] [depends-on-uuid]
836+```
837+838+**Aliases:** rm
839+840+##### list
841+842+Show all tasks that must be completed before this task can be started.
843+844+**Usage:**
845+846+```bash
847+noteleaf todo depend list [task-id]
848+```
849+850+**Aliases:** ls
851+852+##### blocked-by
853+854+Display all tasks that depend on this task's completion.
855+856+**Usage:**
857+858+```bash
859+noteleaf todo depend blocked-by [task-id]
860+```
861+
···1+---
2+id: tv-shows
3+title: TV Shows
4+sidebar_position: 6
5+description: Manage TV show watching
6+---
7+8+## tv
9+10+Track TV shows and episodes.
11+12+Search TMDB for TV shows and add them to your queue. Track which shows you're
13+currently watching, mark episodes as watched, and maintain a complete history
14+of your viewing activity.
15+16+```bash
17+noteleaf media tv
18+```
19+20+### Subcommands
21+22+#### add
23+24+Search for TV shows and add them to your watch queue.
25+26+By default, shows search results in a simple list format where you can select by number.
27+Use the -i flag for an interactive interface with navigation keys.
28+29+**Usage:**
30+31+```bash
32+noteleaf media tv add [search query...] [flags]
33+```
34+35+**Options:**
36+37+```
38+ -i, --interactive Use interactive interface for TV show selection
39+```
40+41+#### list
42+43+Display TV shows in your queue with optional status filters.
44+45+Shows show titles, air dates, and current status. Filter by --all, --queued,
46+--watching for shows in progress, or --watched for completed series. Default
47+shows queued shows only.
48+49+**Usage:**
50+51+```bash
52+noteleaf media tv list [--all|--queued|--watching|--watched]
53+```
54+55+#### watching
56+57+Mark a TV show as currently watching. Use this when you start watching a series.
58+59+**Usage:**
60+61+```bash
62+noteleaf media tv watching [id]
63+```
64+65+#### watched
66+67+Mark TV show episodes or entire series as watched.
68+69+Updates episode tracking and completion status. Can mark individual episodes
70+or complete seasons/series depending on ID format.
71+72+**Usage:**
73+74+```bash
75+noteleaf media tv watched [id]
76+```
77+78+**Aliases:** seen
79+80+#### remove
81+82+Remove a TV show from your watch queue. Use this for shows you no longer want to track.
83+84+**Usage:**
85+86+```bash
87+noteleaf media tv remove [id]
88+```
89+90+**Aliases:** rm
91+