A CLI tool for managing TickTick tasks via the Open API. OAuth 2.0 authentication, project/task CRUD, tag management, and script-friendly design.
- Tasks — create, get, update, complete, delete tasks with priority, due dates, and tags
- Projects — list and view project details
- Tags — aggregate tags across all projects
- Flexible due dates —
today,tomorrow,+3d,YYYY-MM-DD - Priority levels —
none,low,medium,high - Multiple output formats — human-readable text, JSON, and TSV
- OAuth 2.0 — browser-based login with token auto-refresh
brew install tackeyy/tap/tickygo install github.com/tackeyy/ticky@latestgit clone https://github.com/tackeyy/ticky.git
cd ticky
go build -o ticky .- Go to TickTick Developer Portal and click +Create App
- Name your app (e.g.,
ticky)
In your app settings:
| Setting | Value |
|---|---|
| Redirect URL | http://localhost:18080/callback |
| Scopes | tasks:read, tasks:write |
export TICKTICK_CLIENT_ID=your_client_id
export TICKTICK_CLIENT_SECRET=your_client_secretticky auth login
ticky tasks list --jsonticky auth loginOpens a browser for TickTick authorization. Token is saved to ~/.config/ticky/token.json.
ticky auth status [--json] [--plain]ticky auth logoutticky tasks list [--project <id>] [--json] [--plain]| Flag | Required | Description |
|---|---|---|
--project <id> |
No | Project ID (default: Inbox) |
ticky tasks get <task_id> --project <id> [--json] [--plain]| Flag | Required | Description |
|---|---|---|
<task_id> |
Yes | Task ID |
--project <id> |
Yes | Project ID |
ticky tasks create --title <title> [--project <id>] [--content <text>] [--priority <level>] [--due <date>] [--tags <tags>] [--json] [--plain]| Flag | Required | Description |
|---|---|---|
--title <title> |
Yes | Task title |
--project <id> |
No | Project ID (default: Inbox) |
--content <text> |
No | Task content/description |
--priority <level> |
No | none, low, medium, high |
--due <date> |
No | today, tomorrow, +3d, YYYY-MM-DD |
--tags <tags> |
No | Comma-separated tags |
Examples:
ticky tasks create --title "Review PR" --priority high --due tomorrow
ticky tasks create --title "Buy milk" --tags "shopping,personal" --jsonticky tasks update <task_id> --project <id> [--title <title>] [--content <text>] [--priority <level>] [--due <date>] [--clear-due] [--tags <tags>] [--add-tags <tags>] [--remove-tags <tags>] [--json] [--plain]| Flag | Required | Description |
|---|---|---|
<task_id> |
Yes | Task ID |
--project <id> |
Yes | Project ID |
--title <title> |
No | New title |
--content <text> |
No | New content |
--priority <level> |
No | none, low, medium, high |
--due <date> |
No | New due date |
--clear-due |
No | Clear the due date |
--tags <tags> |
No | Replace all tags |
--add-tags <tags> |
No | Add tags |
--remove-tags <tags> |
No | Remove tags |
Examples:
ticky tasks update abc123 --project def456 --priority high --due +3d
ticky tasks update abc123 --project def456 --add-tags "urgent" --jsonticky tasks complete <task_id> --project <id> [--json] [--plain]| Flag | Required | Description |
|---|---|---|
<task_id> |
Yes | Task ID |
--project <id> |
Yes | Project ID |
ticky tasks delete <task_id> --project <id> [--json] [--plain]| Flag | Required | Description |
|---|---|---|
<task_id> |
Yes | Task ID |
--project <id> |
Yes | Project ID |
ticky projects list [--json] [--plain]ticky projects get <project_id> [--json] [--plain]| Flag | Required | Description |
|---|---|---|
<project_id> |
Yes | Project ID |
ticky tags list [--json] [--plain]Aggregates tags from tasks across all projects, sorted by usage count.
| Variable | Required | Description |
|---|---|---|
TICKTICK_CLIENT_ID |
Yes | OAuth client ID |
TICKTICK_CLIENT_SECRET |
Yes | OAuth client secret |
TICKTICK_ACCESS_TOKEN |
No | Direct access token (skips token file, useful for CI/agents) |
After ticky auth login, the OAuth token is saved to ~/.config/ticky/token.json with 0600 permissions. Token refresh is handled automatically.
If TICKTICK_ACCESS_TOKEN is set, the token file is ignored.
abc123def456789012345678 Review PR [high] (due: 2026-02-12) #work
[
{
"id": "abc123def456789012345678",
"projectId": "inbox123",
"title": "Review PR",
"priority": 5,
"dueDate": "2026-02-12T14:59:59.000+0000",
"tags": ["work"]
}
]abc123def456789012345678 inbox123 Review PR high 2026-02-12T14:59:59.000+0000 work
# Build
go build -o ticky .
# Run tests
go test -v ./...
# Run tests with coverage
go test -cover ./...See docs/TESTING.md for detailed testing guide.
MIT
Contributions are welcome! Please read our Contributing Guide before submitting a Pull Request.
See also: