守护进程与运行时

智能体不在 NSTACK Agents 服务器上运行——它们跑在你自己的机器上。

在 NSTACK Agents 里,智能体 在我们的服务器上运行——它们跑在你自己的机器上,由一个叫守护进程(daemon)的小程序调用本地安装的 AI 编程工具。NSTACK Agents 服务器只做协调:存 issue、排 任务、派发给正确的运行时(runtime = 守护进程 × 一款 AI 编程工具)。

Concierto · Settings → Runtimes
Runtimes 界面:本地守护进程检测到 11 款智能体 CLI,旁边是零配置的托管工作池
两种运行时,同一块看板:本地守护进程带着你已安装的智能体 CLI,托管工作池零配置开箱即用。

这个结构带来 NSTACK Agents 和 Linear / Jira 最大的差别:你的 API 密钥、工具链、代码目录都留在本地,NSTACK Agents 服务器一个都看不到。"我的智能体不工作"类问题几乎都是本地问题——守护进程没启动、某款 AI 工具没装、密钥过期——请先从本地查起;定位指引见 故障排查

启动守护进程

守护进程是 NSTACK Agents CLI 的一部分。装好 NSTACK Agents CLI 后,在自己机器上跑:

concierto daemon start

启动后它会做四件事:

  1. 读取你登录时保存的凭证
  2. 探测本机 PATH 上已安装的 AI 编程工具(内置支持 11 款:Claude CodeCodexCursorCopilotGeminiHermesKimiKiro CLIOpenCodeOpenClawPi
  3. 向服务器注册自己,以及每款检测到的工具对应的运行时
  4. 持续每 3 秒轮询一次是否有任务要领,每 15 秒发一次心跳

常用命令:

命令作用
concierto daemon start启动(默认后台,加 --foreground 前台运行)
concierto daemon stop停止
concierto daemon restart重启
concierto daemon status查看状态
concierto daemon logs查看日志(加 -f 跟随)

完整 CLI 参考见 CLI 命令速查

**桌面应用自带守护进程。**用 桌面应用 就不必手动 concierto daemon start——它启动时会自动拉起守护进程。哪种方式更适合你的工作流,详见 桌面应用 页面。

为什么一台机器会有多个运行时

运行时不是一个服务器,也不是一个容器——它是「守护进程 × 一款 AI 编程工具」的组合。举例:你在一台 MacBook 上启动守护进程,本机装了 Claude Code 和 Codex;你是两个工作区的成员。那么 NSTACK Agents 会注册 4 个运行时:

Rendering diagram…

关键的点:

  • 一个守护进程可以对应多个运行时——装了多款工具、加入了多个工作区,每个组合就各一个
  • 同一个守护进程在同一个工作区同一款工具上只会有一条运行时——重启守护进程不会产生重复记录
  • NSTACK Agents 界面的 Runtimes 页面列的就是这些行

云端(托管)运行时

还有第二种完全不需要本地守护进程的运行模式:托管运行时。智能体任务运行在云端托管的工作池(daemon pool)上,工作区会自动获得一个 Concierto Hosted 运行时。

它的行为:

  • 不用一直开着机器:工作池替你认领并执行任务。即便本地没有守护进程在线,你也能创建智能体并派活。
  • 自动分配:当工作区启用托管执行后,系统会创建 Concierto Hosted 运行时并把工作区默认运行时指向它。工作池还在连接时,运行时显示为 Starting;一旦有 worker 注册上来,它就转为在线,任务开始派发。
  • 按额度计量:托管运行时上的模型用量会从套餐的模型额度(credits)里扣除。额度机制见 套餐与计费

托管运行时是 Concierto Pro 背后的引擎。它在 Concierto Cloud 上已正式开放,并会为 Pro 工作区自动开通。自部署在后端设置 HOSTED_RUNTIME_ENABLED 即可开启(还可配合工作区白名单做分阶段灰度)。

运行时什么时候被判定为离线

NSTACK Agents 用心跳判断运行时是否在线。三个关键数字:

事件阈值
守护进程心跳频率15 秒
标记为失联超过 45 秒 没心跳(漏了 3 次)
自动删除失联且无关联智能体超过 7 天

失联不是永久的——守护进程只要再次发出心跳就立刻回到在线,运行时记录也会保留。重启守护进程不会丢运行时。

失联的运行时上正在跑的执行任务会被标记为失败(失败原因 runtime_offline)。对可重试的来源(issue、chat),NSTACK Agents 会自动重新排队;Autopilots 触发的任务不自动重试。详见 执行任务 → 哪些失败会自动重试

一次能并发跑多少任务

NSTACK Agents 对并发有两层限额:

  • 守护进程层:默认 20 个执行任务并发(环境变量 CONCIERTO_DAEMON_MAX_CONCURRENT_TASKS 可调)
  • 智能体层:每个智能体默认 6 个执行任务并发(智能体配置里改)

两层中更紧的那层生效。如果你的守护进程已经在跑 20 个任务,即使某个智能体还有余量,新的任务也要等。

如果你看到执行任务卡在 queued 状态不 dispatched,通常就是这两层里某一层打满了。

守护进程崩溃后,没跑完的任务会怎样

守护进程崩溃或被强行结束时,它领走的执行任务会停在 dispatchedrunning 状态。下次启动时,守护进程会告诉服务器:「这些任务不是我的了,请标记失败。」服务器把它们改成 failed,失败原因 runtime_recovery——对可重试的来源,任务自动重新排队。

即使这一步因网络问题没完成,还有每 30 秒一次的服务器端扫描作为后备:超过 45 秒没心跳的运行时会被统一标记为失联,上面的任务也一并回收。

Agent 不工作怎么排查

遇到「我的智能体不工作」类问题,先过一遍这三步:

  1. concierto daemon status,确认守护进程在运行且在线
  2. concierto daemon logs -f,看是否有错误
  3. 去 NSTACK Agents 界面的 Runtimes 页面,确认你的运行时显示「在线」

更多场景见 Troubleshooting

下一步

  • 执行任务 —— 守护进程领到任务后,它的完整生命周期
  • Providers Matrix —— 11 款 AI 编程工具的能力差异对照