触发器就是时钟或签名。其他配置——以哪个代理运行、提示内容是什么、会话落在哪个位置——两种方式完全相同。
一个 6 字段 cron 表达式——秒、分、时、日、月、星期——支持任意 IANA 时区。或者使用单个 run_at 时间戳,用于只需发生一次的任务。
外部服务向触发器 URL 发送 POST 请求。Kortix 检查签名,将载荷渲染到提示词中,然后启动会话。不符合筛选条件的载荷会被接受并忽略。
项目中的每个触发器占一行:名称、触发时间、使用的时区、运行身份的代理,以及触发后进入的会话。无需点击进入,任何内容都不是隐藏状态。
| Trigger | Cron | Timezone | Agent | Session |
|---|---|---|---|---|
| daily-digest | 0 0 9 * * 1-5工作日 09:00 | America/Los_Angeles | kortix | fresh |
| invoice-sweep | 0 30 6 1 * *每月 1 日 06:30 | Europe/Berlin | finance | reuse |
| oncall-handoff | 0 0 17 * * 5周五 17:00 | UTC | 支持 | fresh |
| roadmap-review | 0 0 8 * * 1周一 08:00 | America/New_York | planner | pinned |
触发器与代理和沙箱镜像一起存放在 kortix.yaml 中。每个触发器都会指定代理、计划或密钥,以及作为会话第一条消息的提示词模板。
# fires on the clocktriggers: - slug: daily-digest type: cron agent: kortix cron: "0 0 9 * * 1-5" timezone: America/Los_Angeles session_mode: fresh prompt: | Summarize yesterday’s commits. Open a change request against main. # fires on an event - slug: new-lead type: webhook agent: sales secret_env: WEBHOOK_SECRET prompt: >- A new lead arrived: {{ body.name }} ({{ body.email }}). Add it to the CRM.# add it, ship it, and the schedule is live$ kortix triggers add daily-digest --type cron \ --cron "0 0 9 * * 1-5" \ --timezone America/Los_Angeles \ --prompt "Summarize yesterday. Open a CR."$ kortix ship→ kortix.yaml pushed. daily-digest is scheduled. # see every trigger and when it last fired$ kortix triggers ls # do not wait for 09:00 to find out$ kortix triggers fire daily-digest→ session started提示词会根据触发它的载荷渲染 {{ token.dotted.path }}。Webhook 触发会获得 {{ body.* }} 和请求标头;cron 触发会获得 {{ cron.schedule }}、{{ cron.timezone }} 和 {{ cron.scheduled_for }}。不存在的值会渲染为空——不会报错,也不会在代理读取的消息中留下多余大括号。
每个 webhook 触发器都会指定用于签名的项目密钥。没有密钥的触发器会在验证时被拒绝——不存在可以稍后再补救的未认证 webhook。
POST /v1/webhooks/projects/{projectId}/{slug}
X-Kortix-Signature: sha256=<hmac>
对原始请求正文执行 HMAC-SHA256,并以恒定时间进行比较。兼容 GitHub 的 X-Hub-Signature-256 标头同样有效,因此代码仓库 webhook 无需适配器。
筛选器是一个点号路径,会匹配提示词所看到的同一载荷。它用于打破循环:如果来源同时报告对话双方,否则代理会因自己的回复再次触发。
默认情况下,每次触发都是全新开始。当工作属于正在进行的线程,而不是一次新的任务时,触发器可以重新提示它已拥有的会话。Kortix 会按顺序尝试这些模式,失败后继续回退,因此触发不会悄然消失。
重新提示由 id 指定的某个确切会话。如果该会话已消失或失败,则继续回退。
从载荷生成一个键,然后重新提示最近一个带有完全相同键且状态健康的会话。一个客户对应一个线程。不会回退到其他键的会话。
重新提示此触发器创建的最近一个健康会话。固定触发器会先回退到此模式,再继续回退。
创建新分支并启动新的云端计算机。这是默认模式,也是其他所有模式的最终回退方案。
触发的会话对整个项目可见,不属于配置触发器的个人。空闲 5 分钟后会自动停止,因此凌晨 3 点运行的自动化不会让机器计费到早上。
自动化不会获得人类无法获得的权限。相同的隔离、相同的作用域范围,以及同一条回到 main 的路径。