Vercel Monitor
Monitor one immutable Vercel deployment for the
project and notify the
current task when that exact deployment becomes ready or fails.
Non-negotiable rules
- Never infer deployment state from an HTTP response. A branch preview alias can
return 200 from the previous deployment while the new deployment is building.
- Never monitor a branch preview alias. It is movable and can resolve to an older
or newer deployment.
- Pin the monitor to a Vercel deployment ID () or the immutable automatic
deployment hostname (
<project>-<random>-<scope>.vercel.app
).
- Read the machine-readable Vercel deployment state. Do not parse human CLI output.
- Default to the project and the Vercel scope. Ignore the
project unless the user explicitly asks for it.
Resolve the exact deployment
Prefer these sources, in order:
- A Vercel deployment/dashboard URL supplied by the user.
- The check on the active GitHub PR. Its dashboard URL has
the form
https://vercel.com/remotion/remotion/<deployment-id-suffix>
.
- The row in the Vercel bot's PR comment.
vercel list remotion --scope remotion --format=json
, matched to the exact PR,
commit SHA, or branch in .
The final path segment of a dashboard URL becomes the deployment ID by prefixing
it with
. For example:
text
https://vercel.com/remotion/remotion/AbCd1234 -> dpl_AbCd1234
The
link in a Vercel PR comment is normally a branch alias. Preserve it
for the final notification, but do not use it for state checks.
When using
, select the newest deployment that matches all available
identity fields:
.meta.githubPrId == <PR number>
, when a PR is known
.meta.githubCommitSha == <full commit SHA>
, when a commit is known
Do not silently fall back to a different commit. If no exact deployment can be
identified, ask for the Vercel dashboard URL, PR number, or commit SHA.
Read state
Run the bundled checker from the repository root:
bash
python3 .agents/skills/vercel/scripts/check-deployment.py <deployment-id-or-url>
The checker calls:
bash
vercel inspect <deployment-id-or-immutable-url> \
--scope remotion \
--format=json
It validates the project, rejects moving aliases, and emits normalized JSON.
Use its
field:
- : success.
- , , or : failure.
- , , or : still in progress.
- : not terminal. Report the diagnostic only if it persists or prevents
creation of a trustworthy monitor.
HTTP probing may be used after
as an optional reachability check. It must
never promote a non-ready or unknown deployment to
.
Create the monitor
Use the Codex automation tool to create a one-minute heartbeat with a bounded
count, normally 30 attempts. The heartbeat prompt must be self-contained and
include:
- The pinned deployment ID or immutable deployment hostname.
- The dashboard URL.
- The branch preview alias, if known, for the final notification only.
- The project, PR, branch, and commit context, if known.
- The exact checker command.
- The terminal-state rules above.
Use this prompt shape:
text
Monitor this exact Vercel deployment until it reaches a terminal state.
Pinned deployment: <dpl_id_or_immutable_hostname>
Dashboard: <dashboard_url>
Preview alias (reporting only; never use for state): <preview_url_or_unknown>
Context: <project/pr/branch/commit>
From the repository root, run:
python3 .agents/skills/vercel/scripts/check-deployment.py <pinned_deployment>
Only the JSON `state` is authoritative.
- READY: reply "Vercel deployment is ready" and include Dashboard and Preview.
- ERROR, CANCELED, or CANCELLED: reply with the failure state and include both links.
- BUILDING, QUEUED, INITIALIZING, or UNKNOWN: stay quiet and check again next time.
Never curl the preview URL to determine readiness. After reporting a terminal
state, delete or pause this heartbeat if its automation ID is available.
Before creating a heartbeat, run the checker once. If the deployment is already
terminal, report immediately instead. Otherwise, tell the user which exact
deployment is being watched and the cadence.