Claude Code on the web¶
Create (simple) datasets from your browser — or your phone — with no local setup at all: no VSCode, no terminal, no sandbox. Claude Code on the web runs sessions in a cloud environment with the ETL repository checked out, creates a pull request with a staging server, and fills in the metadata for you.
This is the low-friction alternative to Fast-track (no spreadsheets, full traceability in ETL) and to the terminal-based AI workflow (which remains the right tool for power users).
Set up the environment (once)¶
- Open https://claude.ai/code.
- First-time users are redirected to an onboarding flow: use the name
etlandFullnetwork access.Trustedblocks our own hosts —datasette-public.owid.io,api.ourworldindata.organdcatalog.ourworldindata.orgare all refused — which quietly breaks indicator lookups andetl diff, and the failure looks like an authentication error rather than a network one. - Existing users won't see onboarding: click the environment selector
("
Default") above the chat input and create a new
etlenvironment with the same settings.
- First-time users are redirected to an onboarding flow: use the name
-
Edit the
etlenvironment and paste the environment variables from 1Password into Environment variables (three lines,R2_ENDPOINT=...) → Save changes.Warning
Environment variables are visible to anyone who can edit the environment — only put values there that are okay to share within the org (like the 1Password ones above).
-
In the same settings, paste the setup script below.
- Next to the environment selector is the repository picker — choose
owid/etl.
Setup script¶
The sandbox ships a uv too old to read our pyproject.toml (it silently
rewrites uv.lock) and an empty package cache, so every session starts slowly.
This script fixes both. It runs once and the filesystem is snapshotted, so later
sessions skip it; the snapshot rebuilds when you edit the environment settings
and automatically after ~7 days.
#!/bin/bash
set -euo pipefail
# uv >= 0.10 is required. `uv self update` hits GitHub API rate limits here.
curl -LsSf https://astral.sh/uv/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"
# This runs before the session's repo is cloned, so clone it here to warm
# ~/.cache/uv, which the snapshot keeps. (The .venv itself can't be reused — it
# hard-codes absolute paths — but sessions rebuild it in seconds from cache.)
git clone --depth 1 https://github.com/owid/etl /opt/etl-setup
cd /opt/etl-setup
uv sync --all-extras --group dev
Sessions still build their own .venv via scripts/remote_setup.sh, wired as a
SessionStart hook.
Create a dataset¶
Drag a CSV into the chat (or give Claude a URL with data) and ask:
Claude will create a pull request with a staging server and fill in all the metadata. It might ask a few clarifying questions, and you can steer it however you like — ask it to edit metadata, visualise the data in the chat, add custom processing, and so on.
From there:
- Create or edit charts on the staging server via its Admin (link in the PR).
- When you're happy, approve your changes in chart-diff (also linked in the PR).
- Merge the PR — this syncs your charts to production.
Drive cloud sessions from the terminal¶
If you already work in the terminal, you don't have to switch to the browser to use the cloud environment — and you don't have to copy results back by hand. From the ETL repository:
This starts a cloud session on the same environment while you keep working
locally. The VM clones from GitHub rather than from your machine, so push your
branch first. Then /tasks lists running sessions (each claude --cloud is
its own, so they can run in parallel), and /teleport (or /tp) pulls one into
your terminal with the branch checked out and the full conversation history
loaded. Neither flag appears in claude --help, but both work.
To debug the environment itself, run check-tools in a session for exact tool
versions — the command only exists there — then reproduce against that version
locally. There is no published image to run.
Note
Cloud sessions get the repository's CLAUDE.md, .claude/ skills and
agents, and the SessionStart hook, but not your personal
~/.claude/CLAUDE.md. Anything a cloud session needs to know has to live
in the repo — see .claude/docs/cloud-sandbox.md.
Feedback¶
This workflow is actively evolving. If you try it, share your session or reach out in #data-scientists on Slack — every attempt improves the dataset creation skill.