# Ogram setup You are setting up the Ogram platform tools for the user. Follow these steps carefully and keep the user informed at each stage. **Never surface technical details** (package manager internals, server names, sign-in flows) to the user — describe actions in plain product language only. Plain language never means hiding a problem: if any step failed, lead with the fact that setup is not finished before anything else. **What these steps touch.** The install and setup commands below all need internet access. Steps 1 and 2 write outside the workspace, to the user's tool area (`~/.local/bin`, the shell profile, and the package manager's tool directory). Step 3 always uses the diagnostics cache (`~/.cache/ogram`) and Ogram settings folder (`~/.config/ogram`), and may open a browser window once. Session sharing uses the coding agent's settings (`~/.codex`) when enabled. Only accounts with Forge access need an SSH key and config (`~/.ssh`) or an Ogram workspace folder (`~/ogram`). If a command fails because a sandbox blocked a write to one of these locations (including the diagnostics log), that is a permissions problem in your environment, not an Ogram failure — re-run the command with user-level access instead of reporting a setup failure to the user. The same applies to the network: if a command can't reach or resolve a host (a connection error while signing in or downloading) inside a restricted agent sandbox, don't assume Ogram is down — first re-run it from a normal terminal, or with the agent granted network access. If it works there, it was the sandbox, not an Ogram outage; if it still fails, treat it as a real problem and lead with the fact that setup is not finished. Don't blame the user's sandbox for a failure you haven't confirmed is a sandbox denial. ## Step 1 — Ensure the uv package manager is available Check whether `uv` is available (`uv --version`). If it is not, **tell the user** that installing the Ogram tools requires installing the `uv` package manager first, and **ask for their OK** before proceeding. Only install `uv` once the user has confirmed. Ogram supports macOS and Linux; on either platform run: - **macOS / Linux:** ```sh curl -LsSf https://astral.sh/uv/install.sh | sh ``` After installation, start a new shell or `source` the profile file printed by the installer before continuing. ## Step 2 — Install the Ogram CLI Run: ```sh uv tool install --python 3.13 ogram --index https://get.ogram.ch/packages/ ``` If `ogram` is not on `PATH` after installation, run: ```sh uv tool update-shell ``` and apply the export line it prints (or open a new shell). ### Privacy choices — before the first `ogram` command Tell the user that crash info is on by default and sends privacy-scrubbed diagnostics to Ogram; it never includes document contents and anonymizes home-directory paths. Also tell them that session sharing is on by default: during setup, Codex hooks are installed that send local Codex session transcripts to Ogram. Ask the user whether they want either kind of sharing disabled before proceeding. For each choice they disable, run the matching command before `ogram --version` or `ogram setup`. Prefix these first preference commands with `OGRAM_CRASH_INFO=0` so no heartbeat is sent while applying the choice: ```sh OGRAM_CRASH_INFO=0 ogram crash-info off OGRAM_CRASH_INFO=0 ogram telemetry off ``` Then verify the installation with `ogram --version`. The CLI itself repeats this disclosure on its first invocation, including in non-interactive agent runs, before any heartbeat is sent. ## Step 3 — Sign in and activate the account Before running the command, set expectations: 1. **Tell the user what happens next**, in the style of: *"Here is what we're going to do: sign you in and configure only the services enabled for your account."* Explain that Forge setup, when enabled for their account, creates a dedicated secure key and an Ogram workspace at `~/ogram`; parsing-only users do not need either one. 2. **SSH key:** do not ask parsing-only users about SSH. By default, let Ogram create its own dedicated key if Forge access is detected. Only when the user has already asked to reuse a particular existing key, pass its private-key path (the path without the `.pub` suffix) via `--ssh-key`. 3. **Folder location:** only when the user has asked for a different Forge marketplace location, pass `--marketplace-dir