rschenk/jj-todo
{ "createdAt": "2025-07-16T14:38:36Z", "defaultBranch": "main", "description": "A todo-list wrapper for jj-vcs", "fullName": "rschenk/jj-todo", "homepage": "", "language": "Shell", "name": "jj-todo", "pushedAt": "2025-07-20T02:40:01Z", "stargazersCount": 6, "topics": [ "jj", "jujutsu" ], "updatedAt": "2025-09-26T07:43:02Z", "url": "https://github.com/rschenk/jj-todo"}jj-todo
Section titled “jj-todo”A todo-list wrapper for jj-vcs
![screenshot of jt log]!(docs/screenshot@2x.png “screenshot of jt log”)
Motivation
Section titled “Motivation”jj is a fantastic version control system which I’ve been happily using for some time. After using the squash workflow, I realized I could create a bunch of temporary changes after the described change and use it like a todo list, then squash them down when I was finished.
Todo lists work best when they are:
- Quick to make
- Granular
- Give you a dopamine hit when you check an item off
- Keep motivation going by letting you see your progress
- Don’t require context switching
jj-todo gives you some simple wrappers around jj new, jj desc, and jj log to make todo-lists integrated right into your usual vcs workflow, check them off as you complete them, then squash them down when you finish all the items.
Installation
Section titled “Installation”This is just a bash script. Download jt and chmod +x. It is simply a wrapper for jj commands with a halfway decent cli.
This readme will describe the commands, but I’ve written a [guide]!(docs/guide.md) for how I use this! Take a skim through the docs below so you know what the commands do, then head over to the guide.
Documentation
Section titled “Documentation”jt new or jt n
Section titled “jt new or jt n”Makes a change with the provided description preceeded by "- [ ] "
If the current jj change has a description, creates a new change after the current one.
If the current jj change has no description, sets the description to the message you provide.
Examples:
Section titled “Examples:”$ jt new do the things# if the current change has a description,# equivalent to jj new -m "- [ ] do the things"
$ jt new do the things# if the current change has NO description,# equivalent to jj describe -m "- [ ] do the things"Quickly blast out a todo list:
$ jt n fix the bug$ jt n update the tests$ jt n touch up docsInsert a todo before another:
$ jj new --before xyz$ jt n oops forgot that thingjt toggle or jt t
Section titled “jt toggle or jt t”Toggles a todo item done by changing "- [ ]" to "- [x]" (and vice versa)
It will only alter the description if it starts with "- [ ]" or "- [x]". All other descriptions will be unaltered/ignored.
Examples:
Section titled “Examples:”$ jt log○ tqs ○ - [ ] fix event handler@ rws - [ ] ui matches mockup○ mmy - [x] update validations
$ jt toggle$ jt log○ tqs ○ - [ ] fix event handler@ rws - [x] ui matches mockup # <-- Notice it checked this one○ mmy - [x] update validationsjt log or jt l
Section titled “jt log or jt l”A wrapper for jj log with a more streamlined template.
Any args you pass will be forwarded along to jj log.
Examples:
Section titled “Examples:”$ jt log$ jt log --reversed --limit 10