Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]

### Docs
- **Managed Python runtime gets its guide, and the front doors catch up with the product.**
New `guides/python-runtime.md` covers the desktop one-click interpreter install
(ADR 0094) end to end — what needs it, both install paths, the pre-failure status
surfaces, the stale-baseline refresh, and the API. The README and docs landing now
mention archetypes (the wizard picks one, not a "persona preset"), the `execute_code`/
`coder`/`friction`/`orgchart` plugins, workflow `gate: human` approval steps, the ⌘K
palette + Fleet Room, and `/export` + `/btw`. protobanana left the core roadmap (it's a
plugin, tracked in its own repo and the directory), and the internal `plans/`/`design/`
working docs are excluded from the published site.
- **Documentation audit — stale claims fixed, missing reference material added.** The docs
landing no longer claims Discord/Google ship first-party (they're official external
installs) or that cost-v1 rides a DataPart (it's the artifact metadata map); the README
Expand Down
13 changes: 9 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ rename / release-pipeline wiring.
| Tracing | `observability/tracing.py` | Langfuse trace_session with distributed `a2a.trace` propagation and the OTel cross-context-detach filter |
| Observability | `observability/metrics.py`, `observability/audit.py` | Prometheus metrics with per-agent prefix, JSONL audit log with trace IDs |
| Output protocol | `graph/output_format.py` | `<scratch_pad>` / `<output>` parsing so the model can think without it leaking to users |
| UI | `apps/web/` (React console) | React operator console (the default `--ui console` tier + the Tauri desktop app) over the REST/A2A API — live token-by-token streaming, chat continuity across navigation (+ interrupted-stream self-heal), plugin-contributed rail views, and a PWA shell. See [ADR 0010](./docs/adr/0010-headless-setup-and-ui-tiers.md) |
| UI | `apps/web/` (React console) | React operator console (the default `--ui console` tier + the Tauri desktop app) over the REST/A2A API — live token-by-token streaming, chat continuity across navigation (+ interrupted-stream self-heal), plugin-contributed rail views, a ⌘K command palette + presence-aware Fleet Room, `/export` (save a chat to Markdown) and `/btw` (a side question answered from the chat's context, saved nowhere), and a PWA shell. See [ADR 0010](./docs/adr/0010-headless-setup-and-ui-tiers.md) |
| Release pipeline | `.github/workflows/*.yml` | Autonomous semver bumps, GHCR image push, GitHub release with filtered notes, optional Discord post |

## Quickstart — from zero to chatting in 5 minutes
Expand All @@ -74,8 +74,9 @@ uv sync && uv run python -m server # core, serves the React console (--
# python -m server

# 3. Open the wizard — pick your endpoint, pick a model, name the
# agent, pick a persona preset, hit Launch. The console chat appears
# once setup completes.
# agent, pick an archetype (Basic, Cowork, Project Manager, Design System
# Engineer — or any installed bundle that declares one), hit Launch. The
# console chat appears once setup completes.
open http://localhost:7870
```

Expand Down Expand Up @@ -172,9 +173,13 @@ First-party plugins ship in `plugins/` — `delegates` is a built-in, `notes`, `
| [`artifact`](./plugins/artifact/) | tools · view · skill | **On by default** — generative UI; `show_artifact` renders charts, diagrams, Mermaid, Markdown, or live React into a sandboxed panel ([ADR 0038](./docs/adr/0038-generative-ui-artifacts-two-mode.md)) |
| [`craft`](./plugins/craft/) | skills · subagent | **On by default** — engineering rituals as user-only slash commands (`/grill`, `/standup`, `/code-review`, `/writing-skills`) + the `skill_writer` subagent; prompt-only |
| [`plugin-devkit`](./plugins/plugin-devkit/) | tool · subagent · skill · workflow · view | The authoring kit + reference plugin — the agent can scaffold and build its own plugins |
| [`workflows`](./plugins/workflows/) | tools | Declarative multi-step subagent workflows (DAG recipes) |
| [`workflows`](./plugins/workflows/) | tools | Declarative multi-step subagent workflows (DAG recipes) — a step can carry `gate: human`, pausing for operator approval before it runs |
| [`telegram`](./plugins/telegram/) | surface | Run the agent as a Telegram bot — the reference [communication plugin](./docs/guides/communication-plugins.md) |
| [`github`](./plugins/github/) | tools | Read-only GitHub tools over the `gh` CLI |
| [`execute_code`](./plugins/execute_code/) | tool · settings | A Python interpreter the agent runs code in — on desktop, provision the one-click [managed runtime](./docs/guides/python-runtime.md) and the document skills (docx · xlsx · pptx · pdf) light up |
| [`coder`](./plugins/coder/) | tool · settings | Verifier-grounded code-solve (`coder_solve`) — an execution-grounded search ladder for testable coding tasks ([guide](./docs/guides/coder.md)) |
| [`friction`](./plugins/friction/) | tools | Friction log — the agent records its own missing/awkward tooling and confusing errors, so you can fix the sharp edges |
| [`orgchart`](./plugins/orgchart/) | view | Live diagram of the agent fleet — every agent a node, delegation edges drawn as they happen |
| [`hello`](./plugins/hello/) | tool · skill · view | Minimal example — copy it to start your own |

Integrations like **Discord**, **Slack** (Socket Mode `ChatAdapter`) and **Google**
Expand Down
3 changes: 2 additions & 1 deletion ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ In-progress ref points at a closed issue — rotate shipped work into `## Shippe

## In progress

- **Image generation plugin (protobanana)** — generate → look → refine image workflows on the new media platform: tools save artifacts the chat renders inline, and the vision model critiques its own output.
- **Design-system conformance & full-token theming** — the console-vs-DS audit's structural tier, and a lossless `--pl-*` theme bridge so plugin views and artifacts stop approximating the console look. (#2072, #2225)


## Shipped

Expand Down
3 changes: 2 additions & 1 deletion docs/.vitepress/config.mts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ export default defineConfig({

// docs/dev/ is the team's internal engineering area (handoffs + notes) — it
// lives in the repo (committed, shared) but is NOT part of the published site.
srcExclude: ["dev/**"],
srcExclude: ["dev/**", "design/**"],

head: [
["link", { rel: "icon", type: "image/svg+xml", href: `${base}favicon.svg` }],
Expand Down Expand Up @@ -142,6 +142,7 @@ export default defineConfig({
collapsed: false,
items: [
{ text: "Operator console (React/Tauri)", link: "/guides/react-tauri-ui" },
{ text: "Managed Python runtime (desktop)", link: "/guides/python-runtime" },
{ text: "Command palette (⌘K)", link: "/guides/command-palette" },
{ text: "Developer flags (gate pre-release features)", link: "/guides/developer-flags" },
{ text: "Access from your phone (LAN / Tailscale)", link: "/guides/phone-access" },
Expand Down
1 change: 1 addition & 0 deletions docs/guides/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ Surface the agent to people — the operator console, or no UI at all.
| Guide | When to read |
|---|---|
| [Operator console (React/Tauri)](/guides/react-tauri-ui) | You want the multi-chat React console and to package it for desktop |
| [Managed Python runtime (desktop)](/guides/python-runtime) | You're on the desktop app and `execute_code` / the document skills (docx · xlsx · pptx · pdf) need their one-click interpreter install |
| [Command palette (⌘K)](/guides/command-palette) | You want the fast keyboard path to jump between surfaces + inline chat |
| [Developer flags](/guides/developer-flags) | You want to merge a half-built feature behind a tiered flag (off/dev/beta/on) instead of a long-lived branch |
| [Access from your phone (LAN / Tailscale)](/guides/phone-access) | You want to drive the agent from your phone — installable PWA over your LAN or tailnet, add-to-home-screen |
Expand Down
74 changes: 74 additions & 0 deletions docs/guides/python-runtime.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Managed Python runtime (desktop)

On the **packaged desktop app** the server is a frozen binary — `sys.executable` *is*
protoAgent, not a Python interpreter — so [`execute_code`](/guides/plugins) has nothing
to run child code with. The **managed Python runtime**
([ADR 0094](../adr/0094-managed-python-runtime.md)) fixes that: a one-click, consented
download of a pinned CPython that the desktop app owns, plus the **document baseline**
([ADR 0092](../adr/0092-desktop-document-baseline-and-versioned-file-artifacts.md)) —
the libraries that let document skills produce real `.docx` / `.xlsx` / `.pptx` / `.pdf`
files.

**Source runs never need this.** A `python -m server` / `uv run` instance spawns its own
interpreter; every status surface reports `needed: false` and stays hidden. This page is
desktop-only behavior.

## What needs it

- **`execute_code`** — the in-tree Python-interpreter plugin. On a frozen build its tool
registers either way, but calls return an actionable "runtime isn't installed yet"
notice until you provision.
- **Everything routed through `execute_code`** — above all the **Cowork document skills**
(docx / xlsx / pptx / reportlab-PDF). This is why the Cowork archetype declares
`requires: [python_runtime]` and the new-agent picker warns at choose-time
(see [Fleet § archetypes](/guides/fleet)).

## Install it (once per machine)

Two equivalent paths — both fetch a **hash-verified CPython 3.12.13** (the frozen
sidecar's own interpreter line, ~35 MB) and then pip-install the document baseline
(`apps/desktop/sidecar/requirements-docs.txt`) into the runtime's own site-packages:

- **Console** — **Settings ▸ Tools** shows an install card while the runtime is missing:
one click, live progress (download → document libraries), done. The card renders
nothing once the runtime is present and current.
- **CLI** — `protoagent runtime install-python` (and `protoagent runtime list` shows
`python: not provisioned — …` / version + baseline state).

The download is a deliberate consent point — ~130 MB on disk after the baseline lands —
so nothing auto-provisions.

## How you find out before something fails

- **Settings nav badge** — the **Tools** entry carries a warning dot whenever the
runtime needs attention (not provisioned, stale baseline, failed install; pulsing
while an install runs), so the state is visible while browsing, not mid-task.
- **Archetype choose-time warning** — picking an archetype that declares
`requires: [python_runtime]` (Cowork) shows a notice under the card grid when this
host's runtime isn't ready.
- **Actionable tool copy** — an `execute_code` call on an unprovisioned build returns
the fix ("Settings ▸ Tools, or `protoagent runtime install-python`") instead of a
bare error.

## The baseline can go stale

The runtime records a hash of the `requirements-docs.txt` it installed. When a release
changes the document pins, the status flips to `baseline_current: false` and the
surfaces above offer an **update** (re-runs the pip phase only) — the runtime itself
stays put.

## Status & API

`GET /api/runtime/python` returns `{python, install}`:

| Key | Meaning |
|---|---|
| `needed` | this process would use it (frozen builds only) |
| `managed` / `managed_version` / `exe` | a working install is present, its version, its interpreter path |
| `baseline_installed` / `baseline_current` | document-library state vs the current pins |
| `supported` / `target_version` | can this platform/arch provision, and what an install fetches |

`POST /api/runtime/python/install` starts the provisioning in the background (`202`;
poll the GET for phase + percent). Unsupported platform/arch combinations return the
banner state instead — `execute_code` (and the skills behind it) can't run on that
desktop build.
4 changes: 4 additions & 0 deletions docs/guides/react-tauri-ui.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,10 @@ parallel with engine startup** (#2203): the in-app UpdateNotice pulls that resul
it mounts and opens the changelog modal if a newer build exists — so the prompt lands before
the engine finishes booting, then the normal 10s-settle + 6h re-check cycle takes over.

On a frozen build, `execute_code` (and the document skills behind it) need the one-click
[managed Python runtime](/guides/python-runtime) — Settings ▸ Tools shows the install card
until it's provisioned.

On macOS, `spawn_sidecar` augments the sidecar's `PATH` with the user's login-shell `PATH`
(via `$SHELL -ilc`, plus the Homebrew/local fallbacks) before spawning. A Finder/Dock launch
otherwise inherits only `launchd`'s minimal `PATH`, so `npx`/`node`/ACP coding-agent adapters
Expand Down
2 changes: 2 additions & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ features:
details: DuckDuckGo web search, URL fetch, safe calculator, and IANA-timezone clock — zero API keys, enough to demo a real research loop on a fresh clone.
- title: A lean core, opt-in plugins
details: Start small; add tools, skills, subagents, workflows, FastAPI routes, console dashboards, memory backends, and managed MCP servers as git-URL plugins (python -m server plugin install, pinned in plugins.lock) — without touching core. Telegram and the plugin-devkit ship in-tree; Discord, Google (Gmail+Calendar), and more install as official external plugins from the directory.
- title: Archetypes + real documents
details: Spin up agents from starter types — Cowork, Project Manager, Design System Engineer, or any bundle that declares one. Cowork's document skills produce real .docx/.xlsx/.pptx/.pdf via execute_code and the one-click managed Python runtime on desktop.
- title: Release pipeline
details: Dispatch prepare-release → semver bump PR → merge → tag → GHCR image → GitHub release → Discord embed. Flip the RELEASE_ENABLED repo variable to enable it on a fork.
---
Expand Down
4 changes: 4 additions & 0 deletions plugins/docs/nav.json
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,10 @@
"path": "guides/react-tauri-ui.md",
"title": "Operator console (React/Tauri)"
},
{
"path": "guides/python-runtime.md",
"title": "Managed Python runtime (desktop)"
},
{
"path": "guides/command-palette.md",
"title": "Command palette (⌘K)"
Expand Down
9 changes: 6 additions & 3 deletions sites/marketing/data/roadmap.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,12 @@
"status": "In progress",
"items": [
{
"title": "Image generation plugin (protobanana)",
"detail": "generate → look → refine image workflows on the new media platform: tools save artifacts the chat renders inline, and the vision model critiques its own output.",
"refs": []
"title": "Design-system conformance & full-token theming",
"detail": "the console-vs-DS audit's structural tier, and a lossless --pl-* theme bridge so plugin views and artifacts stop approximating the console look.",
"refs": [
"#2072",
"#2225"
]
}
]
},
Expand Down
Loading