/update-team
Update agent team services with latest configuration from setup-agent-team and restart them
$ npx -y skills add OpenRouterLabs/spawn --skill update-team --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/update-team
Context preview
The summary Claude sees to decide when to auto-load this skill.
Update agent team services with latest configuration from setup-agent-team and restart them
SKILL.md
update-team.SKILL.mdname: update-team
description: Update agent team services with latest configuration from setup-agent-team and restart them
argument-hint: "[service-name] [--check-only]"
allowed-tools: Bash, Read, Edit, Glob, Grep
Update Agent Team Services
Update the trigger server and wrapper scripts with the latest configuration from `.claude/skills/setup-agent-team/SKILL.md`, then restart the services to apply changes.
Arguments
- `service-name` (optional) — Update only this service (e.g., `discovery`, `refactor`, `security`, `qa`). If omitted, updates all services.
- `--check-only` — Show what would be updated without making changes or restarting services.
**$ARGUMENTS**
Overview
This skill: 1. Reads the latest setup-agent-team SKILL.md for current best practices 2. Identifies all deployed services by scanning for `start-*.sh` wrappers 3. Updates wrapper scripts with correct env vars and paths 4. Restarts systemd services to apply changes 5. Verifies services are running and healthy
Step 1: Determine repository path
Detect the current repository path:
REPO_ROOT="$(cd /root/spawn 2>/dev/null && pwd || cd /home/sprite/spawn 2>/dev/null && pwd)"
echo "Repository root: $REPO_ROOT"
Determine home directory:
if [[ "$REPO_ROOT" == "/root/spawn" ]]; then
HOME_DIR="/root"
SERVICE_USER="root"
SERVICE_GROUP="root"
elif [[ "$REPO_ROOT" == "/home/sprite/spawn" ]]; then
HOME_DIR="/home/sprite"
SERVICE_USER="sprite"
SERVICE_GROUP="sprite"
else
echo "ERROR: Unknown repository path: $REPO_ROOT"
exit 1
fi
echo "Home directory: $HOME_DIR"
echo "Service user/group: $SERVICE_USER/$SERVICE_GROUP"Step 2: Read latest setup-agent-team instructions
Read the SKILL.md to check for:
- Latest env var requirements
- Recommended timeout values
- New mandatory settings
- Path patterns
cat "$REPO_ROOT/.claude/skills/setup-agent-team/SKILL.md"
Key things to extract from SKILL.md:
- Required env vars: `TRIGGER_SECRET`, `TARGET_SCRIPT`, `REPO_ROOT`, `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`, `MAX_CONCURRENT`, `RUN_TIMEOUT_MS`
- Recommended `RUN_TIMEOUT_MS` values per service
- Path templates for systemd service files
Step 3: Identify deployed services
Find all wrapper scripts:
ls -1 "$REPO_ROOT/.claude/skills/setup-agent-team/start-"*.sh 2>/dev/null | while read -r wrapper; do
basename "$wrapper" | sed 's/^start-//;s/\.sh$//'
doneFor each service found, check if it has a corresponding systemd unit:
systemctl list-units --all --type=service --plain --no-legend | grep -E 'discovery-trigger|refactor|spawn-security|spawn-qa' | awk '{print $1}'Match wrappers to systemd units:
- `start-discovery.sh` → `discovery-trigger.service`
- `start-refactor.sh` → `refactor.service`
- `start-security.sh` → `spawn-security.service`
- `start-qa.sh` → `spawn-qa.service` (if exists)
Step 4: Check wrapper script compliance
For each wrapper script, verify it has:
Required env vars
# Check if wrapper has all required env vars
grep -q 'export TRIGGER_SECRET=' "$wrapper_path" || echo "MISSING: TRIGGER_SECRET"
grep -q 'export TARGET_SCRIPT=' "$wrapper_path" || echo "MISSING: TARGET_SCRIPT"
grep -q 'export REPO_ROOT=' "$wrapper_path" || echo "MISSING: REPO_ROOT"
grep -q 'export CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1' "$wrapper_path" || echo "MISSING: CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS"
grep -q 'export MAX_CONCURRENT=' "$wrapper_path" || echo "MISSING: MAX_CONCURRENT"
grep -q 'export RUN_TIMEOUT_MS=' "$wrapper_path" || echo "MISSING: RUN_TIMEOUT_MS"
Correct paths
# Extract SCRIPT_DIR from wrapper
SCRIPT_DIR=$(grep '^SCRIPT_DIR=' "$wrapper_path" | cut -d'"' -f2)
# Verify it matches REPO_ROOT
if [[ "$SCRIPT_DIR" != "$REPO_ROOT/.claude/skills/setup-agent-team" ]]; then
echo "WARNING: SCRIPT_DIR mismatch"
echo " Found: $SCRIPT_DIR"
echo " Expected: $REPO_ROOT/.claude/skills/setup-agent-team"
fiExec pattern
# Verify it uses exec bun run
grep -q 'exec bun run "${SCRIPT_DIR}/trigger-server.ts"' "$wrapper_path" || echo "WARNING: Non-standard exec pattern"Step 5: Check systemd service compliance
For each systemd service file at `/etc/systemd/system/<service-name>.service`:
Required fields
# Check critical fields
grep -q "^User=$SERVICE_USER$" "$service_file" || echo "MISSING/WRONG: User"
grep -q "^Group=$SERVICE_GROUP$" "$service_file" || echo "MISSING/WRONG: Group"
grep -q "^WorkingDirectory=$REPO_ROOT/.claude/skills/setup-agent-team$" "$service_file" || echo "MISSING/WRONG: WorkingDirectory"
grep -q "^ExecStart=/bin/bash $REPO_ROOT/.claude/skills/setup-agent-team/start-" "$service_file" || echo "MISSING/WRONG: ExecStart"
Environment variables
# Check PATH includes correct home directory
grep "^Environment=\"PATH=$HOME_DIR/.bun/bin:$HOME_DIR/.local/bin:" "$service_file" || echo "WARNING: PATH may be incorrect"
# Check HOME is set
grep "^Environment=\"HOME=$HOME_DIR\"$" "$service_file" || echo "MISSING/WRONG: HOME"
# Check IS_SANDBOX
grep -q '^Environment="IS_SANDBOX=1"' "$service_file" || echo "MISSING: IS_SANDBOX"
Step 6: Update wrapper scripts (if needed)
If `--check-only` is NOT passed and issues were found:
For path mismatches, update SCRIPT_DIR:
# This requires preserving the TRIGGER_SECRET value
# Read current secret
CURRENT_SECRET=$(grep '^export TRIGGER_SECRET=' "$wrapper_path" | cut -d'"' -f2)
# Update SCRIPT_DIR line
sed -i "s|^SCRIPT_DIR=.*|SCRIPT_DIR=\"$REPO_ROOT/.claude/skills/setup-agent-team\"|" "$wrapper_path"
# Update REPO_ROOT line
sed -i "s|^export REPO_ROOT=.*|export REPO_ROOT=\"$REPO_ROOT\"|" "$wrapper_path"
For missing env vars, add them:
# Add CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS if missing
if ! grep -q 'CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS' "$wrapper_path"; then
# Insert before exec line
sed -i '/^exec bun run/i export CLAUDE_CODE_EXPERIMENTAL_AGENT_TRead more
name: update-team description: Update agent team services with latest configuration from setup-agent-team and restart them argument-hint: "[service-name] [--check-only]" allowed-tools: Bash, Read, Edit, Glob, Grep
Update Agent Team Services
Update the trigger server and wrapper scripts with the latest configuration from `.claude/skills/setup-agent-team/SKILL.md`, then restart the services to apply changes.
Arguments
- `service-name` (optional) — Update only this service (e.g., `discovery`, `refactor`, `security`, `qa`). If omitted, updates all services.
- `--check-only` — Show what would be updated without making changes or restarting services.
**$ARGUMENTS**
Overview
This skill: 1. Reads the latest setup-agent-team SKILL.md for current best practices 2. Identifies all deployed services by scanning for `start-*.sh` wrappers 3. Updates wrapper scripts with correct env vars and paths 4. Restarts systemd services to apply changes 5. Verifies services are running and healthy
Step 1: Determine repository path
Detect the current repository path:
REPO_ROOT="$(cd /root/spawn 2>/dev/null && pwd || cd /home/sprite/spawn 2>/dev/null && pwd)" echo "Repository root: $REPO_ROOT"
Determine home directory:
if [[ "$REPO_ROOT" == "/root/spawn" ]]; then
HOME_DIR="/root"
SERVICE_USER="root"
SERVICE_GROUP="root"
elif [[ "$REPO_ROOT" == "/home/sprite/spawn" ]]; then
HOME_DIR="/home/sprite"
SERVICE_USER="sprite"
SERVICE_GROUP="sprite"
else
echo "ERROR: Unknown repository path: $REPO_ROOT"
exit 1
fi
echo "Home directory: $HOME_DIR"
echo "Service user/group: $SERVICE_USER/$SERVICE_GROUP"Step 2: Read latest setup-agent-team instructions
Read the SKILL.md to check for:
- Latest env var requirements
- Recommended timeout values
- New mandatory settings
- Path patterns
cat "$REPO_ROOT/.claude/skills/setup-agent-team/SKILL.md"
Key things to extract from SKILL.md:
- Required env vars: `TRIGGER_SECRET`, `TARGET_SCRIPT`, `REPO_ROOT`, `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`, `MAX_CONCURRENT`, `RUN_TIMEOUT_MS`
- Recommended `RUN_TIMEOUT_MS` values per service
- Path templates for systemd service files
Step 3: Identify deployed services
Find all wrapper scripts:
ls -1 "$REPO_ROOT/.claude/skills/setup-agent-team/start-"*.sh 2>/dev/null | while read -r wrapper; do
basename "$wrapper" | sed 's/^start-//;s/\.sh$//'
doneFor each service found, check if it has a corresponding systemd unit:
systemctl list-units --all --type=service --plain --no-legend | grep -E 'discovery-trigger|refactor|spawn-security|spawn-qa' | awk '{print $1}'Match wrappers to systemd units:
- `start-discovery.sh` → `discovery-trigger.service`
- `start-refactor.sh` → `refactor.service`
- `start-security.sh` → `spawn-security.service`
- `start-qa.sh` → `spawn-qa.service` (if exists)
Step 4: Check wrapper script compliance
For each wrapper script, verify it has:
Required env vars
# Check if wrapper has all required env vars grep -q 'export TRIGGER_SECRET=' "$wrapper_path" || echo "MISSING: TRIGGER_SECRET" grep -q 'export TARGET_SCRIPT=' "$wrapper_path" || echo "MISSING: TARGET_SCRIPT" grep -q 'export REPO_ROOT=' "$wrapper_path" || echo "MISSING: REPO_ROOT" grep -q 'export CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1' "$wrapper_path" || echo "MISSING: CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS" grep -q 'export MAX_CONCURRENT=' "$wrapper_path" || echo "MISSING: MAX_CONCURRENT" grep -q 'export RUN_TIMEOUT_MS=' "$wrapper_path" || echo "MISSING: RUN_TIMEOUT_MS"
Correct paths
# Extract SCRIPT_DIR from wrapper
SCRIPT_DIR=$(grep '^SCRIPT_DIR=' "$wrapper_path" | cut -d'"' -f2)
# Verify it matches REPO_ROOT
if [[ "$SCRIPT_DIR" != "$REPO_ROOT/.claude/skills/setup-agent-team" ]]; then
echo "WARNING: SCRIPT_DIR mismatch"
echo " Found: $SCRIPT_DIR"
echo " Expected: $REPO_ROOT/.claude/skills/setup-agent-team"
fiExec pattern
# Verify it uses exec bun run
grep -q 'exec bun run "${SCRIPT_DIR}/trigger-server.ts"' "$wrapper_path" || echo "WARNING: Non-standard exec pattern"Step 5: Check systemd service compliance
For each systemd service file at `/etc/systemd/system/<service-name>.service`:
Required fields
# Check critical fields grep -q "^User=$SERVICE_USER$" "$service_file" || echo "MISSING/WRONG: User" grep -q "^Group=$SERVICE_GROUP$" "$service_file" || echo "MISSING/WRONG: Group" grep -q "^WorkingDirectory=$REPO_ROOT/.claude/skills/setup-agent-team$" "$service_file" || echo "MISSING/WRONG: WorkingDirectory" grep -q "^ExecStart=/bin/bash $REPO_ROOT/.claude/skills/setup-agent-team/start-" "$service_file" || echo "MISSING/WRONG: ExecStart"
Environment variables
# Check PATH includes correct home directory grep "^Environment=\"PATH=$HOME_DIR/.bun/bin:$HOME_DIR/.local/bin:" "$service_file" || echo "WARNING: PATH may be incorrect" # Check HOME is set grep "^Environment=\"HOME=$HOME_DIR\"$" "$service_file" || echo "MISSING/WRONG: HOME" # Check IS_SANDBOX grep -q '^Environment="IS_SANDBOX=1"' "$service_file" || echo "MISSING: IS_SANDBOX"
Step 6: Update wrapper scripts (if needed)
If `--check-only` is NOT passed and issues were found:
For path mismatches, update SCRIPT_DIR:
# This requires preserving the TRIGGER_SECRET value # Read current secret CURRENT_SECRET=$(grep '^export TRIGGER_SECRET=' "$wrapper_path" | cut -d'"' -f2) # Update SCRIPT_DIR line sed -i "s|^SCRIPT_DIR=.*|SCRIPT_DIR=\"$REPO_ROOT/.claude/skills/setup-agent-team\"|" "$wrapper_path" # Update REPO_ROOT line sed -i "s|^export REPO_ROOT=.*|export REPO_ROOT=\"$REPO_ROOT\"|" "$wrapper_path"
For missing env vars, add them:
# Add CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS if missing
if ! grep -q 'CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS' "$wrapper_path"; then
# Insert before exec line
sed -i '/^exec bun run/i export CLAUDE_CODE_EXPERIMENTAL_AGENT_TLaunch any AI agent on any cloud with a single command. Coding agents, research agents, self-hosted AI tools — Spawn deploys them all. All models powered by OpenRouter. (ALPHA software, use at your own risk!) 10 agents. 8 clouds. 79 working combinations.
Repo: OpenRouterLabs/spawn
Other skills on spawn.
- /pcl
Delete stale git branches (local + remote) that have no open PR, and prune worktrees.
Open skill - /setup-spa
SPA (Spawn's Personal Agent) — Slack bot that pipes threads into Claude Code sessions
Open skill - /update-metadata
Refresh icons and metadata/stats for agents and cloud providers in `manifest.json`.
Open skill - /claude
Create child cloud VMs with AI coding agents using the spawn CLI
Open skill - /codex
Create child cloud VMs with AI coding agents using the spawn CLI
Open skill - /openclaw
Create child cloud VMs with AI coding agents using the spawn CLI
Open skill

