Launching today

Bruto
A task board that lives in your repo, for you and your AI
24 followers
A task board that lives in your repo, for you and your AI
24 followers
A brutalist task board for coding with AI. Notes live in your repo: copy the context with one key, or let an agent work the board over MCP and answer in each note. Standing rules, cross-project links and a map of your pages, APIs and tables. Free, open source.










Bruto
We came to the same approach too. We create a markdown file for each task. At the start we write the status and state. The approach is simple and works fine. I ran through your code because I was curious how you do the sync. And I think I found a possible problem there. The sync itself works well and is written carefully, but there is this scenario. Say we have an unsaved change to a note's state locally. At that same moment the AI agent changes the state of the same note. Then the local copy wins and rewrites the file. And it all looks fine. But the problem is that the AI agent thinks everything went through and that it made the change. And the log will say so. No errors. But in fact it's not true. How do you feel about adding a short line at the top, like "state was changed back"?
Bruto
@dimhold Great catch, and thanks for reading the code that closely. You were right: with an unsaved local edit, an agent's change to the same field was overwritten and nobody was told. Fixed and shipped: the human's value still wins, but now the note opens with a line telling the agent its change was reverted (so it sees it on its next read), the audit log records it, and the user gets a notice with "Use theirs". Both writers also re-read before writing now, so neither overwrites a save that lands in between. Markdown per task is a nice approach too, simple wins.
One from building a board like this: keep a task's age when it changes hands. On mine a task passed to someone else keeps its clock, otherwise something bounced back and forth for a week always looks like it arrived today. A small "sent back 3 times" on the note would do a lot of it here, since the round trip with the AI is the loop that repeats.
Bruto
@dalemooney Thanks Dale, that's a good one, and it's in. Every note now keeps its age from the day it was made, whatever status or hands it passes through, and counts each time review sends it back to the AI: the card shows "6d ↩ 3". The AI sees it too ("sent back 3 times") when it picks the note up, so it knows it's not the first round.
@jimy_k4 Nice, "6d ↩ 3" is exactly what I'd want to see on the card.