## 6\.&#32;Observe jobs and read results

### Keep three identities separate

| Identity | What it names | Where to discover it |
| --- | --- | --- |
| **Tan agent ID** | The conversation\/agent registration\,&#32;generated as&#32;`Tan-…` | Runtime Hub roster or agent\-facing Hub list |
| **Background job ID** | The initial managed run\,&#32;commonly generated as&#32;`bg_…` | Dispatch acknowledgment\,&#32;`/jobs`\,&#32;Hub job inspection |
| **Supervised process name** | A server\,&#32;watcher\,&#32;debugger\,&#32;or other broker\-managed process | Hub process listing and description |

A display label such as&#32;`tan`\,&#32;a shortened task preview\,&#32;or “the second row” is not an identity\.

The internal background\-job record has an&#32;`agentId`&#32;association\.&#32;The persisted tan dispatch record also contains the job ID\,&#32;full work text\,&#32;and a transcript filename based on the Tan ID\.&#32;**Not every rendered or tool\-facing job snapshot exposes that association\.**

Do not claim to have mapped the two IDs merely because a list contains one plausible label\.

### Copyable discovery request to Main

**Plain\-language message — Main only\:**

~~~text
Main, inspect the current live and parked agent roster and your background jobs. Find the tan assigned to the Lantern Library label audit.

Report:
- its exact Tan agent ID;
- any backing background job ID, distinguishing running from merely retained;
- its owner or parent;
- its agent lifecycle state and job state separately;
- the evidence connecting the task, Tan ID, and job ID.

Use current roster, dispatch, and authorized transcript information. Do not infer the mapping from a shared "tan" label, a truncated preview, row order, or a remembered job number. Do not send, revive, or cancel anything. If the mapping is unavailable or ambiguous, say so.
~~~

This is a discovery request\,&#32;not a special OMP command\.&#32;Main must use the inspection surfaces actually available to it\.

### Status without messaging

**OMP slash command — Main only\:**

~~~text
/jobs
~~~

This shows Main’s owner\-scoped running jobs and a small recent\-job list\.&#32;It is a status snapshot\;&#32;it does not itself retrieve and consume settled job\-result bodies\.

For a currently parked tan\,&#32;messaging is not passive observation\:&#32;sending can revive it and start a turn\.&#32;Read its transcript instead when you only want to inspect prior work\.

### Hub tool arguments are not terminal commands

The following are&#32;**argument objects for the agent’s&#32;`hub`&#32;tool**\.&#32;They are not shell commands\,&#32;slash commands\,&#32;or HTTP requests\.

Main normally supplies them through its available tool interface\.

**Discover live peers\:**

~~~json
{"op":"list"}
~~~

**Discover parked peers in the current session root\:**

~~~json
{"op":"list","status":"parked","limit":100}
~~~

**Inspect owner\-scoped jobs and additional running\-agent activity\:**

~~~json
{"op":"jobs"}
~~~

The default peer list includes running and idle peers\,&#32;excludes the caller and advisor transcripts\,&#32;and does not list aborted agents\.&#32;Parked peers require the parked filter\.

Lists default to 32 rows and allow at most 100\.&#32;Inspect&#32;`shown`&#32;and&#32;`truncated`&#32;counts\.&#32;Increasing the limit is not a guarantee of an exhaustive roster\,&#32;and no pagination parameter is supplied here\.

The runtime UI Hub can also show parked\,&#32;killed\,&#32;and advisor transcript rows\.&#32;These surfaces intentionally have different visibility rules\.

### Checking status can consume delivery

A completed tan normally delivers its final text to the&#32;**owning session**\,&#32;ordinarily Main\.&#32;Owner\-routed delivery can enter an active run at a boundary or wake an idle owner\.

However\,&#32;if the agent’s Hub&#32;**`jobs`&#32;or&#32;`wait`**&#32;operation observes a settled result first\,&#32;that snapshot becomes the recovered delivery and suppresses a duplicate automatic&#32;`async-result`\.

Later snapshots may say\:

~~~text
Delivery: already delivered or recovered.
~~~

…and omit the body\.

That does not mean the tan produced no output\.&#32;Look in the earlier delivery or Hub result\,&#32;then follow any actual artifact link\.

This is why repeated status polling is not a reliable way to repeatedly fetch the same full report\.

### Waiting is not “wait until all work succeeds”

After discovering an actual job ID\,&#32;Main can narrow a wait\.

