跳转至正文
ColliePWA

在手机上批准你自己的智能体的操作。

ColliePWA 会在手机上显示你构建的代理提出的问题,位置就在你的终端代理旁边。轻触一下即可回答,代理随后会收到你的回复。

01/持久代理

你自己的智能体,在你的手机上。

持久代理是指由你自行构建和运行的代理,例如使用 Pi Durable 构建的代理。它通过一个轻量级协议(即 wire)与你的 Collie 通信,适用于 Node 和 Bun 的 SDK 会为你处理该协议。随后 ColliePWA 会渲染代理的问题、对话和聊天,因此你无需编写任何 UI 代码。

实验性。通信协议可能在任何次要版本中变更,该功能也可能被移除。目前只有 Collie 仓库中的示例使用它。

02/ColliePWA

功能特性

带剩余时间的审批
代理提出的问题会在手机上显示为卡片:是或否、单项选择、一行文本或简短表单。轻触一下即可回答,卡片会显示该问题保持开放的时长。
带历史记录的聊天
代理的每次对话都会以聊天形式打开。代理会保留记录,因此你也可以阅读其已关闭的对话。
专属分区与推送
代理在手机上拥有专属的持久代理分区,当有等待处理的问题时,该分区会移至你的工作空间上方。启用 push 后,出现问题时还会发送通知。
与终端会话并存
你的 Herdr、tmux 和 zellij 会话的外观与工作方式和以前相同。持久代理只是会话来源的又一个途径。

03/hello.mjs

十行代码实现首个提问

在代理的文件夹中安装 SDK:

$ npm install @colliepwa/durable-sdk@experimental

将此代理保存为 hello.mjs,然后使用 node hello.mjs 或 bun hello.mjs 运行它。它会输出其 socket 路径并等待。

import { openCollie } from "@colliepwa/durable-sdk";

const socket = process.env.COLLIE_DURABLE_SOCKET ?? `${process.env.XDG_RUNTIME_DIR}/hello/app.sock`;
const collie = await openCollie({ socket, hostName: "hello", caps: { asks: true } });
const pane = collie.workspace("hello", { title: "Hello" }).tab("main", { title: "Questions" }).pane("deploy", { title: "Deploy", harness: "hello" });
collie.ready();
console.log(`listening ${collie.address}`);
const options = [{ id: "yes", label: "Yes" }, { id: "no", label: "No" }];
const answer = await pane.ask({ kind: "choice", toolCallId: "deploy-1", itemId: "deploy-1", title: "Deploy to staging?", options });
console.log(`answer: ${answer.optionIds[0]}`);
await collie.close();

在第二个终端中,使用打印出的路径将代理附加到你的 Collie。--restart 会重启 Collie bridge:手机会在几秒内重新连接,你的终端会话会继续运行。

$ collie durable attach hello --socket /run/user/1000/hello/app.sock --restart

在手机上打开 ColliePWA。持久代理分区中会出现名为 hello 的一行。打开它,其唯一的会话包含问题 "Deploy to staging?"。点击 Yes 或 No,代理就会输出你的回答并退出。

04/Socket · HTTPS

运行位置

在同一台机器上
Collie 通过私有套接字访问代理,该套接字是一个仅有你的用户才能打开的文件。
在其他任何位置
Collie 通过 HTTPS 使用 32 字节或更长的随机 token 访问代理,任何持有该 token 的人都可以代你回答。
Node 或 Bun
SDK 运行在 Node 22.18 或更高版本以及 Bun 1.4 或更高版本上。

05/文档

阅读文档

文档中的持久代理页面涵盖了设置、两种连接方式、故障排除以及持久代理可在手机上显示的内容。