mcpField
S
sprites-dev

sprites-dev

github.com/kylelundstedt云与 DevOps102 次安装
代码仓库

关于 sprites-dev

sprites-dev 是一项技能,介绍如何在本地使用 `sprite` 命令行管理 Fly.io 上持久化且相互隔离的 Linux 虚拟机。内容涵盖远程命令、文件操作、检查点、网络、服务和 Sprite 生命周期。

主要功能

  1. 01使用 `sprite` 命令行管理 Sprites
  2. 02执行远程命令及交互式 Shell
  3. 03通过命令流传输文件
  4. 04创建和恢复文件系统检查点
  5. 05管理 URL、服务和虚拟机生命周期

适用场景

  1. 01在远程 Sprite 上运行项目命令
  2. 02检查或传输本地与远程文件
  3. 03在高风险更改前保存检查点
  4. 04配置持久服务或公开 URL 访问

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/kylelundstedt/dotfiles --skill sprites-dev

安装后在 Claude Code 中输入/sprites-dev确认已加载。

详细介绍

你可以在本地机器上使用 sprite CLI 管理远程 Sprite VM。本技能介绍了用于从外部控制 Sprite 的本地端 CLI。(Sprite 内部运行的 Agent 也可以使用内置 Agent 上下文 /.sprite/docs/。)

Sprite 是运行在 Fly.io 上、具有硬件隔离的持久化 Linux VM,其持久文件系统由对象存储提供支持。

CLI 基础

sprite CLI 用于控制远程 Sprite。-s 标志指定要操作的 Sprite,-o 指定组织。

# List all sprites
sprite list

# Execute a command on a sprite (blocks until done)
sprite exec -s <name> -- <command>

# Open interactive shell
sprite console -s <name>

# Activate a sprite for the current directory (creates .sprite file)
sprite use <name>

如果工作目录中存在 .sprite 文件,可以省略 -s。

执行命令

sprite exec 是远程操作的主要工具。标准输出和标准错误会返回到本地终端。

# Run a single command
sprite exec -s mysprite -- ls -la /home/sprite

# Run a multi-part command (quote or use --)
sprite exec -s mysprite -- bash -c "cd /project && npm test"

# Pipe output locally
sprite exec -s mysprite -- cat /path/to/file > local-copy.txt

重要: 每次调用 sprite exec 都会创建独立会话。环境变量、工作目录和 Shell 状态不会在调用之间保留。若要执行有状态的操作,请使用 bash -c "..." 串联命令,或使用 sprite console 启动交互式会话。

环境变量: -env 标志会将环境变量传递到远程会话,但多个 -env 标志只会应用最后一个。要传递多个变量,请使用逗号分隔的格式:

# WRONG — only BAR is set
sprite exec -s mysprite -env "FOO=1" -env "BAR=2" -- env

# RIGHT — both are set
sprite exec -s mysprite -env "FOO=1,BAR=2" -- env

文件传输

没有专用的文件传输命令。可使用 sprite exec 配合 cat 拉取文件,也可以通过管道传入内容:

# Pull a file from a sprite
sprite exec -s mysprite -- cat /path/on/sprite > local-file.txt

# Pull a binary file
sprite exec -s mysprite -- base64 /path/to/binary | base64 -d > local-file.bin

# Push a file to a sprite (via stdin)
cat local-file.txt | sprite exec -s mysprite -- bash -c "cat > /path/on/sprite"

# For heavier file work, use SSHFS via proxy
sprite proxy 2222  # then sshfs sprite@localhost:/home/sprite /mnt/sprite -p 2222

检查点

检查点会捕获 Sprite 文件系统的可写覆盖层。创建速度快(亚秒级,采用写时复制),成本低。

# Create a checkpoint (with optional comment)
sprite checkpoint create -s mysprite
sprite checkpoint create -s mysprite -m "before risky refactor"

# List checkpoints
sprite checkpoint list -s mysprite

# Restore to a checkpoint (destructive — drops current session and all changes since)
sprite restore <checkpoint-id> -s mysprite

频繁创建检查点。 在执行任何有风险的操作之前、切换上下文之前,以及任何进展顺利时,都应创建检查点。检查点几乎不花成本。

最近的 5 个检查点也会挂载在 Sprite 内的 /.sprite/checkpoints/,可直接检查文件,无需还原。

网络

每个 Sprite 都会获得一个公开的 HTTPS URL:https://<name>-<org>.sprites.dev/,默认路由到端口 8080。

# Show the sprite's URL and auth mode
sprite url -s mysprite

# Make the URL public (no auth required)
sprite url update --auth public -s mysprite

# Restore authenticated mode
sprite url update --auth default -s mysprite

# Forward remote ports to local machine
sprite proxy 8080 3000 -s mysprite

