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

FieldTypeRequiredDescription
`name`stringyesLogical name for this agent session
`subscriptions`Subscription[]noEvent filters for the WebSocket subscription scope. Omit to receive all events.
`sink`SinkConfigyesWhere to deliver events
`filters`FilterConfignoDrop or keep-only rules applied before delivery
`enrichment`EnrichmentHook[]noShell scripts to run for matched events before delivery
`scoring`ScoringConfignoImportance scoring rules and deduplication
`queue`QueueConfignoLocal event queue retention settings

Subscription

Narrows the WebSocket subscription scope. All conditions within a subscription entry are AND'd; multiple entries are OR'd.

FieldTypeDescription
`source`stringSource name, e.g. `"github"`
`type`stringCloudEvent 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 }
FieldTypeDefaultDescription
`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" }
FieldTypeDescription
`target`stringHTTP URL to POST events to

`socket`

Write events to a Unix domain socket.

{ "type": "socket", "path": "/tmp/kite.sock" }
FieldTypeDescription
`path`stringUnix 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" }
FieldTypeDefaultDescription
`command`stringShell command to run per event
`importance`stringnoneMinimum importance level to deliver (`low`, `normal`, `high`, `critical`)
`batch`stringnoneBatch window duration (e.g. `"500ms"`) — experimental

`mcp_server`

Expose events as an MCP (Model Context Protocol) server.

{ "type": "mcp_server", "buffer_size": 100 }
FieldTypeDefaultDescription
`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"
}
FieldTypeDescription
`api_url`stringPaperclip API base URL
`company_id`stringPaperclip 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`.

FieldTypeDescription
`source`stringSource name (e.g. `"github"`). Glob supported.
`type`stringCloudEvent type (e.g. `"com.github.pull_request.*"`). Glob supported.
`actor`stringGitHub sender login (e.g. `"dependabot[bot]"`). Glob supported.
`ref`stringGit 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.

FieldTypeDefaultDescription
`match`FilterRuleEvents to enrich (same syntax as filter rules)
`run`stringShell 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.

FieldTypeDefaultDescription
`rules`ScoringRule[]`[]`Ordered list of scoring rules
`dedup`DedupConfignoneDeduplication window config
`default_importance`string`"normal"`Importance level for unmatched events

ScoringRule

FieldTypeDescription
`match`FilterRuleWhich 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`stringOptional human-readable label for why this rule fired

DedupConfig

FieldTypeDefaultDescription
`window`stringTime 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.

FieldTypeDefaultDescription
`retention`string`"7d"`How long to retain failed events (e.g. `"1d"`, `"7d"`)
`max_size`stringnoneMaximum number of queued events (e.g. `"1000"`)