**Hub tool arguments — replace the placeholder only with a discovered current job ID\:**

~~~json
{"op":"wait","ids":["<discovered-job-id>"],"timeoutMs":30000}
~~~

The unified wait can return on the first relevant message\,&#32;watched job settlement\,&#32;timeout\,&#32;or interruption\.&#32;It is not an all\-jobs\-complete barrier\.

A timeout\:

- Does not cancel the job\.
- Does not prove the tan is stuck\.
- Does not prove that a message was not delivered\.

Default job waits can use an adaptive window\.&#32;An explicit&#32;`timeoutMs`&#32;is in&#32;**milliseconds**\;&#32;do not confuse it with process\-operation timeout fields measured in seconds\.

### Messaging from Main is a different input path

**Plain\-language message — Main only\:**

~~~text
Main, rediscover the exact Tan ID for the Lantern Library label audit. If there is one unambiguous match, send it this correction: report only green-shelf mismatches, keep the input files read-only, and leave Main's work alone.

Report the exact recipient and delivery receipt. Do not describe the receipt as proof that the correction has already been followed.
~~~

For illustration\,&#32;the corresponding tool arguments have this shape\:

~~~json
{"op":"send","to":"<discovered-tan-id>","message":"Report only green-shelf mismatches. Keep the input files read-only and leave Main's work alone."}
~~~

The source messaging path delivers a peer message to a busy agent or wakes\/revives an idle\/parked one\.&#32;This is&#32;**not the same queue\-control gesture as focused Enter**\,&#32;and it is not the same as Ctrl\+Q follow\-up ordering\.

If an answer is essential\,&#32;`send`&#32;supports&#32;`await:true`\.&#32;That waits for a reply\;&#32;it is not a guarantee of task completion\.&#32;If the send succeeded but the reply wait timed out or was interrupted\,&#32;check the inbox or wait again rather than blindly resending\.

### Read the transcript\,&#32;not an invented result path

`history://`&#32;is an&#32;**OMP internal resource scheme**\,&#32;read through OMP’s read tooling\.

- `history://`&#32;provides an index\.
- `history://<discovered-tan-id>`&#32;reads that agent’s transcript\.

For live agents\,&#32;the handler reads live session messages\.&#32;For parked or unregistered agents\,&#32;it can use retained JSONL files found through its discovery paths\.&#32;It does not need to revive the agent just to read history\.

The representation is concise Markdown\,&#32;not a promise that every large tool payload is reproduced verbatim\.

**Plain\-language message — Main only\:**

~~~text
Main, discover the exact Tan ID for the Lantern Library label audit and read its history:// transcript without reviving it. Summarize the audit, the later correction, and any queued follow-up that actually ran. Distinguish completed evidence from proposed or skipped work. Follow only artifact links that were actually returned.
~~~

Ordinary task result URLs such as&#32;`agent://<agent-id>`&#32;resolve a corresponding&#32;`<agent-id>.md`&#32;output artifact\.&#32;**The initial&#32;`/tan`&#32;controller does not automatically write that ordinary task result artifact\.**

Do not assume an&#32;`agent://`&#32;route for a Tan ID will work merely because its transcript exists\.

### Full text versus previews

A Hub preview or compact dispatch line is not the whole result\.

Owner delivery keeps text inline up to the current 12\,000\-character threshold\.&#32;Larger text is normally represented by a 4\,000\-character preview plus an&#32;`artifact://`&#32;link&#32;**if artifact persistence succeeds**\.&#32;If persistence fails\,&#32;only the preview may be available through that delivery\.

Read the returned full\-output artifact when present\.&#32;If it is missing\,&#32;report the gap\;&#32;do not silently treat the preview as a complete report\.

### Job IDs are short\-lived handles

Background\-job rows are process\-local and normally retained for roughly five minutes after settlement\.&#32;They can be removed earlier by lifecycle operations\.&#32;Generated job IDs can be reused after eviction\.

Therefore\:

- Rediscover before cancelling\.
- Do not use a job number from an old screenshot or a previous OMP process\.
- A missing job row does not mean its Tan transcript disappeared\.
- A revived tan can be working without a new job row for its prompt\.

Hub job snapshots include additional running\-agent activity not represented by the caller’s running jobs\.&#32;That can include a revived agent or work owned by another agent\.&#32;It is not blanket authority for Main to cancel that work\.

---
