Skip to content

Kanban task board: tickets agents work on, coding tickets end in a pull request (GODM-20) - #29

Merged
danielehrhardt merged 10 commits into
mainfrom
agent/c-pro/8c5b45b2596d
Sep 29, 2026
Merged

danielehrhardt merged 10 commits into
mainfrom
agent/c-pro/8c5b45b2596d

Conversation

@danielehrhardt

@danielehrhardt danielehrhardt commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Adds a Trello-style task board to workspaces (GODM-20). You create tickets, assign them to agents, and the agents work on them. Coding tickets clone one of the workspace's git repositories (added in GODM-19) and end in a pull request.

Task board

How it works

  • Columns follow the status model: Backlog (parked, never starts), Todo (queued: a ticket that lands here with an agent starts it), In progress, In review, Blocked, Done and Cancelled.
  • Starting: the agent works in the ticket's own conversation. That conversation is archived, so it stays off the chat list, and "Watch live" opens it. When a run ends, the ticket moves to In review, or to Blocked if the run failed, was stopped, or the agent called the new task_report_blocked tool. Replying to a ticket puts it back to work.
  • Ticket types:
    • Task: the agent does it and reports back.
    • Research: the agent writes a Markdown report.
    • Coding: Godmode clones the repository into <data>/tasks/<id> on a new godmode/<n>-<slug> branch and runs the agent there. When the agent finishes, Godmode commits what it left, pushes the branch with your own git login and opens a PR with gh pr create. Without gh, or on GitLab, the ticket links to the page that opens one. Merged PRs move the ticket to Done (checked every 5 minutes), and follow-ups update the open PR.
  • Repositories come from the workspace's git repositories (GODM-19). A coding ticket picks one of them (the first by default) or another URL, plus an optional base branch. Its checkout is separate from the workspace's shared clone, which is left out of the ticket's run.
  • Safety:
    • New .env/key files are never committed.
    • A diff that contains a vault secret is never pushed.
    • Commits that others pushed to the branch are merged in, and the push uses an explicit lease so nothing is overwritten.
    • Task git runs through the same hardened runner as workspace clones: no prompts, and a clone's hooks or fsmonitor never run.
  • Godmode agent tools: tasks_list, task_create and task_update follow the delegation rules. A task run can't start a manager agent, so tasks can't spawn tasks without end.

UI

  • Board: drag and drop with dnd-kit, across columns and within a column. Drops are applied optimistically, columns can be collapsed, you can add a ticket inline, and C opens a new ticket. Moving a running ticket out of In progress asks before it stops the agent.
  • New task dialog: pick a type, a workspace and an agent, with "Create & start".
  • Detail sheet: title and description (Markdown) can be edited inline. It shows live progress with Watch live and Stop, the branch and PR card, the result or report, why a ticket is blocked with a Retry button, and a follow-up composer.
  • Elsewhere: a Tasks item in the sidebar and the command palette, and a Tasks button on workspace cards.

Task detail

Testing

  • packages/core/test/tasks.test.ts has 26 tests. They run the board flow against the fake Claude CLI and a real git remote served over smart HTTP:
    • auto-start, review, blocked, retry
    • stopping on a move, follow-ups, restart recovery
    • branch push and PR update
    • merging a reviewer's commit
    • secret file and secret value guards
    • races (a restart while cloning, reassigning a ticket whose run is queued)
    • gh PR creation and merge detection with a fake gh
  • The full core suite passes (721 pass, 10 skipped). pnpm -r typecheck and vite build pass.
  • I checked the feature end to end in a running app with a headless browser: a real clone, branch and push, cross-column drags, reordering, dragging a ticket into Todo, and the stop confirmation.

…n a pull request (GODM-20)

Tasks live on a board per workspace (or global) with Backlog, Todo, In progress,
In review, Blocked, Done and Cancelled columns. A ticket that enters Todo with an
agent starts it in the ticket's own conversation; the run's outcome moves the
ticket to In review or Blocked, and follow-ups put it back to work.

Coding tickets clone the workspace's repository onto their own branch, and when
the agent is done Godmode commits leftovers, pushes the branch and opens a pull
request with the GitHub CLI (or links to the page that opens one). Merged pull
requests move their ticket to Done. Workspaces get a repository and base branch.

The UI adds a drag-and-drop board (dnd-kit), a new-task dialog with task types, a
detail sheet with live progress, pull request and follow-up composer, and board
tools for the Godmode agent (tasks_list, task_create, task_update) plus
task_report_blocked for agents working on a ticket.
# Conflicts:
#	apps/desktop/src/components/agents/detail/chats-tab.tsx
- Keep restarts the board asks for while a task is cloning or publishing, and
  handle runs that end meanwhile; reassigning a task with a queued run restarts it
  instead of blocking it
- Moves caused by the work only apply from the status it expects and put the task
  at the top of its column
- Merge commits pushed by others and push with an explicit lease instead of
  overwriting them; fast-forward the checkout on restart
- Leave new env/key files out of commits and never push a diff that contains a
  vault secret; hide credentials in repository URLs
- Agents' coding tasks use the workspace repository, and task runs can't start
  manager agents (no task loops); task numbers are never reused
…ation loops

- Refuse follow-ups while Godmode prepares or publishes a task
- Don't push a branch that adds env/key files, even ones the agent committed
- Runs delegated from a task run can't start manager agents either
- Keep a restart's progress label when the board stops the old run
…(GODM-19)

Drop the task board's own workspace repository fields in favour of the workspace
git sources from GODM-19: coding tasks pick one of the workspace's repositories
(the first by default) or another URL checked with parseGitUrl, clone with the
same hardened git as workspace clones, and their runs leave the workspace's
shared clone of that repository out. Task tests push to a smart-HTTP git server.
Pointer drags only target what is under the pointer (the last target sticks in the
gap between columns), decide above/below by the pointer, and change columns at most
once per frame — the rect fallback made a card flip between columns until React
gave up. A drop before a deferred column change lands where the pointer is.
# Conflicts:
#	docs/ARCHITECTURE.md
#	packages/core/src/db/migrations.ts
#	packages/core/src/index.ts
#	packages/core/src/mcp/tools.ts
#	packages/core/src/server/app.ts
#	packages/core/test/fixtures/fake-claude.ts
# Conflicts:
#	apps/desktop/src/lib/realtime.ts
#	packages/core/src/mcp/tools.ts
#	packages/shared/src/index.ts
# Conflicts:
#	apps/desktop/src/components/runs/run-status.tsx
#	apps/desktop/src/pages/activity/activity-page.tsx
#	docs/ARCHITECTURE.md
#	packages/core/src/db/migrations.ts
#	packages/core/src/mcp/tools.ts
#	packages/core/src/services/conversations.ts
#	packages/shared/src/events.ts
#	packages/shared/src/models.ts
#	pnpm-lock.yaml
@danielehrhardt
danielehrhardt merged commit 42793de into main Sep 29, 2026
4 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant