{ "name": "user-data", "description": "cloud-init for a socialweb.computer VM whose guest agent serves an MCP shell (exec, start, read, write, kill, list), optionally ssh over webrtc and iroh, and more tunnels to local ports.", "actions": [ { "entry": "user_data", "label": "VM user_data", "description": "A #cloud-config (JSON) as {user_data}: services.json's shell service and tunnels.json for the guest agent; ssh (webrtc_ssh, iroh) through the irohUserData hook.", "fields": [ { "key": "shell", "label": "MCP shell", "type": "boolean", "description": "The guest agent's MCP shell service and its \"shell\" webrtc tunnel (default true)." }, { "key": "webrtc_ssh", "label": "ssh over webrtc", "type": "boolean", "description": "An \"ssh\" webrtc tunnel to sshd (needs ssh_key; default false)." }, { "key": "iroh", "label": "ssh over iroh", "type": "boolean", "description": "dumbpipe in front of sshd; its ticket becomes vm.onNetwork (needs ssh_key; default false)." }, { "key": "ssh_key", "label": "SSH public key", "type": "string", "description": "OpenSSH public key for root, with webrtc_ssh or iroh." }, { "key": "tunnels", "label": "More tunnels", "type": "array", "description": "Datachannel tunnels to local TCP ports on the VM: [{tag, port, transport: \"webrtc\"}], tags [a-z0-9-] (not shell or ssh), at most 8." } ] } ], "calls": [], "hooks": [ { "nsid": "computer.socialweb.vm.irohUserData", "default": "iroh-user-data", "reason": "webrtc_ssh and iroh: root ssh with ssh_key, and dumbpipe in front of sshd (atlibs-iroh)" } ], "implements": [{ "nsid": "computer.socialweb.vm.userData", "entry": "user_data" }] }