Operations Guide

Troubleshooting Guide

Real failure modes, in symptom → cause → fix format

Before You Debug

Almost every failure is explained by three commands:

Terminal
kubectl describe agentjob <name>                       # events + conditions
kubectl get agentjob <name> -o jsonpath='{.status.logs}'   # preserved agent logs
kubectl get agentjob <name> -o jsonpath='{.status.warnings}'

Missing provider API key

Symptom
The job fails within seconds of starting. Logs contain "ERROR: ANTHROPIC_API_KEY not set. Configure Anthropic credentials in the dashboard." (or the OPENAI_API_KEY / GEMINI_API_KEY equivalent).
Cause
The runner validates the selected provider’s API key before doing any work and exits immediately if it is missing from the credentials secret (default: nominos-credentials).
Fix
Add the key in the dashboard under Settings → Connections → AI Providers (or add it to the credentials secret referenced by spec.agent.credentialsSecret), then re-create the job. Make sure the key matches the provider selected in spec.agent.zeroShot.provider.

Checkpoint approval timeout

Symptom
A job in checkpoints mode reports "Waiting for approval..." in its logs, then fails roughly one hour later.
Cause
Checkpoint-based jobs pause at each configured trigger (before_commit, before_pr, …) and poll for a decision. If nobody approves or rejects within 1 hour, the checkpoint times out.
Fix
Approve or reject pending checkpoints promptly from the dashboard notification inbox. If the job doesn’t need human gates, switch spec.interactionMode.mode to fire_and_forget or trim the checkpointTriggers list.

Job hits its timeout

Symptom
The job runs for about an hour and then fails; logs stop mid-task.
Cause
Agents are killed when they exceed spec.timeoutSeconds (default 3600). Large refactors, slow test suites, or repeated tool retries can exhaust the budget.
Fix
Raise spec.timeoutSeconds (e.g. 7200 for long migrations), narrow the task with task.focusFiles, or split the work into an AgentPlan with smaller steps and per-step timeoutSeconds.

Job stuck retrying, then Failed

Symptom
status.retries climbs to 3, then the phase flips to Failed.
Cause
Every failed attempt is retried up to spec.backoffLimit (default 3). Persistent failures usually mean a deterministic problem — bad repo URL, broken auth, or a task the agent cannot complete.
Fix
Read the preserved output in status.logs and status.warnings to find the underlying error, fix it, and re-create the job. Raise or lower backoffLimit to control retry appetite.

Agent pod stuck in ImagePullBackOff

Symptom
The AgentJob sits in Queued/Running with no log output. kubectl describe pod shows ErrImagePull or ImagePullBackOff for the agent image.
Cause
The agent image (default ghcr.io/johnhenry/nominos-agent:latest) is pulled from a registry the node cannot reach, or the registry requires authentication.
Fix
Create a registry secret (kubectl create secret docker-registry ghcr-pull --docker-server=ghcr.io …) and reference it in spec.agent.imagePullSecrets. Verify custom spec.agent.image values are spelled correctly and reachable from the cluster.

RBAC: controller cannot create jobs or update status

Symptom
AgentJobs stay Pending forever. Controller logs show "forbidden" errors like: cannot create resource "jobs" in API group "batch".
Cause
The controller’s ServiceAccount is missing its RBAC rules — usually because make deploy (which applies config/rbac/) was skipped, or the controller runs in a namespace the bindings don’t cover.
Fix
Re-apply the operator RBAC using the manifests provided during onboarding (kubectl apply -f <path-to-rbac-manifests>). Confirm with: kubectl auth can-i create jobs.batch --as=system:serviceaccount:nominos-system:nominos-controller.

Still stuck?

Check Monitoring & Metrics for how to read job status in depth, or reach out through the dashboard — include the job name and the output of kubectl describe agentjob.