Seeking the right kind of friction

I picked TaskWarrior as an entry point into CLI todo tools. There are a lot of them, and the struggle between Danny-O’Brien-style “just write it in a text file” minimalism and … the other extreme … is real. I picked TW because it has been around forever. I will not presume to judge its design decisions. I can tell a few strategically placed aliases would do a lot to remove the sense of crushing overhead. I also picked it because it is super scriptable, so it was easy to build a tasks backend into my contacts TUI with it. ...

June 24, 2025 · 7 min · 1398 words · mike

Helix and Marksman LSP server

The Marksman LSP server experience with Helix is so smooth. Given a directory of Markdown files, dropping in a blank .marksman.toml or running git init . puts the directory on Marksman’s radar as a thing to work with. Provided Marksman is in your path, there’s no need for additional config. Drop into insert mode, start typing wikilink brackets ([[) and it invokes autocomplete on every file in the directory. Placing the cursor over a wikilink, you can use gd (go to definition) to open that file in a new buffer. ...

June 23, 2025 · 2 min · 415 words · mike

Integrating notes and contacts

I’ve been plugging away at another TUI app, this time for notes. It’s very much in line with the thing I was trying to do with bash and fzf, but instead in Go. Right now: Fast search for notes in either a configured directory or one named on the command line Tag search, either in-line (#tag) or in YAML frontmatter Open to-do search Hotkey to make a daily note of a given format Alternate note template. If you see the point in YAML frontmatter, it’ll do that. If you prefer “l1 heading from the title” it’ll do that. It does a very basic sort of Markdown rendering on its own for note preview, or you can configure it to shell out to bat, glow, etc. I am using glow because it has an option to edit a file under preview. It works really well with Helix or other LSP-aware editors, because you can add the Marksman LSP server and have your own connected notes system with wiki-linking without having to adopt another app, like Obsidian, if you don’t want that whole ride. ...

June 20, 2025 · 2 min · 347 words · mike

Helix

I had insomnia a few nights ago, so I started fiddling with different things, including the CLI tasks tool dstask, which is sort of TaskWarrior without the misanthropy. (I kid.) So a kind of nice thing about dstask is that with dstask #{note number} note you pop open $EDITOR in a Markdown note attached to the task. dstask is aware of any Markdown checklists inside the task note and blocks completion of the task if there are open ones. ...

June 19, 2025 · 2 min · 402 words · mike

Integrating task trackers with contacts-tui

One of the best parts of my org-contacts setup was that when I moved a contact into a given state (followup, call, write, etc.) it’d become a task in my org agenda, along with all my other todos. I added integrations with TaskWarrior, dstask, and Things to contacts-tui this evening: Put a contact in a given state, the tasks backend creates a todo in your configured tracker with that contact’s label as a tag. ...

June 18, 2025 · 2 min · 345 words · mike

Contacts management in a TUI

I haven’t really liked social networking as a development. Sometimes I’d even say I mourn its existence. I used to have people with whom I shared a great email correspondence who abandoned that in favor of the Eternal Holiday Newsletter mode of Facebook, or the “oh, I tweeted about it last week if you want to look it up” of the assorted microblogging services. The kind of conversation we can have at a BBQ you invited your high school friends to is different from the one we can have over coffee. The kinds of things I’d say to you on my front porch might even be different from what I’d say at the cafe. ...

June 17, 2025 · 8 min · 1642 words · mike

The One-Armed Bandit

Well, I’ve spent a few weeks now playing around with Claude on two projects: An MCP for Remember the Milk An MCP for contacts management I haven’t read a lot of commentary on how to code with AI, and I’ll say a little more on the kind of AI-related commentary I have read in a bit. Instead, I just let myself stumble into the challenges and try to figure out my way around them. The biggest ones were: ...

June 14, 2025 · 11 min · 2190 words · mike

Remember the Milk MCP

I have a lot of todos and a lot of meetings. I hate playing task/calendar Tetris. Sometimes my task list gets way out in front of my calendar. I got pretty curious about “what is an MCP and how do they work?” So this morning, when I woke up early anyhow, I set about to work with Claude to make a Remember the Milk MCP using some stuff I learned from making imgup. ...

June 7, 2025 · 4 min · 726 words · mike

imgup v0.12.0 (flipping the script)

One of my bigger annoyances with Lightroom CC is how magestically indifferent it is to anything a normal human being using a Mac in 2025 might want to with it in the way of sharing your pictures. It is a literal void on the desktop: AppleScript? lol. Even the standard macOS share sheet? Nope. You can export out to disk, and you can share things to Adobe’s own services. If you want more extensibility or flexibility well, go use Lightroom Classic. ...

June 5, 2025 · 3 min · 451 words · mike

imgupv2 0.9.0 - Bluesky, multi-image, caching

I pushed out imgupv2 0.9.1. It’s what I’d call feature complete: multi-image posting to Flickr, Smugmug, Bluesky, and Mastodon world’s crabbiest, most indifferent caching strategy GUI for posting straight from Apple Photos or Finder selection I kinda like where it ended up with multi-images from the command line. They were super clunky using standard command line switches and positional arguments, and I think that’s a weird use case for the command line, but it’s a normal use case for automation, so the tool biases in favor of machines talking at each other in those instances: ...

June 3, 2025 · 2 min · 347 words · mike