> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qredence.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Fleet Pi changelog

> Weekly release notes for Fleet Pi covering new features, runtime updates, bug fixes, and security patches.

Track what is new in Fleet Pi. For an introduction to the product, see [Fleet Pi](https://docs.qredence.ai/fleet-pi/introduction.md). For other products, see [all changelogs](https://docs.qredence.ai/changelog/overview.md).

**November 2, 2026**

## Week of November 2: Fleet Pi

### New features

**Interactive generative UI** OpenUI Lang 1.1 adds `Select`, `Switch`, and `Modal` components. `Input`, `Select`, and `Switch` bind to reactive `$variables`, and the `@Count`, `@Sum`, `@Avg`, and `@Filter` built-ins compute values from state. See [Generative UI](https://docs.qredence.ai/fleet-pi/generative-ui.md).

### Updates

* **Oxc toolchain.** `pnpm lint` runs Oxlint through Vite+, `pnpm format` runs Oxfmt, and CI checks formatting with `pnpm format:check`. ESLint and Prettier are no longer used. TypeScript moves to 7. See [Quickstart](https://docs.qredence.ai/fleet-pi/quickstart.md) and [Project structure](https://docs.qredence.ai/fleet-pi/project-structure.md).
* **CircleCI deploy lane.** CircleCI mirrors the validation gates and adds an approval-gated production deploy from `main`, plus a manual rollback pipeline. GitHub Actions remains the automatic deployer. See [Runbooks](https://docs.qredence.ai/fleet-pi/runbooks.md).

**October 26, 2026**

## Week of October 26 — Fleet Pi

### Updates

* **Neon Function chat host retired.** Chat now runs only on the Cloudflare Worker. `VITE_FLEET_PI_CHAT_RUNTIME_URL` and `FLEET_PI_CHAT_RUNTIME_CORS_ORIGINS` are removed. See [Configuration](https://docs.qredence.ai/fleet-pi/configuration.md).

**October 19, 2026**

## Week of October 19 — Fleet Pi

### Updates

* **Plan mode blocks non-read-only commands on hosted turns.** Hosted `bash` calls in Plan mode must pass the read-only command check. See [Plan mode](https://docs.qredence.ai/fleet-pi/chat-modes.md#plan-mode).
* **Hosted file tools stay in the workspace.** Hosted `write` and `edit` refuse paths outside the workspace. In Harness mode, commands that touch `agent-workspace/system/` also wait for confirmation. See [Harness mode](https://docs.qredence.ai/fleet-pi/chat-modes.md#harness-mode).
* **Deleted hosted sessions stay deleted.** A turn sent to a deleted hosted session returns `404` with `Session not found`. See [Hosted and local sessions](https://docs.qredence.ai/fleet-pi/api-reference.md#hosted-and-local-sessions).
* **Steering stays in its conversation.** While a hosted turn runs, steer and follow-up prompts join it only when they target the same conversation. See [Hosted chat on Cloudflare Workers](https://docs.qredence.ai/fleet-pi/architecture.md#hosted-chat-on-cloudflare-workers).
* **Stricter provider URL checks.** Custom provider base URLs that use IPv4-mapped IPv6 literals for loopback, private or metadata addresses are rejected. See [LLM providers](https://docs.qredence.ai/fleet-pi/configuration.md#llm-providers).

**October 12, 2026**

## Week of October 12 — Fleet Pi

### New features

**Hosted Agent chat runs on your Pi Durable Object** On the Cloudflare deployment, new Agent chat sessions now stream from the signed-in user's Pi Durable Object (`UserPiDurable`, bound as `USER_PI_DURABLE`). The object's SQLite storage is the hosted transcript, and hosted session ids start with `durable:`. Neon keeps auth, settings, and an optional projection, and session JSONL is no longer copied to object storage. Sessions that still send a `sessionFile` keep the legacy path. See [Hosted chat on Cloudflare Workers](https://docs.qredence.ai/fleet-pi/architecture.md#hosted-chat-on-cloudflare-workers) and [Hosted and local sessions](https://docs.qredence.ai/fleet-pi/api-reference.md#hosted-and-local-sessions).

**Fork a hosted conversation** `POST /api/chat/fork` forks a hosted conversation from its latest entry. The fork keeps the parent conversation's model. See the [HTTP API reference](https://docs.qredence.ai/fleet-pi/api-reference.md).

**Hosted Plan, Harness, and agent loop settings** Hosted turns now apply Plan mode, Harness mode, and the **Settings > Agent loop** values you save, including `codemode` and `mcpServers`. Hosted chat accepts `https://` MCP servers only. In Harness mode, a `write`, `edit`, or `bash` call that targets `system/` or `evals/` waits for confirmation. See [Agent loop settings](https://docs.qredence.ai/fleet-pi/configuration.md#agent-loop-settings) and [Harness mode](https://docs.qredence.ai/fleet-pi/chat-modes.md#harness-mode).

**Discover models for custom providers** **Add models** now loads the model list from a custom or OpenAI Chat Completions provider's base URL and registers only the models you enable. You can save a custom provider without model ids and fill them in from discovery later. See [`POST /api/chat/models/discover`](https://docs.qredence.ai/fleet-pi/api-reference) and [Named OpenAI-compatible instances](https://docs.qredence.ai/fleet-pi/configuration.md#named-openai-compatible-instances).

### Updates

* **Model switches apply to resumed conversations.** Each hosted turn sets the conversation's model, so switching models on an existing session no longer fails. A changed API key, base URL, or API reopens the harness. See [`POST /api/chat`](https://docs.qredence.ai/fleet-pi/api-reference#hosted-and-local-sessions).
* **Account erasure reaches hosted transcripts.** `DELETE /api/chat/account` now also clears your Durable Object storage. Deleting a single hosted session only hides it. See [Hosted chat on Cloudflare Workers](https://docs.qredence.ai/fleet-pi/architecture.md#hosted-chat-on-cloudflare-workers).
* **Gateway token stays on Neon.** Fleet Pi stops a turn before sending it when a Neon AI Gateway token would go to a non-Neon endpoint, and the error names the provider. See [LLM providers](https://docs.qredence.ai/fleet-pi/configuration.md#llm-providers).
* **Model picker shows the models you added.** The composer lists the OpenAI Chat Completions slot, your custom provider models, and built-in provider models you explicitly enabled. Hosted turns use the saved BYOK credentials for those built-in providers. See [LLM providers](https://docs.qredence.ai/fleet-pi/configuration.md#llm-providers).
* **Tighter route authentication.** `GET /api/chat/settings`, `GET /api/chat/providers`, and `/api/sandbox/settings` now go through the authenticated chat request gate. See [Authentication](https://docs.qredence.ai/fleet-pi/api-reference.md#authentication).

**October 5, 2026**

## Week of October 5 — Fleet Pi

Fleet Pi had no user-facing merges from August 6 to October 7. This entry covers the work that landed from October 8 to October 11.

### New features

**Deploy on Cloudflare Workers** The Fleet Pi web app now runs on Cloudflare Workers, and Cloudflare is the only supported deploy host. `FLEET_PI_DEPLOYMENT=cloudflare` switches Fleet Pi to its hosted, fail-closed, Postgres-backed code paths. Build and deploy from `apps/web` with `pnpm build:cloudflare` and `pnpm deploy:cloudflare`. See [Cloudflare Workers deployment](https://docs.qredence.ai/fleet-pi/configuration.md#cloudflare-workers-deployment-trust-zones).

**Pi SDK 1.1** Fleet Pi moves to `@earendil-works/pi-*` 1.1.0. The `azure-openai-responses` provider is now `azure`, and saved settings migrate automatically. The system prompt now describes the Fleet Pi web workspace instead of Pi's terminal app, and the model sees the Daytona sandbox as its working directory. See [Architecture](https://docs.qredence.ai/fleet-pi/architecture.md).

**Chat without workspace tools** On a hosted deployment without a Daytona key, chat still works: the model runs without file, shell, search, or workspace tools. The first `start` frame carries a `workspace` field so the client can explain why. See [Workspace status](https://docs.qredence.ai/fleet-pi/api-reference.md#workspace-status).

### Updates

* **Default model resolved on the server.** A new session that arrives without a model now gets the configured default, then the first model with credentials. With no credentials, the turn fails with a clear error. The composer also holds your first message until the model picker loads. See [LLM providers](https://docs.qredence.ai/fleet-pi/configuration.md#llm-providers).
* **Explicit aborted state.** Every turn now ends with a terminal `done` frame. A stopped turn carries `stopReason: "aborted"` with whatever streamed before the stop. See [Stream events](https://docs.qredence.ai/fleet-pi/api-reference.md#stream-events).
* **OpenAI-compatible variables clarified.** `OPENAI_API_KEY` always targets `api.openai.com`. Use `OPENAI_CHAT_COMPLETIONS_API_KEY`, `OPENAI_CHAT_COMPLETIONS_BASE_URL`, and `OPENAI_CHAT_COMPLETIONS_MODEL` for gateways and other compatible endpoints. These apply to local runs only. See [LLM providers](https://docs.qredence.ai/fleet-pi/configuration.md#llm-providers).
* **Configurable migration role.** `chat:migrate` and `auth:migrate` grant to the role named by `FLEET_PI_APP_ROLE` (default `fleet_pi_app`). See [Chat session mirror](https://docs.qredence.ai/fleet-pi/configuration.md#chat-session-mirror-neon-postgres).
* **Owner columns use UUIDs.** `chat:migrate` converts `pi_*` user columns to `uuid` with a foreign key to `neon_auth.user`. Rows without a matching Neon Auth user are copied to `pi_orphan_quarantine` first. See [Chat session mirror](https://docs.qredence.ai/fleet-pi/runbooks.md#chat-session-mirror-neon-postgres).
* **Signed Daytona webhooks.** `POST /api/webhooks/daytona` now verifies an HMAC-SHA256 of the raw body keyed by `DAYTONA_WEBHOOK_SECRET`. Workspace routes return `403` with a readable message when no Daytona credential is set. See the [HTTP API reference](https://docs.qredence.ai/fleet-pi/api-reference.md).
* **Steadier Daytona startup.** Fleet Pi waits for a new user volume to be ready before mounting it, and a failed warm-up no longer crashes the server. See [Daytona-backed user sandboxes](https://docs.qredence.ai/fleet-pi/configuration.md#daytona-backed-user-sandboxes).

**August 1, 2026**

## Fleet Pi — Named OpenAI-compatible instances

### New features

**Multiple named OpenAI Chat Completions providers per user** Each user can now save several OpenAI-compatible Chat Completions endpoints in parallel — for example one instance for OpenCode Zen and another for Nebius — instead of overwriting a single BYOK slot. Each instance carries its own display name, base URL, model ID, and API key, and shows up as a distinct row in the config panel and the model picker. Deployed chat encrypts them in Postgres; local anonymous chat persists them in a gitignored `.fleet/providers.json` file store. The default OCC slot still exists and still takes precedence over the platform Neon AI Gateway. See [Named OpenAI-compatible instances](https://docs.qredence.ai/fleet-pi/configuration.md#named-openai-compatible-instances).

### Updates

* **Named instances work in local anonymous chat.** Fleet Pi now picks the storage backend at runtime: Postgres `pi_user_providers` for signed-in deployed users, and a per-project `.fleet/providers.json` file store for local anonymous chat. OCC-family instances may point at `http://localhost` on local dev surfaces (useful for Ollama or LM Studio); deployed chat keeps `https://` enforced at both save time and runtime registration.
* **Broken named OCC instances surface as "Not configured".** If a named instance's stored API key can't be decrypted or its base URL fails the safety checks, Fleet Pi now skips registration with a warning diagnostic and marks the row as Not configured in Settings — the model picker no longer advertises endpoints that would fail at request time. See [Named OpenAI-compatible instances](https://docs.qredence.ai/fleet-pi/configuration.md#named-openai-compatible-instances).
* **Daytona sandbox sync stays on the default OCC slot.** Additional named OpenAI-compatible instances live in the chat runtime's provider store and are not injected into the user's Daytona sandbox. Sandbox tool calls needing one of those endpoints go through the chat runtime, not directly from the container. See [Provider credentials in the sandbox](https://docs.qredence.ai/fleet-pi/configuration.md#provider-credentials-in-the-sandbox).

**July 31, 2026**

## Week of July 27 — Fleet Pi

### New features

**Neon AI Gateway as the default authenticated chat backend** Signed-in users on deployed environments now get working chat immediately after login — no BYOK required. Fleet Pi routes authenticated chat through the Neon AI Gateway as the platform OpenAI-Chat-Completions backend, with `qwen35-122b-a10b` enabled as the primary model and `gpt-oss-120b` also available. Local dev and anonymous chat still default to Google Gemini (`gemini-3.5-flash`). See [Neon AI Gateway](https://docs.qredence.ai/fleet-pi/configuration.md#neon-ai-gateway-default-authenticated-chat).

**BYOK takes precedence over the platform Gateway** Users who save their own OpenAI-Chat-Completions provider in the in-app config panel continue to hit their own endpoint. Legacy OCC records are only migrated to the platform Gateway shape when the Gateway is active and the user has not brought their own credentials. See [BYOK precedence](https://docs.qredence.ai/fleet-pi/configuration.md#byok-precedence).

### Updates

* **`*.neon.tech` host allowlist on the Gateway URL.** Fleet Pi normalizes the Gateway base URL to a single `/v1` suffix and rejects any host that does not resolve to `*.neon.tech`, so a misconfigured variable can never route chat to an untrusted origin. See [URL shape](https://docs.qredence.ai/fleet-pi/configuration.md#url-shape).
* **Gateway credentials scrubbed from the process environment.** `NEON_AI_GATEWAY_BASE_URL` and `NEON_AI_GATEWAY_TOKEN` are captured into process memory once at boot and then deleted from `process.env`, so agent shell tools cannot read the token by inspecting environment variables at runtime.
* **Tightened deployment readiness gate.** `pnpm verify-deployment-readiness` now validates that `NEON_AI_GATEWAY_BASE_URL` is a well-formed, allowlisted Gateway URL — not just present. Deploys fail closed on a malformed or off-allowlist value instead of silently shipping broken chat. See [Readiness gate](https://docs.qredence.ai/fleet-pi/configuration.md#readiness-gate).

**May 19, 2026**

## Week of May 12 – May 19

### New features

**Fleet Pi — Daytona sandbox integration** Pi chat modes can now invoke Daytona sandbox tools end-to-end, with webhook and client support added to the web surface and improved startup memory recall. See [Chat modes](https://docs.qredence.ai/fleet-pi/chat-modes.md) and [Runtime SDK integration](https://docs.qredence.ai/fleet-pi/runtime-sdk-integration.md).

**June 11, 2026**

## Week of June 11 — Fleet Pi 0.5.0

### New features

**hax-design consolidation** `packages/ui` is renamed to `packages/hax-design` and is now the single source of truth for agent-elements, OpenUI, Fleet Pi chat surfaces, shadcn primitives, and shared Pi protocol types. `apps/web` routes are thinner, and the config panel is split into focused modules. Forks must update imports from `@workspace/ui` to `@workspace/hax-design`. See [Project structure](https://docs.qredence.ai/fleet-pi/project-structure.md).

**Google Gemini as the default LLM provider** The default model is now `gemini-3.5-flash` through Pi's `google` provider. Extensions receive mode-aware context (`ctx.mode`, `getSystemPromptOptions()`). Amazon Bedrock remains available via AWS credentials — set provider and model in `.pi/settings.json` or environment variables if you need it. See [Configuration](https://docs.qredence.ai/fleet-pi/configuration.md).

**Neon Postgres session mirror** Setting `FLEET_PI_CHAT_DATABASE_URL` mirrors Pi session entries, run events, tool executions, and file mutations into Neon tables prefixed with `pi_`. JSONL remains the source of truth and mirror failures never break streaming. Apply migrations with `pnpm chat:migrate`. See [Configuration](https://docs.qredence.ai/fleet-pi/configuration.md) and [Runtime SDK integration](https://docs.qredence.ai/fleet-pi/runtime-sdk-integration.md).

**Web access tools in Agent mode** The new `pi-web-access` package wires `web_search`, `fetch_content`, and `code_search` into Agent mode end-to-end. See [Chat modes](https://docs.qredence.ai/fleet-pi/chat-modes.md).

### Updates

* **Memory recall improvements.** Workspace memory content is now enriched and retrieval is prompt-aware for better long-session context.
* **Question bar UX.** New `usePendingQuestionBar` hook and `suppressQuestionTool` prop on `AgentChat` for cleaner Plan-mode question handling.
* **Security and reliability.** Critical and high-severity issues fixed and vulnerable transitive dependencies patched.
* **Documentation.** Comprehensive docs added for the UI package, configuration, data models, dependencies, and security posture.

### Breaking changes

* Import path rename: `@workspace/ui` → `@workspace/hax-design` (package directory: `packages/ui` → `packages/hax-design`).
* Default LLM provider changed from Amazon Bedrock to Google Gemini.
* New optional environment variables for the chat mirror: `FLEET_PI_CHAT_DATABASE_URL`, `FLEET_PI_CHAT_MIGRATION_DATABASE_URL`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.