From 5cfe4de66a334aa7ac2b93df5f646184c3572f6f Mon Sep 17 00:00:00 2001 From: Markus Neusinger <2921697+MarkusNeusinger@users.noreply.github.com> Date: Mon, 2 Nov 2026 22:35:51 +0100 Subject: [PATCH 1/3] docs: the README says the agent chat is open to every visitor Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8 --- README.md | 4 ++-- changelog.d/readme-agent-live.md | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 changelog.d/readme-agent-live.md diff --git a/README.md b/README.md index adc975a2bf..78d5cb471f 100644 --- a/README.md +++ b/README.md @@ -91,9 +91,9 @@ For the labels, retries, and every workflow, see [Workflows](docs/workflows/over ## Use with my data (agent chat) -> **Status:** experimental, rolling out. It isn't open to every visitor yet. +> **Status:** experimental, open to every visitor since 2 November 2026. -On a plot page, you paste your own data. An agent adapts that plot's catalogue code to your data, renders it in a +On a plot page, choose **use with my data** and paste your own data. An agent adapts that plot's catalogue code to your data, renders it in a sandbox, reviews the render against the catalogue's rubric, repairs it once if needed, and returns the image and the code. diff --git a/changelog.d/readme-agent-live.md b/changelog.d/readme-agent-live.md new file mode 100644 index 0000000000..e15ddd5cda --- /dev/null +++ b/changelog.d/readme-agent-live.md @@ -0,0 +1,3 @@ +### Changed + +- **The README says the agent chat is open**: since 2 November 2026 every visitor can use "Use with my data", labelled experimental, so the status line no longer says it is rolling out. From 2d12d5ff755a019c82ced2e3235c6d737f5c338b Mon Sep 17 00:00:00 2001 From: Markus Neusinger <2921697+MarkusNeusinger@users.noreply.github.com> Date: Mon, 2 Nov 2026 22:36:03 +0100 Subject: [PATCH 2/3] docs(changelog): add the PR reference Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8 --- changelog.d/readme-agent-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog.d/readme-agent-live.md b/changelog.d/readme-agent-live.md index e15ddd5cda..70a9ac8218 100644 --- a/changelog.d/readme-agent-live.md +++ b/changelog.d/readme-agent-live.md @@ -1,3 +1,3 @@ ### Changed -- **The README says the agent chat is open**: since 2 November 2026 every visitor can use "Use with my data", labelled experimental, so the status line no longer says it is rolling out. +- **The README says the agent chat is open**: since 2 November 2026 every visitor can use "Use with my data", labelled experimental, so the status line no longer says it is rolling out. (#12537) From de1fba14a8f3a2faeed5121629911dff1ea463a6 Mon Sep 17 00:00:00 2001 From: Markus Neusinger <2921697+MarkusNeusinger@users.noreply.github.com> Date: Mon, 2 Nov 2026 22:46:40 +0100 Subject: [PATCH 3/3] docs: stop calling the agent chat admin-only now that the public lane is open Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8 --- changelog.d/readme-agent-live.md | 2 +- docs/concepts/vision.md | 2 +- docs/reference/agent-telemetry.md | 2 +- docs/reference/database.md | 8 ++++---- docs/reference/plausible.md | 2 +- docs/reference/repository.md | 4 ++-- docs/reference/style-guide.md | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/changelog.d/readme-agent-live.md b/changelog.d/readme-agent-live.md index 70a9ac8218..05f9a77d31 100644 --- a/changelog.d/readme-agent-live.md +++ b/changelog.d/readme-agent-live.md @@ -1,3 +1,3 @@ ### Changed -- **The README says the agent chat is open**: since 2 November 2026 every visitor can use "Use with my data", labelled experimental, so the status line no longer says it is rolling out. (#12537) +- **The README and the docs say the agent chat is open**: since 2 November 2026 every visitor can use "Use with my data", labelled experimental. The README's status line no longer says it is rolling out, and the vision, repository, database, style-guide, Plausible and telemetry docs no longer call it admin-only. (#12537) diff --git a/docs/concepts/vision.md b/docs/concepts/vision.md index 65948197f7..741dbff021 100644 --- a/docs/concepts/vision.md +++ b/docs/concepts/vision.md @@ -38,7 +38,7 @@ anyplot is different: **AI curates and maintains, humans discover and choose.** 2. **AI Code Generation**: Automatically creates implementations for all major libraries 3. **Continuous Quality**: AI validates, tests, and improves examples constantly 4. **Smart Discovery**: Typo-tolerant search over tags and titles + dynamic tagging + a similarity map of the catalogue -5. **Your Data**: Paste your data on a plot page, and an agent adapts that plot's code to it (experimental, rolling out) +5. **Your Data**: Paste your data on a plot page, and an agent adapts that plot's code to it (experimental) ### What makes it different diff --git a/docs/reference/agent-telemetry.md b/docs/reference/agent-telemetry.md index 5483de2f38..2daec18dee 100644 --- a/docs/reference/agent-telemetry.md +++ b/docs/reference/agent-telemetry.md @@ -6,7 +6,7 @@ > deployed, and reach the typed views after you create the views again (step 6 of > [Set up the BigQuery side](#set-up-the-bigquery-side)). -The admin-only agent chat ("Use with my data") records how it is used, without recording what anyone +The agent chat ("Use with my data") records how it is used, without recording what anyone used it for. This page lists what is recorded, where it goes, how long it stays, and how to read it. ## What is recorded, and what never is diff --git a/docs/reference/database.md b/docs/reference/database.md index b4e7d2c6e1..202b73b1e5 100644 --- a/docs/reference/database.md +++ b/docs/reference/database.md @@ -37,7 +37,7 @@ anyplot uses **PostgreSQL** (Cloud SQL) as the primary data store for the websit **Feedback:** - Site feedback from the feedback widget and the plot votes (`feedback`), with its triage status -- One row per quick-feedback case of the admin-only agent chat (`agent_feedback`): the reaction, the message, hashed user and session ids, the run's metadata, and the triage state (status, tags, expected outcome, promotion, supersession); never the conversation, code, images or data +- One row per quick-feedback case of the agent chat (`agent_feedback`): the reaction, the message, hashed user and session ids, the run's metadata, and the triage state (status, tags, expected outcome, promotion, supersession); never the conversation, code, images or data **Other:** - Library information (name, version, docs URL) @@ -190,7 +190,7 @@ CREATE INDEX ix_feedback_created_at ON feedback (created_at DESC); CREATE INDEX ix_feedback_ip_hash_created_at ON feedback (ip_hash, created_at DESC); CREATE INDEX ix_feedback_spec_library ON feedback (spec_id, library_id); --- Quick-feedback cases of the admin-only agent chat (written by the API) +-- Quick-feedback cases of the agent chat (written by the API) CREATE TABLE agent_feedback ( id VARCHAR(25) PRIMARY KEY, -- the case id: "20261012T143005Z-1a2b3c4d" @@ -333,7 +333,7 @@ INSERT INTO libraries (id, name, version, documentation_url) VALUES ### `agent_feedback` -**Purpose**: Index the quick-feedback cases of the admin-only agent chat and hold their triage state. The feedback route `POST /debug/agent/sessions/{sid}/feedback` inserts one row per case right after the case's files are in `gs://anyplot-agent-cases`, and the "agent cases" section of `/debug` reads and updates it through the case routes ([Feedback triage](api.md#feedback-triage)). The row is the source of truth for the triage; the bucket holds the files until its lifecycle rule deletes them after 180 days, and the row stays, so the class statistics outlive the files. Created by migration `b4e7a9c2d6f1`. +**Purpose**: Index the quick-feedback cases of the agent chat and hold their triage state. The feedback route (`POST /debug/agent/sessions/{sid}/feedback` for admins, its public twin under `/agent/`) inserts one row per case right after the case's files are in `gs://anyplot-agent-cases`, and the "agent cases" section of `/debug` reads and updates it through the case routes ([Feedback triage](api.md#feedback-triage)). The row is the source of truth for the triage; the bucket holds the files until its lifecycle rule deletes them after 180 days, and the row stays, so the class statistics outlive the files. Created by migration `b4e7a9c2d6f1`. **Key Fields**: - `id` - The bucket's case id: the UTC time in ISO 8601 basic format and eight random hex digits, so ids sort by time and link a row to its files under `cases//` @@ -652,7 +652,7 @@ await session.execute(f"SELECT * FROM specs WHERE id = '{spec_id}'") ### Data privacy -- No user data stored permanently, with one exception: the quick-feedback cases of the admin-only agent chat. When an admin submits one, the case (the conversation, the code, the images, the message, a hashed user id, and `data.csv` when the box is ticked) is stored in the private bucket `gs://anyplot-agent-cases` until the lifecycle rule deletes it after 180 days. Its row in `agent_feedback` holds the message and the hashed ids, but no conversation, code, images or data, and stays +- No user data stored permanently, with one exception: the quick-feedback cases of the agent chat. When someone submits one, the case (the conversation, the code, the images, the message, a hashed user id, and `data.csv` when the box is ticked) is stored in the private bucket `gs://anyplot-agent-cases` until the lifecycle rule deletes it after 180 days. Its row in `agent_feedback` holds the message and the hashed ids, but no conversation, code, images or data, and stays - Anonymous session IDs only - Usage data auto-deleted after 90 days - GDPR-compliant (no personal data) diff --git a/docs/reference/plausible.md b/docs/reference/plausible.md index 9d7203b0ff..ac1e5b035e 100644 --- a/docs/reference/plausible.md +++ b/docs/reference/plausible.md @@ -753,7 +753,7 @@ home # HomePage grid view (client) or og:image home endpoint (server) plots # PlotsPage (server og:image only) spec_overview # SpecPage showing all libraries spec_detail # SpecPage showing single library -agent_chat # Admin-only agent chat result card (copy_code only) +agent_chat # Agent chat result card (copy_code only) ``` ### `platform` values (server-side og:image tracking only) diff --git a/docs/reference/repository.md b/docs/reference/repository.md index 5c20cf4b76..8b68bb602f 100644 --- a/docs/reference/repository.md +++ b/docs/reference/repository.md @@ -155,7 +155,7 @@ anyplot/ ├── app/ # React frontend │ ├── src/ │ │ ├── components/ -│ │ ├── pages/ # AgentChatPage.tsx: the admin-only agent chat +│ │ ├── pages/ # AgentChatPage.tsx: the agent chat (/agent, admins /debug/agent) │ │ ├── sections/ # agent-chat/: data panel, thread, result card; debug/: agent case triage on /debug │ │ └── lib/ # api.ts; agent.ts and sse.ts for the agent chat BFF and its case routes │ ├── scripts/ @@ -579,7 +579,7 @@ plt.savefig('plot.png', dpi=300) **Purpose**: React frontend (Vite + TypeScript + MUI) -The admin-only agent chat ("Use with my data") lives in `src/pages/AgentChatPage.tsx`, `src/sections/agent-chat/`, `src/hooks/useAgentSession.ts`, `src/lib/agent.ts` and `src/lib/sse.ts`; it is built only with `VITE_ENABLE_AGENT_CHAT=true`. `scripts/agent-bff-mock.mjs` is a local mock of its backend for driving the page in a browser (see `agents/README.md`). The triage of the chat's quick-feedback cases is the "agent cases" section of `src/pages/DebugPage.tsx`, built from `src/sections/debug/` in every build; while the API's agent kill switch is off, it shows one line instead of the list. +The agent chat ("Use with my data", public at `/agent` and for admins at `/debug/agent`) lives in `src/pages/AgentChatPage.tsx`, `src/sections/agent-chat/`, `src/hooks/useAgentSession.ts`, `src/lib/agent.ts` and `src/lib/sse.ts`; it is built only with `VITE_ENABLE_AGENT_CHAT=true`. `scripts/agent-bff-mock.mjs` is a local mock of its backend for driving the page in a browser (see `agents/README.md`). The triage of the chat's quick-feedback cases is the "agent cases" section of `src/pages/DebugPage.tsx`, built from `src/sections/debug/` in every build; while the API's agent kill switch is off, it shows one line instead of the list. --- diff --git a/docs/reference/style-guide.md b/docs/reference/style-guide.md index 043cd21c68..037052e93a 100644 --- a/docs/reference/style-guide.md +++ b/docs/reference/style-guide.md @@ -850,7 +850,7 @@ Pluralisation: prefer the natural plural for collections (`plots.browse()`, `lib .btn-cta:hover::before { opacity: 1; } ``` -Used for `[.start()]` and `[.browse()]` in the hero box. The one other use is `.create_plot()` in the admin-only agent chat (`/debug/agent`), the action that page leads to once the data is confirmed (`app/src/sections/agent-chat/styles.ts`, `ctaButtonSx`); that variant hovers with the light theme's ink (`#1A1A17`) as the foreground in both themes, because 14 px white text on the green reads 3.4:1 and the dark theme's ink 3.0:1, under the 4.5:1 of WCAG AA, while the dark ink on it reads 5.1:1. Pill shape replaced with a more terminal-native rectangle (4px radius). Dark-to-green hover transition stays as the signature moment. +Used for `[.start()]` and `[.browse()]` in the hero box. The one other use is `.create_plot()` in the agent chat (`/agent`, and `/debug/agent` for admins), the action that page leads to once the data is confirmed (`app/src/sections/agent-chat/styles.ts`, `ctaButtonSx`); that variant hovers with the light theme's ink (`#1A1A17`) as the foreground in both themes, because 14 px white text on the green reads 3.4:1 and the dark theme's ink 3.0:1, under the 4.5:1 of WCAG AA, while the dark ink on it reads 5.1:1. Pill shape replaced with a more terminal-native rectangle (4px radius). Dark-to-green hover transition stays as the signature moment. **Ghost (rare — only when a primary already occupies visual space)**