
Build with Dedalus Machines at HackPrinceton Spring 2026
Ship AI agents on real Linux VMs. Claim $50 in Dedalus credits, spin up a machine in under a minute, and let your agent do the rest.
$50 Free Credits
Loading...
50+
AI Models
100+
MCP Servers
<5min
To First Agent
24/7
Discord Support
Get Started in Minutes
Install the CLI, drop in your key, and spin up an isolated Linux VM. The commands below are the same ones we ship on the homepage — copy, paste, run.
Claim Your Free Credits
Scroll up to claim your $50 in free credits. Credits are valid for 30 days after claiming.
Install the Dedalus CLI
One line per platform. Pick your OS — macOS, Linux, or Windows.
$ brew install dedalus-labs/tap/dedalusSet your API key
Grab your key from the dashboard and export it in your shell, or stash it in a .env file.
$ export DEDALUS_API_KEY=<YOUR_API_KEY>Create a machine
Boots a fresh Linux VM with durable storage. Note the returned machine id (dm-…).
$ dedalus machines create --vcpu 1 --memory-mib 1024 --storage-gib 10Run a command
Headless exec against the running machine. Works great from an agent loop.
$ dedalus machines exec --machine-id dm-<id> -- whoamiSSH into the machine
When you need a real shell. Same VM, same storage, stateful across sessions.
$ dedalus ssh dm-<id>Paste this into your coding agent
The canonical Dedalus Machines quickstart — the same doc we ship on /beta/dedalus-machines. Copy the whole thing into Claude Code, Cursor, Codex, or any coding agent to teach it how to drive a VM.
# Quickstart
Dedalus Machines are isolated Linux microVMs with durable storage, SSH,
and a headless execution API. Copy, paste, run.
## Setup
```bash
brew install dedalus-labs/tap/dedalus
```
```bash
export DEDALUS_BASE_URL=https://dev.dcs.dedaluslabs.ai
export DEDALUS_API_KEY=<YOUR_DEDALUS_API_KEY>
```
### SDKs
```bash
pip install dedalus-sdk # Python
npm install dedalus # TypeScript
go get github.com/dedalus-labs/dedalus-go # Go
```
## Create a machine and run a command
### CLI
```bash
dedalus machines create --vcpu 1 --memory-mib 1024 --storage-gib 10
# Note the machine_id (dm-...)
dedalus machines exec --machine-id dm-<id> -- whoami
```
### Python
```python
from dedalus_sdk import Dedalus
import os, time
client = Dedalus(
api_key=os.environ["DEDALUS_API_KEY"],
base_url="https://dev.dcs.dedaluslabs.ai",
)
dm = client.machines.create(vcpu=1, memory_mib=1024, storage_gib=10)
while dm.status.phase != "running":
time.sleep(1)
dm = client.machines.retrieve(machine_id=dm.machine_id)
exc = client.machines.executions.create(
machine_id=dm.machine_id,
command=["/bin/bash", "-c", "whoami && uname -a"],
)
while exc.status not in ("succeeded", "failed"):
time.sleep(0.5)
exc = client.machines.executions.retrieve(
machine_id=dm.machine_id, execution_id=exc.execution_id,
)
output = client.machines.executions.output(
machine_id=dm.machine_id, execution_id=exc.execution_id,
)
print(output.stdout)
```
### TypeScript
```typescript
import Dedalus from "dedalus";
const client = new Dedalus({
apiKey: process.env.DEDALUS_API_KEY,
baseURL: "https://dev.dcs.dedaluslabs.ai",
});
let dm = await client.machines.create({
vcpu: 1,
memory_mib: 1024,
storage_gib: 10,
});
while (dm.status.phase !== "running") {
await new Promise((r) => setTimeout(r, 1000));
dm = await client.machines.retrieve({ machine_id: dm.machine_id });
}
const exec = await client.machines.executions.create({
machine_id: dm.machine_id,
command: ["/bin/bash", "-c", "whoami && uname -a"],
});
let result = exec;
while (result.status !== "succeeded" && result.status !== "failed") {
await new Promise((r) => setTimeout(r, 500));
result = await client.machines.executions.retrieve({
machine_id: dm.machine_id,
execution_id: exec.execution_id,
});
}
const output = await client.machines.executions.output({
machine_id: dm.machine_id,
execution_id: exec.execution_id,
});
console.log(output.stdout);
```
### Go
```go
package main
import (
"context"
"fmt"
"time"
"github.com/dedalus-labs/dedalus-go"
"github.com/dedalus-labs/dedalus-go/option"
)
func main() {
client := dedalus.NewClient(
option.WithAPIKey("your-api-key"),
option.WithBaseURL("https://dev.dcs.dedaluslabs.ai"),
)
ctx := context.Background()
dm, _ := client.Machines.New(ctx, dedalus.MachineNewParams{
CreateParams: dedalus.CreateParams{
VCPU: 1, MemoryMiB: 1024, StorageGiB: 10,
},
})
for dm.Status.Phase != "running" {
time.Sleep(time.Second)
dm, _ = client.Machines.Get(ctx, dedalus.MachineGetParams{
MachineID: dm.MachineID,
})
}
exc, _ := client.Machines.Executions.New(ctx, dedalus.MachineExecutionNewParams{
MachineID: dm.MachineID,
ExecutionCreateParams: dedalus.ExecutionCreateParams{
Command: []string{"/bin/bash", "-c", "whoami && uname -a"},
},
})
for exc.Status != "succeeded" && exc.Status != "failed" {
time.Sleep(500 * time.Millisecond)
exc, _ = client.Machines.Executions.Get(ctx, dedalus.MachineExecutionGetParams{
MachineID: dm.MachineID, ExecutionID: exc.ExecutionID,
})
}
output, _ := client.Machines.Executions.Output(ctx, dedalus.MachineExecutionOutputParams{
MachineID: dm.MachineID, ExecutionID: exc.ExecutionID,
})
fmt.Println(output.Stdout)
}
```
## Watch machine status (SSE)
Instead of polling, stream status changes via Server-Sent Events (SSE):
```bash
curl -N https://dev.dcs.dedaluslabs.ai/v1/machines/dm-<id>/status/stream \
-H "Authorization: Bearer $DEDALUS_API_KEY" \
-H "Accept: text/event-stream"
```
Each event is a JSON object with the full machine state:
```text
event: status
data: {"machine_id":"dm-...","status":{"phase":"running",...}}
```
In code, use any SSE client. The stream stays open until the machine is
destroyed or you disconnect.
```python
import os, json, urllib.request
machine_id = "dm-..." # from create output
url = f"https://dev.dcs.dedaluslabs.ai/v1/machines/{machine_id}/status/stream"
req = urllib.request.Request(url, headers={
"Authorization": f"Bearer {os.environ['DEDALUS_API_KEY']}",
"Accept": "text/event-stream",
})
with urllib.request.urlopen(req) as resp:
for line in resp:
line = line.decode().strip()
if line.startswith("data: "):
status = json.loads(line[6:])
print(status["status"]["phase"])
if status["status"]["phase"] == "running":
break
```
## Exec patterns
Machines are stateful Linux VMs with persistent `/home/machine` storage. Files
written in one exec are visible in the next. The machine stays running until you
sleep or delete it.
```python
def exec_cmd(client, machine_id, command):
"""Run a command and return stdout."""
exc = client.machines.executions.create(
machine_id=machine_id, command=command,
)
while exc.status not in ("succeeded", "failed"):
time.sleep(0.5)
exc = client.machines.executions.retrieve(
machine_id=machine_id, execution_id=exc.execution_id,
)
output = client.machines.executions.output(
machine_id=machine_id, execution_id=exc.execution_id,
)
return output.stdout
machine_id = dm.machine_id # from create output above
exec_cmd(client, machine_id, ["apt-get", "install", "-y", "python3-pip"])
exec_cmd(client, machine_id, ["/bin/bash", "-c",
"cd /home/machine && git clone https://github.com/org/repo"])
exec_cmd(client, machine_id, ["/bin/bash", "-c",
"cd /home/machine/repo && python -m pytest -v 2>&1"])
exec_cmd(client, machine_id, ["/bin/bash", "-c",
"nohup python server.py > /tmp/server.log 2>&1 &"])
exec_cmd(client, machine_id, ["cat", "/home/machine/repo/output.json"])
exec_cmd(client, machine_id, ["/bin/bash", "-c",
"echo 'hello' > /home/machine/test.txt"])
exec_cmd(client, machine_id, ["/bin/bash", "-c",
"free -h && df -h /home/machine"])
```
## Machine lifecycle
```bash
dedalus machines list
dedalus machines retrieve --machine-id dm-<id>
# Sleep (zero compute cost, storage persists)
dedalus machines update --machine-id dm-<id> --desired-state sleeping
# Wake
dedalus machines update --machine-id dm-<id> --desired-state running
# Resize (live, no restart)
dedalus machines update --machine-id dm-<id> --vcpu 2 --memory-mib 2048
# Delete (grab revision from retrieve output)
dedalus machines delete --machine-id dm-<id> --if-match <revision>
```
## Examples
- [openclaw-ddls](https://github.com/annyzhou/openclaw-ddls): Host OpenClaw on a Dedalus Machine!
A real workload on a Dedalus Machine
A reference deployment you can clone today — end-to-end, from an empty VM to a live HTTP chat endpoint.
OpenClaw on Dedalus
by Anny Zhou
Deploy OpenClaw — an open-source, self-hosted AI assistant — end-to-end on a Dedalus Machine. No SSH, everything through the execution API.
- Create a 2 vCPU / 4 GiB machine and wait for the guest agent
- Install Node + OpenClaw into persistent storage at /home/machine
- Start the gateway with setsid so it survives the exec call
- Chat via the OpenAI-compatible /v1/chat/completions endpoint
Hackathon Projects & Tutorials
Get inspired by winning projects and learn from step-by-step tutorials.
Hackathon Projects
Real projects built at hackathons using Dedalus
Discer.io
by Roman Slack
1st Place YC Challenge + Best Use of Dedalus - HackPrinceton 2025
Learn Agentic AI through play. An MMO sandbox to build and deploy AI workflows with drag-and-drop blocks, like Scratch, but for AI agents.
SpatialMD
by Aaryaman Bajaj
Best Use of Dedalus - HackPrinceton 2025
Surgical AR guidance system that enables remote experts to guide rural surgeons using 3D reconstructions and AI-powered safety analysis.
CourtRoom
by Mehul Goel, Utsav Kataria
Best Use of Dedalus API - TartanHacks 2026
AI courtroom debate engine where defense and prosecution agents argue with citation-locked evidence, cross-examine each other, and stream a judge verdict in real time.
Jiri
by Nihal Josyula, Deepansh Saxena, Rithvik Duddupudi, Vedant Joshi
Best Use of Tool Calling - TartanHacks 2025
Self-improving agent that starts with zero tools, discovers MCP servers at runtime from user intent, and uses caching plus metrics-based preloading to speed future calls.
CADly
by Nayansh Patni
Best Use of Dedalus Tool Calling (Runners Up) - TartanHacks 2026
AI-powered design-for-manufacturing platform that checks CAD parts for process violations, auto-fixes geometry, and runs Dedalus multi-agent design reviews.
Messenger AI
by Jaehun Baek, John Kim, Joshua Song
AI-powered group messaging assistant that reads texts, PDFs, and images to enrich conversations using Dedalus Labs and Photon's iMessage Kit.
Amelia
by Aaryaman Bajaj
AI co-pilot for air traffic controllers that surfaces real-time flight and weather insights, automating routine communication and reducing cognitive load.
Medverse
by Dongkon Lee, Kevin Park
The world's first AI-interactive 3D medical textbook, explore anatomy models of the brain, heart, and skeleton guided by an adaptive AI tutor.
GreenTrip
by Brooke Xu, +3 more
Sustainable travel planning platform that generates personalized itineraries with carbon footprint tracking, eco-credits, and geographically optimized activities.
Tutorials & Guides
Step-by-step guides to build your hackathon project
Build a CRM Agent with X API Integration
Learn how to build a CRM agent that searches X for high-value leads using DAuth.
Finance Research Agent Tutorial
Create an AI agent that analyzes market data and generates investment insights.
One-Click PDF Generator with MCP
Build a PDF generation system using MCP servers and the Dedalus SDK.
DAuth: Secure Authentication for AI Agents
Learn how DAuth keeps your API keys secure while enabling powerful integrations.
Win with Dedalus
Build something amazing with Dedalus and compete for these special prizes.
$250
× 4 winners
Best Use of Dedalus Containers
Awarded for the most compelling use of Dedalus Machines — long-running agents, persistent state, or ambitious container workloads that actually need a real Linux VM.
$500
Grand prize
Best Agent Swarm
Grand prize for the best multi-containerized agent setup — coordinated swarms of agents running across multiple Dedalus Machines, each with its own VM and state.
Join Our Community
Get help, share your progress, and connect with other builders on Discord. Star our repos to stay updated!
Star Our Repos
Support us and stay updated with the latest features
dedalus-cli
Command-line client for Dedalus Machines
dedalus-python
Python SDK for Dedalus Machines and the chat API
dedalus-typescript
TypeScript SDK for Dedalus Machines and the chat API
dedalus-go
Go SDK for Dedalus Machines and the chat API
dedalus-sdk-python
Python SDK for building AI agents with Dedalus
dedalus-sdk-typescript
TypeScript/JavaScript SDK for Dedalus
dedalus-mcp-python
MCP framework for building MCP servers
wingman
AI coding assistant powered by Dedalus