← Projects

Daisy

CLI and MCP server for running and tracking autonomous Claude Code loops against task graphs.

Daisy is a CLI and MCP server for running Claude Code in a loop. It builds on the Ralph Wiggum technique: Claude Code works on a task, and when it tries to exit, a hook feeds the same task back so it keeps iterating. That works, but it’s hard to see what the loop is doing, or to steer it through a larger plan. Daisy adds that structure, and runs each iteration as a fresh claude -p process instead of trapping the exit.

How Daisy is put together daisy start runs a daemon that owns the loop and serves the board. Each iteration is a fresh Claude Code process, which works through the task graph with Daisy's MCP tools.

Parts: daisy CLI (init · start), Daemon (loop runner · Hono), Kanban board (WebSocket updates), Claude Code (one process per turn), MCP server (next task · status), Task graph (JSON · dependencies).

  • daisy CLI to Daemon
  • Daemon to Kanban board
  • Daemon to Claude Code (spawn)
  • Claude Code to MCP server (tools)
  • MCP server to Task graph

Tasks live in a JSON file as a recursive tree, each with a status, dependencies on other tasks and acceptance criteria. daisy init sets up a .daisy/ folder and a prompt template, and daisy start launches the daemon and its web UI, where loops are started and watched. The MCP server gives Claude Code tools to read the current project, list tasks, get the next task whose dependencies are met, update a task’s status, read stats and signal that an iteration is complete. So the agent works through the graph itself, instead of being told what to do each time. The MCP server tells the loop runner what happened through a signal file in .daisy/, which the runner watches.

One iteration of the loop The MCP server and the loop runner never call each other: the server writes a small signal file and the runner watches for it. When an iteration is done, the runner ends that Claude Code process and starts the next one.
  1. Kanban board to Loop runner: start the loop
  2. Loop runner to Claude Code: spawn with the prompt file
  3. Claude Code to MCP server: get_next_task
  4. MCP server to .daisy folder: first ready task
  5. MCP server to Claude Code: task + criteria
  6. Claude Code: work on the task
  7. Claude Code to MCP server: update_task_status
  8. MCP server to .daisy folder: status + signal file
  9. .daisy folder to Loop runner: file watcher fires
  10. Loop runner to Kanban board: card moves
  11. Claude Code to MCP server: iteration complete
  12. .daisy folder to Loop runner: iteration_complete signal
  13. Loop runner to Claude Code: SIGTERM, then the next turn

A terminal UI shows task progress and the agent’s output side by side. A small Hono server with WebSockets serves a Kanban board in the browser, where tasks move between columns as the loop works and can be dragged by hand. Storage is plain JSON files, so there’s no database to set up, and it runs with npx.