Skip to content

Monitor Dashboard Reference

The monitor process serves a React SPA dashboard at http://localhost:9106 (the default monitor port). This page is a complete reference for the dashboard’s tabs, pipeline states, block reasons, column metrics, and operator controls.

For the interactive REST API that backs the dashboard, see api.md.


Navigate to http://localhost:9106 in a browser. In Docker Compose deployments the port mapping is 9106:9106 on the monitor container; in bare-metal deployments the monitor binds to its configured health_port (default 9106).


When agents.monitor.auth is configured in colony.config.yaml, all dashboard and API endpoints require a valid session. The dashboard renders an in-page login form — no native browser Basic Auth prompt is shown.

agents:
monitor:
auth:
username: colony
password_env: COLONY_DASHBOARD_PASSWORD

Login flow:

  1. The dashboard login form POST /api/auth/login with your username and password.
  2. On success, the monitor sets a signed COLONY_SESSION httpOnly cookie valid for 12 hours.
  3. After 12 hours, or after any monitor process restart, the cookie is invalidated and you must log in again.

Note: The session signing secret is generated fresh on each monitor restart. A monitor redeploy logs out all active sessions.

When no auth block is configured, the dashboard is open to all visitors with network access.

For programmatic and CLI access, see api.md — Authentication.


Every page of the dashboard renders a persistent header row above the tab bar and a three-card status strip below it. The controls documented here are always visible regardless of which tab is active.

A text input in the top-right corner of the header accepts an issue reference and opens the issue-detail panel when Enter is pressed.

FormatExampleBehaviour
#N#42Opens issue 42 in the first configured repo.
owner/repo#Nacme/api#42Opens issue 42 in the specified repo.

An inline error is shown if the reference cannot be parsed or no repos are available.

Displays the timestamp of the last successful data fetch alongside a button that triggers an immediate reload.

A badge next to the RefreshBar reflects the real-time connection state:

BadgeMeaning
LiveDashboard is receiving real-time push updates via SSE.
PollingSSE connection is not active; dashboard falls back to 30-second interval polling.

Three cards appear below the header row.

CardDescription
StatusOverall pipeline health reported by the monitor: healthy, degraded, or unhealthy.
UptimeHow long the monitor process has been running since its last restart, formatted as Xh Ym.
Cost: <window>Total LLM API spend in the selected time window. Click to cycle through 24h → 7d → 30d → Lifetime. The active window label is shown in the card header; hover for a tooltip description.

Two buttons sit in the top-right corner of the header:

ButtonEffect
?Opens the tab-contextual Help & Glossary panel, automatically scrolling to the section relevant to the current tab. A second ? button appears inline at the right end of the tab bar and opens the same panel.
Log outEnds the active session and returns to the login form. Relevant only when agents.monitor.auth is configured.

When more than one repository is detected in the pipeline, a banner appears below the header row:

Running multi-repo mode. Colony Cloud provides full multi-repo management — runcolony.com

The banner is not shown in single-repo deployments.


The dashboard is organized into tabs. Click a tab name to navigate to it. Hover the tab label for a tooltip with its description (populated from TAB_GLOSSARY in packages/dashboard/src/glossary.ts).

TabDescription
PipelineOverview of worker pool health, in-flight tasks, and per-repo state distribution.
ActivityChronological feed of recent issue state transitions across all repos.
CostBreakdown of LLM API spending by issue, repo, and time window.
TracksManage issue tracks — persistent groups of related issues that share a theme or goal.
Write QueuePending VCS projection writes (GitHub label syncs) queued in the outbox drainer.
BlockedIssues in the failure-blocked state, with error patterns and operator unblock actions.
Dead LettersTasks that failed permanently and were moved to the dead-letter queue.
ConsistencyData-consistency findings from periodic audits — stale flags, orphan issues, subtask edge drift, SI linkage gaps, and label/Postgres mismatches — with per-finding one-click repair actions.
QueueLive view of the work_tasks Postgres queue: pending, claimed, and recently completed tasks.
RegressionRegression guard results — automated checks that protect the pipeline from entering broken states.
EventsRaw event log of webhook deliveries, state transitions, and agent actions.
LogsStructured log output from the monitor process (Pino JSON lines).
SystemRuntime health: Node.js version, memory usage, Postgres connectivity, and uptime.
WorkflowsRegistered workflow definitions and their state machine graphs.
WorkersPer-worker status: current task, lease age, drain state, and manual controls.
APIInteractive OpenAPI reference for the monitor REST API.
StrategyStrategist proposal review and snapshot approval — view and approve AI-generated strategy proposals. Decline a proposal by updating the Charter.
CharterEdit the strategy charter — define goals and constraints that guide the Strategist when generating proposals.
Review QueueEvery open pull request awaiting human review, grouped by status. Ready-for-review items (human action required) are listed first, visually distinct from auto-merging and in-progress PRs.

