Projects 2026 live
git-remote-tasks
Jira, Vikunja, Microsoft To Do and Notion as native git remotes - fetch pulls every task in as a file, push writes edits back; diff, log, blame and bisect work on tasks.
Python

A git remote helper is any executable named git-remote-<scheme> on the PATH: git spawns it for a URL with that scheme and speaks a line protocol over stdin and stdout. This one is a single Python file, standard library only, that answers to four names through symlinks — git-remote-jira, git-remote-vikunja, git-remote-mstodo, git-remote-notion — and translates between each tracker's REST API and git's object model.
So git fetch jira-work pulls every issue in as a file under tasks/, one YAML or Org-mode file per task. Edit one in your editor, commit, git push jira-work main, and the issue changes on Jira. Every sync is a real commit based on the previous tip, so git diff main jira-work/main shows what changed upstream, git log -- tasks/ is the audit trail, and git bisect walks every sync. A full snapshot on the first fetch, a changed-since delta afterwards; the since token is recorded only once the tip has advanced, so an interrupted import never loses data.
Push is honest: one upsert per edited file, one delete per removed file, a cross-source id refused rather than duplicated, and the exit code reflects every failure. Credentials live under [tasks-remote "<name>"] in .git/config, never in the URL.