No description
  • Rust 91%
  • Nix 9%
Find a file
2026-07-24 15:44:45 +02:00
src Initial commit 2026-07-24 15:44:45 +02:00
.gitignore Initial commit 2026-07-24 15:44:45 +02:00
Cargo.lock Initial commit 2026-07-24 15:44:45 +02:00
Cargo.toml Initial commit 2026-07-24 15:44:45 +02:00
devenv-rust.nix Initial commit 2026-07-24 15:44:45 +02:00
devenv.lock Initial commit 2026-07-24 15:44:45 +02:00
devenv.nix Initial commit 2026-07-24 15:44:45 +02:00
devenv.yaml Initial commit 2026-07-24 15:44:45 +02:00
flake.nix Initial commit 2026-07-24 15:44:45 +02:00
README.md Initial commit 2026-07-24 15:44:45 +02:00
rust-toolchain.toml Initial commit 2026-07-24 15:44:45 +02:00

linear-task-sync

Two-way synchronization between Linear issues and Taskwarrior tasks.

Features

  • Pull: Sync Linear issues assigned to you into Taskwarrior tasks
  • Push: Create Linear issues from Taskwarrior tasks in synced projects
  • Bidirectional updates: Changes in either system propagate to the other
  • Conflict resolution: Linear is the source of truth when both sides change

Installation

cargo build --release
cp target/release/linear-task-sync ~/.local/bin/

Taskwarrior Setup

Add these lines to your ~/.taskrc:

uda.linearid.type=string
uda.linearid.label=Linear ID
uda.linear_updated.type=string
uda.linear_updated.label=Linear Updated

Configuration

Run the configuration wizard:

linear-task-sync configure

This will prompt you for:

  1. Your Linear API key (get one from Linear Settings > API)
  2. Default team for new issues
  3. Workflow states to use for "Done" and "Canceled"
  4. Taskwarrior project prefixes to sync

Configuration is stored in ~/.config/linear-task-sync/config.toml.

Usage

Sync

Run a full two-way sync:

linear-task-sync sync

Preview changes without modifying anything:

linear-task-sync sync --dry-run

Show detailed output:

linear-task-sync sync --verbose

Data Mapping

Linear Taskwarrior Notes
Issue identifier (ENG-123) linearid UDA Primary key
Issue title description Synced bidirectionally
Team name Project (root) e.g., Engineering
Project name Project (sub) e.g., Engineering.MobileApp
Initiative name Tags e.g., +Q1_Roadmap
State type Status completed/canceled maps to done/deleted

Sync Behavior

Linear to Taskwarrior (Pull)

  • New issues assigned to you create new Taskwarrior tasks
  • Updated issues update the corresponding tasks
  • Completed/canceled issues are reflected in task status

Taskwarrior to Linear (Push)

  • New tasks in synced projects create new Linear issues
  • Completed tasks mark the corresponding issue as done
  • Deleted tasks mark the corresponding issue as canceled
  • Title changes propagate to Linear (unless Linear also changed)

Conflict Resolution

When both Linear and Taskwarrior have changes since the last sync:

  • Linear wins - the Linear value overwrites Taskwarrior

This ensures Linear remains the authoritative source for issue data.

License

MIT