Pipeline states are displayed as labels on GitHub issues and throughout the dashboard. Definitions are sourced from PIPELINE_STATE_GLOSSARY in packages/dashboard/src/glossary.ts.

StateLabelDescription
unlabeledUnlabeledIssue exists in GitHub but has not been picked up by Colony yet.
newNewIssue has been enqueued and is awaiting analysis.
planningPlanningEpic is being decomposed into subtasks by the planner.
analyzingAnalyzingIssue is being analyzed to produce an implementation plan.
needs-clarificationNeeds ClarificationAnalyzer could not determine intent; waiting for the author to clarify.
ready-for-devReady for DevAnalysis complete; issue is queued for implementation.
dependency-blockedDependency BlockedIssue is waiting for one or more upstream issues to complete.
failure-blockedFailure BlockedIssue hit a hard block (repeated failures, cost cap, etc.) and needs operator action.
changes-requestedChanges RequestedPR reviewer requested changes; developer will revise and resubmit.
in-reviewIn ReviewPull request is open and undergoing automated or human review.
merge-pendingMerge PendingPR has passed review and is queued for merge.
human-review-readyHuman Review ReadyAutomated checks passed; PR is ready for a human reviewer.
waiting-for-subtasksWaiting for SubtasksEpic is waiting for all child subtasks to reach Done before it can proceed.
doneDoneIssue is complete; pull request has been merged.
pausedPausedIssue processing is suspended by an operator; resumes when unpaused.

When an issue reaches failure-blocked, a block_reason code is recorded. These codes are shown in the Blocked tab and in the Help & Glossary panel. Definitions are sourced from BLOCK_REASON_GLOSSARY in packages/dashboard/src/glossary.ts.

CodeLabelDescription
failureMax RetriesIssue exceeded the maximum retry count after repeated generic failures.
build_failureBuild FailureThe build or compile step failed and could not be automatically fixed.
ci_hard_failureCI Hard FailureA CI check failed in a non-transient way (e.g., a required status check) and will not auto-retry.
cost_capCost CapThe per-issue or monthly cost cap was reached; increase or reset the limit to continue.
customCustom BlockIssue was routed to an operator decision — for example, a pull request was closed by a human without merging.
dependencyDependencyIssue is blocked because a dependency issue has not completed yet.
empty_against_baseEmpty Against BaseThe PR diff against the target branch is empty; no effective changes were produced.
merge_conflictMerge ConflictThe PR has a merge conflict; requires human or LLM resolution (non-transient, not auto-retried).
overlapFile OverlapAnother in-flight issue is modifying the same files; blocked to avoid conflicts.
reimplement_loopReimplement LoopDeveloper has been sent back for re-implementation too many times without making progress.
review_crashReview CrashThe reviewer agent crashed or timed out and could not be recovered.
review_cycle_limitReview Cycle LimitPR has gone through too many review-revise cycles without being approved.
conflict_rejectionConflict RejectionChanges were rejected due to conflicts introduced by a concurrently merged PR.
identical_failureIdentical FailureThe same error recurred without any change in output, indicating a stuck retry loop.
planning_failurePlanning FailureEpic decomposition failed; the planner could not produce valid subtasks.
worktree_failureWorktree FailureSetting up the git worktree for this issue failed (e.g., disk space, submodule conflict).
unknown_reasonUnknown ReasonBlock reason was not recorded; inspect the issue timeline for details.
dependency_cycleDependency CycleA circular dependency among issues was detected; manual resolution is required to break the cycle.

The Pipeline tab renders a warning-bordered Needs Attention (N) panel whenever Colony detects issues that require operator action. Each row shows the issue number, title, current state, a reason badge, how long the issue has been in that state, and inline action controls (pause/resume/unblock/retry/change state/cancel via the same IssueActions controls available in the issue detail panel).

Hovering a reason badge shows a tooltip with its description. The same descriptions appear in the Help & Glossary panel under Needs Attention Reasons.

