Operations Guide

Monitoring & Metrics

Watch agent work the same way you watch any Kubernetes workload

Job Status & Phases

Every AgentJob reports a status.phase plus rich detail: commits, changed files, PR URL, token usage, and estimated cost. The phase lifecycle:

PhaseMeaning
DraftPaused via spec.paused — not scheduled.
PendingWaiting to be scheduled.
QueuedWaiting for resources.
RunningAgent pod is executing.
PausedPaused mid-execution.
MergingPR created, waiting in a merge queue.
CompletedFinished successfully.
FailedFailed after retries were exhausted.
CancelledCancelled by the user.

kubectl

The CRDs define printer columns, so plain kubectl get is already informative:

Terminal
# Live phase, branch, and commit count per job
kubectl get agentjobs -w

# Plans show mode and step progress
kubectl get agentplans

# Merge queues show phase, queue length, and target branch
kubectl get mergequeues

# Full status, events, and preserved logs for one job
kubectl describe agentjob update-dependencies
kubectl get agentjob update-dependencies -o jsonpath='{.status.logs}'

# Cost and token usage
kubectl get agentjob update-dependencies \
  -o jsonpath='{.status.estimatedCostDollars} {.status.tokenUsage}'

Agent logs are copied into status.logs before the pod is cleaned up, so you can debug completed jobs without hunting for dead pods.

Prometheus Metrics

The controller exposes a standard controller-runtime /metrics endpoint (default bind address :8080, configurable with --metrics-bind-address). Alongside the built-in controller-runtime and Go metrics, nominos-core registers its own series:

MetricTypeLabelsDescription
nominos_agentjobs_totalcounterphase, modelAgentJobs by phase.
nominos_agentjob_duration_secondshistogrammodel, phaseJob execution duration (buckets from 1 min to 2 h).
nominos_agentjob_cost_dollarshistogrammodelEstimated job cost in dollars (buckets $0.01–$10).
nominos_agentjob_tokens_totalcountermodel, typeTokens used, split by input/output.
nominos_agentjob_commits_totalcountermodelCommits made by agents.
nominos_agentjob_retries_totalcountermodelJob retries.
nominos_agentplans_totalcounterphaseAgentPlans by phase.

Scrape it like any other in-cluster target:

prometheus scrape config
- job_name: nominos-controller
  kubernetes_sd_configs:
    - role: pod
      namespaces:
        names: [nominos-system]
  relabel_configs:
    - source_labels: [__meta_kubernetes_pod_container_port_number]
      regex: "8080"
      action: keep

Useful starting points: alert on a rising nominos_agentjob_retries_total rate, graph nominos_agentjob_cost_dollars by model to watch spend, and use nominos_agentjobs_total{phase="Failed"} for failure-rate SLOs.

Dashboard Views

The Nominos dashboard mirrors this data per tenant:

  • Jobs list — every job with live phase, repo, and cost
  • Job detail — streaming logs, checkpoints, token usage, PR link
  • Pipeline & Kanban views — plans and tickets as they move through stages
  • Merge queue view — queue contents, current PR, merge history and auto-reverts

OpenTelemetry: reserved for future use

Agent pods receive OTEL_* environment variables (endpoint, service name, environment) from per-tenant telemetry settings, but no component emits OTLP traces yet. Treat the OTEL plumbing as reserved for a future release — use the Prometheus metrics and status fields above for observability today.