[{"data":1,"prerenderedAt":342},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-first-vm":25,"-getting-started-first-vm-surround":337},[4],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Connect your agent","\u002Fgetting-started\u002Fconnect","1.getting-started\u002F1.connect","i-lucide-plug",{"title":16,"path":17,"stem":18,"icon":19},"Your first VM","\u002Fgetting-started\u002Ffirst-vm","1.getting-started\u002F2.first-vm","i-lucide-server",{"title":21,"path":22,"stem":23,"icon":24},"Your own server","\u002Fgetting-started\u002Fyour-own-server","1.getting-started\u002F3.your-own-server","i-lucide-house",{"id":26,"title":16,"body":27,"description":329,"extension":330,"links":331,"meta":332,"navigation":334,"path":17,"seo":335,"stem":18,"__hash__":336},"docs\u002F1.getting-started\u002F2.first-vm.md",{"type":28,"value":29,"toc":323},"minimark",[30,34,42,47,50,62,76,80,86,117,135,140,184,194,199,231,238,254,259,275,278,282,319],[31,32,33],"p",{},"A Ghostdock VM is a whole Linux machine, ready in seconds: Docker, SSH and systemd, and a URL for\nany port you choose. It sleeps when it is idle and wakes up when it is needed.",[31,35,36,37,41],{},"On this page you create one, run a web server in it, put it on a public URL, and make it vanish\nagain. About a minute, start to finish. You need a ",[38,39,40],"a",{"href":12},"connected agent or the\nCLI",".",[43,44,46],"h2",{"id":45},"with-your-agent","With your agent",[31,48,49],{},"Paste this into an agent that has Ghostdock connected:",[51,52,59],"pre",{"className":53,"code":55,"filename":56,"language":57,"meta":58},[54],"language-text","Create a Ghostdock VM called hello. Run nginx in it on port 8080, give port 8080 a public URL\nthat wakes the VM, and send me the URL.\n","Prompt","text","",[60,61,55],"code",{"__ignoreMap":58},[31,63,64,65,68,69,72,73,41],{},"That's the whole job. The agent reads Ghostdock's ",[60,66,67],{},"vm"," skill and calls the tools on its own:\n",[60,70,71],{},"vm_up",", a command in the VM, then ",[60,74,75],{},"vm_url_set",[43,77,79],{"id":78},"with-the-cli","With the CLI",[31,81,82],{},[83,84,85],"strong",{},"1. Create the VM.",[51,87,92],{"className":88,"code":89,"filename":90,"language":91,"meta":58,"style":58},"language-bash shiki shiki-themes material-theme-lighter github-dark-default github-dark-default","ghostdock vm up --name hello\n","Terminal","bash",[60,93,94],{"__ignoreMap":58},[95,96,99,103,107,110,114],"span",{"class":97,"line":98},"line",1,[95,100,102],{"class":101},"se-ri","ghostdock",[95,104,106],{"class":105},"soMwW"," vm",[95,108,109],{"class":105}," up",[95,111,113],{"class":112},"sx258"," --name",[95,115,116],{"class":105}," hello\n",[31,118,119,120,123,124,127,128,131,132,41],{},"It shows each step while the VM starts, then the VM's details. Leave out ",[60,121,122],{},"--name"," and Ghostdock\npicks a name like ",[60,125,126],{},"quiet-harbor",". ",[60,129,130],{},"ghostdock vm list"," now shows ",[60,133,134],{},"⚓ hello  running",[31,136,137],{},[83,138,139],{},"2. Run a web server in it.",[51,141,143],{"className":88,"code":142,"filename":90,"language":91,"meta":58,"style":58},"ghostdock vm ssh hello -- docker run -d --restart unless-stopped -p 8080:80 nginx\n",[60,144,145],{"__ignoreMap":58},[95,146,147,149,151,154,157,160,163,166,169,172,175,178,181],{"class":97,"line":98},[95,148,102],{"class":101},[95,150,106],{"class":105},[95,152,153],{"class":105}," ssh",[95,155,156],{"class":105}," hello",[95,158,159],{"class":112}," --",[95,161,162],{"class":105}," docker",[95,164,165],{"class":105}," run",[95,167,168],{"class":112}," -d",[95,170,171],{"class":112}," --restart",[95,173,174],{"class":105}," unless-stopped",[95,176,177],{"class":112}," -p",[95,179,180],{"class":105}," 8080:80",[95,182,183],{"class":105}," nginx\n",[31,185,186,189,190,193],{},[60,187,188],{},"vm ssh"," logs you in to the VM. With ",[60,191,192],{},"--"," it runs one command and returns. Without it you get a\nshell.",[31,195,196],{},[83,197,198],{},"3. Give it a URL.",[51,200,202],{"className":88,"code":201,"filename":90,"language":91,"meta":58,"style":58},"ghostdock vm url set hello 8080 --access public --wake\n",[60,203,204],{"__ignoreMap":58},[95,205,206,208,210,213,216,218,222,225,228],{"class":97,"line":98},[95,207,102],{"class":101},[95,209,106],{"class":105},[95,211,212],{"class":105}," url",[95,214,215],{"class":105}," set",[95,217,156],{"class":105},[95,219,221],{"class":220},"smher"," 8080",[95,223,224],{"class":112}," --access",[95,226,227],{"class":105}," public",[95,229,230],{"class":112}," --wake\n",[31,232,233,234,237],{},"The URL is the ",[60,235,236],{},"url.url"," line of what it prints. Open it: you see nginx's welcome page.",[239,240,241,248],"ul",{},[242,243,244,247],"li",{},[60,245,246],{},"--access public"," lets anyone open it. Leave it out and only members of your organization can,\nafter signing in.",[242,249,250,253],{},[60,251,252],{},"--wake"," starts the VM when someone opens the URL while it is stopped. A VM stops by itself when\nit is idle, and starts again where it left off.",[31,255,256],{},[83,257,258],{},"4. Make it vanish.",[51,260,262],{"className":88,"code":261,"filename":90,"language":91,"meta":58,"style":58},"ghostdock vm delete hello\n",[60,263,264],{"__ignoreMap":58},[95,265,266,268,270,273],{"class":97,"line":98},[95,267,102],{"class":101},[95,269,106],{"class":105},[95,271,272],{"class":105}," delete",[95,274,116],{"class":105},[31,276,277],{},"The VM and its files are gone for good. The next one is a command away.",[43,279,281],{"id":280},"what-you-can-do-next","What you can do next",[239,283,284,293,307,313],{},[242,285,286,287,41],{},"See every VM in the app: ",[38,288,292],{"href":289,"rel":290},"https:\u002F\u002Fghostdock.ai",[291],"nofollow","ghostdock.ai",[242,294,295,296,299,300,303,304,41],{},"Run your own code: ",[60,297,298],{},"ghostdock vm up --compose .\u002Fcompose.yaml",", ",[60,301,302],{},"--dockerfile .\u002FDockerfile"," or\n",[60,305,306],{},"--image \u003Cimage>",[242,308,309,310,41],{},"Copy files in and out: ",[60,311,312],{},"ghostdock vm cp hello .\u002Fdist :\u002Fsrv\u002Fapp",[242,314,315,316,41],{},"Read how VMs work, for people and agents: ",[60,317,318],{},"ghostdock skill get vm",[320,321,322],"style",{},"html pre.shiki code .se-ri, html code.shiki .se-ri{--shiki-light:#E2931D;--shiki-default:#FFA657;--shiki-dark:#FFA657}html pre.shiki code .soMwW, html code.shiki .soMwW{--shiki-light:#91B859;--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}html pre.shiki code .sx258, html code.shiki .sx258{--shiki-light:#91B859;--shiki-default:#79C0FF;--shiki-dark:#79C0FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .smher, html code.shiki .smher{--shiki-light:#F76D47;--shiki-default:#79C0FF;--shiki-dark:#79C0FF}",{"title":58,"searchDepth":324,"depth":324,"links":325},2,[326,327,328],{"id":45,"depth":324,"text":46},{"id":78,"depth":324,"text":79},{"id":280,"depth":324,"text":281},"A whole Linux machine, a web server and a public URL in about a minute. Then make it vanish.","md",null,{"skills":333},[67],{"icon":19},{"title":16,"description":329},"-NAjF5OYBwhuxzUf5bFMchbihO2VX1EpoeyoPA7fmi8",[338,340],{"title":11,"path":12,"stem":13,"description":339,"icon":14,"children":-1},"Give your agent VMs of its own, from any MCP client, the CLI or the REST API. One connection, then it builds and ships on its own.",{"title":21,"path":22,"stem":23,"description":341,"icon":24,"children":-1},"Run Ghostdock's VMs on a server you own. One command sets it up, or your agent does it for you.",1794018912713]