id = "tuxedo"
name = "tuxedo"
homepage = "https://github.com/webstonehq/tuxedo"
description = "Fast, keyboard-driven terminal UI for todo.txt."
executables = ["tuxedo"]
[dotfiles]
paths = [
"[configHome]/tuxedo/config.toml",
"[configHome]/tuxedo/keybinds.toml",
"[configHome]/tuxedo/themes/*.toml",
]
exclude = []
secret = []
side_effect = false
[[dotfiles.secret_paths]]
file = "[configHome]/tuxedo/config.toml"
match = { key_path = ["share_token"] }
[commands]
format = 1
label = "todo.txt command line"
description = "One-shot tuxedo commands against the todo file chosen by TODO_FILE or TODO_DIR. Other subcommands (append, pri, archive and so on) are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = false }
[[commands.source]]
id = "readme"
kind = "manual"
url = "https://github.com/webstonehq/tuxedo/blob/main/README.md#command-line-interface"
revision = "2026-10-27"
evidence = """
tuxedo add "Pay rent +home @bank due:2026-07-01" # or: tuxedo a "..."
tuxedo ls @bank # filter by context
tuxedo do 3 # mark task 3 complete
| `add` | `a` | `TEXT...` | Add a task (natural-language dates supported, same as the `n` prompt). |
| `do` | `done`, `complete` | `N...` | Mark tasks complete (recurring tasks spawn their next instance). |
| `list` | `ls` | `[TERM...]` | List tasks. `TERM` is `+project`, `@context`, or free text. |
- `--json` — emit machine-readable JSON instead of text.
"""
[[commands.subcommand]]
path = ["add"]
label = "Add a task"
description = "Append a new task to the todo file."
[[commands.subcommand.source]]
id = "readme"
kind = "manual"
url = "https://github.com/webstonehq/tuxedo/blob/main/README.md#command-line-interface"
revision = "2026-10-27"
evidence = """
tuxedo add "Pay rent +home @bank due:2026-07-01" # or: tuxedo a "..."
| `add` | `a` | `TEXT...` | Add a task (natural-language dates supported, same as the `n` prompt). |
- `--json` — emit machine-readable JSON instead of text.
"""
[[commands.subcommand.field]]
id = "text"
label = "Task text"
description = "Can include +project, @context and due:YYYY-MM-DD."
type = "string"
position = 0
min = 1
multiple = true
sources = ["readme"]
[[commands.subcommand.field]]
id = "json"
label = "JSON output"
type = "boolean"
option = ["--json"]
sources = ["readme"]
[[commands.subcommand.task]]
id = "add"
label = "Add task"
fields = ["text"]
required = ["text"]
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["text", "json"]
[[commands.subcommand]]
path = ["ls"]
label = "List tasks"
description = "List tasks, optionally filtered by +project, @context or text."
[[commands.subcommand.source]]
id = "readme"
kind = "manual"
url = "https://github.com/webstonehq/tuxedo/blob/main/README.md#command-line-interface"
revision = "2026-10-27"
evidence = """
tuxedo ls @bank # filter by context
| `list` | `ls` | `[TERM...]` | List tasks. `TERM` is `+project`, `@context`, or free text. |
- `--json` — emit machine-readable JSON instead of text.
"""
[[commands.subcommand.field]]
id = "terms"
label = "Filter terms"
type = "string"
position = 0
multiple = true
sources = ["readme"]
[[commands.subcommand.field]]
id = "json"
label = "JSON output"
type = "boolean"
option = ["--json"]
sources = ["readme"]
[[commands.subcommand.task]]
id = "list"
label = "List tasks"
fields = ["terms", "json"]
required = []
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["terms", "json"]
[[commands.subcommand]]
path = ["do"]
label = "Complete tasks"
description = "Mark tasks complete by their 1-based line number."
[[commands.subcommand.source]]
id = "readme"
kind = "manual"
url = "https://github.com/webstonehq/tuxedo/blob/main/README.md#command-line-interface"
revision = "2026-10-27"
evidence = """
tuxedo do 3 # mark task 3 complete
| `do` | `done`, `complete` | `N...` | Mark tasks complete (recurring tasks spawn their next instance). |
"""
[[commands.subcommand.field]]
id = "numbers"
label = "Task numbers"
type = "integer"
position = 0
min = 1
multiple = true
sources = ["readme"]
[[commands.subcommand.task]]
id = "do"
label = "Complete tasks"
fields = ["numbers"]
required = ["numbers"]
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["numbers"]