* feat(hosts): connect to saved hosts through a daemon * fix(hosts): validate safe targets and verify encrypted relay routes * test(hosts): include relay coverage in existing CI contracts * fix(cli): preserve validated addresses in daemon command hints * fix(hosts): share daemon links across isolated routed sessions Multiplex logical sessions over the monitored daemon connection and wrap original binary bytes in routing headers. Admit channels under their authenticated parent and current grants; preserve scoped delivery and physical send completion. * fix(hosts): bound encrypted overload and initial acquisition Check encrypted wire capacity before the async channel converts a resource limit into a physical connection error. Bound initial routed acquisition with the existing client timeout, then enable reconnect after admission. * fix(hosts): keep compact row actions clear of host labels Give compact connected-host rows separate text and action widths so long names and producer labels cannot compete with primary controls. * refactor(hosts): remove management settings UI from phase one Keep connected-host management in the CLI and shared SDK while preserving app saved connections and plugin access. * test(hosts): control physical write backpressure across platforms Hold real TCP writes until assertions finish instead of assuming a paused receiver exhausts every platform receive buffer. Preserve physical send settlement, byte identity, capacity and sibling checks. * refactor(hosts): use the ordinary client contract over channel transports Keep queuing, permission codes and reconnection independent of transport selection. Track submitted request outcomes generically while retaining connection error codes and structured causes. * test(e2e): keep transient developer toasts from stalling checks Concurrent locator handlers can wait for a dismiss button another handler removed. Dismiss existing toast DOM at document lifetime, including its open shadow root, without intercepting app actions. * Create, prompt, and monitor agents across connected hosts (#7507) * feat(hosts): delegate agents across connected hosts Resolve MCP host operations through in-process commands for self and the existing routed client transport for other destinations. Keep ordinary parent labels, app sessions and idle finish notifications. * test(app): normalize subagent fixtures through snapshots * docs(protocol): clarify same-host parent labels * fix(hosts): resolve subagents through destination sessions A child address identifies its destination regardless of the connection used. Reuse the existing host candidate selection for discovered routes and direct connections, and keep navigation and row actions independent of the parent transport. * fix(hosts): keep routed destinations distinct during discovery A routed candidate names only the origin daemon. Match it within the named destination profile so two destinations discovered through the same origin retain separate identities and connections, including existing saved routes. * feat(hosts): prompt and query agents on selected hosts Extend the existing MCP host operation boundary with prompt, status, activity and list operations. Local calls retain their handlers and notification owner; selected destinations use ordinary client RPCs and the existing idle finish wait. * test(e2e): preserve toast coverage with CSS hiding * docs(hosts): translate connected host references
30 KiB
title, description, nav
| title | description | nav |
|---|---|---|
| CLI 参考 | Paseo CLI 参考:在终端中管理项目、工作区、Agent、插件、脚本、定时任务、daemon 和权限。 | CLI 参考 |
CLI 参考
Paseo CLI 让你在终端中管理 Agent。它与 daemon 的 API 提供的接口相同,因此能在应用中做的事,都可以在命令行中完成。
Agent 编排:你可以让编程 Agent 使用 Paseo CLI 启动和管理其他 Agent。Paseo 会识别发起调用的 Agent,因此通过 CLI 创建的执行者与通过 MCP 创建的执行者获得相同的工作区和父级默认值。
速查
paseo run "fix the tests" # Start an agent
paseo ls # List running agents
paseo attach <id> # Stream agent output
paseo send <id> "also fix linting" # Send follow-up task
paseo logs <id> # View agent timeline
paseo stop <id> # Stop an agent
paseo usage # Show account quotas and balances
账号用量
显示主机用量来源中的账号配额和余额:
paseo usage
paseo usage ls --refresh
paseo usage ls --agent <agent-id>
paseo usage inspect <report-id>
paseo usage inspect <report-id> --refresh
paseo usage 等同于 paseo usage ls。摘要按账号对时间窗口和余额分组,并显示报告 ID、来源和账号标签、状态以及获取时间戳。缺失的值显示为 -;不可用和失败的报告会附带原因。
把列表中的完整报告 ID 复制到 inspect 中,可以查看重置时间、余额和单位、套餐详情、提供的预测,以及附带恢复说明的登录失败信息。报告 ID 需要完全匹配。
--agent 选择与某个 Agent 关联的账号配额。它不会统计该 Agent 的 token 消耗或费用。请使用完整的 Agent ID,并且不要把 --agent 与 inspect 一起使用。
查询会在可用时使用主机的五分钟缓存。添加 --refresh 可以绕过缓存。使用 --host 或 --home 选择一个 daemon。不支持用量来源的主机会返回一条更新提示。
在脚本中使用用量
paseo usage ls --json
paseo usage inspect <report-id> --json
paseo usage ls --quiet
列表的 JSON 始终是一个数组,没有返回报告时为 []。inspect 的 JSON 是一个报告条目。每个条目包含 id、sourceId、sourceLabel、account、fetchedAt 和一个嵌套的 report。访问其数据之前,请先读取 report.status:
| 状态 | 字段 |
|---|---|
available |
windows,以及可选的 planLabel、balances 和 details |
unavailable |
problem,说明凭据过期、被拒绝或缺少配额 |
error |
error,失败信息 |
条目还可能包含 loginErrors。结构化输出会保留数值和可选字段。支持标准的 --format yaml、--no-headers 和 --no-color 选项;--quiet 输出完整的报告 ID。
查询完成时以状态 0 退出,即使个别报告不可用或失败也是如此。连接或请求失败、不支持的主机、未知的报告 ID 以及相互冲突的选择器会以状态 1 退出,并把错误写到 stderr。结果为空时,人类可读的输出会显示 No usage reports returned;这并不能说明每个来源的账号发现是否都成功了。
已连接的主机
--host 选择要管理其已保存连接的 daemon。请用注册项的 registrationId,不要用标签。
paseo --host localhost:6767 host add 'ssh://deploy@build-box' --label build-box --meta team=infra
paseo --host localhost:6767 host ls --json
paseo --host localhost:6767 host inspect hst_123
paseo --host localhost:6767 host update hst_123 --meta team=tools --remove-meta obsolete
paseo --host localhost:6767 host update hst_123 --connection 'ssh://deploy@new-address'
paseo --host localhost:6767 host disable hst_123
paseo --host localhost:6767 host enable hst_123
paseo --host localhost:6767 host rm hst_123
add 接受 TCP/主机和端口、ws:///wss://、本地 socket/管道、SSH,以及 relay/配对 URL。
SSH 连接到已经运行的 daemon。如果该 daemon 需要密码,在 SSH URI 中添加 ?password=...(已有 daemonPort 时使用 &password=...)。无法访问的目标仍会保存,并自动重试。
ls 包括已禁用和连接失败的主机。inspect 包括不含凭据的连接详情和恢复说明。
JSON 输出不会包含连接凭据。
update --meta 替换指定的键;--remove-meta 删除键。替换连接会保留已固定的 daemon 身份。
只有确认目标已改变后,才应同时使用 --replace-identity 和 --connection。
rm 删除已保存的连接;该主机上的 Agent 和工作区会继续运行。
Provider 诊断
让 daemon 检查它实际使用的 Provider 环境:
paseo provider diagnostic claude
paseo provider diagnostic codex --json
paseo --host devbox:6767 provider diagnostic opencode
诊断信息包括配置的命令、daemon 的 PATH 和 shell、匹配到的二进制文件、解析出的路径、版本、模型数量和 Provider 状态。对于远程 daemon,请使用全局的 --host 选项。这与 设置 → 你的主机 → Providers → 对应 Provider → 诊断 下显示的诊断相同。
运行 Agent
使用 paseo run 启动一个带任务的新 Agent:
paseo run "implement user authentication"
paseo run --provider codex "refactor the API layer"
paseo run --no-wait "run the focused test suite"
paseo run --output-schema schema.json "name this branch"
paseo run --new-workspace worktree --worktree-mode branch-off --new-branch feature/x --base origin/main "implement feature X"
paseo run --workspace <workspace-id> "review the current diff"
paseo run --output-schema schema.json "extract release notes"
paseo run --output-schema '{"type":"object","properties":{"summary":{"type":"string"}},"required":["summary"]}' "summarize release notes"
在人工操作的 shell 中,不带参数的 paseo run 会为当前目录创建一个新的本地工作区。使用 --workspace <id> 把 Agent 加入一个已有的工作区,或者使用 --new-workspace local|worktree 为这次运行显式创建一个单独的工作区。
创建 worktree 时接受 --worktree-mode branch-off|checkout-branch|checkout-pr,以及相应的 --new-branch/--base、--branch 或 --pr-number/--forge 选项。使用 --worktree-slug 选择托管目录的 slug。
当一个已有的 Paseo Agent 运行同样的命令时,Paseo 会通过 PASEO_AGENT_ID 识别它。如果没有显式指定位置,新的 Agent 会成为它在同一工作区中的子 Agent。--workspace 可以把这个子 Agent 放到其他地方,而不改变它的父 Agent。
使用 --output-schema 只返回符合 schema 的 JSON 输出。你可以传入 schema 文件路径,或内联的 JSON schema 对象。此模式不能与 --no-wait 一起使用。
paseo run 默认等待完成。使用 --no-wait 可以立即返回,同时让 Agent 继续运行,paseo send 也使用同一个参数。
旧的 run --background 和 -d 别名仍然表示 --no-wait。它们已被弃用,不会出现在帮助中,并会向 stderr 输出警告。请在脚本中使用 --no-wait。工作区的可见性通过 workspace create --background 单独选择;本版本不会改变 run --background 的含义。
项目
把当前目录注册为项目,然后列出 daemon 知道的项目:
cd ~/dev/my-app
paseo project create
paseo project ls
使用 paseo project ls 中的项目 ID 重命名、重置或删除项目:
paseo project rename <project-id> "My app"
paseo project rename <project-id> --reset
paseo project delete <project-id>
--reset 恢复由项目目录推导出的名称。删除项目会归档它的活动工作区,并把项目从 Paseo 中移除。它不会删除项目目录。
对于本地 daemon,paseo project create [path] 默认使用当前目录,并在 CLI 所在机器上解析相对路径。当你使用全局的 --host 选项或 PASEO_HOST 时,请提供目标 daemon 能访问的路径:
paseo --host devbox:6767 project create /srv/repos/api
远程 daemon 会在它自己的机器上解释这个路径。项目如何对工作目录和会话分组,见工作区。
工作区
如果你想在启动 Agent 之前先准备好文件,可以单独创建工作区:
paseo workspace create --isolation local --path ~/dev/my-app --title main
paseo workspace create \
--isolation worktree \
--path ~/dev/my-app \
--mode branch-off \
--new-branch feature/auth \
--worktree-slug feature-auth \
--base origin/main
paseo workspace create \
--isolation worktree \
--path ~/dev/my-app \
--mode checkout-branch \
--branch feature/existing \
--worktree-slug existing-copy
paseo workspace create \
--isolation worktree \
--path ~/dev/my-app \
--mode checkout-pr \
--pr-number 2186
添加 --background 可以把工作区从默认的发现结果中隐藏。它的 Agent 和终端保留普通的历史记录、持久化、钩子和重启恢复。--no-background 显式覆盖从调用方工作区继承的设置;省略时,由 Paseo Agent 运行则继承,在人工操作的 shell 中默认为 false。可见性只能在创建时设置。
paseo workspace create --isolation local --background --path /path/to/repo
paseo run --workspace <workspace-id> --no-wait "review the checkout flow"
无论在列表中是否可见,都可以通过确切的工作区 ID 和 Agent ID 访问它们。
然后列出、使用、重命名或归档它:
paseo workspace ls
paseo workspace ls --background # Also include background workspaces
paseo run --workspace <workspace-id> "implement authentication"
paseo workspace rename <workspace-id> "Auth rework"
paseo workspace rename <workspace-id> --reset # back to the branch or directory name
paseo workspace archive <workspace-id>
当 Paseo 无法从源检出推断代码托管平台时,为 PR 检出添加 --forge <name>。setup 钩子和服务见 Git worktree。
终端
当多个工作区共享同一个目录时,请使用工作区 ID:
paseo terminal create --workspace <workspace-id> --name Development
paseo terminal ls --workspace <workspace-id> --json
paseo terminal send-keys <terminal-id> -l "echo ready"
paseo terminal send-keys <terminal-id> Enter
paseo terminal capture <terminal-id>
paseo terminal kill <terminal-id>
创建时默认使用工作区目录。添加 --cwd <absolute-path> 可以修改进程目录,同时仍由该工作区拥有。未知或已归档的工作区 ID 会失败。
不带 --workspace 时,创建会打开 --cwd 或当前目录对应的项目,并复用其中最早的活动工作区。不带 --workspace 的列表会按 --cwd 或当前目录过滤,可能包含多个工作区。ls --all 列出主机上的所有终端,不能与目录或工作区过滤条件一起使用。
创建和列表的结果包含 id、name、cwd 和 workspaceId。使用 --json 获得结构化输出,使用全局的 --host 选项指定另一个 daemon。这些命令需要一个支持工作区终端 API 的主机;较旧的主机会返回一条更新提示。
工作区脚本
列出、启动和停止在工作区的 paseo.json 中配置的脚本:
paseo script ls
paseo script start web
paseo script stop web
Paseo 默认选择目录为当前目录的工作区。传入 --cwd <path> 选择另一个目录,当一个目录有多个工作区时传入 --workspace <workspace-id>。使用全局的 --host 选项指定另一个 daemon。这些命令也接受 --json 等标准输出选项。
输出包含每个脚本的生命周期和受监管的终端 ID。服务还包含它们分配到的端口、代理 URL 和健康状态。paseo.json 的配置见 Git worktree。
插件
信任你添加的每一个插件。
paseo plugin add和paseo plugin install的含义是“我信任这个代码库”。插件的服务端代码和 Git 准备命令在 daemon 主机上以 daemon 用户的权限运行,没有沙盒;客户端贡献在 Paseo 内部运行。依赖和将来的更新也是这个决定的一部分。使用全局的--host选项时,命令在远程 daemon 主机上运行。
在 daemon 上创建和管理受信任的插件:
paseo plugin init ./plugin
paseo plugin install ./plugin
paseo plugin add owner/slug
paseo plugin add git:owner/repository
paseo plugin add https://gitlab.com/group/repository.git --ref main
paseo plugin add git:owner/monorepo:plugins/review
paseo plugin ls [id]
paseo plugin update my-plugin
paseo plugin update --all
paseo plugin reload my-plugin
paseo plugin logs my-plugin
paseo plugin disable my-plugin
paseo plugin enable my-plugin
paseo plugin remove my-plugin
paseo plugin reload <id> 报告重新加载本身的结果:在 daemon 停止并启动插件期间,无论耗时多久,它都会等待,并且会排在 daemon 的其他插件工作之后。取消命令或丢失连接不会停止 daemon 的工作,也没有任何列表或日志条目能确定被取消的重新加载做了什么——这些中间状态见插件参考。再次运行重新加载才能得到结果:它会等待尚未完成的那一次,然后再停止并启动插件一次。
不带前缀的 owner/slug 会安装经过审查的注册表展示项。GitHub 源码使用 git:owner/repository,本地目录使用 ./plugin。对于 monorepo 中的插件,追加 :<directory>。
paseo plugin ls [id] 不会联系远程。paseo plugin logs <id> 返回插件最近的 daemon 端 stdout 和 stderr。添加 --json 获得结构化条目,或运行 paseo --host <target> plugin logs <id> 查看另一个 daemon。安装、信任、生命周期和日志保留行为见插件参考。
列出 Agent
paseo ls # Non-archived agents in active workspaces
paseo ls -a # Also include archived agents
paseo ls -g # Non-archived agents across all workspaces
paseo ls -a -g --json # All agents, including archived, as JSON
paseo ls --background # Also include agents in background workspaces
流式输出
使用 paseo attach 实时查看 Agent 的输出流:
paseo attach abc123 # Attach to agent (Ctrl+C to detach)
Agent ID 可以缩写,只要 abc 没有歧义就可以使用。
发送消息
向正在运行或空闲的 Agent 发送后续任务:
使用 paseo ls 中接收方的 Agent ID,或者从 Agent 的标签页复制。
paseo send <id> "now run the tests"
paseo send <id> --image screenshot.png "what's wrong here?"
paseo send <id> --no-wait "run this task"
paseo send <id> --behavior interrupt "stop and do this instead"
由 Agent 发起的发送(设置了 PASEO_AGENT_ID)默认引导正在进行的轮次。其他发送默认中断它。使用 --behavior steer 或 --behavior interrupt 覆盖默认行为。引导使用与客户端相同的后备方式:如果无法引导,正在进行的轮次会被中断并替换。
查看日志
paseo logs <id> # Full timeline
paseo logs <id> -f # Follow (streaming)
paseo logs <id> --tail 10 # Last 10 entries
paseo logs <id> --filter tools # Only tool calls
等待 Agent
阻塞直到 Agent 完成当前任务:
paseo wait <id>
paseo wait <id> --timeout 60 # 60 second timeout
适用于脚本中,或一个 Agent 需要等待另一个 Agent 的情况。
定时任务
按 cron 定时任务运行 Agent。CLI 也接受简单的节奏预设,并把它们编译为 cron。完整参考见在 CLI 中使用定时任务。
paseo schedule create --every 30m --cwd ~/dev/my-app "Continue the refactor and leave a note."
paseo schedule ls
paseo schedule pause <id>
权限
Agent 在执行某些操作时可能会请求权限。在 CLI 中管理这些请求:
paseo permit ls # List pending requests
paseo permit allow <id> # Allow all pending for agent
paseo permit deny <id> --all # Deny all pending
Agent 模式
修改 Agent 的运行模式(因 Provider 而异):
paseo agent mode <id> --list # Show available modes
paseo agent mode <id> bypass # Set bypass mode
paseo agent mode <id> plan # Set plan mode
paseo agent detach <id> # Make a subagent top-level
解除父子关系是一个显式的生命周期操作,而不是创建时的参数。Agent 会继续运行;只有它与父 Agent 的关系发生变化。
管理 daemon
定义一次实例,然后启动它保存的配置:
paseo daemon config set daemon.listen 127.0.0.1:6799 --home ~/paseo-test
paseo daemon config set daemon.relay.enabled false --home ~/paseo-test
paseo daemon start --home ~/paseo-test
paseo project ls --home ~/paseo-test
paseo daemon restart --home ~/paseo-test
paseo daemon stop --home ~/paseo-test
start 在后台运行,并报告实际的监听地址和进程管理器的 PID。它只接受主目录选择和 --timeout <seconds>(默认 600)。如果等待超时,进程管理器仍会继续运行:请使用输出的状态、日志和停止说明。worker 在就绪之前退出会导致启动失败。
restart 请求现有的进程管理器替换 worker。它会重新读取文件,并保留进程管理器原始的环境变量和参数。成功表示已有另一个 worker 就绪,对于主目录目标还会跟随已变更的地址。它从不启动已停止的 daemon,也不会刷新进程管理器的二进制文件。超时时会报告请求是否已被确认;它无法证明重连失败的原因。
stop --home 会等待该本地进程管理器退出。在 POSIX 上,它向进程管理器发送信号,不联系任何 TCP 端点。在 Windows 上,它使用已就绪 daemon 的关闭 RPC;未绑定的实例需要显式的 --force。--force 允许在正常关闭超时(默认 15 秒)后强制清理进程树。stop --host 只报告 shutdown requested;不会验证远程进程是否退出。在捕获的进程管理器退出后,服务管理器可能会启动另一个实例。
status 分别显示本地进程管理器的状态、它发布的端点、配置的地址和 RPC 可达性。已停止的主目录从不会在其配置的地址上被探测。未绑定但仍在运行的进程管理器显示为 not ready。如果经过身份验证的本地连接仍然打开,但状态详情超时,结果仍为 reachable,并附带一条说明详情不可用的备注。worker 和 Provider 字段会被省略。显式的 --host 查询在其状态请求失败时仍然会失败。
reload 校验文件、应用运行时安全的更改,并报告 appliedPaths、restartRequiredPaths 和 overrideControlledPaths。它从不会隐式重启。使用 --json 或 --format yaml 获得结构化结果。缺少这项能力的较旧主机会报告需要更新。
根级别名 start、status、restart、reload 和 pair 与 daemon 下的命令相同。根级的 run 和 stop 仍然是 Agent 操作。
前台部署与迁移
在前台部署命令中使用环境变量覆盖:
PASEO_LISTEN=127.0.0.1:6799 PASEO_RELAY_ENABLED=false paseo daemon run --home ~/paseo-test
它会一直保持附着,直到进程管理器退出或你取消,没有就绪超时。worker 重启会保留这些启动输入。要修改它们,请停止并重新启动部署。如果主目录中已经有一个运行中的进程管理器,run 会返回 already_running,而不会接管或启动前台进程。
托管的 start 会忽略继承来的 daemon 设置覆盖项,包括 PORT、PASEO_LISTEN、中继、语音和 Web UI 设置。它会保留 Provider 凭据以及可执行文件/运行时控制项。start --foreground 已被移除;请使用 daemon run。以前的 start/restart 配置参数,例如 --port、--no-relay 和 --web-ui,会在产生任何副作用之前失败,并给出相应的 config set 迁移方式。见配置编辑。
选择一个 daemon
每个连接 daemon 的 CLI 命令都接受全局的 --home 或 --host,放在命令之前或之后均可。主目录选择本地进程管理器发布的端点;主机选择一个显式的端点。不存在退回到配置地址或默认端口的行为。
| 选择器 | 结果 |
|---|---|
--home |
该本地主目录,覆盖两个环境变量选择器 |
--host |
该端点,覆盖两个环境变量选择器 |
| 同时提供两个参数,或重复且相互冲突的参数 | TARGET_AMBIGUOUS |
只有 PASEO_HOME 或只有 PASEO_HOST |
对应的目标 |
| 两个环境变量选择器都存在,且没有参数 | TARGET_AMBIGUOUS |
| 都没有 | 默认的本地主目录 ~/.paseo |
仅限本地的 start、daemon run、config、onboard 和 set-password 会拒绝显式的 --host,并忽略 PASEO_HOST。端点操作保留 TCP、Unix 套接字、Windows 管道、SSH 和配对信息等传输方式。在宿主机上控制容器的 CLI 需要 --host 或 PASEO_HOST。
Hub
paseo hub login [url] # Approve and store organization-scoped CLI access
paseo hub init # Create and optionally deploy a starter trigger here
paseo hub connect [url] # Enroll this daemon using CLI access
paseo hub projects # List legacy projects in the authenticated organization
paseo hub status # Show the current Hub relationship
paseo hub permissions list # Show what this Hub may do on this daemon
paseo hub permissions grant hub.execute # Let Hub automations run agents here
paseo hub permissions revoke hub.execute # Take it back
paseo hub disconnect # End it
paseo hub deploy # Validate and install .paseo/triggers/*.yml
paseo hub deploy --dry-run # Validate without installing
paseo hub deploy -p <project> # Deploy an existing legacy project bundle
paseo hub logout # Remove the active stored CLI login
请在仓库根目录运行 deploy。它默认按确定的路径顺序读取所有直接位于 .paseo/triggers/ 下的 *.yml 文件。它会先校验所有触发器,再逐个安装。如果在前面的安装成功之后某个安装失败,错误信息会列出已安装的文件。--dry-run 只做校验;它不会创建或激活修订。
对于已有的旧版文件包,传入 -p, --project <slug>:包括 .paseo/hub.yml、直接位于 .paseo/workflows/ 下的 *.yml 文件,以及被引用的 workflow 片段。见从 CLI 部署。
login 会打开 Hub 的批准页面,并在 PASEO_HOME 下保存一个持久的、组织范围的 CLI 凭据。在交互式终端中,它会提议连接这个 daemon,然后单独询问是否允许 Hub 自动化在这里运行 Agent。连接默认为是;执行权限默认为否。随后它会链接到 Hub 的 Triggers 页面,并输出 paseo hub init,以便用代码完成设置。--json 和非 TTY 的登录只执行登录,从不提示。保存的登录与 connect 创建的 daemon 关系是分开的。
init 需要 TTY。它会根据需要登录并连接 daemon,然后列出组织中可以支撑入门触发器的应用连接。只有一个可用连接时会自动选中;有多个时,由你选择一个 Trigger connection。如果没有任何连接就绪,设置会引导你前往 Hub → Apps,并在选择 Agent 或写入文件之前停止。
设置会询问要运行哪个 Agent Provider、模型和模式。Provider 必须已启用,并且同时提供可选择的模型和执行模式。建议的模型和模式条目是 daemon 的默认值;没有默认值时仍需显式选择模式。Hub 在部署前会对照 daemon 校验这项选择,并且其无人值守的运行只接受 Claude、Codex 和 OpenCode。deploy 会执行相同的检查,因此需要指定的 daemon 已连接。随后设置会询问允许触发机器人的身份:GitHub 用户名、Slack 成员 ID 或 Discord 用户 ID。它会校验触发器,写入 .paseo/triggers/<provider>-help.yml,并询问是否部署。替换该文件需要确认;已有的旧版文件包和其他触发器文件会被保留。见生成的入门触发器。
交互式退出会检查同一地址的 daemon 关系,并在删除登录之前询问是否断开。选择否时只删除登录。JSON 和非交互式的退出从不提示,也不会隐式断开;--disconnect-daemon 是供自动化使用的显式方式,--force 作用于该 daemon 断开操作。如果请求的断开失败,登录会被保留。
每个命令在执行 Hub 或 daemon 工作之前,都会解析并规范化它的目标。地址的优先级依次为:显式的命令地址或 --hub、PASEO_HUB_URL、当前保存的登录地址,最后是托管版默认地址 https://hub.paseo.sh。托管版默认地址从不会覆盖当前的登录。凭据的优先级依次为:--api-key <secret>、PASEO_HUB_API_KEY,然后是与解析出的地址完全匹配的已保存登录。保存的凭据从不会发送到其他地址。通过参数或环境变量传入的 API 密钥不会被保存。
人类可读的输出会在每个操作之前报告解析出的目标。JSON 输出让 stdout 保持机器可读,并包含规范化后的 Hub 地址。文件包诊断会指出路径,但不会输出配置内容或凭据。
见 Hub 中的 daemon、Hub 配置和 Hub 公开 API。
连接远程 daemon
全局的 --host 选项接受本地目标(host:port、Unix 套接字或 Windows 管道),也接受配对信息 URL,即移动应用在扫码配对时使用的同一个 https://app.paseo.sh/#offer=... 链接。使用配对信息 URL 时,CLI 会通过 Paseo 中继以端到端加密的方式连接,因此你可以驱动另一台机器上的 daemon,而不必把它暴露在网络上。
从你要控制的 daemon 获取配对信息 URL:
paseo daemon pair # prints the QR and link when relay is enabled
paseo daemon pair --relay # enables relay without prompting
paseo daemon pair --json # structured output; never prompts
新安装默认关闭中继。中继被禁用时会返回 RELAY_DISABLED 错误;传入 --relay 表示明确同意。对于已停止的主目录,配对会被标记为离线;--relay 会保存中继启用设置,配对信息中会包含一条启动说明。运行中但不可达的主目录从不会退回到离线身份。中继配对是端到端加密的。见安全。
在任何地方使用它:
paseo --host 'https://app.paseo.sh/#offer=eyJ2IjoyLC...' ls
paseo --host "$OFFER_URL" run "fix the failing tests"
你也可以通过 PASEO_HOST 设置一次,而不必在每条命令中传入 --host。显式的参数会覆盖环境变量。
多 Agent 工作流
CLI 的设计初衷之一就是供 Agent 自己使用。你可以让一个 Agent 启动子 Agent 来并行工作:
# Agent A spawns Agent B and waits for it
agent_id=$(paseo run --no-wait --quiet --title api-agent "implement the API")
paseo wait "$agent_id"
paseo logs "$agent_id" --tail 5
由于 Agent A 的 ID 存在于环境变量中,除非指定了 --workspace,Agent B 会作为它的子 Agent 创建在同一个工作区中。
简单的实现加验证循环:
# Requires jq
while true; do
paseo run --provider codex "make the tests pass" >/dev/null
verdict=$(paseo run --provider claude --output-schema '{"type":"object","properties":{"criteria_met":{"type":"boolean"}},"required":["criteria_met"],"additionalProperties":false}' "ensure tests all pass")
if echo "$verdict" | jq -e '.criteria_met == true' >/dev/null; then
echo "criteria met"
break
fi
done
这种模式支持分层的任务分解:一个主导 Agent 可以拆分工作、委派给专门的 Agent,并汇总结果。
输出格式
大多数命令都支持多种输出格式,便于编写脚本:
paseo ls --json # JSON output
paseo ls --format yaml # YAML output
paseo ls -q # IDs only (quiet)
全局选项
--host <target>,连接另一个 daemon(host:port、Unix 套接字,或用于中继的https://app.paseo.sh/#offer=...)。见连接远程 daemon。--json,JSON 输出-q, --quiet,最少的输出--no-color,禁用颜色