Install
openclaw skills install ticktick-calendarTickTick task/project integration toolkit for OAuth2 authorization, token refresh, and typed task/project operations. Use when users need to authenticate with TickTick, run task/project CRUD workflows, or operate the OpenClaw/Codex wrapper via token.json.
openclaw skills install ticktick-calendarOperate TickTick task/project workflows with strict contracts, runtime token management, typed API access, and OpenClaw-ready action wrappers.
| Situation | Action |
|---|---|
| First-time OAuth authorization needed | Run npm run ticktick:cli -- auth-url, then auth-exchange with callback URL |
| Token expired but refresh token exists | Use runtime/CLI auto-refresh path (getAccessTokenWithAutoReauth) |
| Token missing or refresh failed | Reauthorize from emitted URL and rerun command |
| Need task creation/update/complete | Use runtime.useCases.createTask/updateTask/completeTask or skill actions |
| Need task/project listing | Use runtime.useCases.listTasks/listProjects or CLI commands |
| Need OpenClaw action integration | Use skill-entry/ticktick-skill.mjs and expose 5 MVP actions |
| Need error categorization for UX/retry | Handle TickTickDomainError categories from src/shared/error-categories.ts |
create_tasklist_tasksupdate_taskcomplete_tasklist_projectsskill-entry/token-manager.mjsskill-entry/ticktick-skill.mjsscripts/ticktick-cli.mjsRequired environment variables:
TICKTICK_CLIENT_IDTICKTICK_CLIENT_SECRETTICKTICK_REDIRECT_URIOptional runtime defaults:
TICKTICK_OAUTH_AUTHORIZE_URL (default: https://ticktick.com/oauth/authorize)TICKTICK_OAUTH_TOKEN_URL (default: https://ticktick.com/oauth/token)TICKTICK_API_BASE_URL (default: https://api.ticktick.com/open/v1)TICKTICK_API_TIMEOUT_MS (default: 10000)TICKTICK_API_MAX_RETRIES (default: 3)TICKTICK_API_RETRY_BASE_DELAY_MS (default: 250)TICKTICK_OAUTH_SCOPETICKTICK_USER_AGENTToken and notification options:
TICKTICK_TOKEN_PATH (default: ~/.config/ticktick/token.json)TICKTICK_REAUTH_WEBHOOK_URLTICKTICK_REAUTH_NOTIFY_COOLDOWN_MSTICKTICK_REAUTH_NOTIFY_STATE_PATHOpenClaw integration is provided through createTickTickOpenClawSkill in skill-entry/ticktick-skill.mjs.
Expose the following actions:
create_tasklist_tasksupdate_taskcomplete_tasklist_projectsparseTickTickEnvFromRuntime.options.tokenPath -> TICKTICK_TOKEN_PATH -> default path).getAccessTokenWithAutoReauth).ReauthRequiredErrornpm run ticktick:cli -- auth-url
npm run ticktick:cli -- auth-exchange --callbackUrl "http://localhost:3000/oauth/callback?code=...&state=..."
npm run ticktick:cli -- list-projects
npm run ticktick:cli -- list-tasks --projectId <projectId> --limit 20
npm run ticktick:cli -- create-task --projectId <projectId> --title "Write docs" --priority 3
npm run ticktick:cli -- update-task --taskId <taskId> --priority 5
npm run ticktick:cli -- complete-task --taskId <taskId>
parseTickTickEnvFromRuntime()createTickTickRuntime({ env, getAccessToken })runtime.useCases.*Normalize API/runtime errors to domain categories:
| Category | Typical Source |
|---|---|
auth_401 | Invalid/expired access token |
auth_403 | Scope/permission denied |
not_found_404 | Missing task/project resource |
rate_limit_429 | TickTick rate-limited request |
server_5xx | TickTick server-side failure |
network | Timeout, transport, DNS, fetch failures |
validation | Input contract or payload mismatch |
unknown | Non-classified fallback |
Run after any implementation or integration change:
npm run typecheck
npm test
If either gate fails, do not finalize until fixed or explicitly accepted by user.
ReauthRequiredError with message about missing token fileauth-url -> complete browser consent -> run auth-exchange.env values match TickTick app configurationTICKTICK_API_MAX_RETRIESTICKTICK_API_RETRY_BASE_DELAY_MSREADME.mddocs/openclaw-skill-guide.mdskill-entry/token-manager.mjsskill-entry/ticktick-skill.mjsscripts/ticktick-cli.mjssrc/core/ticktick-runtime.tssrc/core/ticktick-usecases.tssrc/api/ticktick-api-client.tssrc/api/ticktick-gateway.tssrc/shared/error-categories.ts