Skip to content
Hoody.com

Every Hoody container includes 19 HTTP services for building, deploying, and operating software. They are already running when the container starts, so there is nothing to install or configure.

Each service is a URL. That URL opens in a browser on a laptop or a phone, embeds in an iframe, goes to a teammate in a chat message, and can be called by an AI. Hoody Agent, the terminal-native AI agent already running in every container, reaches all of them: open it in a browser tab, or type ssh hoody.com for the same agent in your terminal.

Screenshot Coming Soon Hoody Agent running as a terminal-native TUI in a browser tab, with a multi-pane chat grid beside live terminals, files, and a display preview
Multiple services visible at once through the Hoody Agent

Each service is complete on its own and speaks HTTP, so any service can call any other:

  • Terminals execute any command. Pair one with Displays and GUI applications appear in the browser.
  • Files reaches any storage. Combine it with SQLite for indexed metadata, or Exec for automated processing.
  • Agent orchestrates workflows. Give it Terminal access and it drives the rest of your infrastructure.
  • Browser automates web tasks. Combine it with cURL for API calls and SQLite for storing results.

One service handles a task; two or more compose into a workflow. Because the interface is HTTP rather than a fixed feature list, the combinations available to you are not limited to the ones documented here. Each service is a primitive, and what you build out of them is your decision.


When you spawn a container with hoody_kit: true, you get URLs for all 19 services:

https://PROJECT-CONTAINER-terminal-1.SERVER.containers.hoody.com
https://PROJECT-CONTAINER-display-1.SERVER.containers.hoody.com
https://PROJECT-CONTAINER-files-1.SERVER.containers.hoody.com
https://PROJECT-CONTAINER-sqlite-1.SERVER.containers.hoody.com
https://PROJECT-CONTAINER-exec-1.SERVER.containers.hoody.com
https://PROJECT-CONTAINER-browser-1.SERVER.containers.hoody.com
https://PROJECT-CONTAINER-agent-1.SERVER.containers.hoody.com
https://PROJECT-CONTAINER-code-1.SERVER.containers.hoody.com
https://PROJECT-CONTAINER-curl-1.SERVER.containers.hoody.com
https://PROJECT-CONTAINER-n-1.SERVER.containers.hoody.com # Notifications
https://PROJECT-CONTAINER-daemon-1.SERVER.containers.hoody.com
https://PROJECT-CONTAINER-cron-1.SERVER.containers.hoody.com
https://PROJECT-CONTAINER-pipe-1.SERVER.containers.hoody.com
https://PROJECT-CONTAINER-notes-1.SERVER.containers.hoody.com
https://PROJECT-CONTAINER-watch-1.SERVER.containers.hoody.com
https://PROJECT-CONTAINER-run-1.SERVER.containers.hoody.com # Run
https://PROJECT-CONTAINER-logs-1.SERVER.containers.hoody.com # Proxy Logs
https://PROJECT-CONTAINER-tunnel-1.SERVER.containers.hoody.com

The services are running before your first request reaches them. Open a URL and use it.


Hoody Agent includes a Model Context Protocol (MCP) client that connects to external MCP servers and discovers their tools at runtime.

  • Dynamic tool discovery: the number of available tools depends on which MCP servers you connect. There is no fixed list.
  • Local and remote servers: local servers over stdio, remote servers over Streamable HTTP or the legacy HTTP+SSE transport.
  • Spec coverage: built on the official Go SDK. It speaks every revision from 2024-11-05 through 2026-07-28 and negotiates the version with each server.
  • Managed in place: add, import, enable, disable and reconnect servers from the agent’s Agents ▸ MCP servers mode or over HTTP. There is no settings file to hand-edit and no session to restart. Paste a config from Claude, Cursor or VS Code and it is understood; imported servers land disabled until you review them.
  • Credentials stay deliberate: a stdio server starts with your provider keys and platform token scrubbed out of its environment, and you share one by naming it. Destructive operations still require confirmation.

