Keep a TickTick project in sync with your Linear issues

Every 30 minutes, your assigned Linear issues show up in one TickTick list with matching titles, due dates, and priorities.

Deterministic Code
LinearTickTickEngineeringPersonal ProductivityData Sync
PromptCreate

Every 30 minutes, keep a dedicated TickTick project in sync with the Linear issues assigned to me, so my personal task list always matches my engineering queue. Build this as a deterministic sync: every step is a fixed field mapping over structured data and no judgement or summarization is required.

Trigger: cron, every 30 minutes. The TickTick Open API sends no outgoing webhooks and the sync is anchored on the TickTick side, so this is scheduled rather than event driven.

Configuration I set once: my Linear assignee id, and the name of the TickTick mirror project. If the assignee id is not supplied, resolve it with Linear Get Viewer. Resolve the mirror project id with TickTick List All Projects by matching the configured project name exactly, and stop the run with a clear error if no project matches.

Step 1. Use Linear List Issues to fetch every issue assigned to me that is still unfinished. Filter on assignee id equal to mine, and on state type in backlog, unstarted, started and triage, which are the unfinished workflow state types. Completed and canceled are the finished ones. Page through with Relay cursor pagination, passing pageInfo.endCursor as after while hasNextPage is true, so a long queue is covered fully. For each issue keep the identifier such as ENG-412, the title, the dueDate, and the priority integer.

Step 2. Use TickTick Get Project Data on the mirror project to read its current contents. This returns only undone tasks, which matters here: a finished issue with no counterpart means the mirror task was already completed on an earlier run, so it must be treated as already handled and never recreated. For each returned task, parse the leading Linear identifier out of the title, matching uppercase letters, a hyphen, digits, then a space. Tasks with no leading identifier are ones I manage by hand and must be left untouched.

Step 3. For every unfinished assigned issue with no matching task, create one with TickTick Create Task in the mirror project. Set the title to the identifier, a space, then the issue title, for example "ENG-412 Fix billing webhook retries". Set the due date and priority using the field mappings below.

Step 4. Where a counterpart already exists, use TickTick Update Task to refresh the title, the due date from the issue due date, and the priority. TickTick task updates are a POST to /task/{taskId} and not a PUT, and the request body needs both the task id and the project id. Skip the write when all three fields already match, so a run where nothing changed performs no writes.

Step 5. Build the set of identifiers returned in step 1. Any undone mirror task whose identifier is not in that set no longer belongs on my list, either because the issue reached a completed or canceled state, or because it was reassigned away from me. Mark each of those done with TickTick Complete Task.

Field mappings, applied literally. Title: Linear identifier, a space, then the Linear issue title. Due date: the Linear issue dueDate, formatted for TickTick as ISO 8601 in the form yyyy-MM-dd'T'HH:mm:ssZ; when the issue has no due date, leave the TickTick due date empty. Priority: Linear 1 urgent maps to TickTick 5 high, Linear 2 high maps to TickTick 3 medium, Linear 3 normal maps to TickTick 1 low, and Linear 4 low and Linear 0 no priority both map to TickTick 0 none. TickTick accepts only priority values 0, 1, 3 and 5, since 2 and 4 are unused. TickTick task status is 0 for active and 2 for completed.

Behaviour notes. Linear is the source of truth, so if I edit a mirrored task's title, due date or priority inside TickTick, the next run resets it to match Linear, and that is intended. Check the errors array on every Linear GraphQL response, because Linear can return HTTP 200 with partial errors. Back off and retry on TickTick 429 and 5xx responses. If one task fails to create or update, log it and carry on with the rest rather than aborting the whole run.

What does this prompt do?

  • Checks every 30 minutes for the Linear issues assigned to you that are not finished yet.
  • Adds any missing issue to the TickTick project you nominate, with the issue reference at the front of the task title.
  • Keeps tasks current by refreshing the title, due date, and priority whenever they change in Linear.
  • Ticks off a mirrored task as soon as its issue is closed, cancelled, or handed to someone else.

What do I need to use this?

  • A Linear account with issues assigned to you
  • A TickTick account
  • One TickTick project set aside as the mirror list, for example an empty list called Engineering queue

How can I customize it?

  • Change how often it runs. Every 30 minutes suits a busy queue, while hourly or twice a day is plenty for most people.
  • Narrow what gets mirrored, for example only issues in your current cycle, only one team, or only issues above a certain priority.
  • Adjust the priority mapping if you would rather have both urgent and high issues land as high priority in TickTick.

FAQs

Will this overwrite tasks I add to the project myself?
No. Only tasks whose titles begin with a Linear issue reference are managed by the sync. Anything you type in yourself is left completely alone, so you can mix personal to-dos into the same list.
What happens when I finish an issue in Linear?
The mirrored task is ticked off on the next run. Once a task is complete it is never brought back, even though the issue stays in your Linear history.
Does it create duplicate tasks if it runs twice?
No. Every task is matched to its issue by the reference at the start of the title, so a second run recognises what already exists and updates it instead of adding it again.
Can I edit the task in TickTick instead of Linear?
Linear stays the source of truth. The title, due date, and priority are reset to match Linear on the next run, so make those changes in Linear and let them flow through.
Do I need a paid TickTick plan?
The sync uses ordinary task lists and standard fields like due date and priority, so it does not depend on premium features. You just need to connect your TickTick account.

Related templates

Monthly CloudWatch cleanup audit for waste and dead alarms

On the first Monday of every month, find the alarms nobody watches and the monitoring you quietly pay for, then get a costed cleanup list in Slack and Linear.

Amazon CloudWatch
Slack Bot
Linear
Agentic Task
Turn today's Granola meeting notes into TickTick tasks

Every weekday at 6pm, the commitments you made in meetings become TickTick tasks with real due dates, no duplicates, and a tidy Slack recap.

Granola
TickTick
Slack Bot
Agentic Task
Weekly Tailscale cleanup digest with a prioritized action list

Every Monday we review your Tailscale network for stale devices and aging keys, then post a ranked cleanup list to Slack and open tickets for the urgent ones.

Tailscale
Slack Bot
Linear
Agentic Task
Time blocked daily plan from your calendar and TickTick

Every weekday at 7:30am, get a Slack message that fits today's real tasks into the gaps between your meetings, and warns you when the day is overbooked.

TickTick
Google Calendar
Slack
Agentic Task
Turn starred Gmail emails into TickTick tasks every hour

Every hour during your workday, the emails you starred in Gmail become properly written TickTick tasks with a real deadline and a sensible priority.

Gmail
TickTick
Agentic Task
Daily Segment delivery check with Slack and Linear alerts

Every morning, find out whether your Segment destinations are actually receiving data, and only hear about it when delivery starts failing.

Twilio Segment
Slack
Linear
Agentic Task

Stop retyping your Linear queue into your to-do list.

Set this up once and your personal task list keeps itself aligned with the work you are actually assigned.