CodeBadge LabelDescription
human-review-readyReview ReadyPR is awaiting human review approval; automated checks passed and no further agent action is needed.
blockedBlockedIssue hit a hard block and is in the failure-blocked state; operator must unblock, retry, or cancel.
needs-clarificationNeeds ClarificationAnalyzer could not determine intent; issue author must clarify the request before work can resume.
staleStaleIssue has been in its current state without progress for longer than the configured stale threshold.
needs-humanNeeds HumanIssue requires direct operator intervention; Colony cannot proceed without human input.
token-expiryToken ExpiredA GitHub token used by this repository is expired or invalid; rotate the token to resume processing.
lingering-branchLingering BranchA development branch for a completed issue was never deleted; clean it up or close the associated PR.

Definitions are sourced from NEEDS_ATTENTION_GLOSSARY in packages/dashboard/src/glossary.ts.


The Review Queue tab groups open pull requests by their current status. Status badges are sourced from REVIEW_QUEUE_GLOSSARY in packages/dashboard/src/glossary.ts.

StatusDescription
Ready For ReviewPR has passed automated checks and is waiting for a human reviewer to approve or request changes.
Auto MergingAll approvals are in place; the merge is proceeding automatically with no human action needed.
Changes RequestedA reviewer has requested changes; the agent is addressing the feedback before re-requesting review.
BlockedThe PR is blocked and cannot proceed; operator intervention is required to unblock or cancel.
In ProgressReview is still in progress — automated checks or an LLM review are running.

Column headers in the dashboard tables expose tooltips explaining each metric. Full definitions are sourced from COLUMN_GLOSSARY in packages/dashboard/src/glossary.ts.

Column / MetricDescription
HeartbeatHeartbeat freshness: fresh = last ping <90 s ago; stale = 90–300 s; dead = >300 s or never received. A dead worker may have crashed or lost its Postgres connection.
StatusWorker lifecycle state: idle = waiting for tasks; working = processing a task; draining = finishing the current task then stopping; stopped = shut down.
Pinned IssueIssue and task type currently held by this worker’s lease. Use Force reclaim to release a stuck lease and return the task to the queue.
Task StatusTask lifecycle: pending = waiting in the queue for a free worker; claimed = a worker has acquired the lease and is actively processing this task.
Avg WaitAverage time tasks spend in the pending state before being claimed by a worker. High values indicate workers are saturated or the pool is undersized.
Oldest PendingAge of the oldest task still waiting to be claimed. Highlighted when >5 minutes — a sign of queue backpressure or a stuck worker.
Cost WindowClick to cycle the cost display window: 24h / 7d / 30d = rolling window; Lifetime = all recorded history.
Projection StatusVCS write status: pending = queued to be sent to GitHub; failed = all retry attempts exhausted. Items remain here until retried or discarded.
Burn RateEstimated daily LLM API spending based on recent cost events, used to project when the monthly budget will be exhausted.
Projected ExhaustionEstimated date when the monthly budget will be consumed at the current burn rate. Highlighted in orange when exhaustion falls within the current month.
IssueIssue number and title identifying the pipeline item in this row.
RepoThe GitHub repository (owner/name) this item belongs to.
AgentThe agent or task type (e.g. analyze, develop, review) that performed the logged action.
TimeTimestamp of the event, transition, or error — displayed as relative time; hover for the exact local date and time.
ActionsOperator controls available for this row (pause, retry, unblock, cancel, etc.).
ErrorThe most recent error output from the agent run for this item.
Blocked DurationHow long the issue has been in its blocked state, calculated from the time it was first marked blocked.
RecommendationSuggested operator action to resolve the block, generated by the pipeline monitor’s block-classification logic.
ReasonWhy this issue requires human attention — one of: blocked, review-ready, needs-clarification, stale, needs-human, token-expiry, or lingering-branch.
Time in StateHow long the issue has been in its current state without a pipeline transition.
From StateThe pipeline state the issue was in when the failed transition was attempted.
Target StateThe pipeline state the transition was trying to reach when it failed permanently.
CreatedWhen this dead-letter entry was recorded — i.e. when the transition permanently failed.
TypeCategory of the pipeline event (e.g. state_transition, claude_execution, error, self_healing). Click a row to expand the full event payload.
SummaryHuman-readable digest of the event payload — varies by type (e.g. “new → analyzing” for state transitions, cost and duration for executions).
TransitionThe state change that occurred, displayed as “From State → To State”.
CostLLM API cost in USD recorded for the agent run associated with this state transition.
KPIThe pipeline health metric being measured (e.g. block rate, mean cost per issue, review pass rate).
CurrentThe metric’s most recently computed value in the current measurement window.
BaselineThe reference value for this metric captured at the time the baseline snapshot was taken.
DeltaPercentage change from baseline to current value — positive means the metric increased.
MagnitudeSeverity tier of the observed change (e.g. negligible, minor, moderate, major).
DirectionWhether the metric moved up or down from baseline — interpretation depends on the KPI (e.g. a higher block rate is bad; a higher review pass rate is good).
StatusWhether the metric has crossed the regression threshold — shown as a “regressed” badge when the KPI has degraded beyond the configured tolerance.
TrendSparkline chart showing the metric’s value across recent successive snapshots, oldest left to newest right.
NameUnique identifier for the self-improvement track; used in API paths and log messages.
LabelGitHub label assigned to issues created under this track so they can be filtered and grouped.
EnabledWhether the track is active — disabled tracks do not generate new issues during the cooldown evaluation cycle.
CooldownMinimum time in minutes that must elapse between consecutive issues created by this track.
Active VersionCurrent active prompt version for this track; increment by editing the prompt in the expanded row.
StateInternal state identifier (slug) as defined in the workflow YAML (e.g. analyzing, in-review).
LabelHuman-readable display name for this workflow state shown in the dashboard.
TypeBehavioral trait of this state — active (executing), blocked, awaiting-human, or terminal (no outgoing transitions).
ExecutorThe executor plugin or built-in handler invoked when an issue enters this state (e.g. builtin:review, plugin:colony-content/analyze).
TransitionsList of valid next states reachable from this state according to the workflow graph.
SlugFull GitHub identifier for the repository in owner/name format.
BranchDefault branch Colony targets when creating worktrees and opening pull requests for this repo.
Pool SizeNumber of parallel workers configured to process tasks for this repository.
Setup CommandShell command run after creating a git worktree for this repo (e.g. bundle install for Rails). Empty means the default npm install is used.
AgentName of the agent process (e.g. sprint-master, monitor, webhook-receiver) being reported on.
StatusReported health of the agent — healthy (running and passing checks), unhealthy (failing but still up), or unknown.
UptimeHow long the agent process has been running since its last restart.
Consecutive FailuresNumber of successive health-check cycles the agent has failed without recovering.
Last ErrorMost recent error message captured from the agent’s health-check output.
Config ReloadStatus of the last config reload applied to this agent — applied (changes took effect), rejected (validation failed), or none.
KindCategory of the data-consistency finding: stale_blocked, stale_subtask_edge, orphan_missing_from_pg, si_linkage_gap, or label_drift.
DetailKind-specific audit detail — expand to view the raw fields that describe why this finding was raised.

