Day-to-Day Operations
This is the operator quick-start for running a live Shipwright agent day to day. It covers what you need before you start, a first-day checklist, and the ongoing loop you’ll repeat once the agent is running: checking cron health, triaging the open-PR queue, and noticing and responding to human-in-the-loop (HITL) escalations.
What you need
- A live, provisioned agent. Either a managed agent provisioned via
/admin/provision(see Slack Integration for the Slack setup portion) or a self-hosted agent running throughtask stack/ a manual deployment (see Deploying to Cloud). - Admin console access. The admin UI is at
/admin, authenticated via Google OAuth. You need an account allowed by the admin service’s configured access list to sign in. - Slack access, if the agent is Slack-connected. Optional — only needed if the agent posts cron results and takes DMs/mentions through Slack, as covered in Slack Integration. An agent can also run without Slack, driven through the admin console’s Chat tab instead.
Day one checklist
Once you have console access, work through this list before leaving the agent unattended:
- Find your agent. Go to
/admin/agentsand open your agent’s detail page (/admin/agents/:id) to confirm it exists and see its configuration. - Check which crons are enabled. The agent detail page lists its cron jobs. Pipeline phase
crons (
shipwright-dev-task,shipwright-review,shipwright-patch,shipwright-deploy) and theshipwright-looporchestrator are the ones that drive autonomous work — confirm the set you expect is turned on. A standalone phase cron withshipwright-loopdisabled is inert, so if nothing seems to be happening, that’s the first thing to check. - Read the first cron logs. Open
/admin/agents/:id/cron-logsto see the run history for every cron the agent owns — each run shows an outcome (completed,failed, orskipped), start time, duration, and (when the run dispatched work) the task or PR it acted on. Filter by?cronId=or?outcome=to narrow the view. - Check the work queue.
/admin/agents/:id/work-queueshows the agent’s latest self-reported ranked queue — the tasks and PRs it sees as pending work, oldest first, across the dev-task, review, patch, and deploy phases. An empty queue with no snapshot yet usually means the agent hasn’t ticked since this feature shipped, orshipwright-loopisn’t enabled. - Look at open PRs.
/admin/prslists PRs the agent has opened or is tracking, filterable by?state=,?reviewState=,?repo=, and?taskId=. Skim it so you know what’s in flight. - Look at tasks with an HITL gate.
/admin/tasks?hitl=truefilters the task list to tasks flaggedhitl: true. If any are unfamiliar, open the task detail page (/admin/tasks/:id) — it shows the rawHITL: yes/nofield and, when the task is blocked, a “Blocked Reason” field. - If Slack is connected, confirm you’re in the loop. Make sure you (or the right humans) are in the channel or DM path the agent posts to, since that’s how you’ll hear about escalations — see the “Noticing and responding to a HITL escalation” section below.
The ongoing loop
Once the agent is up and running, day-to-day operation is mostly a light, recurring check across three things: cron health, the open-PR queue, and HITL escalations.
Reading cron health
/admin/agents/:id/cron-logs is the single place to check whether the agent’s crons are actually
running and doing useful work. Each row is one cron run, with:
- Outcome —
completed(the run finished normally),failed(the run errored — hover the badge for the error message), orskipped(the run didn’t execute — hover the badge for the skip reason). - Owning cron, start time, duration, and — when the run dispatched against a task or PR — which one.
Use the ?cronId= and ?outcome= query filters to narrow down to, for example, only failed
runs, or only runs from shipwright-loop. A steady stream of failed outcomes on the same cron
is the clearest signal something needs attention. The agent detail page also surfaces each cron’s
last run time and outcome inline, so you can spot a stalled cron (no recent runs) without opening
the full log.
Triaging the open-PR queue
/admin/prs is the queue view. Filter by ?state= to see what’s open vs. merged/closed, by
?reviewState= to see what’s pending review vs. already reviewed, and by ?repo= or ?taskId=
to scope to a specific repository or task. Opening a PR row (/admin/prs/:id) shows its detail —
useful for checking whether a PR has been sitting in the same review state longer than expected,
or whether it’s linked back to the task that produced it.
The work-queue view (/admin/agents/:id/work-queue) complements this: it’s the agent’s own
ranked view of what it intends to work on next, oldest first, across all four pipeline phases —
handy for confirming the agent agrees with what you see in the PR list.
Noticing and responding to a HITL escalation
Some tasks and PRs require a human before the agent can proceed — the hitl: true field marks
these. This is a real gap worth understanding precisely, because there’s no automated push
notification built into the platform beyond the agent’s own message:
hitl: truewith no notification sent yet is an agent-actionable block — a properly functioning agent is expected to post a message (typically to Slack) flagging the situation, then record that it notified you.hitl: truewith a notification already sent means the agent has already flagged it and is passively waiting on a human action.
Several pipeline steps set hitl: true automatically on failure — for example, a post-merge CI
failure, a deploy-stage or canary failure, a pipeline timeout, or an unresolved second round of
review disagreement during patching.
In practice, today, the two ways to notice an escalation are:
- Watch for the agent’s own Slack message. If the agent is Slack-connected, this is usually the first signal — it should post to its configured channel or DM you directly when it hits a HITL gate.
- Periodically check the admin console.
/admin/tasks?hitl=truefilters to every task with the HITL flag set. The task list shows a “Waiting: HITL” badge, though that badge alone doesn’t distinguish “notification already sent” from “notification still pending” — open the task detail page (/admin/tasks/:id) for that distinction: it shows either “HITL gate (notification sent — awaiting clearance)” or “HITL gate (notification pending)” under Blockers./admin/prssurfaces the same signal for PR-level blocks.
Once you’ve picked up the escalation, /shipwright:hitl {task-id} is the command to run locally in
Claude Code to work through it: it loads the task’s context (including any ## Human steps
section), assists hands-on with infra execution (Terraform, Helm, kubectl, gcloud, and similar
tooling are all fair game), and marks the task done in the task store once you confirm you’re
finished.
Next steps
- Deep-dive the platform’s underlying model — see The Agent for cron internals and the Prisma data model.
- Revisit Slack Integration if you’re still setting up how the agent communicates with your team.