kite.json Manifest Reference
Configure subscriptions, sinks, filters, enrichment, scoring, and queue settings for kite run --manifest kite.json.
The kite.json manifest drives kite run --manifest kite.json. It defines what events to receive, how to route them, and optional filtering, enrichment, and scoring settings.
// 01Minimal example
{
"name": "my-agent",
"sink": { "type": "proxy", "target": "http://localhost:3000/webhooks" }
}// 02Full 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"
}
],
"default_importance": "normal"
}
}// 03Top-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 |
queue | QueueConfig | no | Local queue retention settings enforced by kite run |
// 04Subscription
Narrows the WebSocket subscription request and the local manifest delivery filter. Multiple entries are OR'd.
| Field | Type | Description |
|---|---|---|
source | string | Source name, e.g. "github" |
type | string | CloudEvent type, e.g. "com.github.push". |
// 05Sink 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. |
// 06FilterConfig
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. |
// 07EnrichmentHook
Run a shell script before delivery. The script receives the CloudEvent JSON on stdin. If it emits JSON to stdout, that JSON is stored as enrichment metadata and can influence later scoring fields such as changed_files; the delivered event body remains the original CloudEvent for sink compatibility.
| 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") |
// 08ScoringConfig
Assign importance levels to events.
| Field | Type | Default | Description |
|---|---|---|---|
rules | ScoringRule[] | [] | Ordered list of scoring rules |
dedup | DedupConfig | none | Duplicate suppression window applied by kite run before sink delivery |
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
kite run applies deduplication after queue insertion and before filters, enrichment, scoring, and sink delivery. Duplicate events are marked filtered in the local queue and acknowledged to the server.
| Field | Type | Default | Description |
|---|---|---|---|
window | string | — | Time window for duplicate suppression (e.g. "5m", "1h") |
key | string[] | — | Fields to key duplicate suppression on (e.g. ["source", "type", "ref", "actor"]) |
strategy | string | "keep_last" | Window strategy (keep_last refreshes the duplicate window; keep_first keeps the first timestamp) |
// 09QueueConfig
Local queue retention settings. kite run applies these after inserting each event into the local SQLite queue.
| Field | Type | Default | Description |
|---|---|---|---|
retention | string | "7d" | How long to retain queued events (e.g. "1d", "7d") |
max_size | string | none | Maximum number of queued events (e.g. "1000") |