kite.json Manifest Reference
Configure subscriptions, sinks, filters, enrichment, scoring, and queue settings for kite run --manifest kite.json.
Run kite run --manifest kite.json to start Kite with a manifest. Manifests support all sink types, filtering, enrichment, scoring, and deduplication.
The `kite.json` manifest drives `kite run --manifest kite.json`. It defines what events to receive, how to route them, and optional filtering, enrichment, scoring, and queue settings.
Minimal example
{
"name": "my-agent",
"sink": { "type": "proxy", "target": "http://localhost:3000/webhooks" }
}Full example
{
"name": "my-agent",
"subscriptions": [
{ "source": "github" },
{ "type": "com.stripe.payment_intent.succeeded" }
],
"sink": {
"type": "exec",
"command": "./handle-event.sh",
"importance": "high"
},
"filters": {
"drop": [
{ "source": "github", "type": "com.github.ping" }
],
"keep_only": [
{ "source": "github", "type": "com.github.push" },
{ "source": "github", "type": "com.github.pull_request.*" }
]
},
"enrichment": [
{
"match": { "source": "github", "type": "com.github.pull_request.*" },
"run": "scripts/enrich-pr.sh",
"timeout": "30s"
}
],
"scoring": {
"rules": [
{
"match": { "source": "github", "type": "com.github.push" },
"importance": "high",
"paths": ["src/auth/*"],
"reason": "auth-path push"
}
],
"dedup": {
"window": "5m",
"key": ["source", "type"],
"strategy": "keep_last"
},
"default_importance": "normal"
},
"queue": {
"retention": "7d",
"max_size": "1000"
}
}Top-level fields
| Field | Type | Required | Description |
|---|---|---|---|
| `name` | string | yes | Logical name for this agent session |
| `subscriptions` | Subscription[] | no | Event filters for the WebSocket subscription scope. Omit to receive all events. |
| `sink` | SinkConfig | yes | Where to deliver events |
| `filters` | FilterConfig | no | Drop or keep-only rules applied before delivery |
| `enrichment` | EnrichmentHook[] | no | Shell scripts to run for matched events before delivery |
| `scoring` | ScoringConfig | no | Importance scoring rules and deduplication |
| `queue` | QueueConfig | no | Local event queue retention settings |
Subscription
Narrows the WebSocket subscription scope. All conditions within a subscription entry are AND'd; multiple entries are OR'd.
| Field | Type | Description |
|---|---|---|
| `source` | string | Source name, e.g. `"github"` |
| `type` | string | CloudEvent type, e.g. `"com.github.push"`. Glob patterns supported. |
Sink types
The `sink.type` field selects the delivery mode.
`stdout`
Print events to standard output.
{ "type": "stdout", "json": true }| Field | Type | Default | Description |
|---|---|---|---|
| `json` | boolean | `false` | Print full CloudEvent JSON instead of summary lines |
`proxy`
Forward events as HTTP POST to a local server.
{ "type": "proxy", "target": "http://localhost:3000/webhooks" }| Field | Type | Description |
|---|---|---|
| `target` | string | HTTP URL to POST events to |
`socket`
Write events to a Unix domain socket.
{ "type": "socket", "path": "/tmp/kite.sock" }| Field | Type | Description |
|---|---|---|
| `path` | string | Unix socket path to create and write to |
`exec`
Execute a shell command for each event. Event JSON is passed on stdin.
{ "type": "exec", "command": "./handle.sh", "importance": "high" }| Field | Type | Default | Description |
|---|---|---|---|
| `command` | string | — | Shell command to run per event |
| `importance` | string | none | Minimum importance level to deliver (`low`, `normal`, `high`, `critical`) |
| `batch` | string | none | Batch window duration (e.g. `"500ms"`) — experimental |
`mcp_server`
Expose events as an MCP (Model Context Protocol) server.
{ "type": "mcp_server", "buffer_size": 100 }| Field | Type | Default | Description |
|---|---|---|---|
| `buffer_size` | integer | `100` | In-memory event buffer size |
`paperclip`
Trigger Paperclip agent heartbeats on matching events.
{
"type": "paperclip",
"api_url": "https://api.paperclip.ing",
"company_id": "your-company-id",
"agent_id": "optional-agent-id"
}| Field | Type | Description |
|---|---|---|
| `api_url` | string | Paperclip API base URL |
| `company_id` | string | Paperclip company ID |
| `agent_id` | string? | Optional: target a specific agent. Omit to trigger all agents. |
FilterConfig
Applied before delivery. Drop rules run first; if any match, the event is dropped. `keep_only` rules run next — if any are defined and none match, the event is also dropped.
{
"filters": {
"drop": [
{ "source": "github", "type": "com.github.ping" }
],
"keep_only": [
{ "source": "github", "type": "com.github.push" }
]
}
}FilterRule fields
All fields are optional and AND'd together. Glob patterns (`*`, `**`) are supported in `source` and `type`.
| Field | Type | Description |
|---|---|---|
| `source` | string | Source name (e.g. `"github"`). Glob supported. |
| `type` | string | CloudEvent type (e.g. `"com.github.pull_request.*"`). Glob supported. |
| `actor` | string | GitHub sender login (e.g. `"dependabot[bot]"`). Glob supported. |
| `ref` | string | Git ref (e.g. `"refs/heads/main"`). Glob supported. |
EnrichmentHook
Run a shell script before delivery. The script receives the CloudEvent JSON on stdin and can emit JSON to stdout to merge additional fields.
| Field | Type | Default | Description |
|---|---|---|---|
| `match` | FilterRule | — | Events to enrich (same syntax as filter rules) |
| `run` | string | — | Shell command or script path to execute |
| `timeout` | string | `"30s"` | Maximum execution time (e.g. `"10s"`, `"1m"`) |
ScoringConfig
Assign importance levels to events and optionally deduplicate within a time window.
| Field | Type | Default | Description |
|---|---|---|---|
| `rules` | ScoringRule[] | `[]` | Ordered list of scoring rules |
| `dedup` | DedupConfig | none | Deduplication window config |
| `default_importance` | string | `"normal"` | Importance level for unmatched events |
ScoringRule
| Field | Type | Description |
|---|---|---|
| `match` | FilterRule | Which events this rule applies to |
| `importance` | string | `low`, `normal`, `high`, or `critical` |
| `paths` | string[] | File path globs — rule only applies when matching files are in the payload |
| `reason` | string | Optional human-readable label for why this rule fired |
DedupConfig
| Field | Type | Default | Description |
|---|---|---|---|
| `window` | string | — | Time window for deduplication (e.g. `"5m"`, `"1h"`) |
| `key` | string[] | — | Fields to key dedup on (e.g. `["source", "type"]`) |
| `strategy` | string | `"keep_last"` | What to keep within the window (`keep_last` or `keep_first`) |
QueueConfig
Controls local dead-letter queue retention.
| Field | Type | Default | Description |
|---|---|---|---|
| `retention` | string | `"7d"` | How long to retain failed events (e.g. `"1d"`, `"7d"`) |
| `max_size` | string | none | Maximum number of queued events (e.g. `"1000"`) |