Gh issues works surprisingly well as an agent board. Labels for state, one issue per feature. The part i haven't figured out yet is how to know when the output is actually done vs just "looks done" to the agent.

I find well described but concise acceptance criteria does a good job of anchoring the llm to the correct output. Also have them take screenshots of any UI work and respond to the ticket with them as proof.