{
  "product": "Specification (reference)",
  "title": "Todo CLI",
  "summary": "Manage a task list from the terminal, with output humans and scripts can both read.",
  "category": "cli",
  "entries": [
    {
      "path": [
        "AI",
        "Commands",
        "Add a task"
      ],
      "value": "todo add \"buy milk\"",
      "status": "yes",
      "note": "returns the new id"
    },
    {
      "path": [
        "AI",
        "Commands",
        "List tasks with filters"
      ],
      "value": "--done --tag work --due today",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Commands",
        "Complete and reopen a task"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Commands",
        "Edit and delete a task"
      ],
      "value": "",
      "status": "yes",
      "note": "delete confirms or takes --force"
    },
    {
      "path": [
        "AI",
        "Model",
        "Tags, priority and due date"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Model",
        "Sub-tasks or projects"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Model",
        "Stable ids that survive deletion"
      ],
      "value": "",
      "status": "yes",
      "note": "ids are not reused"
    },
    {
      "path": [
        "AI",
        "Storage",
        "Plain-text or JSON file in a known location"
      ],
      "value": "",
      "status": "yes",
      "note": "respects XDG or --file"
    },
    {
      "path": [
        "AI",
        "Storage",
        "Atomic writes"
      ],
      "value": "",
      "status": "yes",
      "note": "no truncated file on crash"
    },
    {
      "path": [
        "AI",
        "Output",
        "Human table by default"
      ],
      "value": "",
      "status": "yes",
      "note": "aligned, colourised when a TTY"
    },
    {
      "path": [
        "AI",
        "Output",
        "--json for machine consumption"
      ],
      "value": "",
      "status": "yes",
      "note": "stable field names"
    },
    {
      "path": [
        "AI",
        "Output",
        "Colour disabled when piped or NO_COLOR is set"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "UX",
        "Exit codes distinguish failure kinds"
      ],
      "value": "0/1/2",
      "status": "yes",
      "note": "not-found is not a crash"
    },
    {
      "path": [
        "AI",
        "UX",
        "--help on every command"
      ],
      "value": "",
      "status": "yes",
      "note": "with examples"
    },
    {
      "path": [
        "AI",
        "UX",
        "Shell completion"
      ],
      "value": "bash, zsh, fish",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "UX",
        "Reads stdin when piped"
      ],
      "value": "",
      "status": "yes",
      "note": "for bulk add"
    }
  ]
}