网络出口策略通过 Sprites REST API 管理,而非 CLI:

# View current network policy (from inside the sprite)
sprite exec -s mysprite -- cat /.sprite/policy/network.json

# Update network policy (from outside, via API)
sprite api -s mysprite POST /policy/network \
  -d '{"rules": [{"include": "defaults"}, {"domain": "custom-api.com", "action": "allow"}]}'

网络策略只能从外部修改。Sprite 无法更改自身策略。

服务

服务是在 Sprite 内运行的长时间运行进程,可在重启和休眠后持续存在。

# List services
sprite exec -s mysprite -- sprite-env services list

# Create a service
sprite exec -s mysprite -- sprite-env services create <name> --cmd <binary> --args "<args>"

# Get service status
sprite exec -s mysprite -- sprite-env services get <name>

# View service logs
sprite exec -s mysprite -- cat /.sprite/logs/services/<name>.stderr.log

可以将一个服务指定为 HTTP 服务(接收发往 Sprite URL 的代理请求)。

多个 Sprite 协同

跨多个 Sprite 工作时,使用 sprite list 查看所有 Sprite,然后按名称指定目标:

# Run the same command across all sprites
for s in $(sprite list); do
  echo "=== $s ==="
  sprite exec -s "$s" -- <command>
done

每个 Sprite 都完全隔离,不共享可变状态。请通过明确的通信方式进行协同:共享 Tigris 存储桶中的文件、HTTP 端点或 Git 仓库。

生命周期

# Create a new sprite
sprite create <name>
sprite create -o <org> <name>

# Destroy a sprite (irreversible)
sprite destroy <name>

Sprite 在空闲时会自动休眠(没有活动命令、TCP 连接、TTY 会话或正在运行的服务)。下次执行 sprite exec、sprite console 或向其 URL 发送 HTTP 请求时,会自动唤醒。磁盘上的所有内容都会在休眠周期之间保留,运行中的进程则不会。守护进程请使用服务。

设置开发 Sprite

创建新的 Sprite 后,请设置 Tailscale 并安装 dotfiles。Tailscale 可提供稳定的主机名以供 SSH 使用,并启用来自 Mac 的 1Password SSH Agent 的 Agent 转发。

1. 安装 Tailscale 和 dotfiles

传入 TS_AUTHKEY 和 TS_HOSTNAME,以便 install.sh 完成 Tailscale 的端到端设置:

# Mint an ephemeral tag:dev key via the Tailscale OAuth client (see agent_docs/secrets.md)
_tok=$(curl -fsS -u "$(op read 'op://Employee/Tailscale OAuth Dev/Client ID' --account industryvault.1password.com):$(op read 'op://Employee/Tailscale OAuth Dev/Client secret' --account industryvault.1password.com)" -d grant_type=client_credentials https://api.tailscale.com/api/v2/oauth/token | jq -r .access_token)
TS_AUTHKEY=$(curl -fsS -X POST -H "Authorization: Bearer $_tok" -H "Content-Type: application/json" -d '{"capabilities":{"devices":{"create":{"reusable":false,"ephemeral":true,"preauthorized":true,"tags":["tag:dev"]}}},"expirySeconds":600}' https://api.tailscale.com/api/v2/tailnet/-/keys | jq -r .key)
sprite exec -s <name> -env "TS_AUTHKEY=$TS_AUTHKEY,TS_HOSTNAME=<name>" -- bash -c "curl -fsSL https://raw.githubusercontent.com/kylelundstedt/dotfiles/master/install.sh | bash"

从 Mac 验证 SSH 连接:

ssh -o StrictHostKeyChecking=accept-new <name> echo ok

验证成功后再继续。

2. 克隆项目仓库

Mac 的 SSH 配置会将 1Password Agent 转发到 *.ts.net 主机(ForwardAgent yes)。这意味着执行 ssh <name> 后,Sprite 即可访问你的 GitHub SSH 密钥,无需令牌。直接克隆:

ssh <name> git clone [email protected]:<org>/<repo>.git /home/sprite/<repo>

首次通过 Tailscale SSH 登录时,会自动启用 Git 提交签名(Shell 会检测转发的 Agent)。

3. 从 Zed 连接
zed ssh://sprite@<name>/home/sprite/<repo>

内部 Sprite 路径

在 Sprite 上运行命令时,以下路径很有用:

  • /.sprite/api.sock — 内部 API Unix 套接字
  • /.sprite/policy/network.json — 只读网络策略
  • /.sprite/checkpoints/ — 挂载以供检查的最近 5 个检查点
  • /.sprite/logs/services/ — 服务日志
  • /.sprite/docs/ — 平台文档(agent-context.md、languages.md、docker.md)
  • /home/sprite/ — 用户主目录

评论

支持 Markdown