@av-pi-studio/cli
皮·斯图迪奥的工作是开车 Pi ——由 Earendil 制作的终端编码代理——本地
通过管理代理进程、终端和git的长寿命守护进程
工作树。 两个客户端与守护进程交谈:这个CLI,和一个完整的浏览器UI. pi-studio 开始
守护进程让你进入其中之一:
pi-studio daemon start # start (or find) a local daemon, print a pairing QR
pi-studio ui # serve the browser UI, connected to that daemon
安装
npm install -g @av-pi-studio/cli
这暴露了 pi-studio 二进制 PATH如果没有全局安装,则通过:
npx @av-pi-studio/cli [options] [command] [args]
快开始
# log in to a model provider (the `pi` provider needs one before it can run a turn)
pi-studio auth login
# start a local daemon (if one isn't already running) and print a pairing QR code
pi-studio daemon start
# open the full browser UI, pointed at that daemon
pi-studio ui
# ...or stay in the terminal: run an agent, list it, attach to stream live output
pi-studio agent run --provider pi/claude-3-5-sonnet "implement user authentication"
pi-studio agent ls
pi-studio agent attach <agentId>
# target a remote daemon instead of the local one
pi-studio --host workstation.local:6767 agent ls
运行 pi-studio --help (或 <command> --help)为通令树.
网络用户界面
pi-studio ui 为制作 Pi-Studio 浏览器 UI 服务——一个三栏工作空间(会议于
左边,中间的聊天/平面/代码,右边的文件和git变化)——作为一个静态站点,
不需要单独的安装或构建步骤。 指向任何守护进程, 本地或远程 :
pi-studio ui # serves on http://localhost:4173, connects to the local daemon
pi-studio ui --ui-port 8080 --daemon-host workstation.local:6767
上面拍摄的英雄是真实的:每个工具都叫代理制作(读取/编辑/写作/shell)制作的 自己的卡,有活的diff统计, 在聊天.
在不离开分页的情况下审查它的变化——一个完整的diff视图,逐行:
将工作空间拆分成多个面板——在一个活终端旁边聊天(由 node-pty页:1
file, 或另一个会话 —— 并且布局在重新装入时持续 :
每个文件都以完整的语法打开并突出显示 :
见 ui 命令下方的每个旗帜,以及
CONTRIBUTING.md 如何从源代码运行 UI
dev 模式 .
全球备选方案
| 旗帜 | 说明 |
|---|---|
-H, --host <host> | 守护进程目标——赤色 host:port,或带有 ws://编号 :wss:// 或者说 http://编号 :https:// 方案(例如:. workstation.local:6767, (中文(简体) ), https://box.local:6767(中文(简体) ) |
--password <password> | 密码保护守护进程密码 |
--home <dir> | 覆盖 $PI_STUDIO_HOME (用于客户端代号商店) |
--pi-home <dir> | 覆盖 $PI_STUDIO_PI_HOME - 捆绑的Pi CLI自己的 .pi 配置目录 。 选择 auth.json 页:1 auth 组读取/写出,并转发给本地发行的守护进程和 pi-studio pi。必须先于子命令 |
--json | 将命令输出为 JSON 而不是表格 |
-v, --version | 打印已安装的 CLI 版本并退出 |
连接解析数字 : --host host:port → ws://host:port页:1 ws://编号 :wss:// 使用 URL
现成; http://编号 :https:// 被接受为熟悉并绘制成 ws://编号 :wss:// (守护进程)
是同一端口上升级到WebSocket的HTTP服务器; wss://编号 :https:// 暗指 TLS. 与
没有 --host,CLI目标 ws://127.0.0.1:6767。 。 。 .
默认动作 (无子命令) :
pi-studio <path>——打开路径作为守护进程上的一个项目.pi-studio(bare)——确保本地守护进程运行,再打印成对的QR代码.
命令树
agent
| 命令 | 说明 |
|---|---|
agent run --provider pi/<model> "prompt" | 创建代理并运行第一个回合 |
agent ls | 列出所有代理 |
agent attach <agentId> | 流出一个特工的现场活动 |
agent send <agentId> "prompt" | 发送后续提示 |
agent steer <agentId> "message" | 引导运行的转弯( 在当前工具呼叫之后) |
agent follow-up <agentId> "message" | 在代理机停止后发送消息 |
agent stop <agentId> | 中断当前转弯 |
agent wait <agentId> | 屏蔽到代理闲置或关闭 |
agent logs <agentId> [-n <limit>] | 打印页面时间表历史 |
agent inspect <agentId> | 打印完整的代理记录 |
agent update <agentId> | 更新模型/模式/思维/标题 |
agent archive <agentId> | 软删除 |
agent delete <agentId> | 难删除 |
agent reload <agentId> | 继续非公开会议 |
agent import <sessionRef> | 通过手柄导入提供者- 本地会话 |
run, (中文(简体) ), ls, (中文(简体) ), attach, (中文(简体) ), logs, (中文(简体) ), send,以及 steer 也工作没有 agent 前缀
(单位:千美元)pi-studio ls, (中文(简体) ), pi-studio run …) (中文(简体) ).
会话管理镜像Pi自己的斜线命令—— agent session (/会), compact, (中文(简体) ),
new-session, (中文(简体) ), resume-session, (中文(简体) ), fork, (中文(简体) ), fork-messages, (中文(简体) ), clone, (中文(简体) ), name, (中文(简体) ), export, (中文(简体) ), model, (中文(简体) ),
cycle-model, (中文(简体) ), last-message,以及 commands (列表扩展/即时/技能);运行
pi-studio agent --help 整个集.
提供者光谱剖析( N)--provider: pi/claude-3-5-sonnet • 供应商 pi,型号
claude-3-5-sonnet; 裸体 pi 仅供货商; mock - 免证书的模拟提供者.
auth
| 命令 | 说明 |
|---|---|
auth login [provider] [--type api_key|oauth] [--api-key <key>] | 登录到一个模型提供者。 在没有论据的情况下,以互动方式选择一个; --api-key 是无头路径 |
auth status [--json] | 显示哪些提供者被配置, 如何配置( api key / oauth) , 以及从何处配置( 存储证书对一个环境内置) |
auth logout <provider> | 删除存储的证书 。 校对:Soup |
这个 pi 提供商在运行转弯前需要模型提供者证书. 这是
支持的提供方式之一——无手编辑 Pi's auth.json,没有狩猎 /login 内部
pi-studio pi交互式 TUI :
pi-studio auth login # interactive: filter the provider list, pick, enter key
pi-studio auth login openai --api-key sk-... # headless — for scripts, CI, Dockerfiles
pi-studio auth status
无本地和守护进程 不像这里其他的团体, auth 从不打开 WebSocket. 这个
写 Pi 的证书商店 <piHome>/agent/auth.json (见 --pi-home),这是
守护魔的产卵特工读取的精确文件 接下来你增加的证明文件
代理产物没有重启守护进程 。 交互式提示需要 TTY; 使用 --api-key 带有
非交互式设置的明确提供者。 秘密从不重复 店里写着
0600。 。 。 .
daemon
| 命令 | 说明 |
|---|---|
daemon start | 如果一个本地守护进程尚未运行, 将它喷出, 然后打印成对的 QR |
daemon stop | 发送 SIGTERM 到本地守护进程 |
daemon restart | 停止然后启动本地守护进程 |
daemon status | 打印保健+PID |
daemon set-password <pw> | 把密码打入 $PI_STUDIO_HOME/config.json |
daemon pair | 为已运行的守护进程打印配对 URL/ QR |
daemon rotate-key | 薄荷一款新配对键盘- 取消以前发布的每个配对链接/ QR |
pi-studio onboard (上层)是用于 daemon start行为和赤裸裸 pi-studio
做同样的事情.
relay
| 命令 | 说明 |
|---|---|
relay start [--listen <host:port>] | 注入本地继电器服务器( 默认) 0.0.0.0:7000),等待健康 |
relay stop | 发送 SIGTERM 到本地中继器 |
relay status [--listen <host:port>] | 在该地址上下打印中继器 |
自备的零知识接力@av-pi-studio/relay让客户端到达守护进程
在防火墙/NAT后面——守护进程拨号到它; 查看该软件包的 README 的全部内容
图片。 运行为自己的管理过程, 完全与守护进程生命周期脱钩: 点 a
守护进程通过 daemon.relay.endpoint 内 config.json (单位:千美元)PI_STUDIO_RELAY_ENDPOINT env),没有
通过此命令.
pi
| 命令 | 说明 |
|---|---|
pi [args...] | 运行嵌入式 Pi 编码代理 CLI,逐字转发每个参数 |
一个纯粹的通过代理到准确的 pi 二进制捆绑在内
@earendil-works/pi-coding-agent (同一个守护神产卵)——所以 pi-studio pi ... 是一个
取代全球安装 pi,没有它的旗帜,子命令,或
互动TUI被重新执行. pi-studio pi 单发射互动TUI, 完全一样
赤线 pi (自Pi 1.0.0起默认为全屏-) pi-studio pi --tui-mode regular,或
"tuiMode": "regular" 在皮语中 settings.json,保持终端正常回转;
pi-studio pi -p "prompt" 运行非交互. --pi-home (全球备选方案,必须
来之前 pi 在命令行上)重定向被捆绑的 CLI .pi 配置目录, 跟它一样
用于本地化的守护进程。 回归全球 pi 打开 $PATH 如果捆绑
依赖没有安装。 永远不要碰守护进程或电线协议.
ui
| 命令 | 说明 |
|---|---|
ui [--ui-host <host>] [--ui-port <port>] [--daemon-host <host>] | 将预建的网页客户端 SPA 作为静态站点 |
服务于建筑 @av-pi-studio/web-client 乌伊( UI)dist/web通过最小的静态文件服务器
SPA倒置——运行时没有vite/dev依赖性,工作来自任何安装形状. --daemon-host
(回到全球 --host预填已打印的 URL ?host=&connect=1 所以浏览器
选项卡自动连接; 命令本身从未探测或启动守护进程。 块到
SIGINT编号 :SIGTERM。 。 。 .
见 网络用户界面 上面为截图.
update
| 命令 | 说明 |
|---|---|
update [--check] | 自我更新到最近 @av-pi-studio/cli npm上发布的版本 |
贝壳也一样 npm install -g @av-pi-studio/cli@<version> 用于安装 CLI 的路径
首先(参见上面的安装),它尊重您的 npm 配置( registry 镜像, auth,
代理)而不是重新实施注册客户端. --check 报告更新是否为
可用而不安装任何东西.
特征群体
chat, (中文(简体) ), terminal, (中文(简体) ), loop, (中文(简体) ), schedule, (中文(简体) ), permit, (中文(简体) ), provider,以及 worktree 是兄弟顶级
命令组( 没有) feature 包装,没有 project 组 - 打开一个项目是
顶级 open <path> 上面显示的命令 :
| 组 | 图标 |
|---|---|
chat | create <name> [--purpose], (中文(简体) ), ls, (中文(简体) ), inspect <roomId>, (中文(简体) ), post <roomId> <message> [--from], (中文(简体) ), read <roomId> [-n], (中文(简体) ), wait <roomId>, (中文(简体) ), delete <roomId> |
terminal | ls, (中文(简体) ), create [--workspace] [--cwd], (中文(简体) ), capture <slot>, (中文(简体) ), send-keys <slot> <data>, (中文(简体) ), kill <slot> |
loop | run <prompt> [--max], (中文(简体) ), ls, (中文(简体) ), inspect <loopId>, (中文(简体) ), logs <loopId>, (中文(简体) ), stop <loopId> |
schedule | create <cron> <prompt>, (中文(简体) ), ls, (中文(简体) ), inspect <id>, (中文(简体) ), update <id> [--cron] [--prompt], (中文(简体) ), pause <id>, (中文(简体) ), resume <id>, (中文(简体) ), run-once <id>, (中文(简体) ), logs <id>, (中文(简体) ), delete <id> |
permit | ls, (中文(简体) ), allow <permissionRequestId>, (中文(简体) ), deny <permissionRequestId> |
provider | ls, (中文(简体) ), models <providerId> |
worktree | create <name> [--workspace], (中文(简体) ), ls, (中文(简体) ), archive <name> |
把它当作图书馆
CLI的构件也出口给方案用途:
import { withDaemon } from "@av-pi-studio/cli";
await withDaemon(ctx, opts, async (daemonClient) => {
// daemonClient is a connected @av-pi-studio/client DaemonClient
});
withDaemon 解决目标 URL 从 --host/ 默认, 连接, 运行您的回调, 然后
断开-处理 RpcErrors 和与干净的 stderr 输出和非零的连接失败
出口代码沿途.
如何跟守护进程说话
CLI 进程从不运行进程内的守护进程/中继代码 —— 它只会说 WebSocket API
驱动已有守护进程 。 它决定 @av-pi-studio/server' 's/(b)@av-pi-studio/relay/server是因为
通过绝对模块 URL import.meta.resolve (从来没有) await import()纯为烘焙该 URL
变成离子 node -e 它的子进程 daemon start编号 :relay start 看到了吗
daemon-control.ts是因为 subprocessStarter 财务报告和审定财务报表 relay-control.ts是因为 subprocessRelayStarterA级
稳定每台机器 clientId 在第一次使用时生成并存储于
$PI_STUDIO_HOME/client-id· ; clientType 总是 "cli"。 。 。 .
发展
npx vitest run packages/cli
测试覆盖命令解析、 提供者- spec解析、 流活动格式化、 守护进程控制
状态机器、输出渲染、配对-URL构造以及 auth (路径解析,
即时/通知渲染、登录/状态/记录协调)——全部针对注射 CliContext
(站出输出槽+模拟) DaemonRuntime虚构 AuthRuntime 和终端I/O),从不真实
产下守护神 从来没有真正的证书店.