# devmachine > devmachine turns a VPS into workspaces you develop in: one Linux account per project, each with its own tools, logins and coding agent. ## Docs - [Getting started](https://mydevmachine.sh/getting-started.md): devmachine sets up a VPS for you to code on. Each project or client gets its - [Set up devmachine with a coding agent](https://mydevmachine.sh/agent-setup.md): This page is for a coding agent — Claude Code, Codex, Cursor or any other — - [Machines and workspaces](https://mydevmachine.sh/concepts/machines-and-workspaces.md): A machine is a server, with its own address and login. A workspace - [Configuration](https://mydevmachine.sh/concepts/configuration.md): Your configuration is a folder of files that lists your machines, your - [Packages](https://mydevmachine.sh/concepts/packages.md): A package adds something to your server or to a workspace: Claude Code, - [Credentials](https://mydevmachine.sh/concepts/credentials.md): A credential is a tool being signed in: gh, claude, a DNS provider's - [DNS](https://mydevmachine.sh/concepts/dns.md): devmachine dns points a domain name at your server, so people can reach - [Publishing](https://mydevmachine.sh/concepts/publishing.md): Two ways to reach a port running on a machine: expose puts it on the - [Agent Skills](https://mydevmachine.sh/concepts/agent-skills.md): A skill is a folder of know-how your coding agent can read — Claude, - [SSH and authentication](https://mydevmachine.sh/how-it-works/ssh-and-authentication.md): When a machine has key:, the CLI offers that key and nothing else. - [SSH host keys](https://mydevmachine.sh/how-it-works/ssh-host-keys.md): SSH checks both sides with different keys. Your client key proves who - [Addresses and fallback](https://mydevmachine.sh/how-it-works/addresses-and-fallback.md): A machine can answer on more than one address: - [Choosing a target](https://mydevmachine.sh/how-it-works/choosing-a-target.md): With one machine set up, a command uses it. With several, a command that - [Why nothing is embedded in the binary](https://mydevmachine.sh/how-it-works/why-nothing-is-embedded.md): The CLI ships with no packages built in. Every package — even the ones - [Why a login cannot be automated](https://mydevmachine.sh/how-it-works/why-a-login-cannot-be-automated.md): It is the first question everybody asks, so here is the answer before you - [Sharing a login](https://mydevmachine.sh/how-it-works/sharing-a-login.md): One GitHub account usually serves every workspace on a machine. Logging - [DNS providers](https://mydevmachine.sh/how-it-works/dns-providers.md): Every fact here exists so you learn it from this page, not by damaging a - [Setting up a server for the first time](https://mydevmachine.sh/how-it-works/trust-bootstrap.md): Setting up a server you have never logged into is the hardest moment this - [Your computer as a machine](https://mydevmachine.sh/how-it-works/your-computer-as-a-machine.md): A machine can declare self: true: your own computer, the one running - [Versioning your configuration](https://mydevmachine.sh/how-it-works/versioning-your-configuration.md): devmachine setup git turns / into a git repository, so it can - [Why a published site lives in the configuration](https://mydevmachine.sh/how-it-works/published-sites.md): expose add used to write a Caddy file straight onto the machine and - [What sync removes](https://mydevmachine.sh/how-it-works/what-sync-removes.md): sync only removes a file it recorded writing. Never a guess, never a - [Commands](https://mydevmachine.sh/reference/commands.md): Every command accepts: - [The package format](https://mydevmachine.sh/reference/package-format.md): A package is an Ansible role plus one extra file, package.yml. Nothing - [The DNS provider contract](https://mydevmachine.sh/reference/dns-provider-contract.md): What a DNS provider's entrypoint is called with, and what it must answer - [Settings](https://mydevmachine.sh/reference/settings.md): Every variable the published packages accept, and what each one defaults to. - [All examples](https://mydevmachine.sh/examples.md): Real setups, done in a few steps. Each one links to a concept page for the - [Try it on your own computer first](https://mydevmachine.sh/examples/a-local-vm-with-lima.md): Run a virtual machine on your computer and use it exactly like a VPS: set it - [Express site with TLS](https://mydevmachine.sh/examples/express-site-with-tls.md): Run an Express app in workspace alice, reachable at https://app.example.com - [Docker site on 8080](https://mydevmachine.sh/examples/docker-site-on-8080.md): Run a site in a Docker container publishing port 8080, at - [Claude Code, controlled from your phone](https://mydevmachine.sh/examples/claude-code-remote-control.md): Run Claude Code in workspace alice and open a session from the Claude - [Start Claude from your phone](https://mydevmachine.sh/examples/start-claude-from-your-phone.md): Keep a Claude Code Remote Control session up on workspace alice, so you can - [An agent in its own workspace](https://mydevmachine.sh/examples/an-agent-in-its-own-workspace.md): Run [OpenClaw](https://openclaw.ai/), an autonomous agent, in a dedicated - [Troubleshooting](https://mydevmachine.sh/troubleshooting.md): What it means: You have more than one server configured, and this command