Bytebot is a self-hosted AI desktop agent that automates computer tasks through natural language commands, operating within a containerized Linux desktop environment.
Automate any computer task with natural language
🌐 Website • 📚 Docs • 💬 Discord • 𝕏 Twitter
</div>Bytebot is a self-hosted AI desktop agent that transforms how you interact with computers. By combining powerful AI with a containerized Linux desktop, Bytebot can perform complex computer tasks. Think of it as your virtual employee that can actually use a computer – clicking, typing, browsing, and completing workflows just like a human would.
https://github.com/user-attachments/assets/32a76e83-ea3a-4d5e-b34b-3b57f3604948
https://github.com/user-attachments/assets/5f946df9-9161-4e7e-8262-9eda83ee7d22
ANTHROPIC_API_KEY
in the single required environment variable.For an in-depth guide see here.
git clone https://github.com/bytebot-ai/bytebot.git
cd bytebot
echo "ANTHROPIC_API_KEY=your_api_key_here" > docker/.env
docker-compose -f docker/docker-compose.yml up -d
http://localhost:9992
That's it! Start chatting with your AI desktop agent. Watch it work in real-time through the embedded desktop viewer.
Bytebot consists of four main components working together:
┌─────────────────────────────────────────────────────────────┐
│ Your Browser │
│ http://localhost:9992 │
└─────────────────────┬───────────────────────────────────────┘
│
┌─────────────────────▼───────────────────────────────────────┐
│ Bytebot UI (Next.js) │
│ • Task interface │
│ • Desktop viewer (VNC) │
│ • Task management │
└─────────────────────┬───────────────────────────────────────┘
│ WebSocket
┌─────────────────────▼───────────────────────────────────────┐
│ Bytebot Agent (NestJS) │
│ • LLM integration │
│ • Task orchestration │
│ • Action planning │
└─────────────────────┬───────────────────────────────────────┘
│ REST API
┌─────────────────────▼───────────────────────────────────────┐
│ Bytebot Desktop (Ubuntu + XFCE) │
│ • Full Linux desktop │
│ • Browser, email, office apps │
│ • Automation daemon (bytebotd) │
└─────────────────────────────────────────────────────────────┘
Create docker/.env
:
# Required
ANTHROPIC_API_KEY=sk-ant-...
Add applications or configurations by extending the Dockerfile:
# docker/desktop/Dockerfile.custom
FROM bytebot/desktop:latest
# Install additional software
RUN apt-get update && apt-get install -y \
libreoffice \
gimp \
your-custom-app
# Copy custom configs
COPY configs/.config /home/user/.config
docker-compose -f docker/docker-compose.yml logs -f
docker-compose -f docker/docker-compose.yml down
docker-compose -f docker/docker-compose.yml pull
docker-compose -f docker/docker-compose.yml up -d
docker-compose -f docker/docker-compose.yml down -v
Control Bytebot via REST API:
import requests
# Create a task
response = requests.post('http://localhost:9991/tasks', json={
'description': 'Search for flights from NYC to London next month',
})
task_id = response.json()['id']
# Check task status
status = requests.get(f'http://localhost:9991/tasks/{task_id}')
print(status.json())
Use the computer control API for precise automation:
The core container also exposes an MCP endpoint.
Connect your MCP client to http://localhost:9990/mcp
to invoke these tools over SSE.
{
"mcpServers": {
"bytebot": {
"command": "npx",
"args": [
"mcp-remote",
"http://127.0.0.1:9990/mcp",
"--transport",
"http-first"
]
}
}
}
// Take screenshot
POST http://localhost:9990/computer-use
{
"action": "screenshot"
}
// Click at coordinates
POST http://localhost:9990/computer-use
{
"action": "click_mouse",
"coordinate": [500, 300]
}
// Type text
POST http://localhost:9990/computer-use
{
"action": "type_text",
"text": "Hello, Bytebot!"
}
We welcome contributions! Whether it's bug fixes, new features, or documentation improvements:
git checkout -b feature/amazing-feature
)git commit -m 'Add amazing feature'
)git push origin feature/amazing-feature
)Built with amazing open source projects:
MIT © 2025 Tantl Labs, Inc.
bytebot-ai/bytebot
February 3, 2025
July 7, 2025
TypeScript