{
  "schemaVersion": "1.0",
  "item": {
    "slug": "ticktick-cli",
    "name": "Ticktick Cli",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/Norickkevorkov/ticktick-cli",
    "canonicalUrl": "https://clawhub.ai/Norickkevorkov/ticktick-cli",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/ticktick-cli",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ticktick-cli",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "_meta.json",
      "package.json",
      "scripts/api.ts",
      "scripts/auth.ts",
      "scripts/commands/abandon.ts"
    ],
    "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",
      "slug": "ticktick-cli",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-09T23:45:44.868Z",
      "expiresAt": "2026-05-16T23:45:44.868Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ticktick-cli",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ticktick-cli",
        "contentDisposition": "attachment; filename=\"ticktick-cli-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "ticktick-cli"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/ticktick-cli"
    },
    "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/ticktick-cli",
    "agentPageUrl": "https://openagent3.xyz/skills/ticktick-cli/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ticktick-cli/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ticktick-cli/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": "TickTick CLI Skill",
        "body": "Manage TickTick tasks and projects from the command line."
      },
      {
        "title": "1. Register a TickTick Developer App",
        "body": "Go to TickTick Developer Center\nCreate a new application\nSet the redirect URI to http://localhost:8080\nNote your Client ID and Client Secret"
      },
      {
        "title": "2. Authenticate",
        "body": "# Set credentials and start OAuth flow\nbun run scripts/ticktick.ts auth --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET\n\n# Check authentication status\nbun run scripts/ticktick.ts auth --status\n\n# Logout (clear tokens, keep credentials)\nbun run scripts/ticktick.ts auth --logout"
      },
      {
        "title": "Headless / Manual Authentication",
        "body": "# Use manual mode on headless servers\nbun run scripts/ticktick.ts auth --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET --manual\n\nThis prints an authorization URL. Open it in a browser, approve access, then copy the full redirect URL (it looks like http://localhost:8080/?code=XXXXX&state=STATE) and paste it back into the CLI.\n\nThe CLI will open your browser to authorize access. After approving, tokens are stored in ~/.clawdbot/credentials/ticktick-cli/config.json."
      },
      {
        "title": "List Tasks",
        "body": "# List all tasks\nbun run scripts/ticktick.ts tasks\n\n# List tasks from a specific project\nbun run scripts/ticktick.ts tasks --list \"Work\"\n\n# Filter by status\nbun run scripts/ticktick.ts tasks --status pending\nbun run scripts/ticktick.ts tasks --status completed\n\n# JSON output\nbun run scripts/ticktick.ts tasks --json"
      },
      {
        "title": "Create Task",
        "body": "# Basic task creation\nbun run scripts/ticktick.ts task \"Buy groceries\" --list \"Personal\"\n\n# With description and priority\nbun run scripts/ticktick.ts task \"Review PR\" --list \"Work\" --content \"Check the new auth changes\" --priority high\n\n# With due date\nbun run scripts/ticktick.ts task \"Submit report\" --list \"Work\" --due tomorrow\nbun run scripts/ticktick.ts task \"Plan vacation\" --list \"Personal\" --due \"in 7 days\"\nbun run scripts/ticktick.ts task \"Meeting\" --list \"Work\" --due \"2024-12-25\"\n\n# With tags\nbun run scripts/ticktick.ts task \"Research\" --list \"Work\" --tag research important"
      },
      {
        "title": "Update Task",
        "body": "# Update by task name or ID\nbun run scripts/ticktick.ts task \"Buy groceries\" --update --priority medium\nbun run scripts/ticktick.ts task \"abc123\" --update --due tomorrow --content \"Updated notes\"\n\n# Limit search to specific project\nbun run scripts/ticktick.ts task \"Review PR\" --update --list \"Work\" --priority low"
      },
      {
        "title": "Complete Task",
        "body": "# Mark task as complete\nbun run scripts/ticktick.ts complete \"Buy groceries\"\n\n# Complete with project filter\nbun run scripts/ticktick.ts complete \"Review PR\" --list \"Work\""
      },
      {
        "title": "Abandon Task (Won't Do)",
        "body": "# Mark task as won't do\nbun run scripts/ticktick.ts abandon \"Old task\"\n\n# Abandon with project filter\nbun run scripts/ticktick.ts abandon \"Obsolete item\" --list \"Do\""
      },
      {
        "title": "Batch Abandon (Multiple Tasks)",
        "body": "# Abandon multiple tasks in a single API call\nbun run scripts/ticktick.ts batch-abandon <taskId1> <taskId2> <taskId3>\n\n# With JSON output\nbun run scripts/ticktick.ts batch-abandon abc123def456... xyz789... --json\n\nNote: batch-abandon requires task IDs (24-character hex strings), not task names. Use tasks --json to get task IDs first."
      },
      {
        "title": "List Projects",
        "body": "# List all projects\nbun run scripts/ticktick.ts lists\n\n# JSON output\nbun run scripts/ticktick.ts lists --json"
      },
      {
        "title": "Create Project",
        "body": "# Create new project\nbun run scripts/ticktick.ts list \"New Project\"\n\n# With color\nbun run scripts/ticktick.ts list \"Work Tasks\" --color \"#FF5733\""
      },
      {
        "title": "Update Project",
        "body": "# Rename project\nbun run scripts/ticktick.ts list \"Old Name\" --update --name \"New Name\"\n\n# Change color\nbun run scripts/ticktick.ts list \"Work\" --update --color \"#00FF00\""
      },
      {
        "title": "Priority Levels",
        "body": "none - No priority (default)\nlow - Low priority\nmedium - Medium priority\nhigh - High priority"
      },
      {
        "title": "Due Date Formats",
        "body": "today - Due today\ntomorrow - Due tomorrow\nin N days - Due in N days (e.g., \"in 3 days\")\nnext monday - Next occurrence of weekday\nISO date - YYYY-MM-DD or full ISO format"
      },
      {
        "title": "Global Options",
        "body": "--json - Output results in JSON format (useful for scripting)\n--help - Show help for any command"
      },
      {
        "title": "Agent Usage Tips",
        "body": "When using this skill as an AI agent:\n\nAlways use --json flag for machine-readable output\nList projects first with lists --json to get valid project IDs\nUse project IDs rather than names when possible for reliability\nCheck task status before completing to avoid errors\n\nExample agent workflow:\n\n# 1. Get available projects\nbun run scripts/ticktick.ts lists --json\n\n# 2. Create a task in a specific project\nbun run scripts/ticktick.ts task \"Agent task\" --list \"PROJECT_ID\" --priority high --json\n\n# 3. Later, mark it complete\nbun run scripts/ticktick.ts complete \"Agent task\" --list \"PROJECT_ID\" --json"
      },
      {
        "title": "Configuration",
        "body": "Tokens are stored in ~/.clawdbot/credentials/ticktick-cli/config.json:\n\n{\n  \"clientId\": \"YOUR_CLIENT_ID\",\n  \"clientSecret\": \"YOUR_CLIENT_SECRET\",\n  \"accessToken\": \"...\",\n  \"refreshToken\": \"...\",\n  \"tokenExpiry\": 1234567890000,\n  \"redirectUri\": \"http://localhost:8080\"\n}\n\nNote: Credentials are stored in plaintext. The CLI attempts to set file permissions to 700/600; treat this file as sensitive.\n\nThe CLI automatically refreshes tokens when they expire."
      },
      {
        "title": "\"Not authenticated\" error",
        "body": "Run bun run scripts/ticktick.ts auth to authenticate."
      },
      {
        "title": "\"Project not found\" error",
        "body": "Use bun run scripts/ticktick.ts lists to see available projects and their IDs."
      },
      {
        "title": "\"Task not found\" error",
        "body": "Check the task title matches exactly (case-insensitive)\nTry using the task ID instead\nUse --list to narrow the search to a specific project"
      },
      {
        "title": "Token expired errors",
        "body": "The CLI should auto-refresh tokens. If issues persist, run bun run scripts/ticktick.ts auth again."
      },
      {
        "title": "API Notes",
        "body": "This CLI uses the TickTick Open API v1."
      },
      {
        "title": "Rate Limits",
        "body": "100 requests per minute\n300 requests per 5 minutes\n\nThe CLI makes multiple API calls per operation (listing projects to find task), so bulk operations can hit limits quickly."
      },
      {
        "title": "Batch Endpoint",
        "body": "The CLI supports TickTick's batch endpoint for bulk operations:\n\nPOST https://api.ticktick.com/open/v1/batch/task\n{\n  \"add\": [...],    // CreateTaskInput[]\n  \"update\": [...], // UpdateTaskInput[]\n  \"delete\": [...]  // { taskId, projectId }[]\n}\n\nUse batch-abandon to abandon multiple tasks in one API call. The batch API method is also exposed for programmatic use."
      },
      {
        "title": "Other Limitations",
        "body": "Maximum 500 tasks per project\nSome advanced features (focus time, habits) not supported by the API"
      }
    ],
    "body": "TickTick CLI Skill\n\nManage TickTick tasks and projects from the command line.\n\nSetup\n1. Register a TickTick Developer App\nGo to TickTick Developer Center\nCreate a new application\nSet the redirect URI to http://localhost:8080\nNote your Client ID and Client Secret\n2. Authenticate\n# Set credentials and start OAuth flow\nbun run scripts/ticktick.ts auth --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET\n\n# Check authentication status\nbun run scripts/ticktick.ts auth --status\n\n# Logout (clear tokens, keep credentials)\nbun run scripts/ticktick.ts auth --logout\n\nHeadless / Manual Authentication\n# Use manual mode on headless servers\nbun run scripts/ticktick.ts auth --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET --manual\n\n\nThis prints an authorization URL. Open it in a browser, approve access, then copy the full redirect URL (it looks like http://localhost:8080/?code=XXXXX&state=STATE) and paste it back into the CLI.\n\nThe CLI will open your browser to authorize access. After approving, tokens are stored in ~/.clawdbot/credentials/ticktick-cli/config.json.\n\nCommands\nList Tasks\n# List all tasks\nbun run scripts/ticktick.ts tasks\n\n# List tasks from a specific project\nbun run scripts/ticktick.ts tasks --list \"Work\"\n\n# Filter by status\nbun run scripts/ticktick.ts tasks --status pending\nbun run scripts/ticktick.ts tasks --status completed\n\n# JSON output\nbun run scripts/ticktick.ts tasks --json\n\nCreate Task\n# Basic task creation\nbun run scripts/ticktick.ts task \"Buy groceries\" --list \"Personal\"\n\n# With description and priority\nbun run scripts/ticktick.ts task \"Review PR\" --list \"Work\" --content \"Check the new auth changes\" --priority high\n\n# With due date\nbun run scripts/ticktick.ts task \"Submit report\" --list \"Work\" --due tomorrow\nbun run scripts/ticktick.ts task \"Plan vacation\" --list \"Personal\" --due \"in 7 days\"\nbun run scripts/ticktick.ts task \"Meeting\" --list \"Work\" --due \"2024-12-25\"\n\n# With tags\nbun run scripts/ticktick.ts task \"Research\" --list \"Work\" --tag research important\n\nUpdate Task\n# Update by task name or ID\nbun run scripts/ticktick.ts task \"Buy groceries\" --update --priority medium\nbun run scripts/ticktick.ts task \"abc123\" --update --due tomorrow --content \"Updated notes\"\n\n# Limit search to specific project\nbun run scripts/ticktick.ts task \"Review PR\" --update --list \"Work\" --priority low\n\nComplete Task\n# Mark task as complete\nbun run scripts/ticktick.ts complete \"Buy groceries\"\n\n# Complete with project filter\nbun run scripts/ticktick.ts complete \"Review PR\" --list \"Work\"\n\nAbandon Task (Won't Do)\n# Mark task as won't do\nbun run scripts/ticktick.ts abandon \"Old task\"\n\n# Abandon with project filter\nbun run scripts/ticktick.ts abandon \"Obsolete item\" --list \"Do\"\n\nBatch Abandon (Multiple Tasks)\n# Abandon multiple tasks in a single API call\nbun run scripts/ticktick.ts batch-abandon <taskId1> <taskId2> <taskId3>\n\n# With JSON output\nbun run scripts/ticktick.ts batch-abandon abc123def456... xyz789... --json\n\n\nNote: batch-abandon requires task IDs (24-character hex strings), not task names. Use tasks --json to get task IDs first.\n\nList Projects\n# List all projects\nbun run scripts/ticktick.ts lists\n\n# JSON output\nbun run scripts/ticktick.ts lists --json\n\nCreate Project\n# Create new project\nbun run scripts/ticktick.ts list \"New Project\"\n\n# With color\nbun run scripts/ticktick.ts list \"Work Tasks\" --color \"#FF5733\"\n\nUpdate Project\n# Rename project\nbun run scripts/ticktick.ts list \"Old Name\" --update --name \"New Name\"\n\n# Change color\nbun run scripts/ticktick.ts list \"Work\" --update --color \"#00FF00\"\n\nOptions Reference\nPriority Levels\nnone - No priority (default)\nlow - Low priority\nmedium - Medium priority\nhigh - High priority\nDue Date Formats\ntoday - Due today\ntomorrow - Due tomorrow\nin N days - Due in N days (e.g., \"in 3 days\")\nnext monday - Next occurrence of weekday\nISO date - YYYY-MM-DD or full ISO format\nGlobal Options\n--json - Output results in JSON format (useful for scripting)\n--help - Show help for any command\nAgent Usage Tips\n\nWhen using this skill as an AI agent:\n\nAlways use --json flag for machine-readable output\nList projects first with lists --json to get valid project IDs\nUse project IDs rather than names when possible for reliability\nCheck task status before completing to avoid errors\n\nExample agent workflow:\n\n# 1. Get available projects\nbun run scripts/ticktick.ts lists --json\n\n# 2. Create a task in a specific project\nbun run scripts/ticktick.ts task \"Agent task\" --list \"PROJECT_ID\" --priority high --json\n\n# 3. Later, mark it complete\nbun run scripts/ticktick.ts complete \"Agent task\" --list \"PROJECT_ID\" --json\n\nConfiguration\n\nTokens are stored in ~/.clawdbot/credentials/ticktick-cli/config.json:\n\n{\n  \"clientId\": \"YOUR_CLIENT_ID\",\n  \"clientSecret\": \"YOUR_CLIENT_SECRET\",\n  \"accessToken\": \"...\",\n  \"refreshToken\": \"...\",\n  \"tokenExpiry\": 1234567890000,\n  \"redirectUri\": \"http://localhost:8080\"\n}\n\n\nNote: Credentials are stored in plaintext. The CLI attempts to set file permissions to 700/600; treat this file as sensitive.\n\nThe CLI automatically refreshes tokens when they expire.\n\nTroubleshooting\n\"Not authenticated\" error\n\nRun bun run scripts/ticktick.ts auth to authenticate.\n\n\"Project not found\" error\n\nUse bun run scripts/ticktick.ts lists to see available projects and their IDs.\n\n\"Task not found\" error\nCheck the task title matches exactly (case-insensitive)\nTry using the task ID instead\nUse --list to narrow the search to a specific project\nToken expired errors\n\nThe CLI should auto-refresh tokens. If issues persist, run bun run scripts/ticktick.ts auth again.\n\nAPI Notes\n\nThis CLI uses the TickTick Open API v1.\n\nRate Limits\n100 requests per minute\n300 requests per 5 minutes\n\nThe CLI makes multiple API calls per operation (listing projects to find task), so bulk operations can hit limits quickly.\n\nBatch Endpoint\n\nThe CLI supports TickTick's batch endpoint for bulk operations:\n\nPOST https://api.ticktick.com/open/v1/batch/task\n{\n  \"add\": [...],    // CreateTaskInput[]\n  \"update\": [...], // UpdateTaskInput[]\n  \"delete\": [...]  // { taskId, projectId }[]\n}\n\n\nUse batch-abandon to abandon multiple tasks in one API call. The batch API method is also exposed for programmatic use.\n\nOther Limitations\nMaximum 500 tasks per project\nSome advanced features (focus time, habits) not supported by the API"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Norickkevorkov/ticktick-cli",
    "publisherUrl": "https://clawhub.ai/Norickkevorkov/ticktick-cli",
    "owner": "Norickkevorkov",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/ticktick-cli",
    "downloadUrl": "https://openagent3.xyz/downloads/ticktick-cli",
    "agentUrl": "https://openagent3.xyz/skills/ticktick-cli/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ticktick-cli/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ticktick-cli/agent.md"
  }
}