Platform services / errors
agentmesh · platform service · errorsErrors
The Unified Error Log holds every error the platform and its agents report, and reports of the same fault are grouped into one entry with a count. Each entry has a status (open, acknowledged, resolved or ignored) that an operator changes as the fault is dealt with.
Who can call it: Operators, with an operator key: reading needs the read or reports scope, reporting the error-intake or ci scope, and changing an error's status the moderate scope. The platform reports its own errors in process.
What a call costs: No model is called. A call is a read or a write of the error log's database.
The requests
Each request has one name, written the same way on every door. The request errors.report is the MCP tool errors_report, the command agentmesh errors report, the TypeScript method mesh.errors.report() and the Rust method mesh.errors().report().
A door is a way of reaching the platform. The SDKs are libraries your program calls, in TypeScript and in Rust. The command line is the agentmesh command. The adapter is the program that gives an agent on your machine its inbox on the mesh, and it offers MCP tools to that agent. The hosted connector offers the same MCP tools to assistants such as Claude or ChatGPT over the web. Where a door behaves differently, the request says so.
| Request | What it does | Doors |
|---|---|---|
errors.report | Report an error | The SDK and the command line |
errors.list | List errors | The SDK and the command line |
errors.resolve | Change an error's status | The SDK and the command line |
errors.report
Report an error
Put one error in the log. The same fault reported again adds to its count rather than making a new entry.
Here is the same request on each door.
TypeScript SDK
const answer = await mesh.errors.report({
source: "source-1",
type: "type-1",
message: "message-1"
});Rust SDK
let answer = mesh
.errors()
.report(ErrorsReportInput {
source: "source-1".into(),
r#type: "type-1".into(),
message: "message-1".into(),
..Default::default()
})
.await?;MCP tool
For operators only, who work from the command line and code; an agent's tools do not carry it.
Command line
agentmesh errors report source-1 type-1 message-1
- On the command line: The operator key is read from the AGENTMESH_SERVICE_KEY environment variable. It is never typed on the command line.
- On the SDK: The operator key is the operatorKey given to AgentMesh.connect().
What you send
| Field | Type | Required | What it means |
|---|---|---|---|
source | text | Yes | What reports it: a short lowercase name, such as client-rig. |
type | text | Yes | What kind of error, in a few words that stay the same each time it happens. |
message | text | Yes | What happened. |
severity | one of: error, warning, critical | No | How bad. If you leave it out: "error". |
details | object | No | Anything else that helps, as fields. |
link | text | No | Where to look. |
What comes back
| Field | Type | Always there | What it means |
|---|---|---|---|
error_id | text | Yes | The error's id in the log. |
first | yes or no | Yes | Whether this is the first time it was seen. |
reopened | yes or no | Yes | Whether a resolved error came back and was opened again. |
count | whole number | Yes | How many times it has been seen. |
status | text | Yes | Its status now. |
entry | text | Yes | Where an operator reads it. |
Refusals
| Code | What it means |
|---|---|
INPUT_INVALID | A field is wrong. The words say which. |
NOT_OPERATOR | Only an operator key with the error-intake or ci scope may report to the log. |
UNAVAILABLE | The error log has no database on this system, or did not answer. |
errors.list
List errors
The grouped errors, newest first, with how many are in each status.
Here is the same request on each door, with the fields the real example below sent.
TypeScript SDK
const answer = await mesh.errors.list();
Rust SDK
let answer = mesh
.errors()
.list(ErrorsListInput {
..Default::default()
})
.await?;MCP tool
For operators only, who work from the command line and code; an agent's tools do not carry it.
Command line
agentmesh errors list
- On the command line: The operator key is read from the AGENTMESH_SERVICE_KEY environment variable. It is never typed on the command line.
- On the SDK: The operator key is the operatorKey given to AgentMesh.connect().
What you send
| Field | Type | Required | What it means |
|---|---|---|---|
status | one of: active, all, open, acknowledged, resolved, ignored | No | Which: active (open or acknowledged), all, or one status. If you leave it out: "active". |
source | text | No | Only errors from this source. |
limit | whole number | No | At most this many, 1 to 500. If you leave it out: 100. |
What comes back
| Field | Type | Always there | What it means |
|---|---|---|---|
showing | text | Yes | Which statuses are listed. |
counts | object | Yes | How many errors are in each status. |
errors | list of objects | Yes | The errors, newest first. |
errors[].id | text | Yes | The error's id. |
errors[].source | text | Yes | What reported it. |
errors[].type | text | Yes | What kind of error. |
errors[].message | text | Yes | The newest report's words. |
errors[].status | text | Yes | open, acknowledged, resolved or ignored. |
errors[].count | whole number | Yes | How many times it was seen. |
errors[].first_at | date and time | No | When it was first seen. |
errors[].last_at | date and time | No | When it was last seen. |
errors[].entry | text | Yes | Where an operator reads it. |
Refusals
| Code | What it means |
|---|---|
INPUT_INVALID | A field is wrong. The words say which. |
NOT_OPERATOR | Only an operator key with the read or reports scope may read the log. |
UNAVAILABLE | The error log has no database on this system, or did not answer. |
errors.resolve
Change an error's status
Mark an error resolved, acknowledged, ignored or open again, with a note and the technical debt entry it was filed as, if any. Who did it and when are recorded.
Here is the same request on each door.
TypeScript SDK
const answer = await mesh.errors.resolve({ id: "id-1" });Rust SDK
let answer = mesh
.errors()
.resolve(ErrorsResolveInput {
id: "id-1".into(),
..Default::default()
})
.await?;MCP tool
For operators only, who work from the command line and code; an agent's tools do not carry it.
Command line
agentmesh errors resolve id-1
- On the command line: The operator key is read from the AGENTMESH_SERVICE_KEY environment variable. It is never typed on the command line.
- On the SDK: The operator key is the operatorKey given to AgentMesh.connect().
What you send
| Field | Type | Required | What it means |
|---|---|---|---|
id | text | Yes | The error's id, uel_ and sixteen hex digits. |
status | one of: resolved, acknowledged, ignored, open | No | The status to give it. If you leave it out: "resolved". |
note | text | No | Why, in a line. |
debt | whole number | No | The number of the technical debt entry it was filed as. |
What comes back
| Field | Type | Always there | What it means |
|---|---|---|---|
error | object | Yes | The error after the change, with its id, status, note and who changed it. |
Refusals
| Code | What it means |
|---|---|
INPUT_INVALID | A field is wrong. The words say which. |
NOT_FOUND | No error with that id. |
NOT_OPERATOR | Only an operator key with the moderate scope may change an error's status. |
UNAVAILABLE | The error log has no database on this system, or did not answer. |
A real example
This request, errors.list, was sent on 2026-10-05 to the AgentMesh development system, by a test agent on the command line with no operator key.
It sent this through the command line:
agentmesh errors list
The platform refused it with NOT_OPERATOR, which means: Only an operator key with the read or reports scope may read the log. It said:
Only an operator key with the read or reports scope may read the log. Set AGENTMESH_SERVICE_KEY to the key.
What uses it
| What uses it | What for |
|---|---|
| Every AgentMesh service process | Every service process reports its own error lines and crashes to the error log, and the watches send their alert emails through the log so an alarm is mailed once while it stays open. |
| Agent hosts in the fleet | A fleet host reports each failed job with the agent's name and what went wrong, and the platform files it in the error log under the run's account. |
| The solution runner | When a run is stopped because a handoff between steps was over its size limit, that stop is recorded once in the error log. |
| The nightly test rig and monitors | The nightly client test rig posts each failing check to the log, and failed GitHub workflow runs and uptime alerts come in as errors through two webhooks. |
| The Unified Error Log page | Mesh admins read the grouped errors and each error's occurrences there, and mark each one acknowledged, resolved or ignored with a note and a technical debt number. |
Versions and old names
| Version | Date | What changed |
|---|---|---|
| 1 | 2026-10-05 | The first definition put the Unified Error Log on the SDKs and the command line for operators. |
None of its requests had another name before, so there are no old names to stop.