An MCP server you configure runs with your privileges, on the same footing as a shell command you run yourself, so add only servers you trust. Full details on the Agent page →


Agent (WebOS)

Manage all containers, projects, and services from one browser interface.

Key capabilities:

  • Unified dashboard for all containers
  • Drag-and-drop panel layouts
  • Embed multiple containers in one view
  • Share your entire layout with a URL
  • Access from any device

Common uses: Project management, monitoring, client presentations

Learn More →

Terminals

Run shell commands over HTTP: the container’s Linux terminal as a web service, reachable from anywhere.

Key capabilities:

  • Web terminal UI in browser
  • HTTP command execution API
  • Multiple terminal instances per container
  • Session state persistence (cwd, env, history)
  • SSH to remote servers (no client needed)
  • Launch GUI apps instantly

Common uses: Command execution, automation, remote server management, AI agent control

Learn More →API Reference →

Displays

Remote desktop over HTTP: run graphical applications and see them in your browser, with nothing to configure.

Key capabilities:

  • Full Linux desktop in browser
  • Multiple display instances (one app per display)
  • Instance pairing with terminals (set display=5 on terminal-5 to connect to display-5)
  • Session sharing for multiplayer
  • Screenshot API

Common uses: Visual development tools, GUI applications, browser automation, design software

Learn More →API Reference →

Files

Read, download, and manage files over HTTP across local storage and 60+ cloud providers.

Key capabilities:

  • Web File Manager UI
  • HTTP file streaming
  • 60+ cloud storage integrations
  • File integrity verification (hashes)
  • Shared Storage cross-container access

Common uses: Cloud aggregation, download verification, cross-container file sharing

Learn More →API Reference →

SQLite

Run SQLite queries and use a KV store through HTTP endpoints.

Key capabilities:

  • Web Database UI
  • SQL operations via HTTP
  • KV store with time-travel
  • SQLite Drive for multi-container access
  • Atomic operations and batch updates

Common uses: Configuration management, feature flags, session storage, shared state

Learn More →API Reference →

Exec

Turn a script file into an HTTP endpoint, with dependency management and AI generation.

Key capabilities:

  • Run TypeScript/JavaScript via HTTP (Bun runtime)
  • Automatic dependency installation
  • AI-powered script generation
  • MITM capabilities (intercept/modify services)
  • Built-in logging and monitoring

Common uses: API endpoints, webhooks, automation, service customization

Learn More →API Reference →

cURL

Make web requests from your container, with scheduling, sessions, and response storage.

Key capabilities:

  • Wrap POST into GET: turn any POST request into a GET URL
  • Execute HTTP requests via API
  • Request scheduling (cron-like)
  • Session management (cookies, headers)
  • Response storage and history

Common uses: API integrations, web scraping, scheduled tasks, workflow automation

Learn More →API Reference →

Browser

Control Chromium instances over a REST API for testing and automation.

Key capabilities:

  • Browser instance management
  • Page interaction (click, type, scroll)
  • Screenshot capture
  • Network interception
  • Health monitoring

Common uses: Web scraping, automated testing, screenshot services

Learn More →API Reference →

Daemons

Manage long-running background services through an HTTP API.

Key capabilities:

  • Daemon lifecycle control (start/stop/restart)
  • Process monitoring and health checks
  • Log aggregation
  • Auto-restart on failure
  • Resource usage tracking

Common uses: Background services, worker processes, monitoring daemons

Learn More →API Reference →

Cron

Create, update, enable, disable, and auto-expire scheduled tasks through a REST API.

Key capabilities:

  • Managed entries with UUID, metadata, and comments
  • Enable/disable without deletion
  • Auto-expiration with background cleanup
  • Per-user crontab management
  • Raw crontab read/write for full control
  • Standard 5-field cron + macros (@hourly, @daily, etc.)

Common uses: Scheduled backups, periodic data processing, maintenance tasks, temporary monitoring

Learn More →API Reference →

Notifications

Trigger desktop push notifications through HTTP endpoints.

Key capabilities:

  • Desktop push notifications
  • Custom icons
  • Notification history
  • WebSocket streaming
  • Urgency levels (low, normal, critical)

Common uses: Build alerts, monitoring notifications, user engagement

Learn More →API Reference →

Code

A full VS Code editor in the browser, reachable at a web URL.

Key capabilities:

  • Complete VS Code experience
  • Extensions and themes
  • Terminal integration
  • Multi-instance support
  • Health monitoring

Common uses: Web-based development, collaborative coding, mobile development

Learn More →API Reference →

Pipe

Named pipes over the internet. Send to a path, receive from the same path, and the data streams through as it arrives.

Key capabilities:

  • Real-time streaming (not store-and-forward)
  • Multi-receiver fan-out (up to 256 receivers)
  • Built-in video player for screen sharing
  • Progress spectating via SSE
  • Multipart uploads from browser
  • Binary-clean transport, so you can add your own encryption (openssl enc | curl -T -) for end-to-end secrecy

Common uses: Screen sharing, file transfers, live data piping, event forwarding, multiplayer collaboration

Learn More →

Notes

Realtime multi-user notes over HTTP, with inline databases and file attachments.

Key capabilities:

  • Realtime multi-user editing
  • Inline tables / databases
  • File attachments per note
  • REST + WebSocket API

Common uses: Shared runbooks, team knowledge bases, embedded checklists

API Reference →

Watch

Watch paths recursively and stream the file system events over SSE or WebSocket.

Key capabilities:

  • Recursive directory watching (Linux inotify)
  • SSE streaming
  • WebSocket streaming
  • Pattern filters

Common uses: Build triggers, live reload, file-change-driven automation

API Reference →

Run

A multi-source app resolver. Query app names across Nix, pkgx, AppImage, Docker/OCI, and manifest registries, and get back the exact shell command.

Key capabilities:

  • Search across 9+ package sources in one query
  • Candidate ranking (manual or first-match)
  • Exact shell command output (agent-friendly)
  • Path-based launch URLs
  • Per-user profiles

Common uses: AI agent app discovery, portable install flows, cross-source launchers

API Reference →

Proxy Logs

Query and tail the Hoody Proxy access log for the container over HTTP.

Key capabilities:

  • Query historical access logs
  • Live tail over SSE / WebSocket
  • Filter by path, method, status, time range

Common uses: Debugging access issues, traffic analysis, audit trails

API Reference →

Tunnel

TCP tunneling over HTTP: expose local services online, or pull remote services into the container through the relay.

Key capabilities:

  • Expose HTTP/WS/TCP services to the internet
  • Pull remote TCP services into the container loopback
  • Session-based control plane
  • URL/port bindings management

Common uses: Sharing local dev servers, bridging networks, remote access

Learn More →

Egress

The container’s outbound HTTP proxy: CONNECT for HTTPS, absolute-URI forwarding for plain HTTP, and optional chaining to an upstream proxy.

Key capabilities:

  • Standard HTTP proxy endpoint on its own URL
  • Chain to a SOCKS5 or HTTP upstream
  • Change or clear the upstream at runtime
  • Upstream credentials stored, never returned

Common uses: Routing container traffic through a fixed exit IP, reaching APIs that allowlist an address

Learn More →


Installing tools locally means setup, configuration, dependencies, and compatibility checks on each machine, repeated every time you switch computers. On Hoody each tool is a URL: open it and the tool is there, on any device with a browser, including a phone, tablet, laptop, or TV.

Open the terminal URL for a shell, the SQLite URL for a database, the code URL for VS Code. Nothing is downloaded, installed, or configured on the device you are working from.

Because everything speaks HTTP, everything composes:

// Terminal executes command that queries database
fetch(terminalUrl + '/api/v1/terminal/execute', {
method: 'POST',
body: JSON.stringify({
command: `curl -X POST ${sqliteUrl}/api/v1/sqlite/db?db=app -H 'Content-Type: application/json' -d '{"transaction":[{"statement":"SELECT * FROM users"}]}'`
})
});
// Exec script reads file, processes data, stores in database
fetch(execUrl + '/process-data.ts', {
method: 'POST',
body: JSON.stringify({
input_file: filesUrl + '/data/input.csv',
output_db: sqliteUrl
})
});
// Agent orchestrates entire workflow across all services
// 1. Create a session
const session = await fetch(agentUrl + '/api/v1/agent/sessions', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ realm: 'global' })
}).then(r => r.json());
// 2. Dispatch a turn and block until it completes (:sync)
fetch(agentUrl + `/api/v1/agent/sessions/${session.session_id}/prompt:sync`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
text: "Deploy the app using terminal, monitor with browser, store logs in database"
})
});

Each service is independent, and together they make up a complete development environment.


The 19 services fall into 4 groups:

Services you use to see and control your containers:

  • Terminals: command-line interface via HTTP
  • Displays: graphical desktop in the browser
  • Browser: automated Chrome for testing and scraping
  • Pipe: streaming data transfer between any devices

Services that store and return information:

  • Files: unified file system with cloud storage
  • SQLite: database and KV store
  • Notes: collaborative notes, databases, and files

Services that run code and coordinate systems:

  • Exec: execute scripts as HTTP endpoints
  • cURL: HTTP requests with scheduling
  • Run: multi-source app resolver (Nix, pkgx, AppImage, Docker/OCI)

Services that manage and observe what is running:

  • Daemons: background process management
  • Cron: managed cron job scheduling
  • Notifications: push alerts and updates
  • Code: web-based IDE
  • Watch: file and event watchers
  • Proxy Logs: access logs from Hoody Proxy
  • Tunnel: TCP tunneling over HTTP
  • Egress: outbound HTTP proxy with optional upstream chaining
  • Agent: the resident AI agent (terminal-native TUI plus HTTP API)

Most services can run several instances in the same container:

terminal-1, terminal-2, terminal-3, terminal-4...
display-1, display-2, display-3, display-4...
exec-1, exec-2, exec-3...
sqlite-1, sqlite-2, sqlite-3...
browser-1, browser-2, browser-3...
curl-1, curl-2, curl-3...
daemon-1, daemon-2, daemon-3...
cron-1, cron-2, cron-3...
code-1, code-2, code-3...
pipe-1, pipe-2, pipe-3...

Typical uses:

  • Separation of concerns: terminal-1 for frontend, terminal-2 for backend, terminal-3 for the database
  • Parallel operations: run tests in exec-1 while building in exec-2
  • Specialized agents: agent-1 for code, agent-2 for docs, agent-3 for DevOps
  • Multi-user collaboration: each user gets their own terminal or display instance

All instances share the same container filesystem, processes, and network. It is one computer with multiple access points.


# Type in terminal-5
terminal-5.hoody.com → firefox &
# See in display-5 (terminal-5 was created with display=5)
https://PROJECT-CONTAINER-display-5.SERVER.containers.hoody.com → Firefox appears

GUI applications appear in the display configured for that terminal session.

# Terminal with embedded agent panel
terminal-1.hoody.com/?panel=...agent-1.hoody.com&panel-width=40%

The AI assistant helps with commands, explains output, and suggests approaches, all in one window.

// Read CSV from cloud storage
const data = await fetch(filesUrl + '/google-drive/data.csv');
// Process with exec script
const processed = await fetch(execUrl + '/etl.ts', {
method: 'POST',
body: data
});
// Store in SQLite
await fetch(sqliteUrl + '/api/v1/sqlite/db?db=analytics', {
method: 'POST',
body: JSON.stringify({
transaction: [{ statement: 'INSERT INTO analytics VALUES (...)' }]
})
});
// Agent has access to all container services
// 1. Create a session
const session = await fetch(agentUrl + '/api/v1/agent/sessions', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ realm: 'global' })
}).then(r => r.json());
// 2. Dispatch a turn and block to completion (:sync).
// ?policy=auto_approve auto-answers confirm gates for hands-off automation.
const agent = await fetch(agentUrl + `/api/v1/agent/sessions/${session.session_id}/prompt:sync?policy=auto_approve`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
text: "Set up production environment"
})
});
// Agent coordinates:
// 1. Terminal - Install dependencies
// 2. Files - Download config from cloud
// 3. SQLite - Initialize database schema
// 4. Exec - Run deployment script
// 5. Notifications - Alert when complete

One task description drives multiple services.


VS Code requires a desktop OS, which normally rules out coding from a phone or tablet. The code, terminal, and display URLs put the whole development environment in a mobile browser:

https://PROJECT-CONTAINER-code-1.SERVER.containers.hoody.com → Full VS Code in mobile browser
https://PROJECT-CONTAINER-terminal-1.SERVER.containers.hoody.com → Run builds and tests
https://PROJECT-CONTAINER-display-1.SERVER.containers.hoody.com → Preview GUI applications

Managing 10+ projects means switching between terminals, editors, and databases. A workspace shows every project at once, with each service one click away:

Workspace shows all projects
├─ Project A: terminal-1, display-1, sqlite-1 (frontend app)
├─ Project B: terminal-1, agent-1, exec-1 (API service)
├─ Project C: browser-1, curl-1, sqlite-1 (scraper)
└─ Project D: terminal-1, code-1, files (docs site)

AI agents normally cannot install tools or reach infrastructure. Here the agent has HTTP access to every service:

agent-1.hoody.com → AI has HTTP access to:
├─ terminal (execute commands)
├─ files (read/write code)
├─ exec (run scripts)
├─ sqlite (manage state)
└─ browser (test web apps)

The AI orchestrates the development workflow over HTTP, and a human approves critical decisions.

To share a development environment with a team across time zones, share the workspace URL; everyone works in the same environment, from anywhere:

# Share workspace URL with team
https://PROJECT_ID-CONTAINER_ID-agent-1.node-us-1.containers.hoody.com
# Team sees:
- Live terminal sessions (multiplayer)
- Shared displays (see what others see)
- Common file access
- Shared database state

After you spawn a container, there are three ways to find its service URLs.

When you create a container, the response includes the server details:

{
"data": {
"id": "def456",
"project_id": "abc123",
"server_name": "node-us-1",
"status": "running"
}
}

Construct URLs:

https://PROJECT_ID-CONTAINER_ID-terminal-1.node-us-1.containers.hoody.com
https://PROJECT_ID-CONTAINER_ID-display-1.node-us-1.containers.hoody.com

Open the Agent, select your container, and every service URL is listed with a copy button.

Terminal window
GET /api/v1/containers/{id}

Returns full container details including project_id, id, and server_name, which are the fields you need to construct service URLs.


Prefer exec when the job deserves a script: cd /app && npm test && echo "done" through terminal.run/execute works, but exec.run/test-runner.ts gets you logging, error handling, and structure. Prefer the terminal when the job is one command: creating an exec script just to run ls -la is overhead, so send {"command": "ls -la"} to terminal.run/execute instead.

Give instances semantic meaning:

terminal-1 → Frontend work
terminal-2 → Backend work
terminal-3 → Database management
terminal-4 → DevOps/deployment
agent-1 → Code and tests
agent-2 → Documentation
agent-3 → Infrastructure
exec-1 → API endpoints
exec-2 → Scheduled tasks
exec-3 → Data processing

Services do more in pairs:

  • Terminal + Display → visual debugging
  • Files + SQLite → data pipelines
  • Agent + all services → full autonomy
  • Browser + Exec → web automation
  • Terminal + agent panel → AI-assisted development

For cross-container workflows:

  • /hoody/shares/: files accessible from all containers
  • /hoody/databases/: SQLite databases accessible from all containers

See Shared Storage → and SQLite Drive →


Are all 19 services included in every container?

Section titled “Are all 19 services included in every container?”

Yes, when you create a container with hoody_kit: true. If you set hoody_kit: false, you get a plain Linux container without these HTTP services (SSH access only), which suits minimal containers and custom setups.

