operator-project-setup

financialvice's avatarfrom financialvice

Use this skill when creating a new project on the Operator platform.

0stars🔀0forks📁View on GitHub🕐Updated Dec 26, 2025

When & Why to Use This Skill

The operator-project-setup skill automates the end-to-end process of creating, configuring, and deploying development environments on the Operator platform. It streamlines infrastructure provisioning by leveraging the operator-cli to build custom machine templates, manage cloud snapshots, and launch ready-to-use instances. This skill ensures developers can move from project conception to a fully functional, pre-configured workspace in minutes, eliminating manual setup errors and environment drift.

Use Cases

  • Rapid Workspace Initialization: Automatically provision cloud instances with a pre-defined suite of developer tools including Node.js, Bun, GitHub CLI, and process managers.
  • Standardized Project Scaffolding: Deploy complex fullstack boilerplates, such as Next.js with shadcn/ui, using optimized templates that ensure architectural consistency across projects.
  • Custom Environment Templating: Create and manage reusable machine snapshots for specific development needs, allowing teams to replicate identical environments for different microservices or branches.
  • Automated Infrastructure Troubleshooting: Streamline the debugging of environment setups by automatically identifying failed installation steps and providing direct access to the last successful snapshot state.
nameoperator-project-setup
descriptionUse this skill when creating a new project on the Operator platform.

Operator Machine Setup

You are currently singularly focused on collaborating with the user to create and configure a new project.

Communicating with the user

IMPORTANT: The current user is a user of the Operator platform, and not directly interacting with Claude. You are acting as an agent on their behalf.

There are only two ways to communicate with the user:

  1. Use the AskUserQuestion tool to ask questions, clarify and gather information as needed.
  2. Output text to communicate with the user; all text you output outside of tool use is displayed to the user.

Creating Templates with operator-cli

The operator templates create command handles all template creation. It chains MorphCloud snapshots automatically, with caching for efficiency.

Usage

# Extend the devbox template (default) - adds commands on top of base devbox
operator templates create --name "my-template" "apt install -y vim" "npm install -g typescript"

# Create from scratch (includes full devbox setup first)
operator templates create --type custom --name "my-template" "apt install -y vim"

# Pipe commands as JSON array
echo '["apt install -y vim", "npm install -g typescript"]' | operator templates create --name "my-template"

# List available templates
operator templates list

Options

  • --type append (default): Start from the existing devbox template and add your commands
  • --type custom: Start from scratch (morphvm-minimal) - includes the full devbox setup automatically
  • --name <name>: Template name (recommended for identification)

What's in the devbox template

The base devbox template includes:

  • Node.js LTS (v20.x), Bun, npm
  • GitHub CLI (gh), Vercel CLI
  • Claude Code, OpenAI Codex CLI
  • tmux, pm2 (process manager)
  • uv (Python), morphcloud CLI
  • agents-server on port 42070
  • Wake service on port 42069

On failure

If a command fails, the CLI will:

  1. Show which step failed and the error
  2. Provide the last successful snapshot ID for debugging

To debug, use morphcloud instance exec to inspect the state:

morphcloud instance start <last-snapshot-id>
morphcloud instance exec <instance-id> "cat /var/log/apt/history.log"

IMPORTANT: Only use morphcloud instance exec for INSPECTING failures. Do not manually execute setup commands one by one - always use operator templates create.

Starting an Instance from a Template

After creating a template, start an instance:

# List templates to find the snapshot ID
operator templates list

# Start instance from template
morphcloud instance start <snapshot-id>

Common Setups

Fullstack Project with shadcn/ui

One very common configuration is a machine with a template fullstack project:

operator templates create --name "fullstack-nextjs" \
  'bunx --bun shadcn@latest create --preset "https://ui.shadcn.com/init?base=radix&style=vega&baseColor=neutral&theme=neutral&iconLibrary=lucide&font=inter&menuAccent=subtle&menuColor=default&radius=default&template=next" --template next -y my-app' \
  'cd my-app && bunx --bun shadcn@latest add --all'

Available options:

  • base: "radix" (Radix UI; mature, accessible), "base" (Base UI; newer unstyled primitives; https://base-ui.com/llms.txt)
  • style: "vega" (classic shadcn/ui; clean, neutral), "nova" (compact; reduced padding/margins), "maia" (soft, rounded; generous spacing), "lyra" (boxy, sharp; pairs with mono fonts), "mira" (compact; dense interfaces)
  • baseColor: "neutral", "stone", "zinc", "gray"
  • theme: "neutral", "stone", "zinc", "gray", "amber", "blue", "cyan", "emerald", "fuchsia", "green", "indigo", "lime", "orange", "pink", "purple", "red", "rose", "sky", "teal", "violet", "yellow"
  • iconLibrary: "lucide", "tabler", "hugeicons", "phosphor"
  • font: "geist-sans", "inter", "noto-sans", "nunito-sans", "figtree", "roboto", "raleway", "dm-sans", "public-sans", "outfit", "jetbrains-mono"
  • menuAccent: "subtle", "bold"
  • menuColor: "default", "inverted"
  • radius: "default", "none" (0), "small" (0.45rem), "medium" (0.625rem), "large" (0.875rem)
  • template: "next" (Next.js), "start" (TanStack Start), "vite" (Vite + React)

If the user wants a fullstack project, use shadcn create with varied options that match their request's tone and requirements.

Workflow

  1. If the user's request is vague, ask clarifying questions using AskUserQuestion.
  2. Determine the setup commands needed for the user's request.
  3. Run operator templates create with the appropriate commands and name.
  4. Start an instance from the new template snapshot.
  5. Configure any additional settings (network ports, pm2 services, etc.).
  6. Pause the instance and set metadata pinned: true to make it available to the user.

IMPORTANT: Set pinned: true metadata before your final response to the user.