进阶玩法

Headless 模式

不开 UI,纯后台跑 — 在服务器、CI 流水线、Webhook 处理器里用。

CLI 与 Headless 的区别

CLI 是一次性 — 跑完就退。Headless 是常驻进程 — 监听 socket / HTTP,接受任务、维护会话、持久化状态。简单说:CLI 适合脚本里的 fire-and-forget,Headless 适合 webhook、聊天机器人、长跑工作流。

Headless 模式不开渲染进程、不连 Electron — 内存占用约为桌面端的 1/5,启动时间在 200ms 量级。生产环境跑 24/7 很合适。

架构上 Headless 等价于 Kition 桌面端的“后端进程”单独跑 — Agent 内核、工具运行时、provider 路由全在;缺的只是 React UI。

启动 daemon

# Start headless daemon, bound to a vault
kition daemon start --vault /var/vaults/team --listen 127.0.0.1:7878

# Submit a task to it
kition daemon submit "process pending tickets"

# Stream events from a running task
kition daemon tail task_19af --follow

# Watch the daemon log
kition daemon logs -f

# Stop gracefully (drains in-flight tasks first)
kition daemon stop --drain

HTTP 接口

Daemon 监听一个本地 HTTP 端口,接受 JSON-RPC 风格的任务提交。Webhook 服务、Slack bot、内部工具都可以直接 POST 给它。绝大多数生产部署会在前面套一层鉴权 reverse proxy。

想要事件流?把 stream: true 设上,daemon 会返回 NDJSON / SSE,每个 token、每次工具调用都即时推送。

curl -s http://127.0.0.1:7878/v1/tasks \
  -H 'content-type: application/json' \
  -d '{
    "prompt": "Triage this issue and label it.",
    "context": { "issue_url": "https://github.com/org/repo/issues/42" },
    "model": "claude-opus-4-7",
    "stream": true
  }'

# Submit and poll
TASK=$(curl -s ... | jq -r '.task_id')
curl -s http://127.0.0.1:7878/v1/tasks/$TASK

部署建议

  • systemd / launchd 守护进程,配 Restart=on-failure
  • Vault 放持久卷上,定期 snapshot(borgbackup / restic / EBS)
  • 开启 prometheus exporter(--metrics 127.0.0.1:9090)抓 QPS、p95、token 用量
  • API key 通过 systemd EnvironmentFile= 注入,别写进 unit 文件
  • 前面套 nginx / Caddy 做 TLS 终止与 IP allowlist
  • 日志走 stdout,交给 journald / vector 转发
  • Docker 镜像有官方版本:ghcr.io/kition-ai/headless:latest

systemd unit 示例

[Unit]
Description=Kition headless agent
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=kition
EnvironmentFile=/etc/kition/secrets.env
ExecStart=/usr/local/bin/kition daemon start \
  --vault /var/vaults/team \
  --listen 127.0.0.1:7878 \
  --metrics 127.0.0.1:9090
Restart=on-failure
RestartSec=3
LimitNOFILE=65536
NoNewPrivileges=true
ProtectSystem=strict
ReadWritePaths=/var/vaults/team /var/log/kition

[Install]
WantedBy=multi-user.target

观测与限流

  • /healthz 返回 200 / 503 — 适合作 k8s liveness
  • /metrics Prometheus 格式,含队列长度、活跃 session、token / 分钟
  • --max-concurrent N 控制并发任务数,默认 4
  • --task-timeout 10m 给单任务封顶,防止跑飞
  • OpenTelemetry:设 OTEL_EXPORTER_OTLP_ENDPOINT 自动上报 trace
  • Token 配额:--budget-daily 50 美元封顶,超额返回 429

嵌入到自家产品

如果你想把 Kition Agent 集成到自家应用里 — 不开 Kition 自己的 UI,而是把 Agent 当成一个能力挂上去 — Headless daemon 就是入口。我们另外提供了一个 Go sidecar binary(kition-sidecar),把 daemon 协议包成 gRPC 和稳定的 SDK,方便你的 Electron / Tauri / 服务端产品嵌入。

这一切都是 Kition Pro 的能力 — 桌面端商业授权同时覆盖嵌入用例,每个最终用户算一个 seat。

package main

import (
  "context"
  "log"
  "github.com/kition-ai/sidecar-go/kition"
)

func main() {
  c, err := kition.Dial("unix:///run/kition.sock")
  if err != nil { log.Fatal(err) }
  defer c.Close()

  resp, err := c.Run(context.Background(), &kition.RunRequest{
    Vault:  "/var/vaults/team",
    Prompt: "Summarize today's incidents",
    Model:  "claude-opus-4-7",
  })
  if err != nil { log.Fatal(err) }
  log.Println(resp.Text)
}

相关文档

下载 Kition

本地优先的 AI 工作空间。Markdown 文档、结构化数据表、AI Agent,全部跑在你自己的电脑上。