---
title: Events, metrics and alerts
sidebar_label: events, metrics, alerts, webhooks
description: "clika-cli events, metrics, alerts, notifications, audit and webhooks: watching what the platform is doing and being told when it changes."
---

Four surfaces tell you what the platform is doing, and they answer different questions.

| Group | Question it answers |
| --- | --- |
| `events` | What has happened recently, as a live feed? |
| `metrics` | What are the numbers, over time? |
| `alerts` | What condition should tell me, and did it? |
| `audit` | Who did what, and when? |

`notifications` and `webhooks` are the delivery side. Notifications go to people in the web app, and webhooks go to your own systems.

## Events

The event feed is durable and ordered. Every job, transfer and command completion, every device going online or offline, every alert firing lands in it with a position, and you resume from a position rather than from a timestamp. That is what makes it safe for a script to disconnect and come back without missing anything.

### `events tail`

```
clika-cli events tail [flags]
```

Follows the feed, printing one JSON line per event. It prints everything retained after `--cursor` first, then blocks on the server's long poll and prints each new event the moment it lands. There is no polling interval to tune, because it is not polling.

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--cursor` | int | `0` | Start after this feed position. `0` means the start of the retention window. |
| `--types` | string | all | Comma-separated event names to include, for example `transfer_completed,job_completed`. |
| `--once` | bool | `false` | Print what the feed already holds after `--cursor` and exit, instead of following. |

The `id` on the last line you printed is the cursor to resume from.

```
$ clika-cli events tail --types job_completed
{"id":1041,"type":"job_completed","job":"nightly-llm-sweep-jetson-01","status":"completed","at":"2026-09-03T09:12:44Z"}
{"id":1042,"type":"job_completed","job":"nightly-llm-sweep-orin-02","status":"completed","at":"2026-09-03T09:13:02Z"}
```

```
clika-cli events tail --cursor 1041 --once
```

### `events list`

```
clika-cli events list [flags]
```

Reads one page and exits. Use it when you want a page rather than a stream.

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--cursor` | int | `0` | Return events after this position. |
| `--limit` | int | server default 100 | Events per page, up to 500. |
| `--types` | string | all | Comma-separated event names. |
| `--wait_s` | int | `0` | When nothing is past `--cursor` yet, hold the read open this many seconds waiting for the next event. |
| `--stream` | bool | `false` | Stream the raw live server-sent-events push instead of reading the feed. There is no replay, no filtering, and a buffering ingress can hold it back indefinitely, which the hosted platform's did. Prefer `events tail`, which long-polls the durable feed and delivers through any proxy. |

Resume from the response's `next_cursor`, or from a row's `id`.

```
clika-cli events list --types job_completed --limit 20
clika-cli events list --cursor 1041 --wait_s 30
```

## Metrics

```
clika-cli metrics data <name> [flags]
clika-cli metrics log --body '<json>'
```

