install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/angusmolt/agentstead-deploy" ~/.claude/skills/openclaw-skills-agentstead-deploy && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/angusmolt/agentstead-deploy" ~/.openclaw/skills/openclaw-skills-agentstead-deploy && rm -rf "$T"
manifest:
skills/angusmolt/agentstead-deploy/SKILL.mdsource content
AgentStead Deploy Skill
Deploy and manage AI agents on AgentStead cloud hosting.
Prerequisites
- An AgentStead account (sign up at https://agentstead.com/signup)
andcurl
installed (standard on most systems)jq- An auth token from logging in
Authentication
First, log in to get an auth token. The skill provides a helper script that safely handles credentials:
# Save the deploy helper script cat > /tmp/agentstead-deploy.sh << 'SCRIPT' #!/bin/bash # AgentStead Deploy Helper — handles JSON escaping safely set -e API="https://www.agentstead.com/api" TOKEN_FILE="$HOME/.agentstead-token" cmd_login() { local email="${1:-$AGENTSTEAD_EMAIL}" password="${2:-$AGENTSTEAD_PASSWORD}" if [ -z "$email" ]; then read -p "Email: " email fi if [ -z "$password" ]; then read -sp "Password: " password echo fi local body body=$(jq -n --arg e "$email" --arg p "$password" '{email: $e, password: $p}') local resp resp=$(curl -s -X POST "$API/auth/login" -H "Content-Type: application/json" -d "$body") local token token=$(echo "$resp" | jq -r '.token // empty') if [ -z "$token" ]; then echo "ERROR: Login failed — $(echo "$resp" | jq -r '.error // "unknown error"')" >&2 return 1 fi echo "$token" > "$TOKEN_FILE" chmod 600 "$TOKEN_FILE" echo "OK: Logged in successfully" } cmd_create() { local name="$1" plan="${2:-STARTER}" ai_plan="${3:-PAYG}" model="${4:-SONNET}" local token token=$(cat "$TOKEN_FILE" 2>/dev/null) || { echo "ERROR: Not logged in" >&2; return 1; } local body body=$(jq -n \ --arg name "$name" \ --arg plan "$plan" \ --arg aiPlan "$ai_plan" \ --arg model "$model" \ '{name: $name, plan: $plan, aiPlan: $aiPlan, defaultModel: $model}') curl -s -X POST "$API/agents" \ -H "Content-Type: application/json" \ -H "x-cognito-id: $(cat "$TOKEN_FILE")" \ -d "$body" | jq . } cmd_configure() { local agent_id="$1" personality="$2" local token token=$(cat "$TOKEN_FILE" 2>/dev/null) || { echo "ERROR: Not logged in" >&2; return 1; } local body body=$(jq -n --arg p "$personality" '{personality: $p}') curl -s -X PATCH "$API/agents/$agent_id" \ -H "Content-Type: application/json" \ -H "x-cognito-id: $(cat "$TOKEN_FILE")" \ -d "$body" | jq . } cmd_channel() { local agent_id="$1" type="$2" bot_token="$3" local token token=$(cat "$TOKEN_FILE" 2>/dev/null) || { echo "ERROR: Not logged in" >&2; return 1; } local body body=$(jq -n --arg t "$type" --arg bt "$bot_token" '{type: $t, config: {botToken: $bt}}') curl -s -X POST "$API/agents/$agent_id/channels" \ -H "Content-Type: application/json" \ -H "x-cognito-id: $(cat "$TOKEN_FILE")" \ -d "$body" | jq . } cmd_start() { local agent_id="$1" local token token=$(cat "$TOKEN_FILE" 2>/dev/null) || { echo "ERROR: Not logged in" >&2; return 1; } curl -s -X POST "$API/agents/$agent_id/start" \ -H "Content-Type: application/json" \ -H "x-cognito-id: $(cat "$TOKEN_FILE")" | jq . } cmd_stop() { local agent_id="$1" local token token=$(cat "$TOKEN_FILE" 2>/dev/null) || { echo "ERROR: Not logged in" >&2; return 1; } curl -s -X POST "$API/agents/$agent_id/stop" \ -H "Content-Type: application/json" \ -H "x-cognito-id: $(cat "$TOKEN_FILE")" | jq . } cmd_list() { local token token=$(cat "$TOKEN_FILE" 2>/dev/null) || { echo "ERROR: Not logged in" >&2; return 1; } curl -s "$API/agents" \ -H "x-cognito-id: $(cat "$TOKEN_FILE")" | jq '.agents[] | {id, name, status, plan, aiPlan, defaultModel}' } cmd_subscribe() { local agent_id="$1" astd_cost="$2" local token token=$(cat "$TOKEN_FILE" 2>/dev/null) || { echo "ERROR: Not logged in" >&2; return 1; } local body body=$(jq -n --argjson cost "$astd_cost" '{planAstdCost: $cost}') curl -s -X POST "$API/agents/$agent_id/subscribe-astd" \ -H "Content-Type: application/json" \ -H "x-cognito-id: $(cat "$TOKEN_FILE")" \ -d "$body" | jq . } case "$1" in login) cmd_login "$2" "$3" ;; create) cmd_create "$2" "$3" "$4" "$5" ;; configure) cmd_configure "$2" "$3" ;; channel) cmd_channel "$2" "$3" "$4" ;; start) cmd_start "$2" ;; stop) cmd_stop "$2" ;; list) cmd_list ;; subscribe) cmd_subscribe "$2" "$3" ;; *) echo "Usage: agentstead-deploy.sh {login|create|configure|channel|start|stop|list|subscribe}" ;; esac SCRIPT chmod +x /tmp/agentstead-deploy.sh
Usage
1. Log in
# Option A: Use environment variables (recommended) export AGENTSTEAD_EMAIL="user@example.com" export AGENTSTEAD_PASSWORD="password123" /tmp/agentstead-deploy.sh login # Option B: Interactive prompts (password hidden) /tmp/agentstead-deploy.sh login # Option C: Pass email only, prompt for password /tmp/agentstead-deploy.sh login "user@example.com"
2. Create an agent
# Args: name, hardware_plan, ai_plan, default_model /tmp/agentstead-deploy.sh create "My Agent" "STARTER" "PAYG" "SONNET"
Hardware plans: STARTER ($9/mo), PRO ($29/mo), BUSINESS ($59/mo), ENTERPRISE ($99/mo)
AI plans: BYOK (bring your own key), PAYG (pay-as-you-go from ASTD wallet), ASTD_1000–ASTD_10000
Models (AgentStead Provided):
- Anthropic: HAIKU, SONNET, OPUS
- AWS Bedrock: BEDROCK_HAIKU, BEDROCK_SONNET, BEDROCK_OPUS, BEDROCK_HAIKU45, BEDROCK_NOVA_PRO, BEDROCK_NOVA_LITE, BEDROCK_NOVA_MICRO, BEDROCK_LLAMA4_MAVERICK, BEDROCK_LLAMA33_70B, BEDROCK_DEEPSEEK_R1, BEDROCK_MISTRAL_LARGE, BEDROCK_COMMAND_R_PLUS
- Ollama (free): DEEPSEEK_V3, QWEN3, LLAMA4, GEMMA3, MISTRAL_LARGE, GLM5, KIMI_K2, MINIMAX
3. Activate subscription (deduct ASTD from wallet)
# Args: agent_id, astd_cost (900=Starter, 2900=Pro, 5900=Business, 9900=Enterprise) /tmp/agentstead-deploy.sh subscribe "agent-uuid-here" 900
4. Set personality
/tmp/agentstead-deploy.sh configure "agent-uuid-here" "You are a helpful coding assistant specializing in Python."
5. Add a channel (Telegram, Discord, WhatsApp, Slack)
/tmp/agentstead-deploy.sh channel "agent-uuid-here" "TELEGRAM" "123456:ABC-DEF..."
6. Start the agent
/tmp/agentstead-deploy.sh start "agent-uuid-here"
7. List agents
/tmp/agentstead-deploy.sh list
8. Stop an agent
/tmp/agentstead-deploy.sh stop "agent-uuid-here"
Security
- All user input is passed through
for safe JSON encoding — never interpolated directly into shell commandsjq - Auth tokens are stored in
with 600 permissions (owner-only read)$HOME/.agentstead-token - Credentials are read from environment variables or interactive prompts — never passed as CLI arguments
- All API calls use HTTPS
- Network access is restricted to agentstead.com only