{
  "schemaVersion": "1.0",
  "item": {
    "slug": "ttt",
    "name": "Tiny Talking Todos",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/joshuacrowley/ttt",
    "canonicalUrl": "https://clawhub.ai/joshuacrowley/ttt",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/ttt",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ttt",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/ttt"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/ttt",
    "agentPageUrl": "https://openagent3.xyz/skills/ttt/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ttt/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ttt/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "TinyTalkingTodos CLI",
        "body": "Use ttt to manage todo lists and items from the command line. The CLI syncs with TinyTalkingTodos in real-time."
      },
      {
        "title": "Installation",
        "body": "npm install -g @ojschwa/ttt-cli\n\nOr install locally for development:\n\ncd /path/to/talking-todo/ttt-cli\nnpm install\nnpm run build\nnpm link\n\nVerify with ttt --help."
      },
      {
        "title": "Authentication",
        "body": "Before using the CLI, the user must be authenticated:\n\n# Check auth status\nttt auth status\n\n# Login via browser (opens OAuth flow)\nttt auth login\n\n# Logout\nttt auth logout\n\n# Export credentials as env vars (for scripts)\nttt auth export"
      },
      {
        "title": "List all lists",
        "body": "ttt list ls\n\nOutput (compact, token-efficient):\n\nToday [2/5]\nGroceries [0/3]\nWork Tasks [1/4]\n\nFor structured data:\n\nttt list ls --json"
      },
      {
        "title": "Get list details",
        "body": "ttt list get \"Groceries\"\n# or by ID\nttt list get list-abc123"
      },
      {
        "title": "Create a new list",
        "body": "ttt list create \"Weekend Plans\"\nttt list create \"Shopping\" --icon \"🛒\" --color \"#FF6B6B\"\n\nOptions:\n\n--color <hex> - Background color\n--icon <emoji> - List icon\n--type <type> - List type"
      },
      {
        "title": "Update a list",
        "body": "ttt list update \"Groceries\" --name \"Shopping List\"\nttt list update \"Shopping List\" --icon \"🛒\" --color \"#00FF00\"\n\nOptions:\n\n--name <name> - New list name\n--color <hex> - Background color\n--icon <emoji> - List icon\n--type <type> - List type"
      },
      {
        "title": "Delete a list",
        "body": "ttt list delete \"Old List\"\nttt list rm \"Old List\"  # alias\n\n# Force delete even if list has todos\nttt list delete \"Old List\" --force"
      },
      {
        "title": "List todos in a list",
        "body": "ttt todo ls --list \"Groceries\"\n\nOutput (compact):\n\nGroceries [1/4]\n✓ Milk id:todo-abc123\n○ Bread id:todo-def456\n○ Eggs id:todo-ghi789\n○ Butter id:todo-jkl012\n\nFor JSON output:\n\nttt todo ls --list \"Groceries\" --json"
      },
      {
        "title": "Add a todo",
        "body": "Basic:\n\nttt todo add \"Buy avocados\" --list \"Groceries\"\n\nWith options:\n\nttt todo add \"Doctor appointment\" --list \"Health\" \\\n  --date 2026-02-15 \\\n  --time 14:30 \\\n  --notes \"Bring insurance card\"\n\nttt todo add \"Try new pasta place\" --list \"Restaurants\" \\\n  --url \"https://example.com/restaurant\" \\\n  --street-address \"123 Main St\" \\\n  --rating 4\n\nttt todo add \"Tomatoes\" --list \"Groceries\" \\\n  --amount 2.50 \\\n  --category \"Produce\" \\\n  --emoji \"🍅\"\n\nAll --list options:\n\nOptionDescriptionExample--notes <text>Additional notes--notes \"organic preferred\"--date <YYYY-MM-DD>Due date--date 2026-02-15--time <HH:MM>Due time--time 14:30--url <url>Associated URL--url \"https://...\"--emoji <emoji>Item emoji--emoji \"🎉\"--email <email>Associated email--email \"contact@...\"--street-address <addr>Location--street-address \"123 Main\"--number <n>Numeric value--number 5--amount <n>Amount/price--amount 12.99--rating <1-5>Star rating--rating 4--type <A-E>Item type--type A--category <name>Category--category \"Urgent\""
      },
      {
        "title": "Mark a todo as done",
        "body": "ttt todo done todo-abc123\n\nThe todo ID is shown in the compact output format after id:."
      },
      {
        "title": "Mark a todo as not done",
        "body": "ttt todo undone todo-abc123"
      },
      {
        "title": "Update a todo",
        "body": "ttt todo update todo-abc123 --text \"New text\"\nttt todo update todo-abc123 --category \"Urgent\" --date 2026-02-15\nttt todo update todo-abc123 --done   # mark as done\nttt todo update todo-abc123 --not-done  # mark as not done\n\nOptions:\n\n--text <text> - New todo text\n--notes, --date, --time, --url, --emoji, --email, --street-address\n--number, --amount, --rating, --type, --category\n--done / --not-done - Toggle completion status"
      },
      {
        "title": "Delete a todo",
        "body": "ttt todo delete todo-abc123\n# or use alias\nttt todo rm todo-abc123"
      },
      {
        "title": "Batch add todos",
        "body": "Add multiple todos at once using JSON:\n\nttt todo batch-add --list \"Groceries\" --items '[\n  {\"text\": \"Milk\"},\n  {\"text\": \"Eggs\", \"fields\": {\"category\": \"Dairy\"}},\n  {\"text\": \"Bread\", \"fields\": {\"amount\": 3.50}}\n]'\n\nEach item requires text and optionally fields with any todo field."
      },
      {
        "title": "Batch update todos",
        "body": "Update multiple todos at once:\n\nttt todo batch-update --items '[\n  {\"id\": \"todo-abc123\", \"fields\": {\"done\": true}},\n  {\"id\": \"todo-def456\", \"fields\": {\"text\": \"Updated text\", \"category\": \"Urgent\"}}\n]'\n\nEach item requires id and fields with the updates to apply."
      },
      {
        "title": "Undo Operations",
        "body": "All mutating operations are recorded and can be undone:\n\n# Undo the last operation\nttt undo\n\n# Undo the last 3 operations\nttt undo 3\n\n# View undo history\nttt history\nttt history --limit 20\nttt history --json\n\nUndo supports: todo add/delete/update, batch-add/update, mark done/undone, list create/update/delete."
      },
      {
        "title": "Daemon (Performance)",
        "body": "The daemon keeps a persistent WebSocket connection for faster commands:\n\n# Start daemon (auto-starts on first command if not running)\nttt daemon start\n\n# Check status\nttt daemon status\n\n# Stop daemon\nttt daemon stop\n\nThe daemon auto-shuts down after 30 minutes of inactivity."
      },
      {
        "title": "Best Practices",
        "body": "Use compact output (default) when displaying lists to users - it's token-efficient\nUse --json when you need to parse data or extract specific fields\nReference lists by name for readability, or by ID for precision\nCheck auth status before operations if you're unsure of login state\nExtract todo IDs from compact output (format: id:<todo-id>) for updates\nUse batch operations when adding or updating multiple items - more efficient than individual calls\nUse undo if you make a mistake - ttt undo reverts the last operation"
      },
      {
        "title": "Add items to grocery list",
        "body": "ttt todo add \"Milk\" --list \"Groceries\" --category \"Dairy\"\nttt todo add \"Bread\" --list \"Groceries\" --category \"Bakery\"\nttt todo add \"Apples\" --list \"Groceries\" --amount 3.50 --category \"Produce\""
      },
      {
        "title": "Check and complete tasks",
        "body": "# View todos\nttt todo ls --list \"Today\"\n\n# Mark one done (using ID from output)\nttt todo done todo-xyz789"
      },
      {
        "title": "Create a new list with todos",
        "body": "ttt list create \"Weekend Trip\" --icon \"🏕️\"\nttt todo add \"Pack tent\" --list \"Weekend Trip\"\nttt todo add \"Check weather\" --list \"Weekend Trip\" --url \"https://weather.com\"\nttt todo add \"Gas up car\" --list \"Weekend Trip\""
      },
      {
        "title": "Batch add items efficiently",
        "body": "ttt todo batch-add --list \"Party Supplies\" --items '[\n  {\"text\": \"Balloons\", \"fields\": {\"category\": \"Decorations\"}},\n  {\"text\": \"Cake\", \"fields\": {\"category\": \"Food\", \"amount\": 45.00}},\n  {\"text\": \"Plates\", \"fields\": {\"category\": \"Supplies\", \"number\": 20}},\n  {\"text\": \"Candles\", \"fields\": {\"category\": \"Decorations\"}}\n]'"
      },
      {
        "title": "Mark multiple items done",
        "body": "ttt todo batch-update --items '[\n  {\"id\": \"todo-abc\", \"fields\": {\"done\": true}},\n  {\"id\": \"todo-def\", \"fields\": {\"done\": true}},\n  {\"id\": \"todo-ghi\", \"fields\": {\"done\": true}}\n]'"
      },
      {
        "title": "Undo a mistake",
        "body": "# Accidentally deleted something? Undo it\nttt undo\n\n# Made several mistakes? Undo multiple\nttt undo 3"
      }
    ],
    "body": "TinyTalkingTodos CLI\n\nUse ttt to manage todo lists and items from the command line. The CLI syncs with TinyTalkingTodos in real-time.\n\nInstallation\nnpm install -g @ojschwa/ttt-cli\n\n\nOr install locally for development:\n\ncd /path/to/talking-todo/ttt-cli\nnpm install\nnpm run build\nnpm link\n\n\nVerify with ttt --help.\n\nAuthentication\n\nBefore using the CLI, the user must be authenticated:\n\n# Check auth status\nttt auth status\n\n# Login via browser (opens OAuth flow)\nttt auth login\n\n# Logout\nttt auth logout\n\n# Export credentials as env vars (for scripts)\nttt auth export\n\nList Management\nList all lists\nttt list ls\n\n\nOutput (compact, token-efficient):\n\nToday [2/5]\nGroceries [0/3]\nWork Tasks [1/4]\n\n\nFor structured data:\n\nttt list ls --json\n\nGet list details\nttt list get \"Groceries\"\n# or by ID\nttt list get list-abc123\n\nCreate a new list\nttt list create \"Weekend Plans\"\nttt list create \"Shopping\" --icon \"🛒\" --color \"#FF6B6B\"\n\n\nOptions:\n\n--color <hex> - Background color\n--icon <emoji> - List icon\n--type <type> - List type\nUpdate a list\nttt list update \"Groceries\" --name \"Shopping List\"\nttt list update \"Shopping List\" --icon \"🛒\" --color \"#00FF00\"\n\n\nOptions:\n\n--name <name> - New list name\n--color <hex> - Background color\n--icon <emoji> - List icon\n--type <type> - List type\nDelete a list\nttt list delete \"Old List\"\nttt list rm \"Old List\"  # alias\n\n# Force delete even if list has todos\nttt list delete \"Old List\" --force\n\nTodo Operations\nList todos in a list\nttt todo ls --list \"Groceries\"\n\n\nOutput (compact):\n\nGroceries [1/4]\n✓ Milk id:todo-abc123\n○ Bread id:todo-def456\n○ Eggs id:todo-ghi789\n○ Butter id:todo-jkl012\n\n\nFor JSON output:\n\nttt todo ls --list \"Groceries\" --json\n\nAdd a todo\n\nBasic:\n\nttt todo add \"Buy avocados\" --list \"Groceries\"\n\n\nWith options:\n\nttt todo add \"Doctor appointment\" --list \"Health\" \\\n  --date 2026-02-15 \\\n  --time 14:30 \\\n  --notes \"Bring insurance card\"\n\nttt todo add \"Try new pasta place\" --list \"Restaurants\" \\\n  --url \"https://example.com/restaurant\" \\\n  --street-address \"123 Main St\" \\\n  --rating 4\n\nttt todo add \"Tomatoes\" --list \"Groceries\" \\\n  --amount 2.50 \\\n  --category \"Produce\" \\\n  --emoji \"🍅\"\n\n\nAll --list options:\n\nOption\tDescription\tExample\n--notes <text>\tAdditional notes\t--notes \"organic preferred\"\n--date <YYYY-MM-DD>\tDue date\t--date 2026-02-15\n--time <HH:MM>\tDue time\t--time 14:30\n--url <url>\tAssociated URL\t--url \"https://...\"\n--emoji <emoji>\tItem emoji\t--emoji \"🎉\"\n--email <email>\tAssociated email\t--email \"contact@...\"\n--street-address <addr>\tLocation\t--street-address \"123 Main\"\n--number <n>\tNumeric value\t--number 5\n--amount <n>\tAmount/price\t--amount 12.99\n--rating <1-5>\tStar rating\t--rating 4\n--type <A-E>\tItem type\t--type A\n--category <name>\tCategory\t--category \"Urgent\"\nMark a todo as done\nttt todo done todo-abc123\n\n\nThe todo ID is shown in the compact output format after id:.\n\nMark a todo as not done\nttt todo undone todo-abc123\n\nUpdate a todo\nttt todo update todo-abc123 --text \"New text\"\nttt todo update todo-abc123 --category \"Urgent\" --date 2026-02-15\nttt todo update todo-abc123 --done   # mark as done\nttt todo update todo-abc123 --not-done  # mark as not done\n\n\nOptions:\n\n--text <text> - New todo text\n--notes, --date, --time, --url, --emoji, --email, --street-address\n--number, --amount, --rating, --type, --category\n--done / --not-done - Toggle completion status\nDelete a todo\nttt todo delete todo-abc123\n# or use alias\nttt todo rm todo-abc123\n\nBatch add todos\n\nAdd multiple todos at once using JSON:\n\nttt todo batch-add --list \"Groceries\" --items '[\n  {\"text\": \"Milk\"},\n  {\"text\": \"Eggs\", \"fields\": {\"category\": \"Dairy\"}},\n  {\"text\": \"Bread\", \"fields\": {\"amount\": 3.50}}\n]'\n\n\nEach item requires text and optionally fields with any todo field.\n\nBatch update todos\n\nUpdate multiple todos at once:\n\nttt todo batch-update --items '[\n  {\"id\": \"todo-abc123\", \"fields\": {\"done\": true}},\n  {\"id\": \"todo-def456\", \"fields\": {\"text\": \"Updated text\", \"category\": \"Urgent\"}}\n]'\n\n\nEach item requires id and fields with the updates to apply.\n\nUndo Operations\n\nAll mutating operations are recorded and can be undone:\n\n# Undo the last operation\nttt undo\n\n# Undo the last 3 operations\nttt undo 3\n\n# View undo history\nttt history\nttt history --limit 20\nttt history --json\n\n\nUndo supports: todo add/delete/update, batch-add/update, mark done/undone, list create/update/delete.\n\nDaemon (Performance)\n\nThe daemon keeps a persistent WebSocket connection for faster commands:\n\n# Start daemon (auto-starts on first command if not running)\nttt daemon start\n\n# Check status\nttt daemon status\n\n# Stop daemon\nttt daemon stop\n\n\nThe daemon auto-shuts down after 30 minutes of inactivity.\n\nBest Practices\nUse compact output (default) when displaying lists to users - it's token-efficient\nUse --json when you need to parse data or extract specific fields\nReference lists by name for readability, or by ID for precision\nCheck auth status before operations if you're unsure of login state\nExtract todo IDs from compact output (format: id:<todo-id>) for updates\nUse batch operations when adding or updating multiple items - more efficient than individual calls\nUse undo if you make a mistake - ttt undo reverts the last operation\nExample Workflows\nAdd items to grocery list\nttt todo add \"Milk\" --list \"Groceries\" --category \"Dairy\"\nttt todo add \"Bread\" --list \"Groceries\" --category \"Bakery\"\nttt todo add \"Apples\" --list \"Groceries\" --amount 3.50 --category \"Produce\"\n\nCheck and complete tasks\n# View todos\nttt todo ls --list \"Today\"\n\n# Mark one done (using ID from output)\nttt todo done todo-xyz789\n\nCreate a new list with todos\nttt list create \"Weekend Trip\" --icon \"🏕️\"\nttt todo add \"Pack tent\" --list \"Weekend Trip\"\nttt todo add \"Check weather\" --list \"Weekend Trip\" --url \"https://weather.com\"\nttt todo add \"Gas up car\" --list \"Weekend Trip\"\n\nBatch add items efficiently\nttt todo batch-add --list \"Party Supplies\" --items '[\n  {\"text\": \"Balloons\", \"fields\": {\"category\": \"Decorations\"}},\n  {\"text\": \"Cake\", \"fields\": {\"category\": \"Food\", \"amount\": 45.00}},\n  {\"text\": \"Plates\", \"fields\": {\"category\": \"Supplies\", \"number\": 20}},\n  {\"text\": \"Candles\", \"fields\": {\"category\": \"Decorations\"}}\n]'\n\nMark multiple items done\nttt todo batch-update --items '[\n  {\"id\": \"todo-abc\", \"fields\": {\"done\": true}},\n  {\"id\": \"todo-def\", \"fields\": {\"done\": true}},\n  {\"id\": \"todo-ghi\", \"fields\": {\"done\": true}}\n]'\n\nUndo a mistake\n# Accidentally deleted something? Undo it\nttt undo\n\n# Made several mistakes? Undo multiple\nttt undo 3"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/joshuacrowley/ttt",
    "publisherUrl": "https://clawhub.ai/joshuacrowley/ttt",
    "owner": "joshuacrowley",
    "version": "0.1.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/ttt",
    "downloadUrl": "https://openagent3.xyz/downloads/ttt",
    "agentUrl": "https://openagent3.xyz/skills/ttt/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ttt/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ttt/agent.md"
  }
}