{"slug": "ufo-core-multiplayer-agentic-environs", "title": "UFO-core multiplayer agentic environs", "summary": "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.", "body_md": "\n\n```\n▗▟█▙▖     ▗▟█▙▖         ▐██▘     ▐██▌  ▐███████▘    ▄▟██████▙▄\n  █▓███     ███▓█         ▝██       ██   ▐██        ▄█▛▀     ▝▜██▄\n   ▝▀█▀▘     ▝▀█▀▘          ██       ██   ▐██       ▟█▛         ▝██▌\n                            ██       ██   ▐██▄▄▄▄▄  ██▘          ▐██\n                            ██       ██   ▐██▀▀▀▀▀  ██▌          ▐██\n        ▗▟█▙▖               ██       ██   ▐██       ▜██▖         ▟█▌\n       ▓████               ▜█▙▖   ▄▟██   ▐██        ▀██▄▖     ▄██▀\n     ▝▀█▀▘                ▀█████▛▀██▌  ▐██▖         ▀▜██████▛▀\n```\n\n**Run AI agents for your team on your own infrastructure.**\n\nThe same runtime powers [UFO's hosted service](https://ufo.ai).\n\n[Self-host](#quick-start) · [How it works](#how-it-works) · [Use hosted](#use-hosted) ·\n[Security model](#security-model) · [Extend it](#extend-it) · [Spec](https://github.com/ufo-ai/ufo-core/blob/main/spec.md) ·\n[Documentation](https://ufo.ai/docs/) · [Blog](https://ufo.ai/blog/)\n\nUFO 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.\n\n[UFO's hosted service](https://ufo.ai) runs this code. You can also run it yourself with your own\nmodel keys. The `ufo` terminal client connects to either. This repository contains the server,\nclient, SDK, and extensions.\n\n| **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. | \n| **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. | \n| **Workspace-scoped.** Every row carries its workspace id. | **Everything is an extension.** Tools, connectors, subagents, surfaces, model providers, sandbox carriers. | \n\nTo host UFO yourself, run one process on SQLite and local files, with no Docker. Install\n[uv](https://docs.astral.sh/uv/), then:\n\n```\nmake install\ncp .env.template .env   # set UFO_ANTHROPIC_API_KEY and UFO_OPENAI_API_KEY\nmake build\nmake init EMAIL=email@work.com\nmake serve\n```\n\n`make init` creates the workspace with you as admin and writes a CLI token to `~/.ufoctl/token`.\n`make serve` listens on `http://localhost:8710`. In a second terminal:\n\n```\nmkdir -p ~/.ufo && install -m 600 ~/.ufoctl/token ~/.ufo/credentials\necho http://localhost:8710 > ~/.ufo/workspace\n./client/target/debug/ufo \"what can you do?\"\n```\n\nThe agent loop and conversation run in `ufoctl serve` in both modes. The flag selects where the\nagent reads and edits files and runs commands when you start a conversation:\n\n|  | `ufo` (default) | `ufo --remote` | \n|---|---|---|\n| File reads, edits, and commands | The connected client runs them on your machine as your user. | They run in the workspace's configured sandbox. | \n| Working files | Your current directory when you start `ufo` . | The sandbox's `/workspace` , separate from your current directory. | \n| 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. | \n| 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. | \n\nA resumed conversation keeps the execution location it already has. See `client/README.md` for\nclient options.\n\n`.env` refuses the bare names `ANTHROPIC_API_KEY` and `OPENAI_API_KEY`, because every tool that\nreads `.env` gets all of its values.\n\n## Postgres\n\n`make db` starts Postgres on `127.0.0.1:5541` (user, password, and database `ufo`). Before\n`make init`, write a `ufo.toml` that points at it:\n\n``` python\nmake db\nuv run python -c 'from ufo.cli import DEFAULT_CONFIG; print(DEFAULT_CONFIG, end=\"\")' \\\n  | sed 's#sqlite+aiosqlite:///ufo.db#postgresql+asyncpg://ufo:ufo@127.0.0.1:5541/ufo#' > ufo.toml\n```\n\n## Browser tools on macOS\n\n`ufo --remote` browser tools drive Chrome's headless shell from the PATH of `make serve`. Put its\ndirectory on the PATH, not a symlink to the binary:\n\n``` python\nnpx playwright@$(uv run python -c 'from ufo.sdk.sandbox import PLAYWRIGHT_VERSION; print(PLAYWRIGHT_VERSION)') install chromium-headless-shell\nPATH=\"<dir>/chrome-headless-shell-mac-arm64:$PATH\" make serve\n```\n\n`<dir>` is the location Playwright reports (`--dry-run` prints it). Intel Macs use\n`chrome-headless-shell-mac-x64`.\n\n## Sites and the session debugger\n\n| Command | What it adds | \n|---|---|\n| `uv run ufoctl ingress` | Serves agent-built sites on subdomains of `http://ufo.localhost:8100` . Private sites need a sign-in gateway (`[serve] sign_in_path` ). | \n| `make debugger` , then`uv run ufoctl debugger` | Opens turns, steps, transcripts, and memory in a browser. Needs pnpm; run `make debugger` before`make serve` . | \n\n| Package | Owns | \n|---|---|\n| `ufo.harness` | Product-neutral agent execution: messages, model requests, tool calls, budgets, compaction, the sandbox protocol. | \n| `ufo.runtime` | The durable host: identity, authorization, turns, surfaces, accounting, the extension API. | \n| `ufo.host` | Extension discovery, built-in tools, and per-turn prompt and tool assembly. | \n\nA **pack** names the extensions a deploy activates. `assistant` is the default.\n\n[Create a workspace](https://ufo.ai/login?signup=1) with your work email. The hosted service runs\nagents and scheduled tasks on UFO's infrastructure and provides model access. Your team can\nuse the [web app](https://app.ufo.ai) or Slack without running `ufoctl serve` or setting model API\nkeys.\n\nConnect Slack during workspace setup. To use the same workspace from your terminal on macOS or Linux, install the client:\n\n```\ncurl -fsSL https://ufo.ai/ufo | sh\n```\n\nRun `ufo` and sign in. Start it from a directory to let the agent work on its files, or run\n`ufo --remote` to use the hosted sandbox. The table in [Quick start](#quick-start) compares the two\nmodes. See the [terminal guide](https://ufo.ai/docs/work/terminal/) for more detail.\n\n| Boundary | What holds it | \n|---|---|\n| Agent access | A member's account reaches an agent only through a connector grant made in chat; the granting turn is the audit record. The workspace's own keyed accounts reach only the main agent until a member grants them to another. | \n| Workspace scope | Every request, turn, and job binds one workspace, and every query filters on it. | \n| Keys | The Rust services under `servers/` hold no customer keys; every secret stays in the runtime. | \n| Sandbox | The default `local` carrier confines writes with Seatbelt or Landlock, but can read the whole host, and the kernel does not enforce its egress. For untrusted input or several workspaces, use`docker` or`e2b` . | \n\nAn extension is a Python package that imports only `ufo.sdk` and declares one entry point:\n\n```\n[project.entry-points.\"ufo.extension\"]\nacme = \"ufo_ext_acme.manifest:manifest\"\n```\n\n`extensions/sample` exercises every manifest point. `ufoctl ext search | install | remove` manages\ninstalled extensions. `spec.md` §Extension system lists each point's contract.\n\n`ufoctl bundle` freezes a deploy — image recipe, client, pinned config, lockfile — into one\nartifact. It serves a single node, an on-prem install, or a fleet; scale-out adds instances,\nPostgres, S3, and the Redis hub.\n\n`make` lists every target. `make check` runs the static gates, `make test` the parallel suite,\n`make test-one FILE=…` one file, and `make test-integration` the serial and Docker pass. `make db`\nstarts the Postgres and Redis they use. Browser tests need Chrome for Testing:\n\n``` python\nnpx playwright@$(uv run python -c 'from ufo.sdk.sandbox import PLAYWRIGHT_VERSION; print(PLAYWRIGHT_VERSION)') install chromium chromium-headless-shell\n```\n\n| Path | Contents | \n|---|---|\n| `spec.md` | The design source of truth. | \n| `AGENTS.md` | Working rules: code style, testing, what lands together. | \n| `core/src/ufo/` | `harness` ,`runtime` ,`host` ,`onboard` , and`sdk` . | \n| `extensions/` ,`packs/` | Shipped extensions and activation bundles. | \n| `client/` | The `ufo` terminal client. | \n| `servers/` ,`sandbox/` | The Rust services and the sandbox image. | \n\nRead `spec.md` before you propose a structural change, and `AGENTS.md` before you open a pull\nrequest.\n\nApache-2.0. See `LICENSE` and `NOTICE`.", "url": "https://wpnews.pro/news/ufo-core-multiplayer-agentic-environs", "canonical_source": "https://github.com/ufo-ai/ufo-core", "published_at": "2026-09-27 21:12:53+00:00", "updated_at": "2026-09-27 21:31:08.539693+00:00", "lang": "en", "topics": ["ai-agents", "ai-infrastructure", "developer-tools", "ai-tools"], "entities": ["UFO", "ufo-core", "ufoctl", "DBOS", "Postgres", "SQLite", "Redis", "E2B"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/ufo-core-multiplayer-agentic-environs", "markdown": "https://wpnews.pro/news/ufo-core-multiplayer-agentic-environs.md", "text": "https://wpnews.pro/news/ufo-core-multiplayer-agentic-environs.txt", "jsonld": "https://wpnews.pro/news/ufo-core-multiplayer-agentic-environs.jsonld"}}