This is very cool, thanks for sharing! I'm a huge proponent of tool-less things, and a consistent todo list format readable in any text editor has been extremely helpful for me. I use my own markdown-inspired todo+notes format, but looking through xit and todo.txt has given me some ideas, specifically around my format's[1] inability to indicate priority when a line is taken out of context.
Question: why must the square brackets be used[2]? Could not the first and third chars be omitted, leaving only the status of the item as the first char on the line? I can see (and appreciate!) the desire to use brackets for readability, but if there's a functional benefit I'm not sure I see it at first glance.
I especially like your use of `!` and `#`, that's a nice way to make those items accessible through a grep.
[1]: Each day begins with a `\n# YYYY-MM-DD` section heading, then I use the ordering of my day's tasks in the list to indicate priority. `- ` prefixes an incomplete task, `* ` prefixes a completed task, `~ ` prefixes an obsolete task (similar to your xit), and a generic note doesn't have any predefined first char. One or more pair(s) of spaces indent subtasks or notes as appropriate.
[2]: https://github.com/jotaen/xit/blob/main/Specification.md