The dashboard exposes several controls for managing pipeline state. All controls call the monitor REST API; see api.md for the underlying endpoint details.

The Workers tab shows a table of registered workers per repo. Each worker row displays a Force reclaim button only when that worker currently holds a pinned task (both a task type and issue number are recorded on the worker’s lease).

ControlConditionEffect
Force reclaimWorker has a pinned taskReleases the worker’s task lease and returns the task to the work_tasks queue so another worker can claim it. Use when a worker appears stuck but has not self-recovered.

Issues — Pause, Resume, Unblock, Retry, Change State, Cancel

Section titled “Issues — Pause, Resume, Unblock, Retry, Change State, Cancel”

Issue-level controls appear in the issue detail panel (accessed by clicking an issue number anywhere in the dashboard). Available controls depend on the issue’s current state and flags:

ControlShown whenEffect
PauseIssue is not paused and not doneSuspends issue processing. Adds the colony:paused label.
ResumeIssue is pausedRe-activates a paused issue and re-enqueues the work task.
UnblockisBlocked is trueOpens a confirm dialog: “Are you sure you want to unblock #N? This will resume processing.” On confirm, removes colony:blocked and re-enqueues the work task.
RetryState is one of: analyzing, in-review, merge-pending, planningRe-enqueues the work task for the current state without changing the state.
Change StateNot done, not paused, and the workflow snapshot has valid outgoing transitionsDropdown populated from GET …/valid-transitions. Selecting a target immediately forces the issue to that state via the workflow snapshot’s transition graph.
CancelIssue is not doneOpens a confirm dialog: “Are you sure you want to cancel #N? This will close the issue.” On confirm, transitions the issue to done.

Retry scope: Retry is only available for issues actively being processed (analyzing, in-review, merge-pending, planning). It is not shown for blocked, paused, or terminal issues.

Dead Letters Tab — Retry, Resolve, Resolve All

Section titled “Dead Letters Tab — Retry, Resolve, Resolve All”

