UFO-core multiplayer agentic environs UFO released ufo-core, an open source runtime for AI agents that lets teams run agents on their own infrastructure, with the same runtime powering UFO's hosted service at ufo.ai. The runtime runs as a single process via `ufoctl serve` on SQLite and local files with no Docker, or scales to Postgres, S3, and Redis, and each agent turn is a DBOS workflow that survives a crash. The repository includes the server, a Rust terminal client, an SDK, and extensions, with agents granted accounts in chat rather than borrowing the speaker's identity. ▗▟█▙▖ ▗▟█▙▖ ▐██▘ ▐██▌ ▐███████▘ ▄▟██████▙▄ █▓███ ███▓█ ▝██ ██ ▐██ ▄█▛▀ ▝▜██▄ ▝▀█▀▘ ▝▀█▀▘ ██ ██ ▐██ ▟█▛ ▝██▌ ██ ██ ▐██▄▄▄▄▄ ██▘ ▐██ ██ ██ ▐██▀▀▀▀▀ ██▌ ▐██ ▗▟█▙▖ ██ ██ ▐██ ▜██▖ ▟█▌ ▓████ ▜█▙▖ ▄▟██ ▐██ ▀██▄▖ ▄██▀ ▝▀█▀▘ ▀█████▛▀██▌ ▐██▖ ▀▜██████▛▀ Run AI agents for your team on your own infrastructure. The same runtime powers UFO's hosted service https://ufo.ai . Self-host quick-start · How it works how-it-works · Use hosted use-hosted · Security model security-model · Extend it extend-it · Spec https://github.com/ufo-ai/ufo-core/blob/main/spec.md · Documentation https://ufo.ai/docs/ · Blog https://ufo.ai/blog/ UFO is an open source runtime for AI agents. Team members give agents work in chat. Agents can read files and run commands to complete that work. UFO's hosted service https://ufo.ai runs this code. You can also run it yourself with your own model keys. The ufo terminal client connects to either. This repository contains the server, client, SDK, and extensions. | One process. ufoctl serve runs the agent loop, turn queue, sandbox, surfaces, and jobs. | Laptop to fleet. SQLite and local files alone, or Postgres, S3, and Redis for more instances. One bundle serves both. | | Durable turns. Each turn is a DBOS workflow that survives a crash. | Grants in chat. A member grants an account to an agent in chat. Agents never borrow the speaker's identity. | | Workspace-scoped. Every row carries its workspace id. | Everything is an extension. Tools, connectors, subagents, surfaces, model providers, sandbox carriers. | To host UFO yourself, run one process on SQLite and local files, with no Docker. Install uv https://docs.astral.sh/uv/ , then: make install cp .env.template .env set UFO ANTHROPIC API KEY and UFO OPENAI API KEY make build make init EMAIL=email@work.com make serve make init creates the workspace with you as admin and writes a CLI token to ~/.ufoctl/token . make serve listens on http://localhost:8710 . In a second terminal: mkdir -p ~/.ufo && install -m 600 ~/.ufoctl/token ~/.ufo/credentials echo http://localhost:8710 ~/.ufo/workspace ./client/target/debug/ufo "what can you do?" The agent loop and conversation run in ufoctl serve in both modes. The flag selects where the agent reads and edits files and runs commands when you start a conversation: | | ufo default | ufo --remote | |---|---|---| | File reads, edits, and commands | The connected client runs them on your machine as your user. | They run in the workspace's configured sandbox. | | Working files | Your current directory when you start ufo . | The sandbox's /workspace , separate from your current directory. | | Client connection | Keep ufo running until the turn ends; those steps need that connection. | The turn can continue after ufo exits. Use --wait SECONDS to leave early and --resume ID to read the rest. | | Execution boundary | Your machine and your user account. | The configured sandbox carrier: local on the server by default, or a carrier such as Docker or E2B. | A resumed conversation keeps the execution location it already has. See client/README.md for client options. .env refuses the bare names ANTHROPIC API KEY and OPENAI API KEY , because every tool that reads .env gets all of its values. Postgres make db starts Postgres on 127.0.0.1:5541 user, password, and database ufo . Before make init , write a ufo.toml that points at it: python make db uv run python -c 'from ufo.cli import DEFAULT CONFIG; print DEFAULT CONFIG, end="" ' \ | sed 's sqlite+aiosqlite:///ufo.db postgresql+asyncpg://ufo:ufo@127.0.0.1:5541/ufo ' ufo.toml Browser tools on macOS ufo --remote browser tools drive Chrome's headless shell from the PATH of make serve . Put its directory on the PATH, not a symlink to the binary: python npx playwright@$ uv run python -c 'from ufo.sdk.sandbox import PLAYWRIGHT VERSION; print PLAYWRIGHT VERSION ' install chromium-headless-shell PATH="