Skip to content

[Feature]: Agent-driven workspace board status transitions with heartbeat polling #2378

Description

@slashdevcorpse

Problem

The workspace board is a manual kanban. Users drag cards between columns (todo, in-progress, in-review, completed), but nothing keeps these states accurate. Cards sit in "in-progress" long after a PR is merged. Agents finish work but the card stays where it was. The board goes stale because nobody remembers to update it.

Proposal

Two board modes, toggled in settings:

  1. Manual board (current behavior, default). User drags cards. Nothing changes.
  2. Agent-driven board. Agents infer workspace status from corroborating signals. The user acts as the PM: final authority, can override or lock any transition.

This requires agent tokens/activity to function, so it must be an explicit opt-in toggle. Users who do not want agent cycles spent on board management keep the manual board.

Core Principle

Agents prove work happened. The system proposes a transition only when multiple signals agree. The user's last word is law.

Signal to Status Mapping

Signal Corroborating Evidence Proposed Transition
Worktree created, no commits None needed to do
First commit on branch OR agent status reports working Both ideally, either sufficient in progress
PR opened (linkedPR detected) Branch has commits in review
Agent status reports done + no PR exists yet Commits exist on branch in review
PR merged CI passed (if available) completed
PR review has comments/requested changes Feedback detected on linked PR back to in progress
Re-push after addressing feedback New commits after review comments in review (again)

That last row is critical. When a PR is "in review" and gets feedback (requested changes, blocking comments), the workspace moves back to "in progress" because there is work to do. Once the agent or user pushes fixes, it returns to "in review". This loop continues until the PR is approved and merged.

Heartbeats via Automations

The feedback detection (PR comments, review status, CI failures) should run as a heartbeat automation using Orca's existing automations system. This keeps the polling visible and configurable.

Proposed implementation: a built-in automation type (or a preset template) that runs on a schedule and checks linked PR status:

orca automations create \
  --name "Board status heartbeat" \
  --trigger "*/15 * * * *" \
  --prompt "Check linked PR status for all active workspaces. If review feedback exists, move to in-progress. If approved and CI green, move to completed." \
  --provider claude \
  --workspace-mode existing

The heartbeat checks:

  • PR review state (approved, changes requested, commented)
  • CI status (passing, failing)
  • New comments since last check
  • Merge status

These heartbeats should be visible in the Automations tab so users can see when they last ran, what they found, and what transitions they proposed. This is the same pattern as GitHub bots that review PRs, but operating on the local board state.

Configuration

Settings > Workspace Board:
  Board mode:
    ( ) Manual (default, current behavior)
    ( ) Agent-driven (uses agent tokens for status inference)
  
  When agent-driven:
    [x] Move to "in progress" on first commit or agent activity
    [x] Move to "in review" when PR is opened
    [x] Move back to "in progress" when review feedback received
    [x] Move to "completed" when PR is merged
    
  Heartbeat interval: [every 15 minutes v]

The heartbeat automation appears in the Automations tab alongside user-created automations, clearly labeled as a system automation. Users can pause it, change its schedule, or view its run history like any other automation.

Existing Plumbing

  • worktree.set RPC accepts workspaceStatus (the write path exists)
  • Agent hook server already emits agent states (working, blocked, done)
  • linkedPR field already exists on worktrees
  • Board UI already reacts to status changes in real-time
  • Automations system already supports scheduled agent runs with workspace targeting
  • Automations tab already shows run history and status

Most of the wiring is already in place. What's missing is a thin inference layer connecting these signals to the write path, plus a heartbeat template for PR/review polling.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or requestsize/lLarge PR (≤2500 added lines, ≤50 files)

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions