ticktick-official-cli

PassAudited by ClawScan on May 10, 2026.

Overview

The skill appears to do what it claims—manage Dida365 tasks via official OAuth—but it stores/prints read-write credentials and can change or delete tasks, so users should handle it carefully.

This looks like a coherent Dida365 integration. Before installing, be comfortable granting read/write task access, keep ~/.config/ticktick-official private, redact any printed tokens, do not change the API base URL away from official Dida365 endpoints, and require confirmation before any delete command.

Findings (5)

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

What this means

If authorized, the agent can change or delete items in the user's Dida365 account.

Why it was flagged

The skill can create, update, complete, and delete Dida365 tasks/projects. This matches the stated purpose, but deletion and account mutation are high-impact actions.

Skill content
管理滴答清单(项目/任务查询、创建、更新、完成、删除) ... 删除操作(project/task delete)属于危险操作,执行前确认
Recommendation

Require explicit user confirmation for delete operations and review project/task IDs before running mutation commands.

What this means

Anyone who can read those local config files may be able to access or modify the user's Dida365 tasks.

Why it was flagged

The OAuth flow uses read/write task scope and persists both the app client secret and access token in local config files.

Skill content
DEFAULT_SCOPE = "tasks:read tasks:write" ... f'export {ENV_CLIENT_SECRET}="{client_secret}"\n' ... f'export TICKTICK_TOKEN="{access_token}"\n'
Recommendation

Store the config directory securely, avoid sharing these files, and revoke/regenerate the Dida365 app secret or token if exposed.

What this means

The Dida365 token could be copied into logs or chat history if the exchange output is shared.

Why it was flagged

The manual token exchange command prints the token response and export command to the terminal, which can place the access token in agent transcripts or logs.

Skill content
console.print_json(data=payload) ... console.print(f'export TICKTICK_TOKEN="{access_token}"')
Recommendation

Prefer saving tokens without sharing command output, redact tokens from transcripts, and avoid posting terminal logs from the OAuth exchange.

What this means

Misconfiguring --base-url or TICKTICK_BASE_URL could send the OAuth token to an unintended server.

Why it was flagged

The CLI allows the API base URL to be overridden while using the bearer token. The default is official Dida365, but a non-official URL could receive the token if configured.

Skill content
base_url: str = typer.Option(DEFAULT_BASE_URL, "--base-url", envvar=ENV_BASE_URL, help="API base URL.") ... TicktickApiClient(token=token, base_url=base_url
Recommendation

Leave the default API URL in place unless deliberately testing, and only use dida365.com/api.dida365.com endpoints for real credentials.

What this means

First run may depend on resolving external Python packages, which can affect reproducibility and supply-chain assurance.

Why it was flagged

The script is designed to run through uv with runtime Python dependencies specified by version ranges rather than exact pins.

Skill content
#!/usr/bin/env -S uv run --script ... dependencies = [ "httpx>=0.28.1", "typer>=0.20.1", "pydantic>=2.12.5", "rich>=14.2.0" ]
Recommendation

Run only in a trusted environment, consider pinning dependencies or using a lockfile, and ensure uv/package sources are trusted.