The Dead Letters tab lists state transitions that failed permanently and were moved to the dead-letter queue. Each row has two per-item actions, and a global action is available at the top of the table:

ControlScopeEffect
RetryPer dead-letter entryRe-attempts the failed transition (POST /api/dead-letters/{id}/retry).
ResolvePer dead-letter entryAcknowledges and removes the dead letter without retrying (POST /api/dead-letters/{id}/resolve).
Resolve All (N)All dead lettersResolves every dead letter in the queue at once (POST /api/dead-letters/resolve-all). The count of entries is shown in the button label.

The Consistency tab lists data-consistency findings raised by periodic audits. Each finding row shows the affected issue, repository, kind badge, and an expandable detail field. For findings that have a repair action, a button appears in the Actions column; findings of kind label_drift self-heal automatically and show no button.

ControlFinding kindEndpointEffect
Clear stale flagstale_blockedPOST /api/consistency/:id/clear-flagClears the stale-blocked flag on the issue so the pipeline can re-evaluate it.
Resolve subtask edgesstale_subtask_edgePOST /api/consistency/:id/resolve-subtask-edgesRepairs stale parent/child subtask dependency edges in the pipeline store.
Enqueue orphanorphan_missing_from_pgPOST /api/consistency/:id/enqueue-orphanRe-enqueues an issue that exists on GitHub but is missing from the Postgres pipeline store.
Link SI issuesi_linkage_gapPOST /api/consistency/:id/link-siRe-establishes the self-improvement issue ↔ track linkage in si_issues.

Note: label_drift findings (GitHub label out of sync with Postgres state) have no manual repair button — they are resolved automatically by the self-healing reconciler and will clear on the next audit cycle.

The Write Queue (Projections) tab shows VCS write operations (GitHub label syncs) queued in the outbox drainer. Retry and Discard controls appear only for projections with status failed — pending projections are still in-flight and cannot be manually acted on.

ControlConditionEffect
RetryProjection status is failedResets the projection to pending for re-execution (POST /api/projections/{id}/retry).
DiscardProjection status is failedMarks the projection as discarded, preventing further retries (POST /api/projections/{id}/discard).

The Strategy tab lists strategy snapshots for a repository. The detail panel on the right shows the selected snapshot’s intent, rationale, and portfolio changes. An Approve Strategy button appears only when the selected snapshot has status proposed. There is no Reject button — to decline a proposal, use the Charter tab to update the charter goals and wait for the Strategist to generate a new proposal.

ControlConditionEffect
Approve StrategySnapshot status is proposedMarks the snapshot as the active strategy (POST /api/strategy/{owner}/{repo}/snapshots/{version}/approve). The Strategist will start acting on the approved portfolio.

The Charter tab provides a form for editing the strategy charter — the goals and risk envelope that guide the Strategist when generating proposals. Saving creates a new charter version and activates the Strategist.

FieldTypeDescription
GoalsTextarea (required)Free-text strategic goals for the repository.
Max auto sizeDropdown (small / medium / large / epic)Largest issue size the Strategist may enqueue without operator approval.
PreferTextarea (one item per line)Work types or attributes the Strategist should favour (e.g. small bugs, test coverage).
AvoidTextarea (one item per line)Work types or attributes the Strategist should avoid (e.g. breaking changes, large refactors).
Escalate whenTextarea (one item per line)Conditions that should trigger operator review (e.g. cost per issue exceeds $5, block rate above 20%).

Click Save Charter to write the charter (PUT /api/strategy/{owner}/{repo}/charter). The version badge updates on success.


The dashboard includes a built-in Dashboard Help & Glossary modal accessible from the top navigation bar. The panel contains six sections:

  • Pipeline States — all states from PIPELINE_STATE_GLOSSARY
  • Block Reasons — all reasons from BLOCK_REASON_GLOSSARY
  • Dashboard Tabs — all tabs from TAB_GLOSSARY
  • Columns & Metrics — all metrics from COLUMN_GLOSSARY
  • Needs Attention Reasons — all reason codes from NEEDS_ATTENTION_GLOSSARY
  • Review Queue — all statuses from REVIEW_QUEUE_GLOSSARY

The panel is tab-contextual: opening it via the ? button in the top navigation bar automatically scrolls to the section most relevant to the tab you are currently viewing. For example, opening help from the Review Queue tab scrolls directly to the Review Queue section; opening it from the Blocked tab scrolls to Block Reasons.

The panel content is identical to the reference tables in this document and is always in sync with the running dashboard version.