`metrics data` queries the stored data points for one metric by name.

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--start` | string | none | Range start, RFC 3339. |
| `--end` | string | none | Range end, RFC 3339. |
| `--limit` | string | `1000` | Maximum points to return. |
| `--offset` | string | `0` | Offset, for paging through a long range. |

```
clika-cli metrics data tokens_per_second --start 2026-09-01T00:00:00Z --end 2026-09-03T00:00:00Z
```

`metrics log` writes data points in, which is how an external system feeds numbers to the platform that no job produced.

## Alerts

```
clika-cli alerts rules
clika-cli alerts rules-id <id>
clika-cli alerts rules-create --body '<json>'
clika-cli alerts rules-update-id <id> --body '<json>'
clika-cli alerts rules-delete-id <id>
clika-cli alerts history
```

An alert rule is a condition over the platform's state or metrics. `alerts history` is what fired and when, which is the first thing to read when someone asks whether an alert actually went off.

## Notifications

Notifications are the in-app inbox for a person.

| Command | What it does |
| --- | --- |
| `notifications list` | Your notifications. |
| `notifications mark-read <id>` | Mark one read. |
| `notifications mark-all-read` | Mark them all read. |
| `notifications delete-delete-id <id>` | Delete one. |
| `notifications delete-delete` | Clear them all. |

## Webhooks

Webhooks are the outbound half. The platform posts to a URL you own when something happens.

| Command | What it does |
| --- | --- |
| `webhooks list` | Configured webhooks. |
| `webhooks get <id>` | One webhook. |
| `webhooks create --body '<json>'` | Add one. |
| `webhooks update <id> --body '<json>'` | Change one. |
| `webhooks test <id>` | Send a test delivery, so you can confirm the endpoint before relying on it. |
| `webhooks delete <id>` | Remove one. |

Prefer a webhook when another system should react. Prefer `events tail` when a script of yours should react and you would rather not run a listening endpoint.

## Audit

```
clika-cli audit list
clika-cli audit get <target_type> <target_id>
```

`audit list` is the activity log across the organization. `audit get` narrows it to one resource, for example every change ever made to one device, which is the query you want during an investigation.

Licensing actions (issue, reveal, rotate, revoke) are recorded in the same trail. See [licensing](licensing.md).

## Deployment health

Three unauthenticated-style probes, exposed as commands like everything else:

| Command | What it reports |
| --- | --- |
| `health list` | The overall health check, dependencies included. |
| `livez list` | Liveness: the process is up. |
| `ready list` | Readiness: the process is up and able to serve. |

They are most useful when you are debugging a deployment rather than using one. A `ready` that fails while `livez` passes usually means a dependency, such as the database, is not available yet.

Each body carries `version`, the running build's version (the value the start-up log names, `dev` on a local build), so a script can tell which release a deployment runs without reading its image tag.

<!-- BEGIN GENERATED COMMAND REFERENCE (NOTES/gen-cli-reference.py) -->

## Full command reference

Every command below is generated from the deployment's own API description, so
one subcommand is exactly one platform operation. Each entry names the method,
the endpoint and the [MCP](mcp.md) tool name, so the same operation is
identifiable whichever surface you drive it from. Path parameters are positional
arguments, query parameters are flags, and a request body is `--body` or
`--body-file`. The hand-written commands, the ones that stream, propagate an
exit code, or hand your terminal to `ssh`, carry no operation line.

The prose above covers the commands most people reach for. This section is the
complete surface, for when you need the flag you have not used before.

### `clika-cli events`

`events` has 2 subcommands.

#### `clika-cli events list`

Reads one page of the durable org event feed (GET /api/events?cursor=) and exits: job/transfer/command completions, device online/offline edges, alert triggers and more. Resume from a response's next_cursor (or a row's ID) with --cursor; --wait_s holds an empty read open until the next event lands. Use 'events tail' to follow the feed, or --stream for the raw live SSE push (no replay, unfiltered).

```
clika-cli events list [flags]
```

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--cursor` | int | none | return events after this feed position (0 = from the start of the retention window) |
| `--limit` | int | none | maximum events per page (server default 100, maximum 500) |
| `--raw` | bool | `false` | print raw response without pretty-printing |
| `--stream` | bool | `false` | stream the live SSE push instead of reading the feed (no replay, no filters; a proxy that buffers responses still blocks it, so prefer 'events tail') |
| `--types` | string | none | comma-separated event names to include (e.g. transfer_completed,job_completed) |
| `--wait_s` | int | none | when nothing is past --cursor yet, hold the read open up to this many seconds for the next event |

Endpoint: `GET /api/events`. MCP tool name: `get_events`.

#### `clika-cli events tail`

Streams the durable org event feed (GET /api/events?cursor=) as one JSON line per event: job/transfer/command completions, device online/offline edges, alert triggers and more. Prints everything retained after --cursor (default 0 = the whole retention window), then blocks on the server's wait_s long-poll and prints each new event the moment it lands, no tick-polling. The last line's "id" is the cursor to resume from.

