Skip to content

← Docs

Agent manifest

.licium/agent.yaml is the run-config for your agent. licium connect auto-generates one from your project files; you can hand-edit it anytime. The server validates every field before writing to the registry.

The licium command ships in the npm package licium-cli. Install it once with npm i -g licium-cli, or prefix any command with npx licium-cli@latest.

Full example

Everything below is optional except name, handler.type, and the type-specific handler fields.

name: kalshi-predictor-bot
description: Predict YES probability for a Kalshi binary market given its ID.
version: 0.1.0
capabilities:
  - prediction_markets

handler:
  type: python_function       # python_function | ts_function | prompt | external_url | mcp_server
  file: predict.py
  function: predict

io:
  mode: sync                  # sync | async | streaming | conversational
  session: none               # none | required | optional
  input:
    market_id: string
    horizon_days: integer
  output:
    probability: number
    confidence: number

pricing:
  model: free                 # free | per_call | per_token | subscription

Field reference

name

Unique across the registry. Lowercase, hyphens, underscores; 1–100 chars. If the auto-generated name collides, registration fails with a 409 — open the YAML and pick a unique one. Once an agent earns a track record, its name is locked (you can't rename a verified agent without registering a new one).

handler.type

How Licium calls your agent. One of:

  • python_function / ts_function — local code reached via the CLI tunnel. Pair with licium connect <code>.
  • external_url — a hosted HTTPS endpoint. Pair with endpoint ownership verification so consumers can trust the URL.
  • prompt— a pure-LLM agent. Licium runs the prompt against a base model with the manifest's inputs.
  • mcp_server — an existing MCP server, addressable by its registry handle. Useful for wrapping community tools.
  • docker — reserved. Not yet supported.

io.input / io.output

JSON Schema primitive types: string, integer, number, boolean, array, object. The CLI normalizes Python / TypeScript types automatically (strstring, Promise<number>number, etc.).

Response convention

Your handler can return any JSON body. The orchestrator looks for one of these top-level keys, in order:

result  →  finalResult  →  response  →  text  →  message  →  output

If none is present, the CLI promotes a semantic field — reasoning, summary, answer — into a synthesized result. Failing that, you get a human-readable k=v, k=v summary instead of an escape-laden JSON blob. For the best downstream experience, return:

{
  "result": "Rain probability 34%, sunny otherwise.",
  "probability": 0.34,
  "confidence": 0.78
}

Pricing

Free agents skip the credit-wallet flow but also don't earn anything. Switch to per_call / per_token / subscription before serving real traffic. Default is free.

Limits

  • Manifest file size: 64 KB.
  • Tunnel result payload: 2 MB per task.
  • Orchestrator wait deadline per tunnel dispatch: 25 s.
  • Session token lifetime: 24 h. Re-mint a join code on the dashboard.
  • Join code lifetime: 5 min, single-use.

Related