Skip to content
Hoody.com

Most platforms treat a URL as an address bolted onto a resource after the fact. Hoody inverts that relationship: the URL is the resource’s identity. A terminal, a desktop, a filesystem, a database, and an AI agent each live at their own address. Deleting the resource kills its URL, sharing the URL shares the resource, and combining resources means combining URLs.

This is the architecture, not a metaphor. Every process on a server you own is an HTTPS endpoint with HTTP/2; the proxy issues and renews the certificates, so there is nothing to configure. You can embed a program in an iframe, drive it from an AI agent, reach it through ssh hoody.com, or open it in a browser on your phone.


Every resource in Hoody lives at a deterministic address:

https://{projectId}-{containerId}-{service}-{instance}.{serverName}.containers.hoody.com
SegmentExampleWhat it encodes
projectId67e89abc123def456789abcdWhich project owns this resource. 24 hex chars.
containerId890abcdef12345678901cdefWhich container runs it. 24 hex chars. Cryptographically unguessable.
serviceterminalWhat kind of resource: terminal, display, files, exec, sqlite, browser, agent, code, curl, n, daemon, cron, pipe, watch, notes, run, tunnel, logs.
instance1Which instance of that service. Change 1 to 2 and you get a different terminal session or a different desktop. SQLite instances are the exception: they share the container filesystem, and the database itself is chosen with the db query parameter.
serverNamenode-usThe bare metal server hosting it. The name encodes its geography.

Change one segment and you reach a different resource. Each segment maps to real infrastructure: a project boundary, a container filesystem, a service process, a physical server. The address is the topology of your infrastructure, expressed as text.


Hoody has four URL families. Each serves a different purpose, but all follow the same principle: the address is the interface.

Every container gets 18 service URLs the moment it spawns:

https://67e89abc...-890abcdef...-terminal-1.node-us.containers.hoody.com
https://67e89abc...-890abcdef...-display-1.node-us.containers.hoody.com
https://67e89abc...-890abcdef...-files-1.node-us.containers.hoody.com
https://67e89abc...-890abcdef...-exec-1.node-us.containers.hoody.com
https://67e89abc...-890abcdef...-sqlite-1.node-us.containers.hoody.com
https://67e89abc...-890abcdef...-browser-1.node-us.containers.hoody.com
https://67e89abc...-890abcdef...-agent-1.node-us.containers.hoody.com
https://67e89abc...-890abcdef...-code-1.node-us.containers.hoody.com

The proxy reads the URL, routes to the container, and dispatches to the service; there is no DNS record, port forward, or nginx configuration to set up on your side.

The Hoody API itself is a URL:

https://api.hoody.com/api/v1/containers
https://api.hoody.com/api/v1/projects
https://api.hoody.com/api/v1/servers

You create, manage, and destroy resources through these endpoints. A request to the API creates a container, and the container’s service URLs exist from that moment.

When cryptographic URLs are too long for humans, create aliases:

https://my-app.node-us.containers.hoody.com
https://staging-api.node-eu.containers.hoody.com
https://client-demo.node-us.containers.hoody.com

An alias goes through the same proxy, with the same routing and security; only the address is shorter. Point a CNAME from your own domain, and your infrastructure lives at api.yourcompany.com.

For multi-tenant isolation, realms namespace the API itself:

https://{realmId}.api.hoody.com/api/v1/containers

A realm scopes auth tokens, containers, and projects to its own namespace. A single Hoody account can hold multiple isolated namespaces.


One interface for humans, machines, and AI

Section titled “One interface for humans, machines, and AI”

Three audiences interact with computing infrastructure: humans, machines, and AI. The legacy world gives each a different interface: humans get GUIs, machines get wire protocols, AI gets SDKs. Hoody gives all three the same interface: a URL.

Open a browser and type the URL: you are in a terminal. Change terminal to display in the address bar and you are on a desktop; change display to files and you are browsing the filesystem. Nothing is installed on the device, and no SSH key or VPN is involved.

Give an LLM a container URL. HTTP, JSON, and the GET, POST, PUT, and DELETE verbs are already in its training data, so it needs no SDK, adapter, or extra training to drive the resource.

Terminal window
# List containers; the URL is the query
hoody containers list
# Get a specific container; the URL identifies it
hoody containers get 890abcdef12345678901cdef

Anything that can make an HTTP request can control a full Linux computer: a Raspberry Pi, a smart thermostat, a CI/CD runner.


If everything is a URL, then combining systems is combining URLs. No integration layer, message queue, or adapter pattern sits between two containers; one calls the other’s service URLs directly.

Terminal window
# Chain container operations; each is a URL call
hoody snapshots create -c 890abcdef12345678901cdef --alias "before-experiment"
# Clone from that snapshot to a new container
hoody containers copy 890abcdef12345678901cdef \
--target-project-id 67e89abc123def456789abcd \
--source-snapshot "before-experiment"

The chain above runs without an orchestrator, message bus, or service mesh. Each step is a plain HTTP call to a service URL, the same mechanism the rest of the web runs on.


Legacy systems need documentation to explain how to reach them: IP addresses, port numbers, protocol versions, and authentication mechanisms live in wikis, READMEs, and tribal knowledge.

A Hoody URL documents itself:

https://67e89abc123def456789abcd-890abcdef12345678901cdef-sqlite-1.node-us.containers.hoody.com

Read it left to right: project 67e89abc... owns container 890abcde..., which runs a SQLite database, instance 1, on server node-us. The URL tells you what it is, where it is, and who owns it. Sharing the URL shares the documentation, the access, and the interface in one string.


Legacy infrastructure requires an AI to learn bespoke interfaces: SSH key exchange, database wire protocols, custom CLIs. Every tool is a separate skill to acquire.

When everything is a URL, the AI already has the skills it needs. HTTP is the most represented protocol in LLM training data, and JSON is the most represented data format. An AI agent given a Hoody container URL can immediately:

  • Execute commands (POST to the terminal URL)
  • Read and write files (GET/PUT to the files URL)
  • Query databases (POST to the SQLite URL)
  • Automate browsers (POST to the browser URL)
  • Spawn new containers (POST to the API URL)
  • Access desktops (connect to the display URL)

None of this requires an SDK, extra training, or fine-tuning. Models were trained on HTTP, so infrastructure that speaks HTTP needs no translation layer between the model and the machine.

Any AI that can fetch a URL can read @hoody.com and receive a Skill: a machine-readable map of every HTTP endpoint across your containers. ChatGPT, Claude Code, and Codex can all use it; there is no server to host or plugin to install.


Every Hoody URL carries the same contract:

  • Identity: change a segment and you address a different resource.
  • Routing: the proxy reads the URL segments, finds the container, and dispatches to the service.
  • Security: the two 24-character IDs (48 hex characters) are cryptographically unguessable. Knowing the URL is the first layer of authorization.
  • Composability: anything that can construct a URL can interact with anything in Hoody.
  • Portability: the URL works the same pasted into Slack, a CI pipeline, an iframe, or an AI prompt.

When every resource is a URL, the questions you ask about infrastructure change:

Old questionNew question
”What’s the IP address?""What’s the URL?"
"What port is it on?”It is in the URL.
”What protocol does it use?”HTTPS, always.
”What client do I need?”A browser, curl, or fetch.
”How do I give someone access?”Send them the URL.
”How do I revoke access?”Delete the container; the URL dies with it.
”How do I document this?”The URL is the documentation.

One string serves as the API, the interface, and the documentation.


Next: Containers covers what lives at these URLs.