```
clika-cli events tail [flags]
```

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--cursor` | int | none | start after this feed position (0 = from the start of the retention window) |
| `--once` | bool | `false` | print what the feed holds after --cursor and exit instead of following |
| `--types` | string | none | comma-separated event names to include (e.g. transfer_completed,job_completed) |

### `clika-cli metrics`

`metrics` has 2 subcommands.

#### `clika-cli metrics data`

Query metric data points

```
clika-cli metrics data <name> [flags]
```

Positional arguments: required `<name>`.

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--end` | string | none | Range end (RFC3339) |
| `--limit` | string | none | Max points to return (default: 1000) |
| `--offset` | string | none | Offset for pagination |
| `--raw` | bool | `false` | print raw response without pretty-printing |
| `--start` | string | none | Range start (RFC3339) |

Endpoint: `GET /api/metrics/{name}/data`. MCP tool name: `get_metrics_name_data`.

#### `clika-cli metrics log`

Log metric data points

```
clika-cli metrics log [flags]
```

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--body` | string | none | request body (inline JSON) |
| `--body-file` | string | none | request body (path to a JSON file) |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `POST /api/metrics/log`. MCP tool name: `post_metrics_log`.

### `clika-cli alerts`

`alerts` has 6 subcommands.

#### `clika-cli alerts history`

List alert history

```
clika-cli alerts history [flags]
```

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--page` | string | none | Page number (default: 1) |
| `--page_size` | string | none | Items per page (default: 50, max: 500) |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `GET /api/alerts/history`. MCP tool name: `get_alerts_history`.

#### `clika-cli alerts rules`

List alert rules

```
clika-cli alerts rules [flags]
```

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `GET /api/alerts/rules`. MCP tool name: `get_alerts_rules`.

#### `clika-cli alerts rules-create`

Create alert rule

```
clika-cli alerts rules-create [flags]
```

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--body` | string | none | request body (inline JSON) |
| `--body-file` | string | none | request body (path to a JSON file) |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `POST /api/alerts/rules`. MCP tool name: `post_alerts_rules`.

#### `clika-cli alerts rules-delete-id`

Delete alert rule

```
clika-cli alerts rules-delete-id <id> [flags]
```

Positional arguments: required `<id>`.

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `DELETE /api/alerts/rules/{id}`. MCP tool name: `delete_alerts_rules_id`.

#### `clika-cli alerts rules-id`

Get alert rule

```
clika-cli alerts rules-id <id> [flags]
```

Positional arguments: required `<id>`.

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `GET /api/alerts/rules/{id}`. MCP tool name: `get_alerts_rules_id`.

#### `clika-cli alerts rules-update-id`

Update alert rule

```
clika-cli alerts rules-update-id <id> [flags]
```

Positional arguments: required `<id>`.

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--body` | string | none | request body (inline JSON) |
| `--body-file` | string | none | request body (path to a JSON file) |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `PUT /api/alerts/rules/{id}`. MCP tool name: `put_alerts_rules_id`.

### `clika-cli notifications`

`notifications` has 5 subcommands.

#### `clika-cli notifications delete-delete`

Clear all notifications

```
clika-cli notifications delete-delete [flags]
```

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `DELETE /api/notifications`. MCP tool name: `delete_notifications`.

#### `clika-cli notifications delete-delete-id`

Delete notification

```
clika-cli notifications delete-delete-id <id> [flags]
```

Positional arguments: required `<id>`.

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `DELETE /api/notifications/{id}`. MCP tool name: `delete_notifications_id`.

#### `clika-cli notifications list`

List notifications

```
clika-cli notifications list [flags]
```

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--limit` | string | `50, max 200` | Page size |
| `--offset` | string | `0` | Page offset |
| `--raw` | bool | `false` | print raw response without pretty-printing |
| `--unread` | string | none | When true, return only unread notifications |

Endpoint: `GET /api/notifications`. MCP tool name: `get_notifications`.

#### `clika-cli notifications mark-all-read`

Mark all notifications as read

```
clika-cli notifications mark-all-read [flags]
```

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `POST /api/notifications/mark-all-read`. MCP tool name: `post_notifications_mark_all_read`.

#### `clika-cli notifications mark-read`

Mark notification as read

```
clika-cli notifications mark-read <id> [flags]
```

Positional arguments: required `<id>`.

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `POST /api/notifications/{id}/mark-read`. MCP tool name: `post_notifications_id_mark_read`.

### `clika-cli audit`

`audit` has 2 subcommands.

#### `clika-cli audit get`

Resource audit history

```
clika-cli audit get <target_type> <target_id> [flags]
```

Positional arguments: required `<target_type>`, `<target_id>`.

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--limit` | string | `100, max 500` | Page size |
| `--offset` | string | `0` | Page offset |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `GET /api/audit/{target_type}/{target_id}`. MCP tool name: `get_audit_target_type_target_id`.

