I’ve been working with AI coding agents for a while now. And something has been bugging me: every time I want to track tasks or issues within a project, I end up fighting with tools that weren’t designed for this workflow.
Jira? Too heavy. GitHub Issues? Requires a browser, authentication, network requests. A plain TODO.txt file? Gets messy fast, no structure, no way to attach context.
So I built queuestack.
What It Actually Is
queuestack is a minimal task and issue tracker that stores everything as plain Markdown files with YAML frontmatter. That’s it. No database, no server, no cloud sync. Just files in a folder.
queuestack/
├── 260109-0A2B3C4-fix-login-bug.md
├── bugs/
│ └── 260110-0B3C4D5-memory-leak.md
└── .archive/
└── 260108-0Z1Y2X3-old-task.md
Each item looks like this:
---
id: 260109-0A2B3C4
title: Fix Login Bug
author: Dominic Rodemer
created_at: 2026-01-09T12:34:56Z
status: open
labels:
- bug
- urgent
---
Description and notes in Markdown.
Why This Matters for AI Workflows
Here’s the thing about AI coding assistants—they’re really good at reading and writing files. That’s kind of their whole deal. So when your task tracker is just a folder full of Markdown files, suddenly the AI can:
- Create new issues on the fly
- Search through existing tasks
- Update status and labels
- Add notes and context
- Close items when done
No API tokens. No HTTP requests. No authentication dance. Just qs new "Fix that weird bug" --label bug and you’re done.
How I Actually Use It
My workflow looks something like this. I have queuestack configured in my global agent instructions, so the agent knows about it in every project. When I’m working on something and hit a bug or think of an improvement, I just say:
“Add a queuestack item for this memory leak we found”
And the agent runs:
qs new "Fix memory leak in WebSocket handler" --label bug --category backend
The item gets created, the agent can read it later, and I don’t break my flow.
But here’s where it gets interesting. I can also work the other way:
“/qstack fix 260114-ED4TS4W”
This tells the agent to pick up an existing issue and work on it. It reads the Markdown file, understands the context, and starts investigating. When it’s done, it can close the item:
qs close --id 260114-ED4TS4W
The item moves to .archive/, and life goes on.
The Scriptability Angle
Everything in queuestack works non-interactively. Every single command. This matters more than you might think.
When you’re building tooling for AI agents, you need predictable, parseable output. No fancy progress bars. No interactive prompts. Just clean text that pipes well and exits with sensible status codes.
# List open bugs, get file paths
qs list --open --label bug --no-interactive
# Search and get results as text
qs search "memory" --full-text --no-interactive
# Create without opening an editor
qs new "Automated task" --label bot --no-interactive
This means you can chain commands, pipe output to other tools, and—crucially—let an AI agent orchestrate everything without getting stuck on a “Press Y to continue” prompt.
The Interactive Side
When I’m the one using queuestack directly, there’s a nice TUI with arrow-key navigation, filters, and an action menu. Run qs list without flags and you get a proper interface.
But the interactive mode is the garnish, not the steak. The real value is in the scriptable, agent-friendly CLI.
Categories Without Configuration
One decision I’m happy with: categories are just folders. Put an item in queuestack/bugs/ and it has category bugs. Move it to queuestack/features/ and now it’s category features. No config files. No schema migrations. The filesystem is the source of truth.
This also means you can reorganize with plain old mv commands—or let your AI assistant do it.
What’s Next
I’m using queuestack daily now across multiple projects. It’s scratching an itch I’ve had for a while: a task tracker that treats AI agents as first-class citizens.
If you’re doing any kind of agentic development—Claude Code, Cursor, Codex, whatever—give it a try. It’s MIT licensed and available via Homebrew:
brew tap domzilla/tap
brew install queuestack
Or build from source if that’s more your style.
The repo is at github.com/domzilla/queuestack if you want to poke around. Maybe you’ll find it useful. Maybe you’ll hate it. Either way, I’d love to hear about it.