{
  "service": "killdeer.digital",
  "summary": "SSH-first VM hosting control plane for Plover.digital.",
  "publicHost": "killdeer.digital",
  "preferredLoginSyntax": "ssh [username]@killdeer.digital",
  "discoveryCommand": "ssh killdeer.digital help",
  "vmAccess": {
    "defaultUser": "plover",
    "syntax": "ssh plover@[ip]",
    "notes": [
      "Replace [ip] with the VM IP address from list or status.",
      "If the user's Killdeer account was set up with SSH, their key is already installed for plover.",
      "If the user's Killdeer account was not set up with SSH, the VM password is emailed to them.",
      "If the user connects through the Killdeer console, they must use the password from that email."
    ]
  },
  "agentGuidance": [
    "If the human did not provide a Killdeer username, ask for it before constructing account-specific SSH commands.",
    "Use killdeer.digital as the public hostname.",
    "Use ssh plover@[ip] to access a VM directly; plover is the default VM user.",
    "For Killdeer console access, tell users to use the VM password from their email.",
    "Do not invent HTTP VM-management API calls. The public control surface is the SSH command line.",
    "Use ssh killdeer.digital help for discovery and ssh [username]@killdeer.digital without a subcommand for the interactive menu.",
    "VM creation supports --ipv4, --ipv6, and --dualstack networking; omitting ip-type uses the user's preference.",
    "Routed networking requires explicit --routed-ipv4 and/or --ipv6-prefix-len flags and is subject to admission and inventory. IPv6 prefix lengths may be /128 or /56 through /64.",
    "Use rename to change a VM's name without recreating it.",
    "Use add-ipv4 or add-ipv6 to attach an address to an existing VM; both require a restart.",
    "Use billing limits and billing budget to control VM count and monthly runtime spending. Budget actions are notify, stop, or lock.",
    "Use timer to view, set, adjust, or cancel a shutdown timer up to 7 days. timer <name> force toggles shutdown mode between graceful and force.",
    "Destructive delete commands require --confirm and should be presented carefully."
  ],
  "commands": [
    {
      "name": "list",
      "aliases": ["ls"],
      "syntax": "ssh [username]@killdeer.digital list",
      "description": "List all VMs for the authenticated user, with running VMs shown first."
    },
    {
      "name": "status",
      "aliases": ["st", "info"],
      "syntax": "ssh [username]@killdeer.digital status <name>",
      "description": "Show detailed information for a VM."
    },
    {
      "name": "start",
      "syntax": "ssh [username]@killdeer.digital start <name>",
      "description": "Power on a VM."
    },
    {
      "name": "stop",
      "syntax": "ssh [username]@killdeer.digital stop <name>",
      "description": "Gracefully shut down a VM."
    },
    {
      "name": "restart",
      "syntax": "ssh [username]@killdeer.digital restart <name>",
      "description": "Restart a VM by stopping and starting it."
    },
    {
      "name": "resize",
      "syntax": "ssh [username]@killdeer.digital resize <name> <size>",
      "description": "Increase a stopped VM to a larger size."
    },
    {
      "name": "rename",
      "syntax": "ssh [username]@killdeer.digital rename <old-name> <new-name>",
      "description": "Rename a VM in Killdeer."
    },
    {
      "name": "create",
      "syntax": "ssh [username]@killdeer.digital create <name> <size> <os> [ip-type] [--routed-ipv4] [--ipv6-prefix-len /128|/56-/64]",
      "description": "Create a new VM. ip-type may be --ipv4, --ipv6, or --dualstack; omitting it uses the user's preference. Routed networking requires explicit flags and is subject to admission and inventory. --ipv6-prefix-len accepts /128 or /56 through /64."
    },
    {
      "name": "delete",
      "aliases": ["rm"],
      "syntax": "ssh [username]@killdeer.digital delete <name> --confirm",
      "description": "Delete a VM. The --confirm flag is required."
    },
    {
      "name": "console",
      "syntax": "ssh [username]@killdeer.digital console <name>",
      "description": "Attach to the VM serial console. Ctrl+] exits."
    },
    {
      "name": "add-ipv4",
      "syntax": "ssh [username]@killdeer.digital add-ipv4 <name>",
      "description": "Add IPv4 to a VM. A restart is required and IPv4 adds $1/mo."
    },
    {
      "name": "add-ipv6",
      "syntax": "ssh [username]@killdeer.digital add-ipv6 <name>",
      "description": "Add IPv6 to a VM. A restart is required."
    },
    {
      "name": "billing limits",
      "syntax": "ssh [username]@killdeer.digital billing limits",
      "description": "Show the user's VM account limit."
    },
    {
      "name": "billing limits set",
      "syntax": "ssh [username]@killdeer.digital billing limits set <n>",
      "description": "Set the user's VM account limit, up to the self-service maximum."
    },
    {
      "name": "billing budget",
      "syntax": "ssh [username]@killdeer.digital billing budget",
      "description": "Show the monthly runtime compute budget."
    },
    {
      "name": "billing budget set",
      "syntax": "ssh [username]@killdeer.digital billing budget set <amount>",
      "description": "Set the monthly runtime compute budget."
    },
    {
      "name": "billing budget disable",
      "syntax": "ssh [username]@killdeer.digital billing budget disable",
      "description": "Disable the monthly runtime compute budget."
    },
    {
      "name": "billing budget action",
      "syntax": "ssh [username]@killdeer.digital billing budget action <mode>",
      "description": "Set the budget action to notify, stop, or lock."
    },
    {
      "name": "timer",
      "syntax": "ssh [username]@killdeer.digital timer <name> [duration|+duration|-duration|cancel|force]",
      "description": "Show, set, adjust, or cancel an active shutdown timer. The force option toggles shutdown mode between graceful and force. Durations include 30m, 2h, and 1d, with a maximum of 7 days."
    },
    {
      "name": "sizes",
      "syntax": "ssh [username]@killdeer.digital sizes",
      "description": "List available VM sizes and pricing."
    },
    {
      "name": "images",
      "aliases": ["os"],
      "syntax": "ssh [username]@killdeer.digital images",
      "description": "List available OS images."
    },
    {
      "name": "help",
      "syntax": "ssh killdeer.digital help",
      "description": "Show public command help."
    }
  ],
  "canonicalResources": {
    "llms": "https://killdeer.digital/llms.txt",
    "fullAgentGuide": "https://killdeer.digital/llms-full.txt",
    "sshHelp": "https://killdeer.digital/ssh-help.txt",
    "sizes": "https://killdeer.digital/sizes.txt",
    "sizesJson": "https://killdeer.digital/api/v1/sizes.json",
    "osImages": "https://killdeer.digital/os.txt",
    "osImagesJson": "https://killdeer.digital/api/v1/images.json"
  }
}
