进阶玩法
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 --drainHTTP 接口
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/metricsPrometheus 格式,含队列长度、活跃 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)
}