#### `clika-cli audit list`

List audit / activity events

```
clika-cli audit list [flags]
```

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--action` | string | none | Filter by action name |
| `--actor_id` | string | none | Filter by actor id |
| `--category` | string | none | mutation\|authz\|access\|utilization |
| `--limit` | string | `100, max 500` | Page size |
| `--offset` | string | `0` | Page offset |
| `--raw` | bool | `false` | print raw response without pretty-printing |
| `--since` | string | none | Inclusive lower bound (RFC3339) |
| `--target_id` | string | none | Filter by target id |
| `--target_type` | string | none | Filter by target type |
| `--until` | string | none | Inclusive upper bound (RFC3339) |

Endpoint: `GET /api/audit`. MCP tool name: `get_audit`.

### `clika-cli webhooks`

`webhooks` has 6 subcommands.

#### `clika-cli webhooks create`

Create webhook

```
clika-cli webhooks create [flags]
```

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--body` | string | none | request body (inline JSON) |
| `--body-file` | string | none | request body (path to a JSON file) |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `POST /api/webhooks`. MCP tool name: `post_webhooks`.

#### `clika-cli webhooks delete`

Delete webhook

```
clika-cli webhooks delete <id> [flags]
```

Positional arguments: required `<id>`.

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `DELETE /api/webhooks/{id}`. MCP tool name: `delete_webhooks_id`.

#### `clika-cli webhooks get`

Get webhook

```
clika-cli webhooks get <id> [flags]
```

Positional arguments: required `<id>`.

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `GET /api/webhooks/{id}`. MCP tool name: `get_webhooks_id`.

#### `clika-cli webhooks list`

List webhooks

```
clika-cli webhooks list [flags]
```

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `GET /api/webhooks`. MCP tool name: `get_webhooks`.

#### `clika-cli webhooks test`

Test webhook

```
clika-cli webhooks test <id> [flags]
```

Positional arguments: required `<id>`.

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `POST /api/webhooks/{id}/test`. MCP tool name: `post_webhooks_id_test`.

#### `clika-cli webhooks update`

Update webhook

```
clika-cli webhooks update <id> [flags]
```

Positional arguments: required `<id>`.

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--body` | string | none | request body (inline JSON) |
| `--body-file` | string | none | request body (path to a JSON file) |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `PUT /api/webhooks/{id}`. MCP tool name: `put_webhooks_id`.

### `clika-cli health`

`health` has 1 subcommands.

#### `clika-cli health list`

Health check

```
clika-cli health list [flags]
```

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `GET /api/health`. MCP tool name: `get_health`.

### `clika-cli livez`

`livez` has 1 subcommands.

#### `clika-cli livez list`

Liveness check

```
clika-cli livez list [flags]
```

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `GET /api/livez`. MCP tool name: `get_livez`.

### `clika-cli ready`

`ready` has 1 subcommands.

#### `clika-cli ready list`

Readiness check

```
clika-cli ready list [flags]
```

| Flag | Type | Default | Meaning |
| --- | --- | --- | --- |
| `--raw` | bool | `false` | print raw response without pretty-printing |

Endpoint: `GET /api/ready`. MCP tool name: `get_ready`.

<!-- END GENERATED COMMAND REFERENCE -->

## Related

- [Jobs](jobs.md) and [benchmarks](benchmarks.md): the work these events and metrics describe.
- [Devices](devices.md): device health, which is per-device rather than deployment-wide.
- [Organizations, projects and access](projects-and-orgs.md): who is allowed to read the audit log.
