How do I see what an agent loop produced?
Read three things, in order: the loop's detail, its output timeline at /output, and what it produced at
/artifacts. All three are scoped to your organization. A loop's output is kept after it stops, so you can
read it whenever you need to.
A loop that runs without anyone reading its output is the most expensive kind of silence. This page covers the read side. Creating and stopping a loop is covered in how to create, watch and stop an agent loop.
The three reads
| # | Call | What you get |
|---|---|---|
| 1 | GET /api/v1/orgs/ORG/loops/ID | The loop's state and summary |
| 2 | GET /api/v1/orgs/ORG/loops/ID/output | The per-tick timeline: ticks, with count and total |
| 3 | GET /api/v1/orgs/ORG/loops/ID/artifacts | What the loop produced, as outputs, plus total |
Every call uses your organization's API key, the same as the rest of the loop API.
1. Detail: is it running or stopped?
curl -s "https://api.agent.ceo/api/v1/orgs/$ORG/loops/$LOOP_ID" \
-H "X-API-Key: $ORG_KEY"
Read the state first. It tells you whether you are looking at a finished record or a moving target.
2. Output: what happened on each tick
curl -s "https://api.agent.ceo/api/v1/orgs/$ORG/loops/$LOOP_ID/output?limit=20" \
-H "X-API-Key: $ORG_KEY"
Each tick records when it ran and a short summary of what it produced. limit trims the reply to the
last N ticks. Two numbers matter:
| Field | Meaning |
|---|---|
count | Ticks in this reply |
total | Ticks the loop has recorded in all |
The route returns the most recent window. When count is smaller than total, the older ticks are
outside the window. They did not fail to run.
3. Artifacts: the things it made
curl -s "https://api.agent.ceo/api/v1/orgs/$ORG/loops/$LOOP_ID/artifacts" \
-H "X-API-Key: $ORG_KEY"
outputs holds what the loop produced. That is the place to look when someone asks "what did this loop
actually make?"
Rendering diagram…
The checks that must fail
A read that returns something for any ID proves nothing. Run these next to the real reads:
# A loop ID you made up must be refused
curl -s -o /dev/null -w "%{http_code}\n" \
"https://api.agent.ceo/api/v1/orgs/$ORG/loops/zz-fabricated-loop/output" \
-H "X-API-Key: $ORG_KEY"
# expect 404
Also read the same loop under an organization you are not a member of. That must be refused. If you get an empty list instead, your check cannot tell "no access" from "no output".
Reading a stopped loop
To prove a stop, read /output, wait one full cadence, and read it again. A stopped loop shows the same
total and no new tick. That second read is the evidence. The stop signal alone is not. Why every loop
needs that bound is in
how to stop an AI agent loop from running forever.
What we checked
This read path is part of the Loops journey on our staging environment. A loop is defined with a 60-second cadence, a three-turn cap and a three-minute wall-clock limit. Its output is read until it holds what the participant produced. It is stopped, then read again after a full cadence with nothing new. A fabricated loop ID returns 404. The feature docs are at autonomous loop.
FAQ
How do I see what an agent loop produced in agent.ceo?
Call GET /api/v1/orgs/ORG/loops/ID/output for the per-tick timeline, and GET /api/v1/orgs/ORG/loops/ID/artifacts for what the loop produced. Both are scoped to your organization. The loop's output is kept after it stops, so you can read it later.
Why does the loop output show fewer ticks than the total?
The output route returns the most recent window of ticks, and a separate total with the loop's full tick count. Compare count with total. If they differ, older ticks are outside the window, not missing from the run.
How do I check that a loop really stopped?
Send the stop signal, read the output, wait one full cadence, then read it again. A stopped loop shows no new tick and no new output on the second read. If something new appears, the loop did not stop.
Related: Solo-loop, the smallest building block · Autonomous loop docs