{
  "schemaVersion": "1.0",
  "item": {
    "slug": "homeserver",
    "name": "Homeserver Management",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/Higangssh/homeserver",
    "canonicalUrl": "https://clawhub.ai/Higangssh/homeserver",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/homeserver",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=homeserver",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "_meta.json"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/homeserver"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/homeserver",
    "agentPageUrl": "https://openagent3.xyz/skills/homeserver/agent",
    "manifestUrl": "https://openagent3.xyz/skills/homeserver/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/homeserver/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Homeserver Management",
        "body": "Manage homelab servers using the homebutler CLI. Single binary, JSON output, AI-friendly."
      },
      {
        "title": "Prerequisites",
        "body": "homebutler must be installed and available in PATH.\n\n# Check if installed\nwhich homebutler\n\n# Option 1: Install via Homebrew (macOS/Linux)\nbrew install Higangssh/homebutler/homebutler\n\n# Option 2: Install via Go\ngo install github.com/Higangssh/homebutler@latest\n\n# Option 3: Build from source\ngit clone https://github.com/Higangssh/homebutler.git\ncd homebutler && make build && sudo mv homebutler /usr/local/bin/"
      },
      {
        "title": "Setup Wizard",
        "body": "homebutler init                      # Interactive config setup\n\nCreates a config file at ~/.config/homebutler/config.yaml with guided prompts."
      },
      {
        "title": "System Status",
        "body": "homebutler status                    # Local server\nhomebutler status --server rpi       # Specific remote server\nhomebutler status --all              # All servers in parallel\n\nReturns: hostname, OS, arch, uptime, CPU (usage%, cores), memory (total/used/%), disks (mount/total/used/%)"
      },
      {
        "title": "Docker Management",
        "body": "homebutler docker list               # List all containers\nhomebutler docker list --server rpi  # List on remote server\nhomebutler docker list --all         # List on all servers\nhomebutler docker restart <name>     # Restart a container\nhomebutler docker stop <name>        # Stop a container\nhomebutler docker logs <name>        # Last 50 lines of logs\nhomebutler docker logs <name> 200    # Last 200 lines"
      },
      {
        "title": "Wake-on-LAN",
        "body": "homebutler wake <mac-address>           # Wake by MAC\nhomebutler wake <name>                   # Wake by config name\nhomebutler wake <mac> 192.168.1.255     # Custom broadcast\n\nConfig names are defined in config under wake targets."
      },
      {
        "title": "Open Ports",
        "body": "homebutler ports                     # Local\nhomebutler ports --server rpi        # Remote\nhomebutler ports --all               # All servers\n\nReturns: protocol, address, port, PID, process name"
      },
      {
        "title": "Network Scan",
        "body": "homebutler network scan\n\nDiscovers devices on the local LAN via ping sweep + ARP table. Returns: IP, MAC, hostname, status.\nNote: May take up to 30 seconds. Some devices may not appear if they don't respond to ping."
      },
      {
        "title": "TUI Dashboard",
        "body": "homebutler watch                     # Live terminal dashboard for all servers\n\nReal-time monitoring of all configured servers with auto-refresh. Shows CPU, memory, disk, docker containers in a terminal UI."
      },
      {
        "title": "Web Dashboard",
        "body": "homebutler serve                     # Start web dashboard on port 8080\nhomebutler serve --port 3000         # Custom port\nhomebutler serve --demo              # Demo mode with fake data (no real system calls)\n\nBrowser-based dashboard at http://localhost:8080. Read-only view of all servers, docker containers, alerts."
      },
      {
        "title": "SSH Host Key Trust",
        "body": "homebutler trust <server>            # Trust remote server's SSH host key\nhomebutler trust <server> --reset    # Remove old key and re-trust\n\nTOFU (Trust On First Use) model. Required before first SSH connection to a new server."
      },
      {
        "title": "Upgrade",
        "body": "homebutler upgrade                   # Upgrade local + all remote servers\nhomebutler upgrade --local           # Upgrade only local binary\n\nDownloads latest release from GitHub and installs it. For remote servers, uses SSH to upgrade."
      },
      {
        "title": "Resource Alerts",
        "body": "homebutler alerts                    # Local\nhomebutler alerts --server rpi       # Remote\nhomebutler alerts --all              # All servers\n\nChecks CPU/memory/disk against thresholds in config. Returns status (ok/warning/critical) per resource."
      },
      {
        "title": "Deploy (Remote Installation)",
        "body": "homebutler deploy --server rpi                          # Download from GitHub Releases\nhomebutler deploy --server rpi --local ./homebutler     # Air-gapped: copy local binary\nhomebutler deploy --all                                 # Deploy to all remote servers\n\nInstalls homebutler on remote servers via SSH. Auto-detects remote OS/architecture.\nInstall path priority: /usr/local/bin → sudo /usr/local/bin → ~/.local/bin (with PATH auto-registration in .profile/.bashrc/.zshrc)."
      },
      {
        "title": "MCP Server",
        "body": "homebutler mcp                       # Start MCP server (JSON-RPC over stdio)\n\nStarts a built-in MCP (Model Context Protocol) server for use with Claude Desktop, ChatGPT, Cursor, and other MCP clients. Exposes all homebutler tools (system_status, docker_list, docker_restart, docker_stop, docker_logs, wake, open_ports, network_scan, alerts) via standard MCP protocol. No network ports opened — uses stdio only."
      },
      {
        "title": "Version",
        "body": "homebutler version"
      },
      {
        "title": "Output Format",
        "body": "All commands output human-readable text by default. Use --json flag for machine-parseable JSON output (recommended for AI/script integration)."
      },
      {
        "title": "Config File",
        "body": "Config file is auto-discovered in order:\n\n--config <path> — Explicit flag\n$HOMEBUTLER_CONFIG — Environment variable\n~/.config/homebutler/config.yaml — XDG standard (recommended)\n./homebutler.yaml — Current directory\n\nIf no config found, sensible defaults are used."
      },
      {
        "title": "Config Options",
        "body": "servers — Server list with SSH connection details\nwake — Named WOL targets with MAC + broadcast\nalerts.cpu/memory/disk — Threshold percentages\noutput — Default output format"
      },
      {
        "title": "Multi-Server Config Example",
        "body": "servers:\n  - name: main-server\n    host: 192.168.1.10\n    local: true\n\n  - name: rpi\n    host: 192.168.1.20\n    user: pi\n    auth: key                # \"key\" (default, recommended) or \"password\"\n    key: ~/.ssh/id_ed25519   # optional, auto-detects\n\n  - name: vps\n    host: example.com\n    user: deploy\n    port: 2222\n    auth: key\n    key: ~/.ssh/id_ed25519"
      },
      {
        "title": "Usage Guidelines",
        "body": "Always run commands, don't guess — execute homebutler status to get real data\nInterpret results for the user — don't dump raw JSON, summarize in natural language\nWarn on alerts — if any resource shows \"warning\" or \"critical\", highlight it\nUse --all for overview — when user asks about \"all servers\" or \"everything\", use --all\nUse --server for specific — when user mentions a server by name, use --server <name>\nDocker errors — if docker is not installed or daemon not running, explain clearly\nNetwork scan — warn user it may take ~30 seconds\nSecurity — never expose raw JSON with hostnames/IPs in group chats, summarize instead\nDeploy — suggest --local for air-gapped environments"
      },
      {
        "title": "Security Notes",
        "body": "SSH authentication: Always prefer key-based auth over passwords. Never store plaintext passwords in config.\nNetwork scans: Only run on your own local network. Warn user before scanning.\nDeploy: Only deploy to servers you own. Confirm with user before remote installations.\nConfig file permissions: Keep config files readable only by owner (chmod 600).\nNo telemetry: homebutler sends zero data externally. All operations are local or to user-configured hosts only."
      },
      {
        "title": "Error Handling",
        "body": "SSH connection failed → Check host/port/user in config, verify SSH key is registered on remote\nhomebutler not found on remote → Run homebutler deploy --server <name> first\ndocker not installed → Tell user docker is not available on that server\ndocker daemon not running → Suggest sudo systemctl start docker\nnetwork scan timeout → Normal on large subnets, suggest retrying\npermission denied → May need sudo for ports/docker commands on some systems"
      },
      {
        "title": "Example Interactions",
        "body": "User: \"How's the server doing?\"\n→ Run homebutler status, summarize: \"CPU 23%, memory 40%, disk 37%. Uptime 42 days. All good 👍\"\n\nUser: \"Check all servers\"\n→ Run homebutler status --all, summarize each server's status\n\nUser: \"How's the Raspberry Pi?\"\n→ Run homebutler status --server rpi, summarize\n\nUser: \"What docker containers are running?\"\n→ Run homebutler docker list, list container names and states\n\nUser: \"Wake up the NAS\"\n→ Run homebutler wake nas (if configured) or ask for MAC address\n\nUser: \"Any alerts across all servers?\"\n→ Run homebutler alerts --all, report any warnings/critical\n\nUser: \"Deploy homebutler to the new server\"\n→ Run homebutler deploy --server <name>, report result"
      }
    ],
    "body": "Homeserver Management\n\nManage homelab servers using the homebutler CLI. Single binary, JSON output, AI-friendly.\n\nPrerequisites\n\nhomebutler must be installed and available in PATH.\n\n# Check if installed\nwhich homebutler\n\n# Option 1: Install via Homebrew (macOS/Linux)\nbrew install Higangssh/homebutler/homebutler\n\n# Option 2: Install via Go\ngo install github.com/Higangssh/homebutler@latest\n\n# Option 3: Build from source\ngit clone https://github.com/Higangssh/homebutler.git\ncd homebutler && make build && sudo mv homebutler /usr/local/bin/\n\nCommands\nSetup Wizard\nhomebutler init                      # Interactive config setup\n\n\nCreates a config file at ~/.config/homebutler/config.yaml with guided prompts.\n\nSystem Status\nhomebutler status                    # Local server\nhomebutler status --server rpi       # Specific remote server\nhomebutler status --all              # All servers in parallel\n\n\nReturns: hostname, OS, arch, uptime, CPU (usage%, cores), memory (total/used/%), disks (mount/total/used/%)\n\nDocker Management\nhomebutler docker list               # List all containers\nhomebutler docker list --server rpi  # List on remote server\nhomebutler docker list --all         # List on all servers\nhomebutler docker restart <name>     # Restart a container\nhomebutler docker stop <name>        # Stop a container\nhomebutler docker logs <name>        # Last 50 lines of logs\nhomebutler docker logs <name> 200    # Last 200 lines\n\nWake-on-LAN\nhomebutler wake <mac-address>           # Wake by MAC\nhomebutler wake <name>                   # Wake by config name\nhomebutler wake <mac> 192.168.1.255     # Custom broadcast\n\n\nConfig names are defined in config under wake targets.\n\nOpen Ports\nhomebutler ports                     # Local\nhomebutler ports --server rpi        # Remote\nhomebutler ports --all               # All servers\n\n\nReturns: protocol, address, port, PID, process name\n\nNetwork Scan\nhomebutler network scan\n\n\nDiscovers devices on the local LAN via ping sweep + ARP table. Returns: IP, MAC, hostname, status. Note: May take up to 30 seconds. Some devices may not appear if they don't respond to ping.\n\nTUI Dashboard\nhomebutler watch                     # Live terminal dashboard for all servers\n\n\nReal-time monitoring of all configured servers with auto-refresh. Shows CPU, memory, disk, docker containers in a terminal UI.\n\nWeb Dashboard\nhomebutler serve                     # Start web dashboard on port 8080\nhomebutler serve --port 3000         # Custom port\nhomebutler serve --demo              # Demo mode with fake data (no real system calls)\n\n\nBrowser-based dashboard at http://localhost:8080. Read-only view of all servers, docker containers, alerts.\n\nSSH Host Key Trust\nhomebutler trust <server>            # Trust remote server's SSH host key\nhomebutler trust <server> --reset    # Remove old key and re-trust\n\n\nTOFU (Trust On First Use) model. Required before first SSH connection to a new server.\n\nUpgrade\nhomebutler upgrade                   # Upgrade local + all remote servers\nhomebutler upgrade --local           # Upgrade only local binary\n\n\nDownloads latest release from GitHub and installs it. For remote servers, uses SSH to upgrade.\n\nResource Alerts\nhomebutler alerts                    # Local\nhomebutler alerts --server rpi       # Remote\nhomebutler alerts --all              # All servers\n\n\nChecks CPU/memory/disk against thresholds in config. Returns status (ok/warning/critical) per resource.\n\nDeploy (Remote Installation)\nhomebutler deploy --server rpi                          # Download from GitHub Releases\nhomebutler deploy --server rpi --local ./homebutler     # Air-gapped: copy local binary\nhomebutler deploy --all                                 # Deploy to all remote servers\n\n\nInstalls homebutler on remote servers via SSH. Auto-detects remote OS/architecture. Install path priority: /usr/local/bin → sudo /usr/local/bin → ~/.local/bin (with PATH auto-registration in .profile/.bashrc/.zshrc).\n\nMCP Server\nhomebutler mcp                       # Start MCP server (JSON-RPC over stdio)\n\n\nStarts a built-in MCP (Model Context Protocol) server for use with Claude Desktop, ChatGPT, Cursor, and other MCP clients. Exposes all homebutler tools (system_status, docker_list, docker_restart, docker_stop, docker_logs, wake, open_ports, network_scan, alerts) via standard MCP protocol. No network ports opened — uses stdio only.\n\nVersion\nhomebutler version\n\nOutput Format\n\nAll commands output human-readable text by default. Use --json flag for machine-parseable JSON output (recommended for AI/script integration).\n\nConfig File\n\nConfig file is auto-discovered in order:\n\n--config <path> — Explicit flag\n$HOMEBUTLER_CONFIG — Environment variable\n~/.config/homebutler/config.yaml — XDG standard (recommended)\n./homebutler.yaml — Current directory\n\nIf no config found, sensible defaults are used.\n\nConfig Options\nservers — Server list with SSH connection details\nwake — Named WOL targets with MAC + broadcast\nalerts.cpu/memory/disk — Threshold percentages\noutput — Default output format\nMulti-Server Config Example\nservers:\n  - name: main-server\n    host: 192.168.1.10\n    local: true\n\n  - name: rpi\n    host: 192.168.1.20\n    user: pi\n    auth: key                # \"key\" (default, recommended) or \"password\"\n    key: ~/.ssh/id_ed25519   # optional, auto-detects\n\n  - name: vps\n    host: example.com\n    user: deploy\n    port: 2222\n    auth: key\n    key: ~/.ssh/id_ed25519\n\nUsage Guidelines\nAlways run commands, don't guess — execute homebutler status to get real data\nInterpret results for the user — don't dump raw JSON, summarize in natural language\nWarn on alerts — if any resource shows \"warning\" or \"critical\", highlight it\nUse --all for overview — when user asks about \"all servers\" or \"everything\", use --all\nUse --server for specific — when user mentions a server by name, use --server <name>\nDocker errors — if docker is not installed or daemon not running, explain clearly\nNetwork scan — warn user it may take ~30 seconds\nSecurity — never expose raw JSON with hostnames/IPs in group chats, summarize instead\nDeploy — suggest --local for air-gapped environments\nSecurity Notes\nSSH authentication: Always prefer key-based auth over passwords. Never store plaintext passwords in config.\nNetwork scans: Only run on your own local network. Warn user before scanning.\nDeploy: Only deploy to servers you own. Confirm with user before remote installations.\nConfig file permissions: Keep config files readable only by owner (chmod 600).\nNo telemetry: homebutler sends zero data externally. All operations are local or to user-configured hosts only.\nError Handling\nSSH connection failed → Check host/port/user in config, verify SSH key is registered on remote\nhomebutler not found on remote → Run homebutler deploy --server <name> first\ndocker not installed → Tell user docker is not available on that server\ndocker daemon not running → Suggest sudo systemctl start docker\nnetwork scan timeout → Normal on large subnets, suggest retrying\npermission denied → May need sudo for ports/docker commands on some systems\nExample Interactions\n\nUser: \"How's the server doing?\" → Run homebutler status, summarize: \"CPU 23%, memory 40%, disk 37%. Uptime 42 days. All good 👍\"\n\nUser: \"Check all servers\" → Run homebutler status --all, summarize each server's status\n\nUser: \"How's the Raspberry Pi?\" → Run homebutler status --server rpi, summarize\n\nUser: \"What docker containers are running?\" → Run homebutler docker list, list container names and states\n\nUser: \"Wake up the NAS\" → Run homebutler wake nas (if configured) or ask for MAC address\n\nUser: \"Any alerts across all servers?\" → Run homebutler alerts --all, report any warnings/critical\n\nUser: \"Deploy homebutler to the new server\" → Run homebutler deploy --server <name>, report result"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Higangssh/homeserver",
    "publisherUrl": "https://clawhub.ai/Higangssh/homeserver",
    "owner": "Higangssh",
    "version": "2.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/homeserver",
    "downloadUrl": "https://openagent3.xyz/downloads/homeserver",
    "agentUrl": "https://openagent3.xyz/skills/homeserver/agent",
    "manifestUrl": "https://openagent3.xyz/skills/homeserver/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/homeserver/agent.md"
  }
}