Use Sprites from Claude Code as persistent, isolated Linux development environments for builds, tests, sandboxes, previews, and long-running services.
This repository is a Claude Code plugin marketplace containing the sprites plugin. The plugin bundles the hosted Sprites MCP server, browser OAuth, workflow skills, explicit status and smoke-test commands, and confirmation hooks for risky remote operations. No Sprites CLI is required.
Add this repository as a marketplace, then install the plugin:
/plugin marketplace add superfly/sprites-claude-plugin
/plugin install sprites@sprites
/reload-plugins
For local development from this checkout:
claude --plugin-dir ./plugins/spritesOr exercise the marketplace installation flow locally:
/plugin marketplace add .
/plugin install sprites@sprites
/reload-plugins
- Run
/sprites:statusor ask Claude to list your Sprites. - Open
/mcpif Claude Code requests authorization. - Select the plugin-provided
spritesserver and complete browser OAuth for the intended Fly.io organization. - Review the connector's name-prefix, create-cap, and access settings. Restricted access with a non-empty prefix such as
mcp-is the safer default.
An empty Sprite list means the integration is authenticated and working.
- Hosted MCP access at
https://sprites.dev/mcp. - Automatic workflow guidance for creating, inspecting, and operating Sprites.
/sprites:statusfor a read-only integration and authentication check./sprites:smokefor list → create → exec → approved cleanup.- Confirmation prompts before destroying a Sprite, restoring a checkpoint, replacing the network policy, or serving a new service on the Sprite's URL.
- Checkpoint prompts before risky remote package installs, migrations, or broad destructive commands.
With the plugin enabled, Claude can:
- List, create, and explicitly destroy Sprites.
- Run commands, tests, builds, and diagnostics remotely.
- Manage services, logs, checkpoints, and network policy.
- Keep risky or dependency-heavy work off the local machine.
Claude Code remains on the local machine. The plugin's MCP server is the control plane for remote environments:
- Local workspace is not the Sprite filesystem.
- Remote one-off commands use Sprites MCP
exectools. - Long-running processes use Sprites services.
- Reversible filesystem snapshots use checkpoints.
- Outbound access is governed by each Sprite's network policy.
There is no dedicated MCP file-upload tool. Prefer cloning a repository into the Sprite. For small generated files, the bundled skill documents a base64 transfer pattern that avoids fragile shell quoting.
Restricted connector tokens use a non-empty Sprite-name prefix and may limit how many Sprites the connector can create. The usual default is mcp-, but Claude learns the actual rule from API responses rather than assuming it.
Choosing Full access removes the prefix restriction and grants unrestricted access to every Sprite in the organization. Use it only when organization-wide control is intentional.
The plugin sends two fixed, privacy-safe client-signals headers on requests to the hosted MCP server:
Fly-Client-Agent: claude-code
Fly-Client-Interactive: false
claude-code is the canonical client-signals marker. Fly-Client-Interactive is the instrumentation sentinel required before the marker is considered; the fixed false value reflects that a static MCP manifest cannot measure terminal attachment per request. The headers contain nothing user-, machine-, organization-, or repository-specific. They are advisory aggregate analytics only and are never used for authentication, authorization, gating, or rate limiting.
Treat Sprite state as durable. A Sprite URL requires authentication by default, and none of the plugin's MCP tools can make it public — that is a separate --url-auth public change made outside the plugin. Still, anything a service serves on its http_port is reachable at that URL, so do not expose secrets, environment dumps, tokens, arbitrary files, admin/debug endpoints, or unfiltered logs over HTTP.
Destroying a Sprite is irreversible. Restoring a checkpoint discards newer filesystem state. policy_network_update replaces the whole outbound rule set rather than merging, so the plugin's skill tells Claude to read the current policy and send merged rules. The plugin asks for confirmation before each of these and before a service is given an http_port.
If Sprites tools are missing:
- Confirm
sprites@spritesis installed and enabled in/plugin. - Run
/reload-pluginsor restart Claude Code. - Open
/mcpand confirm the plugin-providedspritesserver is present.
If the server is present but unauthorized, authenticate it in /mcp and retry the original request. Do not install the Sprites CLI, run sprite login, add a second MCP server, or paste access tokens into the shell as a workaround.
For development-time validation:
python3 scripts/check_repository.py
python3 -m unittest discover -s tests -v
claude plugin validate ./plugins/sprites
claude plugin validate ..claude-plugin/marketplace.json Marketplace catalog
plugins/sprites/
.claude-plugin/plugin.json Plugin manifest
.mcp.json Hosted MCP configuration
hooks/hooks.json Claude Code safety hook
scripts/sprites_guard.py Dependency-free hook implementation
skills/ Workflow skills and references