Can I disable specific services I don’t need?

Section titled “Can I disable specific services I don’t need?”

Currently, all services come together. Unused services activate only when accessed, so a terminal service that never receives requests uses almost no CPU or memory.

How do services communicate within the same container?

Section titled “How do services communicate within the same container?”

They share the same filesystem, processes, and network. A file created via the Files service is immediately readable via Terminal. A database created via SQLite is accessible from Exec scripts. They’re all running on the same Linux computer.

Can multiple users access the same service at once?

Section titled “Can multiple users access the same service at once?”

Yes. Terminals and Displays support multiplayer, so several users can type in the same terminal or watch the same desktop. Other services (Files, SQLite, Exec) are accessible simultaneously with standard HTTP concurrency.

What happens to services when I snapshot a container?

Section titled “What happens to services when I snapshot a container?”

Snapshots capture the complete container state, including all services and their data. When you restore a snapshot, all services come back exactly as they were, including terminal history, file contents, database state, and daemon configurations.

Do I need different authentication for each service?

Section titled “Do I need different authentication for each service?”

No. Proxy permissions control access to all services in a container. Set permissions once at the project or container level, and they apply to terminals, displays, files, SQLite, exec, and the rest.

Can services in different containers communicate?

Section titled “Can services in different containers communicate?”

Yes. Containers on the same server can communicate via internal networking. Use Shared Storage (/hoody/shares/) for file sharing or SQLite Drive (/hoody/databases/) for database sharing across containers.

Which service URLs support embedding in iframes?

Section titled “Which service URLs support embedding in iframes?”

All of them. Every service is web-native:

  • Terminals → embed a live shell
  • Displays → embed a desktop view
  • Files → embed a file browser
  • SQLite → embed the database UI
  • Code → embed VS Code
  • Agent → embed the chat interface

This is how you build custom dashboards: compose service iframes.


https://PROJECT_ID-CONTAINER_ID-terminal-1.node-us.containers.hoody.com returns 404. The usual causes:

  1. The container is not running. Check its status with GET /api/v1/containers/{id}.
  2. The URL format is wrong. Verify the project_id, container_id, and server_name.
  3. Proxy permissions block the service.

To diagnose:

Terminal window
# Verify container is running
curl "https://api.hoody.com/api/v1/containers/{container_id}" \
-H "Authorization: Bearer $HOODY_TOKEN" | jq '.data.status'
# Check server name matches
# Should be: node-us-1, node-eu-1, etc. (check container response)
# Verify proxy permissions allow access
curl "https://api.hoody.com/api/v1/containers/{container_id}/proxy/permissions" \
-H "Authorization: Bearer $HOODY_TOKEN"

Service URLs respond slowly. The usual causes:

  1. The server is overloaded with too many containers or processes.
  2. High traffic on the container congests the network.
  3. The container is out of CPU or memory.

To diagnose:

Terminal window
# Check server resource usage
curl "https://PROJECT_ID-CONTAINER_ID-terminal-1.node-us-1.containers.hoody.com/api/v1/system/resources"
# Check running processes
curl "https://PROJECT_ID-CONTAINER_ID-terminal-1.node-us-1.containers.hoody.com/api/v1/system/processes?sort=cpu"
# Consider moving to less loaded server or upgrading server resources

Can’t access service from specific device/network

Section titled “Can’t access service from specific device/network”

A service works from your laptop but not from a phone or public WiFi. This usually means proxy permissions restrict access by IP or require authentication. To open access:

Terminal window
# Check current permissions (note the file_version for the If-Match header)
GET /api/v1/containers/{id}/proxy/permissions
# Remove the IP restriction by opening the default policy to "allow".
# Write operations require the If-Match: file:v<current file_version> header.
PATCH /api/v1/containers/{id}/proxy/permissions/default
If-Match: file:v3
{
"default": "allow"
}

See Proxy Permissions → for access control details.


Explore individual services:

Understand the platform:

For the complete technical specs: