[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openai-temporal-cloud-setup":3,"mdc-pi9gtb-key":36,"related-repo-openai-temporal-cloud-setup":9177,"related-org-openai-temporal-cloud-setup":9277},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":31,"sourceUrl":34,"mdContent":35},"temporal-cloud-setup","set up and run Temporal Cloud workflows","Set up Temporal Cloud and run a sample Workflow on it for the user, doing the work end to end. Use when the user wants to set up Temporal Cloud, get started on Temporal Cloud, install the unified Temporal CLI (prerelease cloud-cli), create a Cloud namespace or API key, clone a money-transfer sample app, write the client config TOML, or connect a local Worker to Temporal Cloud and run a sample Workflow. This is the Cloud setup path, not the local learning path (see temporal-getting-started). Covers Python, TypeScript, Go, Java, .NET, and Ruby SDKs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"openai","OpenAI","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fopenai.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Temporal","temporal","tag",{"name":17,"slug":18,"type":15},"Deployment","deployment",{"name":20,"slug":21,"type":15},"Cloud","cloud",{"name":23,"slug":24,"type":15},"Workflow Automation","workflow-automation",4888,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins","2026-08-28T15:09:55.646674",null,661,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":33},[],"OpenAI Plugins","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Ftree\u002FHEAD\u002Fplugins\u002Ftemporal\u002Fskills\u002Ftemporal-cloud-setup","---\nname: temporal-cloud-setup\ndescription: Set up Temporal Cloud and run a sample Workflow on it for the user, doing the work end to end. Use when the user wants to set up Temporal Cloud, get started on Temporal Cloud, install the unified Temporal CLI (prerelease cloud-cli), create a Cloud namespace or API key, clone a money-transfer sample app, write the client config TOML, or connect a local Worker to Temporal Cloud and run a sample Workflow. This is the Cloud setup path, not the local learning path (see temporal-getting-started). Covers Python, TypeScript, Go, Java, .NET, and Ruby SDKs.\nversion: 0.8.1\ndisable-model-invocation: true\n---\n\n# Temporal Cloud Setup\n\n## Role\n\nYou are an operator running the Temporal Cloud setup **for** the user. Do the work; do not turn this into a lecture. Ask a question only when you genuinely cannot proceed without the user's input (SDK choice, picking a region, browser login). Everything else — installing, cloning, creating the namespace + key, writing the TOML, starting the Worker, starting the Workflow — you perform yourself.\n\nThis is the **Cloud** path. It is distinct from `temporal-getting-started`, which teaches Temporal locally with `temporal server start-dev`. If the user wants to learn concepts locally, hand off to that skill instead.\n\n**Environment this skill needs — a local shell with outbound network.** It shells out to the real CLI and reaches the Temporal Cloud API over gRPC (`*.tmprl.cloud`). It will **not** work from a sandbox that blocks outbound network. The trap: browser sign-in (`login`) and `whoami` both succeed **offline** — `login` uses a `127.0.0.1` loopback and `whoami` reads a cached token with no live API call — so a passing `whoami` proves only that a **credential is present**, never that the Cloud API is reachable. `regions` runs an authoritative post-login connectivity pulse; if it reports `cloud-unreachable`, the fix is **network \u002F sandbox connectivity, not re-authentication** (see Failure Handling). Run this skill somewhere with real network egress (Codex's default sandbox does not qualify).\n\n## Output contract — how you drive every step\n\nFor many users this is the **first time they ever see Temporal.** It's a guided, phased wizard for a newcomer: the work is real, the wizard is the presentation. **The tracker + step checklists tell the story — not prose.**\n\n\u003Coutput-contract>\n\n**The per-step loop — disclose every command, then run it. The user's own tool-permission prompt is the approval (it shows them the same command and they allow\u002Fdeny it there); the skill does not add its own approval — except three deliberate steps that wait for a go-ahead.**\n\n1. **Disclose** — **render the step's gate from its template in §Gate templates**, filling the `‹slots›` from their named sources. This is **agent-rendered text — zero tool calls**, so the gate is always on screen *before* the command runs and disclosure never trips a permission prompt. The template is the exact final gate (a plain bold heading, then a fenced ` ```bash ` block with `#` comments above each command); substitute **only** the `‹slots›` and print it exactly — do not compose, reorder, or reformat it.\n2. **Run it** — run the real `scripts\u002Fprovision.sh \u003Csubcommand>` straight away (the user approves or denies at their own permission prompt). **Parse the `=== RESULT ===`** on stdout. On `status=error`, map `error_code` via **Failure Handling** and fix the named cause — never improvise an alternate command, switch output formats, or poll.\n3. **Go-ahead exception — three steps wait for the user before running**, because starting blind makes no sense:\n   - **`login`** — a browser window opens and blocks; the user must be ready.\n   - **`run-workflow`** (Phase 3) and **inject-failure** (Phase 4) — running \u002F breaking the Workflow is the deliberate moment the user came for.\n\n   For these, after rendering the gate, append two choices and **wait** — `1. \u003Caction> \u002F 2. Chat about this`, where the action verb is step-specific:\n   ```\n   1. \u003Caction>          (Sign in — login · Run it — run-workflow · Inject the failure — inject-failure)\n   2. Chat about this\n   ```\n   `1` → run it. `2. Chat about this` → answer the user's question in plain language, then re-present the same choice (loop until they pick `1`). If during that chat they ask to change a value (`--dir` \u002F `--max-secs` \u002F SDK), re-invoke the subcommand with that user-facing arg — never the pinned internal flags.\n\n**A state-changing command that isn't a `provision.sh` subcommand** (so it has no template in §Gate templates — e.g. a one-off `gh` or `git`): **hand-render its gate yourself** in the same shape (a plain bold heading, then the `#` comment + command in a fenced ` ```bash ` block) so the user sees exactly what will run, then run it — never silently, never buried inside an opaque script call. (This skill's normal flow has none: all `git` runs inside `provision.sh scaffold`, and it uses no `gh`.)\n\n**Give every real `scripts\u002Fprovision.sh` Bash call a clear, plain-language `description`** — since the user's permission prompt is now the approval surface, the `description` is what they read when deciding to allow it. Never a bare \"Run script\", and **name material side effects**: e.g. `Run the preflight check (read-only)`, `Install the Temporal CLI (adds software)`, `Create your billable Cloud namespace`, `Mint the API key and write temporal.toml`. (Disclosure is agent-rendered text from §Gate templates — no tool call — so only the `scripts\u002Fprovision.sh` runs need a description.)\n\n**Genuine questions** (SDK pick, region pick, clone-dir) are normal inputs presented as **numbered lists**, not gates and not checkpoints.\n\n**Everything you print is a template — fill the slots, add nothing else.** Your entire output is one of: (a) a **gate rendered from its template in §Gate templates** (slots filled, otherwise verbatim), or (b) one of the **verbatim templates** defined in this skill — the roadmap, the tracker line, the step checklist, the phase checkpoint, the numbered questions, the result-link blocks, the ending — with its `\u003Cslots>` filled in. **Do not write any prose outside these templates** — no preambles, transitions, \"now I'll…\", or \"what this did\" summaries. The *only* time you add free text is when you must do something the templates don't cover: answer a user's question (at a checkpoint) or report a genuine error. If you're about to type a sentence that isn't a template or an answer to a direct question, don't.\n\n**Exceptions \u002F hard limits — the only \"don'ts\":**\n\n- **Gate before run — never call a `provision.sh` command before its gate is on screen** (the other common Cursor failure: running the command with no preceding gate text, so the user sees nothing before a billable\u002Finstalling action). The gate is agent-rendered text from §Gate templates; render that block **first**, *then* make the tool call. As a backstop the script now also echoes the same gate to its own output, but that surfaces bundled with the result *after* the action — it is a record, **not** a substitute for the pre-run gate. Order is always: render the gate, then run.\n- **One step at a time — never stack steps, gates, or questions** (a common Cursor failure). Emit exactly **one** thing per message — a single gate, or a single numbered question — then **STOP and wait for it to resolve** before you disclose, ask, or run anything for the next step: wait for the **tool result** on a DISCLOSE\u002Frun step, or for the **user's reply** on an INPUT question or a GO-AHEAD step. Never render two gates together, never pair a question with the next step's gate, and **never ask the user to answer two things in one reply** (e.g. *\"reply with your manager choice **and** whether to sign in\"*). Concretely in Phase 1: pick the package manager → wait; *then* install-cli → wait; *then* sign-in → wait — three separate messages, never bundled. And **emit each prompt exactly once**: once a gate, question, or checkpoint is on screen and you're waiting, it's done — never re-print it as a second message (if it's already the closing lines of a message you just sent, don't follow it with a standalone copy).\n- **Codex turn-boundary visibility — user-input handoffs must be self-contained.** In Codex and other runtimes with separate progress\u002Ftool channels and a final assistant message, any message that waits for the user (SDK pick, package-manager pick, clone-dir pick, region pick, GO-AHEAD choice, checkpoint, or error pause) must include the full relevant visible context in the final assistant message of that turn. Do **not** put the meaningful context (tracker, checklist, resolved selections, gate, or error) only in an intermediate\u002Fprogress message and then end with a bare prompt line. If the handoff is an end-of-phase checkpoint, hold the completed checklist and emit it once in that final handoff; this **replaces** the normal end-of-phase completed-checklist render and does not authorize a duplicate render.\n- **No prose narration** (the #1 historical failure, esp. on Codex). Between a phase's opening checklist and its checkpoint, emit zero connective sentences and don't re-print the tracker\u002Fchecklist. Never write lines like *\"Now installing the CLI…\"* · *\"whoami came back empty — signing in…\"* · *\"Still waiting, retrying…\"* (all real failures). Retries \u002F polls \u002F readiness-waits inside one confirmed call are **silent**. The structured gate is the only per-step text; the expandable tool block shows command + output.\n- **Numbered lists for every choice** — runtime-agnostic; never an arrow-select \u002F `AskUserQuestion` menu; always show all options.\n- **No Skip** — a go-ahead step's choices are only `1. \u003Caction> \u002F 2. Chat about this` (every step is required; \"Chat about this\" never skips it — it answers a question, then re-presents). Don't print a \"no skip\" note.\n- **Disclose in full.** A bundled subcommand (e.g. `scaffold` = clone + deps) gets **one** gate, but its GATE block shows **all** its commands. Don't unbundle into per-`temporal` gates; don't hide what it runs.\n- **Never edit this skill's files** — invoke `scripts\u002Fprovision.sh` as shipped; it's pinned to run unchanged on every platform (macOS bash 3.2). Reformatting\u002F\"tidying\" its punctuation, quoting, regexes, or flags is forbidden. The only file you change on disk is the user's `temporal.toml`, via the script. If a flag has genuinely drifted (script returns `status=error`), stop and report it as a one-line maintenance note — don't fix it mid-run.\n- **Already-satisfied prerequisite** → render its checklist item as `- [x] \u003Cthing> — already present, skipped` (don't fake-install it). **Exception: the Temporal CLI.** When the CLI is already present the Install-CLI step *updates* it to the latest (PE-79), so render that step as updated\u002Fup-to-date, never \"skipped\" — see the Install-CLI flow step.\n- **Secret carve-out** (below) overrides disclosure for the API-key token.\n\n\u003C\u002Foutput-contract>\n\n## Steps — the flow (the spine)\n\n\u003Csteps>\n\nThe whole run in order. Tier legend (full mechanics in the output contract above): **DISCLOSE** = render the gate, then run (the user's permission prompt is the approval); **GO-AHEAD** = render, then append `1. \u003Caction> \u002F 2. Chat about this` and wait (only the three deliberate steps); **INPUT** = a numbered question (no script). Each step is one `scripts\u002Fprovision.sh` subcommand unless noted. \"On-error\" lists the `error_code`s to map via Failure Handling.\n\n| # | Phase | Step | Tier | Subcommand | Emits | On-error |\n|---|-------|------|------|------------|-------|----------|\n| 1 | 1 | Choose SDK | INPUT | — (numbered list) | sdk | — |\n| 2 | 1 | Preflight | DISCLOSE | `preflight --sdk` | `config_path`,`warnings`,`stray_env` | `config-dir-unwritable` |\n| 3 | 1 | Detect tools + pick manager | DISCLOSE (+ INPUT if >1 manager) | `detect-tools --sdk` | `default`,`managers`,`discrepancies` | `version-too-old` (advisory) |\n| 4 | 1 | Install \u002F update CLI | DISCLOSE | `install-cli` | `status` (`ok`); `update` (`updated`\u002F`up-to-date`\u002F`skipped`\u002F`failed`) | `brew-missing`,`manual-install` |\n| 5 | 1 | Sign in | **GO-AHEAD** | `login` | `identity` | `login-failed`,`not-authenticated` |\n| 6 | 1 | List + pick region | DISCLOSE + INPUT | `regions` | region list | `cloud-unreachable` |\n| 7 | 2 | Start namespace (async) | DISCLOSE | `start-namespace --sdk --region` | `namespace_name` | `create-rejected` |\n| 8 | 2 | Choose clone dir | INPUT | — (1=default \u002F 2=Edit) | dir | — |\n| 9 | 2 | Scaffold the app | DISCLOSE | `scaffold --sdk [--manager] [--dir]` | `repo_path`,`manager` | `clone-failed`,`unknown-sdk`,`manager-not-found`,`unsupported-manager` |\n| 10 | 2 | Await namespace (join) | DISCLOSE | `await-namespace --name` | `namespace_handle`,`address` | `namespace-timeout`,`namespace-not-provisioning`,`handle-not-found` |\n| 11 | 2 | Create key + save config | DISCLOSE | `create-key --handle --address` | `key_id` (token never printed) | `key-empty`,`key-limit-reached`,`no-json-parser`,`manual-key-needed` |\n| 12 | 2 | Verify config | DISCLOSE | `verify-config` | — | `profile-missing` |\n| 13 | 3 | Await auth | DISCLOSE | `await-auth` | `auth_ready` | `auth-timeout`,`key-expired` |\n| 14 | 3 | Run the Workflow | **GO-AHEAD** | `run-workflow --sdk --dir` | `workflow_status`,`workflow_id`,`run_id` | `worker-unauthorized`,`worker-not-polling`,`worker-start-failed`,`workflow-failed`,`workflow-not-submitted`,`workflow-timeout`,`precompile-failed` |\n| 15 | 4 | Inject failure + recover | **GO-AHEAD** | `run-workflow … --demo-failure transient` | same as 14 | same as 14 |\n\nPhase bodies below add only the human nuance the table can't (region-pick guardrails, KeyId-vs-secret labeling, the result links). The exact command of any step comes from its gate — render it from the `‹sub›` template in §Gate templates (slots filled), don't hand-write it.\n\n\u003C\u002Fsteps>\n\n### Secret-handling carve-out (overrides command disclosure)\n\nThe output contract says disclose the real command. **The API-key steps are the exception.** The `eyJ…` token must never be reprinted, logged, rendered in a diff, or passed as an argv (a rendered diff is the one exposure that leaves the local machine). For the key-capture and TOML-write actions:\n\n- Show the friendly label and a **redacted** form of the command — e.g. `api_key = \"eyJ…(captured, not shown)\"`.\n- Never let the real token appear in the expandable block, in chat, or in a file-edit diff.\n- The **KeyId** (e.g. `JW4LO…`) is *not* secret and may be shown. See Phase 2 for the KeyId-vs-secret distinction.\n- **Never read, `cat`, `grep`, or open `temporal.toml` (or any key-capture file) with the Read\u002FEdit\u002FUpdate tool.** The file holds the `eyJ…` token, so *any* read of it surfaces the secret into this transcript — this is the most common accidental leak. To confirm the profile, use **only** `scripts\u002Fprovision.sh verify-config` (it lists profile *names*, never the key value).\n- **Never run `temporal cloud apikey create-for-me` (or any `apikey`\u002F`config` command that emits the key) yourself.** Only `scripts\u002Fprovision.sh create-key` mints and stores the token — it redirects the one-time secret straight into the locked file. Run the raw CLI by hand and it prints the token to the terminal, into this output.\n\n## Execution model — drive the bundled script, don't hand-roll the CLI\n\nThe variance-prone work — installing the CLI, signing in, listing regions, creating the namespace, minting the API key, and writing the client-config TOML — is owned by a bundled script: **`scripts\u002Fprovision.sh`**. **Invoke it and parse its result block; do not reassemble these `temporal cloud` commands yourself.** That is what makes a run deterministic: the flags are pinned in one place, the retry \u002F auth-recheck \u002F \"read the handle from the create output\" logic is baked in, and the API-key token is written straight into the locked TOML by the script — so it never enters your context and can never leak into a rendered diff.\n\nEach operation prints one delimited block on **stdout** — parse *that*, not the prose:\n\n```\n=== RESULT ===\nstatus=ok            # ok | error | skipped\n\u003Ckey>=\u003Cvalue>        # operation-specific, e.g. namespace_handle=…, address=…, key_id=…\n=== END ===\n```\n\nHuman-readable progress goes to **stderr** (it shows in the expandable tool block — the teaching surface). On `status=error` the block carries `error_code` + `message` — map it via **Failure Handling** and fix the named cause (never improvise, switch output formats, or poll — as the output contract requires).\n\nThe flow steps — subcommand, tier, and error codes — are the **Steps spine table above** (single source of truth). The RESULT keys each emits:\n\n- `preflight` → `os`, `config_path`, `cli_installed` (drives Install-CLI: install if absent, update if present), `warnings`, `stray_env`\n- `detect-tools` → `default`, `managers`, `versions`, `discrepancies`\n- `install-cli` → `status` (`ok`) + `update` (`updated`\u002F`up-to-date`\u002F`skipped`\u002F`failed` when present; `skipped`\u002F`failed` still proceed with the working CLI) + `reason` (`brew-missing`\u002F`unsupported-os`, present only alongside `update=skipped`)  ·  `login` → `identity`  ·  `regions` → raw list on stderr (you recommend, user picks)\n- `start-namespace` → `namespace_name`  ·  `scaffold` → `repo_path`, `manager`  ·  `await-namespace` → `namespace_handle`, `address`\n- `create-key` → `key_id` (token never printed)  ·  `verify-config` → profile names only  ·  `await-auth` → `auth_ready`\n- `run-workflow` → `workflow_status` (`COMPLETED`), `workflow_id`, `run_id`, `task_queue` (add `--demo-failure transient` for Phase 4)\n\n**Utility subcommands (not in the main flow):** `preview \u003Csub> [args]` (emits the `=== GATE ===` block + `cmd_N` + resolved params; side-effect-free — **maintenance\u002Ftesting only, not used in the flow**: gates are rendered from §Gate templates, never by calling a script) · `provision-and-scaffold` (the older bundled namespace+clone+deps call — superseded by start\u002Fscaffold\u002Fawait, kept as a fallback) · `install-deps` (re-install \u002F switch manager) · `clone` (clone only) · `repair-config` (strip duplicate `cloud-setup` blocks; keeps `default`) · `cleanup-info` (prints the teardown commands, never runs them).\n\n**Utility subcommands are gated exactly like flow steps — disclose before running.** \"Not in the main flow\" means *don't run them as routine steps*, **not** that they skip disclosure: if you ever invoke one (`install-deps` to switch a manager, `repair-config` to fix a duplicate profile, `clone`, etc.), render its gate first (derive it from the `scaffold`\u002F`install-cmd` shapes in §Gate templates — these utilities have no dedicated template). **And don't improvise them into the flow:** the main steps already cover the work (`scaffold` clones *and* installs dependencies — never add an extra `install-deps` \"to confirm deps resolve\", and never narrate doing so).\n\nThe script is the **single source of truth for CLI flags** and is **read-only during a run** — invoke it as shipped, never edit it; if a prerelease flag has genuinely drifted (`status=error`), stop and report it as a one-line maintenance note (per the output contract), never fix it mid-setup. The wizard layer (tracker, checklists, checkpoints, the no-narration rules above) is still yours; only the imperative CLI work lives in the script.\n\n## Per-command gate — disclose, then run\n\nThis setup runs real commands that **create billable Cloud resources and install software on the user's machine** — which is why the disclose-then-run loop and the three **go-ahead** steps (`login`, `run-workflow`, inject-failure), both defined in the output contract above, matter here. This section pins the **exact shape** of the gate you render.\n\n**Deterministic backstop (don't rely on it):** every effectful `provision.sh` subcommand now also echoes its own gate to stderr (the tool block) *before* it acts, so the run is self-documenting even if you forget the chat-side gate. This is a safety net — it surfaces bundled with the result, *after* the action — so it never replaces rendering the gate first. Always render the §Gate-template gate, then run. (Disable only for tests via `TCLOUD_DISCLOSE=0`.)\n\n**The gate — render it from the matching template in §Gate templates; never run a script to build it** (hand-assembling the formatting is error-prone: dropped fences, comment-only, glued rules). Fill **only** its `‹slots›` and print it exactly; rendering is **agent text — zero tool calls**. For a **go-ahead** step, append the numbered choices **stacked one per line** and wait. The gate's shape — a plain bold heading, then a fenced ` ```bash ` block with `#` comments above each command — looks like this (a disclose step — render it, then run):\n\n````\n**Installing the Temporal CLI**\n\n```bash\n# install the prerelease Temporal CLI via Homebrew (adds software to your machine)\nbrew install temporalio\u002Fprerelease\u002Ftemporal-cloud\n```\n````\n\nA multi-step subcommand shows each underlying command, one per step — a terse `#` note **followed by the actual command** (never a comment on its own). Still a disclose step — render, then run:\n\n````\n**Creating your namespace & downloading the sample app**\n\n```bash\n# 1. create your Cloud namespace — billable; provisions on Temporal's servers (~a few min)\ntemporal cloud namespace create --name \u003Cname> --region aws-us-east-1 \\\n  --api-key-auth-enabled --retention-days 30 --auto-confirm\n\n# 2. clone the Cloud-ready sample\ngit clone --branch money-transfer-project-cloud-setup --single-branch \\\n  \u003Crepo-url> money-transfer-project-template-python\n\n# 3. install dependencies (pip)\ncd money-transfer-project-template-python \\\n  && python3 -m venv env && source env\u002Fbin\u002Factivate \\\n  && python -m pip install -q temporalio\n```\n````\n\nThe run step is a **go-ahead** step — it shows the real Worker + starter commands (**the commands themselves, not just their `#` labels**) and waits for the choice:\n\n````\n**Run your first Workflow**\n\n```bash\n# Worker — runs in the background, polls the task queue, stopped when done\ncd money-transfer-project-template-python && source env\u002Fbin\u002Factivate && python run_worker.py\n\n# starter — submits the Workflow, waits for it to reach COMPLETED, then exits\ncd money-transfer-project-template-python && WORKFLOW_ID=money-transfer-demo python run_workflow.py\n```\n\n1. Run it\n2. Chat about this\n````\n\n**A few rules these examples encode** (everything else is in the output contract above — don't restate it):\n\n- **A `#` comment above every command — never a comment alone, never a bare command.** The real commands must appear (never just `# Worker` \u002F `# starter` with the commands missing). Keep each comment to a few words; it's both a label and a one-line lesson for a newcomer.\n- **Name material side effects in the relevant comment** — `# … - billable`, `# … (adds software to your machine)`, `# mint key + write the cloud-setup profile to temporal.toml`. The §Gate templates already encode this; render them verbatim.\n- **`create-key` secret carve-out:** its GATE block shows the mint command **without** the token (captured straight into the locked TOML) — render as-is; never a token, never a redacted diff.\n\n## Gate templates\n\nThese are the **verbatim source** for every step's gate — agent-rendered text (zero tool calls), so only the effectful `scripts\u002Fprovision.sh \u003Csub>` run ever prompts.\n\n**Hard rule — render the matching template verbatim.** Substitute **only** the `‹slots›`, never add\u002Fdrop\u002Freorder\u002Freformat lines or fences; keep every static character (headings, `#` comments, the ` ```bash ` fence, spacing) byte-for-byte. Each `‹slot›`'s value comes **only** from its named source in \"Filling the slots\" below — never from memory, never improvised. The result is exactly what `scripts\u002Fprovision.sh preview \u003Csub>` prints between its `=== GATE ===`…`=== END GATE ===` markers (a maintenance\u002Ftesting subcommand — the flow never calls it; the drift-guard test keeps these templates and `provision.sh`'s runtime commands in sync).\n\n### Filling the slots\n\n| Slot | Source |\n|------|--------|\n| `‹sdk›` | the user's SDK pick (Phase 1) |\n| `‹region›` | the user's region pick (Phase 1, from the `regions` list) |\n| `‹manager›` | `detect-tools` RESULT `default`, or the user's override when they pick a non-default manager |\n| `‹clone-dir›` | the user's clone-dir pick (Phase 2); default = the repo basename for `‹sdk›` (see SDK command reference) |\n| `‹namespace-name›` | `start-namespace` RESULT `namespace_name` |\n| `‹namespace-handle›` | `await-namespace` RESULT `namespace_handle` |\n| `‹address›` | `await-namespace` RESULT `address` |\n| `‹repo-url›` | SDK command reference, keyed by `‹sdk›` |\n| `‹install-cmd›` | SDK command reference, keyed by `‹sdk›`\u002F`‹manager›` |\n| `‹worker-cmd›` | SDK command reference, keyed by `‹sdk›` |\n| `‹starter-cmd›` | SDK command reference, keyed by `‹sdk›` |\n| `‹task-queue›` | SDK command reference, keyed by `‹sdk›` |\n| `‹runtime›` | SDK command reference, keyed by `‹sdk›` (the version-probe binary) |\n| `‹probe-bins›` | SDK command reference, keyed by `‹sdk›` (the manager binaries to look for) |\n\n`‹key-id›` is **never** shown in any gate — it appears only in the final summary (Phase 2 checklist). There is **no token slot**: the `eyJ…` token never appears in a template.\n\n### SDK command reference\n\nSource of truth = `scripts\u002Fprovision.sh`. Keyed by `‹sdk›` (and `‹manager›` where it varies):\n\n| `‹sdk›` | `‹repo-url›` | `‹runtime›` | `‹task-queue›` |\n|---------|-------------|-------------|----------------|\n| python | https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-template-python | python3 | TRANSFER_MONEY_TASK_QUEUE |\n| go | https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-template-go | go | TRANSFER_MONEY_TASK_QUEUE |\n| ts | https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-template-ts | node | money-transfer |\n| java | https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-java | java | MONEY_TRANSFER_TASK_QUEUE |\n| dotnet | https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-template-dotnet | dotnet | MONEY_TRANSFER_TASK_QUEUE |\n| ruby | https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-template-ruby | ruby | money-transfer |\n\n`‹clone-dir›` default (repo basename) = the trailing path segment of `‹repo-url›` (e.g. python → `money-transfer-project-template-python`, java → `money-transfer-project-java`).\n\n**Managers (`default` first) + `‹probe-bins›` (the binaries `detect-tools` looks for):**\n\n| `‹sdk›` | managers | `‹probe-bins›` |\n|---------|----------|----------------|\n| python | pip (default), uv | python3 uv |\n| ts | npm (default), pnpm, yarn | npm pnpm yarn |\n| go | go | go |\n| java | maven | mvn |\n| dotnet | dotnet | dotnet |\n| ruby | bundler | bundle |\n\n(manager → its probe binary: pip→python3, uv→uv, npm→npm, pnpm→pnpm, yarn→yarn, go→go, maven→mvn, dotnet→dotnet, bundler→bundle. `‹probe-bins›` for an SDK is the space-joined probe binaries of all its managers, in the order above.)\n\n**`‹install-cmd›`** (keyed by `‹sdk›`\u002F`‹manager›`):\n\n| `‹sdk›`\u002F`‹manager›` | `‹install-cmd›` |\n|---------------------|-----------------|\n| python\u002Fpip | `python3 -m venv env && . env\u002Fbin\u002Factivate && python -m pip install -q temporalio` |\n| python\u002Fuv | `uv venv env && . env\u002Fbin\u002Factivate && uv pip install -q temporalio` |\n| ts\u002Fnpm | `npm install` |\n| ts\u002Fpnpm | `pnpm install` |\n| ts\u002Fyarn | `yarn install` |\n| go\u002Fgo | `go mod download` |\n| java\u002Fmaven | `mvn -q -DskipTests dependency:resolve` |\n| dotnet\u002Fdotnet | `dotnet restore` |\n| ruby\u002Fbundler | `bundle install` |\n\n**`‹worker-cmd›` \u002F `‹starter-cmd›`** (keyed by `‹sdk›`):\n\n| `‹sdk›` | `‹worker-cmd›` | `‹starter-cmd›` |\n|---------|----------------|-----------------|\n| python | `source env\u002Fbin\u002Factivate && python run_worker.py` | `source env\u002Fbin\u002Factivate && python run_workflow.py` |\n| go | `go run worker\u002Fmain.go` | `go run start\u002Fmain.go` |\n| ts | `npm run worker` | `npm run client` |\n| java | `mvn -q compile exec:java -Dexec.mainClass=moneytransferapp.MoneyTransferWorker -Dorg.slf4j.simpleLogger.defaultLogLevel=warn` | `mvn -q compile exec:java -Dexec.mainClass=moneytransferapp.TransferApp -Dorg.slf4j.simpleLogger.defaultLogLevel=warn` |\n| dotnet | `dotnet run --project MoneyTransferWorker` | `dotnet run --project MoneyTransferClient` |\n| ruby | `ruby worker.rb` | `ruby starter.rb` |\n\nThe scaffold install-comment also varies by where deps land — keep the comment exactly as the template shows for that `‹sdk›`\u002F`‹manager›` (python\u002Fts say \"inside the repo\"; go\u002Fjava\u002Fdotnet\u002Fruby say \"GLOBAL, outside the repo …\"). The worked example and templates below carry the right wording per SDK; for non-python SDKs use the install comment from `scripts\u002Fprovision.sh preview scaffold --sdk ‹sdk›` if you ever need to re-verify it (maintenance only).\n\n### Templates\n\n**Phase 1 — `preflight`** (static):\n\n````\n**Checking your environment**\n\n```bash\n# check git \u002F jq \u002F brew are available (read-only, local)\ncommand -v git jq brew\n\n# check the Temporal config directory is writable (so temporal.toml can be saved)\ntouch \"$(dirname \"\u003Cconfig_path>\")\u002F.probe\" && rm -f \"$(dirname \"\u003Cconfig_path>\")\u002F.probe\"\n\n# flag any stray TEMPORAL_* env vars that would override your saved config\nenv | grep '^TEMPORAL_' || true\n```\n````\n\n**Phase 1 — `detect-tools`:**\n\n````\n**Detecting your local tools**\n\n```bash\n# detect which package managers are installed for ‹sdk› (read-only, local)\ncommand -v ‹probe-bins›\n\n# read each tool's version to flag anything below the minimum\n‹runtime› --version\n```\n````\n\n**Phase 1 — `install-cli` (not installed):**\n\n````\n**Installing the Temporal CLI**\n\n```bash\n# install the Temporal CLI via Homebrew (adds software)\nbrew install temporalio\u002Fprerelease\u002Ftemporal-cloud\n```\n````\n\n**Phase 1 — `install-cli` (already installed — render this variant instead when the CLI is present):**\n\n````\n**Updating the Temporal CLI to the latest**\n\n```bash\n# BETA: the prerelease CLI has no real versions yet, so always pull the latest (adds\u002Fupdates software)\nbrew upgrade temporalio\u002Fprerelease\u002Ftemporal-cloud\n```\n````\n\n**Phase 1 — `install-cli` (already installed, non-macOS — render this variant when the CLI is present and you're not on macOS; there's no prerelease tap to upgrade from):**\n\n````\n**Updating the Temporal CLI to the latest**\n\n```bash\n# already installed; update temporal-cloud manually from https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fcloud-cli\u002Freleases\u002Flatest\n```\n````\n\n**Phase 1 — `login`** (static):\n\n````\n**Sign in to Temporal Cloud**\n\n```bash\n# open a browser to sign in (blocks until you finish)\ntemporal cloud login\n\n# confirm the signed-in identity\ntemporal cloud whoami\n```\n````\n\n**Phase 1 — `regions`** (static):\n\n````\n**Listing your Cloud regions**\n\n```bash\n# list the regions your account can use\ntemporal cloud region list\n```\n````\n\n**Phase 2 — `start-namespace`:**\n\n````\n**Creating your Cloud namespace**\n\n```bash\n# create your Cloud namespace - billable; submits async, provisions server-side (~a few min)\ntemporal cloud namespace create --name \u003Cname> --region ‹region› --api-key-auth-enabled --retention-days 30 --auto-confirm --async\n```\n````\n\n**Phase 2 — `create-namespace`** (the synchronous variant — rare; the flow uses `start-namespace` + `await-namespace`):\n\n````\n**Creating your Cloud namespace**\n\n```bash\n# create your Cloud namespace - billable; provisions server-side (~a few min)\ntemporal cloud namespace create --name \u003Cname> --region ‹region› --api-key-auth-enabled --retention-days 30 --auto-confirm\n```\n````\n\n**Phase 2 — `scaffold` (clone + deps):**\n\n````\n**Downloading the sample app (clone + dependencies)**\n\n```bash\n# clone the Cloud-ready sample\ngit clone --branch money-transfer-project-cloud-setup --single-branch ‹repo-url› ‹clone-dir›\n\n# install dependencies with ‹manager› ‹install-location-note›\n(cd ‹clone-dir› && ‹install-cmd›)\n```\n````\n\n`‹install-location-note›` per SDK (keep verbatim): python = `into a local venv (env\u002F) inside the repo` · ts = `into node_modules inside the repo` · go = `into the shared Go module cache - GLOBAL, outside the repo (~\u002Fgo\u002Fpkg\u002Fmod)` · java = `into the shared Maven cache - GLOBAL, outside the repo (~\u002F.m2)` · dotnet = `into the global NuGet cache - GLOBAL, outside the repo (~\u002F.nuget\u002Fpackages)` · ruby = `into globally-installed gems - GLOBAL, outside the repo`.\n\n**Phase 2 — `await-namespace`** (static):\n\n````\n**Waiting for the namespace to provision**\n\n```bash\n# poll until the namespace is ACTIVE — provisioning usually takes ~a few minutes (bounded)\ntemporal cloud namespace list --name \u003Cnamespace-name> -o json\n```\n````\n\n**Phase 2 — `create-key`** (secret carve-out — the token is captured to a 0600 file, never shown; **never** add a token slot):\n\n````\n**Creating your API key and saving the config**\n\n```bash\n# mint the key + write the cloud-setup profile to temporal.toml (token captured to a 0600 file, never printed)\ntemporal cloud apikey create-for-me --display-name money-transfer-cloud-setup-\u003Crandom> --expiry-duration 25h --auto-confirm -o json\n```\n````\n\n**Phase 2 — `verify-config`** (static):\n\n````\n**Verifying the saved config**\n\n```bash\n# list the cloud-setup profile fields (api_key redacted, never shown)\ntemporal --profile cloud-setup config list\n```\n````\n\n**Phase 3 — `await-auth`** (static):\n\n````\n**Waiting for the API key to be accepted**\n\n```bash\n# poll an authorized call until the new key is accepted (bounded ~90s)\ntemporal --profile cloud-setup workflow list --limit 1\n```\n````\n\n**Phase 3 — `run-workflow` (clean run):**\n\n````\n**Run your first Workflow**\n\n```bash\n# Worker - runs in the background, polls the task queue, stopped when done\n(cd ‹clone-dir› && ‹worker-cmd›)\n\n# starter - submits the Workflow, waits for COMPLETED, exits (the run can take a minute or two)\n(cd ‹clone-dir› && WORKFLOW_ID=money-transfer-demo ‹starter-cmd›)\n```\n````\n\n**Phase 4 — `run-workflow … --demo-failure transient` (inject + recover):**\n\n````\n**Run the recovery Workflow (inject a failure)**\n\n```bash\n# Worker - runs in the background, polls the task queue, stopped when done\n(cd ‹clone-dir› && DEMO_FAILURE=transient ‹worker-cmd›)\n\n# starter - submits the Workflow, waits for COMPLETED, exits (the run can take a minute or two)\n(cd ‹clone-dir› && WORKFLOW_ID=money-transfer-demo-recovery ‹starter-cmd›)\n```\n````\n\n(Utility subcommands — `clone`, `install-deps`, `provision-and-scaffold`, `repair-config` — are **rare** and have no dedicated template; derive their gate from the `scaffold`\u002F`install-cmd` shapes above if you ever invoke one.)\n\n### Worked example — the `scaffold` gate for Java, fully filled\n\n`‹sdk›` = java → `‹repo-url›` = `https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-java`, `‹clone-dir›` (default) = `money-transfer-project-java`, `‹manager›` = `maven`, `‹install-cmd›` = `mvn -q -DskipTests dependency:resolve`, `‹install-location-note›` = `into the shared Maven cache - GLOBAL, outside the repo (~\u002F.m2)`. The rendered gate:\n\n````\n**Downloading the sample app (clone + dependencies)**\n\n```bash\n# clone the Cloud-ready sample\ngit clone --branch money-transfer-project-cloud-setup --single-branch https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-java money-transfer-project-java\n\n# install dependencies with maven into the shared Maven cache - GLOBAL, outside the repo (~\u002F.m2)\n(cd money-transfer-project-java && mvn -q -DskipTests dependency:resolve)\n```\n````\n\n## Start — show the plan, then begin Phase 1\n\nThis skill begins when the user invokes it (e.g. `\u002Ftemporal-cloud-setup`) or asks to set up Temporal Cloud. On start, print the roadmap, then go straight into Phase 1 (whose first step is choosing the SDK). Do **not** narrate.\n\nPrint this opening block verbatim — the ⚠️ notice first, then the plan and the profile line:\n\n```\n> ⚠️ **Heads-up:** this creates real resources in your Temporal Cloud account — a namespace and an API key — which may incur cost.\n\n**Let's get you set up on Temporal Cloud.** Four phases, end to end.\n\n1. **Get set up** — install the CLI, sign in, and choose your SDK + region\n2. **Download the sample app & create your API key** — create your Cloud namespace and clone the money-transfer app (already wired for Cloud) in parallel, then mint your API key\n3. **Run your first Workflow** — start the Worker and run the money-transfer Workflow\n4. **See Durable Execution** — break the transfer on purpose and watch Temporal recover it\n\nI'll show each command before running it — and depending on your setup, your tool may ask you to approve it first.\n\nSetting up for:  **\u003COS> · SDK pending**\n```\n\nThe ⚠️ Heads-up in that block is a notice, not a blocking gate — continue unless the user objects.\n\n**Selections are collected up front, in Phase 1, while the user is most engaged** — SDK first (no prerequisite), then region right after sign-in (the live region list requires being logged in). Do not begin cloning before the SDK answer — the SDK selects which repo is cloned.\n\n## Phase output envelope\n\nThis is the **single source of truth for per-phase formatting** — the phase bodies below supply only *content* (the intent sentence and the steps); this envelope supplies the *format*. Render every phase in this fixed order:\n\n1. **Tracker line** at the top, marker advanced (see below).\n2. **Intent sentence** — one short line on what this phase sets up and why it matters (gloss any Temporal term). No more than one line.\n3. **Step checklist — once, all unchecked** (the phase plan). Then run each step (real tool call with a friendly `description`, or a genuine question) **without re-printing the checklist or tracker between steps**. Render an already-present prerequisite as `[x] … already present, skipped` (except the Temporal CLI, which updates when present — render it updated\u002Fup-to-date, not \"skipped\"). **No** `**What this did:**` summary and **no** `↪ Learn more:` link during the run.\n4. **End-of-phase: completed checklist + checkpoint** — print the checklist once more with **every box checked**, show `**Phase N complete ✅**`, and **close that same message** with the numbered checkpoint prompt (its content is detailed in the next section — it belongs to *this* message, it is not a second message). In Codex-style runtimes, this entire block must be the final assistant message of the turn when you pause for the user; do not print it earlier as progress and then repeat or fragment it in the final response. No checkpoint after Phase 4 — go straight to the Ending.\n\nThe tracker is just the four phase markers and the phase counter — **no leading label** (don't prefix it with \"Setup\" or anything before the first marker). Legend: completed = `✅`, current = `🔵`, upcoming = `⚪` (a white dot — same filled-circle style as the blue current dot). **Bold the current step's name** (the one with the blue dot). Reprint it at the top of each phase, advancing one marker:\n\n```\n🔵 **Set up** · ⚪ App & API key · ⚪ Run · ⚪ Recover   ·  phase 1\u002F4\n✅ Set up · 🔵 **App & API key** · ⚪ Run · ⚪ Recover   ·  phase 2\u002F4\n✅ Set up · ✅ App & API key · 🔵 **Run** · ⚪ Recover   ·  phase 3\u002F4\n✅ Set up · ✅ App & API key · ✅ Run · 🔵 **Recover**   ·  phase 4\u002F4\n```\n\n(Glyph notes: `⚪` white dot = upcoming and `🔵` blue dot = current — same filled-circle style, so the row reads as one consistent set. `✅` = the reliably-green completion mark; a green *circle*-with-check isn't a dependable cross-platform glyph, so stick with `✅`.)\n\n## After-phase checkpoint (after Phases 1–3)\n\nThis documents the checkpoint prompt that the envelope's step 4 already emits as the closing lines of the completed-checklist message — **it is described here, not a second message to send.** It hands control back via a numbered prompt (not an arrow-select — numbered works on every runtime). **Do not explain anything proactively**; the checklist already told the story. At a turn boundary, the checkpoint handoff must be self-contained and emitted exactly once: tracker\u002Fchecklist context + `**Phase N complete ✅**` + this prompt together in the final assistant message. The prompt is:\n\n```\n1. Continue\n2. I have a question about this phase\n\nChoose a number, or write your response.\n```\n\n- If they pick **2 (question):** give a short, plain-language explanation of what the phase just did, answer their typed question in newcomer-friendly language, then re-present the numbered prompt — `1. Continue` \u002F `2. I have another question` \u002F `Choose a number, or write your response.` — and loop until they proceed.\n- Explanation is **on-demand only** — it appears solely when they pick the question option.\n- A checkpoint follows Phases 1–3. **No checkpoint after Phase 4** — go straight to the Ending.\n- Genuine blocking input (SDK pick, browser sign-in, region pick) is normal work, **not** this checkpoint (genuine input, not a checkpoint).\n\n---\n\n# The phases\n\n```text\nPhase 1 — Get set up:            choose SDK · install CLI · sign in · choose region\nPhase 2 — App & API key:         create namespace + clone sample + install deps (parallel) · create API key · write config TOML\nPhase 3 — Run your first Workflow: start the Worker · run the Workflow (success)\nPhase 4 — See Durable Execution: inject a failure · watch Temporal retry & recover  ──► then END\n```\n\n\u003Cphases>\n\n## Phase 1 — Get set up\n\n*Intent: get the tools on your machine, sign you in, and capture your choices — everything the rest of the run needs.*\n\nStep checklist: `SDK chosen` · `Tools detected` · `CLI installed` · `Signed in` · `Region chosen`.\n\n**Step — Choose your SDK** (genuine input, not a checkpoint): present the six as a **numbered list** (numbered list, runtime-agnostic) — Python, Go, TypeScript, Java, .NET, Ruby — and take a typed name\u002Fnumber. This selects which repo is cloned and the language of the local app. Echo the resolved profile line (`Setting up for: macOS · Python SDK`) once answered.\n\nRight after the SDK pick, the **preflight** check (DISCLOSE — render, then run): render its gate from the `preflight` template (§Gate templates), then run `scripts\u002Fprovision.sh preflight --sdk \u003Csdk>`. Note its `cli_installed` flag — it drives whether the Install-CLI step below installs (absent) or updates the existing CLI (present). If its `stray_env` lists any `TEMPORAL_*` vars, tell the user they override the saved profile and ask them to unset them before continuing; surface other `warnings` (e.g. `brew-missing`, `no-json-parser`) only if they block a later step.\n\n**Step — Detect local tools + choose your package manager** (DISCLOSE — render, then run). Render its gate from the `detect-tools` template (§Gate templates), then run `scripts\u002Fprovision.sh detect-tools --sdk \u003Csdk>` and read its RESULT. This adapts the setup to the user's machine, and it surfaces tooling problems **early** (here in Phase 1) instead of deep in Phase 2\u002F3.\n\n- **Package manager (Python & TypeScript only).** `managers` is the set of package managers **this sample supports** for the chosen SDK. When it lists more than one, ask **which of the sample-supported managers to use** — frame it that way (\"the sample supports these — which should we use?\"), **not** as \"here's what's installed on your machine.\" Present them as a **numbered list** (runtime-agnostic) with the `default` marked — e.g. Python `1. pip (default)` \u002F `2. uv`; TypeScript `1. npm (default)` \u002F `2. pnpm` \u002F `3. yarn`. The user confirms the default or overrides; carry the choice into Phase 2 as `scaffold --manager \u003Cm>`. **This is a question — ask it alone and wait for the answer; do not disclose install-cli or sign-in in the same message** (see \"One step at a time\"). For **Go \u002F Java \u002F .NET \u002F Ruby** the sample has a single toolchain — state it (`Using: maven`) and **skip the prompt**.\n- **Surface `discrepancies` HERE (fail-early), plain language:**\n  - `version-too-old:\u003Ctool>@\u003Chave>(min\u003Cmin>)` — an **advisory** warning with remediation (e.g. *\"Node 16 detected; 18+ recommended — consider upgrading, but I can proceed\"*). Not a hard stop.\n  - `tool-missing:\u003Cruntime>` \u002F `manager-not-found:\u003Cm>` — the runtime or chosen manager isn't installed. Offer another **sample-supported** manager from `managers`, or ask the user to install the tool, then re-run `detect-tools`.\n- The default proposal is **deterministic** — the same machine yields the same default every run; nothing is persisted (no state file).\n\n**Step — Install or update the unified Temporal CLI** (DISCLOSE — render, then run). It ships the `temporal cloud` command group (binary `temporal-cloud`). **Branch on preflight's `cli_installed`** (it used the same `temporal cloud` probe the installer does, so it's authoritative — don't re-check by calling `install-cli` just to confirm):\n\n- **`cli_installed=true` → update it to the latest.** Render its gate from the `install-cli` (already-installed) template (§Gate templates), then run `scripts\u002Fprovision.sh install-cli`. **BETA stopgap:** the prerelease CLI has no meaningful version numbers yet, so instead of a real \"is it out of date?\" check we always try to pull the latest from the `temporalio\u002Fprerelease` Homebrew tap; `install-cli` returns `status=ok` with `update`=`updated`\u002F`up-to-date`. When it can't update — Homebrew missing, or a non-macOS host — it emits `update=skipped` and proceeds with the working CLI rather than failing (never yank a working install). Once the CLI ships real versions this becomes a genuine version check; we no longer skip a present CLI.\n- **`cli_installed=false` → install it.** Render its gate from the `install-cli` (not-installed) template (§Gate templates), then run `scripts\u002Fprovision.sh install-cli`. It installs via the `temporalio\u002Fprerelease` Homebrew tap on macOS, and returns `error_code=brew-missing` \u002F `manual-install` with the fallback URL if it can't — do not auto-install Homebrew; relay the message and wait. (`install-cli` self-checks presence, so if it's actually already there it updates instead of installing.)\n- (No prerelease disclaimer here — the ⚠️ notice at the top of the run already covers that.)\n\nThis CLI is separate from any local `temporal server start-dev`. The Cloud path does not start a local server.\n\n**Step — Sign in** (**GO-AHEAD** — a browser opens, so wait for the user). Render its gate from the `login` template (§Gate templates), then present `1. Sign in \u002F 2. Chat about this` and wait. On `2`, answer the question and re-present. On `1`, run `scripts\u002Fprovision.sh login` — it runs `temporal cloud login` (which opens a browser on the user's machine and blocks until they finish) and then confirms with `whoami`. **Do not ask the user to run the command themselves** (no `! temporal cloud login` hand-off); you run the script, the user just completes the browser prompt. Tell them to complete the sign-in in the browser. On success the result block carries `identity`; on `error_code=login-failed`\u002F`not-authenticated`, ask them to finish the browser login and re-run. If they're not part of a Cloud account yet, point them to https:\u002F\u002Ftemporal.io\u002Fget-cloud and pause.\n\n**Step — Choose your region** (DISCLOSE — render, then run): render its gate from the `regions` template (§Gate templates), then run `scripts\u002Fprovision.sh regions` (you're authenticated now). It prints the live region list; present it as a **numbered list** (runtime-agnostic), then apply these picking rules:\n\n- **Recommend the nearest** — infer it from the system timezone\u002Flocale (e.g. `America\u002FNew_York` → suggest `aws-us-east-1`) and mark it `(recommended)`, but the user still picks.\n- **Never accept a region from memory and never auto-select** — a valid-but-wrong region creates a persistent, billable namespace in the wrong place (and has set off internal alerts). Use the exact identifier the user picks (shape `\u003Cprovider>-\u003Cregion>`); it's passed to the create step next.\n- **Fail fast — only accept a region that appears in the `regions` output** (it reflects what your account can actually use). If the user names one that isn't listed, don't pass it to create (a region your account lacks access to is the classic \"it spun for minutes\" trap) — re-show the list and have them pick a listed value.\n- **Steer away from `unsupported_regions`** — the `regions` RESULT may list `unsupported_regions` (regions whose provider reads `UNKNOWN`, e.g. `azure-centralus`). On such accounts those **accept a namespace create but never provision it** — a phantom that stalls the next phase. Mark any listed there as `(may not be available on your account)`, **don't recommend it**, and steer to an AWS\u002FGCP region. If the user insists, warn it may never provision (you'll catch it fast — see `namespace-not-provisioning`).\n- **If the create is still rejected** for the region, see Failure Handling (`create-rejected`) — re-list and re-pick, never silently retry the same region.\n\n**If the user asks at the checkpoint, explain (plain language):** installed the Temporal CLI, signed you in, and recorded your SDK + region. Your namespace itself gets created in the next phase — in parallel with setting up your app. (Docs: https:\u002F\u002Fdocs.temporal.io\u002Fcli)\n\n## Phase 2 — App & API key\n\n*Intent: create your Cloud namespace and download the sample app (clone + dependencies) in parallel, then mint your API key and save the connection config — everything needed to run Workflows on Cloud.*\n\nStep checklist: `Namespace active` · `Sample cloned` · `Dependencies installed` · `API key created` · `Config saved`.\n\nThe namespace and the app are set up as **three separate, individually-gated steps** — so the **billable** namespace gets its own explicit approval, distinct from the benign clone. The namespace provisions on Temporal's servers (`--async`) **while** the app is cloned, so the parallelism is preserved without any background process having to survive across steps (identical on Claude Code, Codex, Cursor).\n\n**Step — Start your namespace** (`start-namespace`, DISCLOSE — its own gate, then run; the user's permission prompt approves this **billable** create — make the `description` say so):\n\n- **Fire-and-forget:** submits the create with `--async`, returns immediately, and provisions server-side while you download the sample app.\n- **Read `namespace_name`** from the result — you pass it to `await-namespace` below. The handle isn't known yet (it resolves once provisioning completes).\n- **Errors:** `create-rejected` (region\u002Fname).\n\n**Step — Ask where to clone** (genuine input — **always ask, don't silently default**). Present a two-option numbered choice where **option 1 is the default clone path itself** (so the user sees and confirms the real path) and **option 2 is \"Somewhere else\"**:\n\n```\nWhere should I clone the sample app?\n1. .\u002Fmoney-transfer-project-template-python\n2. Somewhere else\n```\n\n- **1** → clone to that path (omit `--dir`, or pass it explicitly — same result).\n- **2 (Somewhere else)** → ask for the path, then pass it as `--dir`.\n\nShow the concrete default for the chosen SDK in option 1 (e.g. `.\u002Fmoney-transfer-project-template-ts` for TypeScript, `.\u002Fmoney-transfer-project-template-go` for Go). Pass the chosen path as `--dir` to `scaffold` below.\n\n**Step — Download the sample app** (`scaffold`, DISCLOSE — its own gate, then run, separate from the namespace):\n\n- **Clones the cloud-ready sample + installs dependencies** — runs **while the namespace provisions**, threading the Phase 1 manager choice and the clone dir just chosen.\n- **`--manager`\u002F`--dir` are validated fail-fast before the clone** — a bad\u002Funinstalled manager errors immediately (`manager-not-found` \u002F `unsupported-manager`).\n- **Read `repo_path` + `manager`.** Other errors: `clone-failed`, `unknown-sdk`.\n- The cloned branch ships wired for Cloud — **no connection code to edit.**\n\n**Step — Wait for the namespace** (`await-namespace --name \u003Cnamespace_name>`, DISCLOSE — render, then run): render its gate from the `await-namespace` template (§Gate templates), then run `scripts\u002Fprovision.sh await-namespace --name \u003Cnamespace_name>`. Polls (via the exact `namespace list --name` filter) until the namespace is **ACTIVE**, then reads the handle + endpoint from that result. Read **`namespace_handle`** + **`address`**; carry both into the key step below. Errors: `namespace-timeout` (appeared but slow — re-run), `namespace-not-provisioning` (never appeared — bad region, re-run `start-namespace` elsewhere), `handle-not-found`.\n\nFor reference, the per-SDK repo mapping (the script selects the right one):\n\n| SDK        | Repository (branch `money-transfer-project-cloud-setup`) |\n|------------|------------|\n| Python     | `https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-template-python` |\n| Go         | `https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-template-go` |\n| TypeScript | `https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-template-ts` |\n| Java       | `https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-java` |\n| .NET       | `https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-template-dotnet` |\n| Ruby       | `https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-template-ruby` |\n\n**How it connects (no edit needed):** all six SDKs load the **`cloud-setup`** profile from `temporal.toml` (env-config). The key step below writes it; nothing else is needed at run time.\n\n**After `await-namespace` returns, go straight to the `create-key` step — no *phase checkpoint* between them, and don't re-print the checklist or tracker. But `create-key` still gets its own gate — its command is disclosed, then run (the user's permission prompt approves it, like every step); it mints your key *and* writes\u002Freplaces the `cloud-setup` profile in `temporal.toml`. The next checklist render is the completed one at the end of the phase.**\n\n**Step — Create the key and save the config** (`create-key --handle \u003Cnamespace-handle> --address \u003Caddress>`, DISCLOSE — render, then run, using the values from the `await-namespace` step above). In one deterministic, secret-safe operation the script:\n\n- **re-verifies auth** (`whoami`, re-prompting login if expired);\n- **mints the key** with the pinned flags;\n- **captures it via `-o json` into a `0600` temp file** so the `eyJ…` token never reaches stdout, your context, or a rendered diff;\n- **writes a named `cloud-setup` profile** into the shared `temporal.toml` (address, namespace, api_key) **without touching `[profile.default]`** or its login session;\n- **`chmod 600`s the file** and deletes the temp capture.\n\nIt returns only the **non-secret** `key_id` and the `config_path` — never the token. Then verify the profile (DISCLOSE — render, then run): render its gate from the `verify-config` template (§Gate templates), then run `scripts\u002Fprovision.sh verify-config` to confirm the profile loads (it never prints the api_key value).\n\nThis is the **secret-handling carve-out** (§ above): render the action's label without the token; never reprint, log, argv-pass, or commit it.\n\n- On `error_code=key-empty`\u002F`not-authenticated`: an expired login — let the script re-prompt and retry once; don't switch output formats or poll.\n- On `error_code=key-limit-reached`: the account is at its API-key cap — the mint was rejected at create time. Have the user delete stale keys (`temporal cloud apikey list`, then `temporal cloud apikey delete --key-id \u003Cid>` on old `money-transfer-cloud-setup-*` keys), then re-run `create-key`. Don't re-run login.\n- On `error_code=no-json-parser`: install `jq` or `python3`, then re-run (the safe capture needs one).\n- On `error_code=manual-key-needed`: automatic capture failed and there was no terminal to paste into. Ask the **user** to paste the one-time key and re-run `create-key` from a context with a terminal — the script reads the paste *hidden*, straight into the locked file. **Never** have the user paste the key into the chat, and never paste it yourself.\n- The secret is shown only once and cannot be retrieved later; if it's truly lost, mint a new key (re-run this step) — don't try to recover the old value.\n\n**KeyId vs. secret — not the same thing.** The `key_id` the script returns (e.g. `JW4LO…`) is a non-secret *identifier* — the handle used to revoke the key later (`temporal cloud apikey delete --key-id \u003CKeyId>`); fine to show. **Only the `eyJ…` token is the credential** — never reprint, log, or commit it.\n\n**When you check off \"API key created,\" label the `key_id` so a newcomer can't mistake it for the secret.** A bare 32-char `key_id` on its own reads like a leaked key and alarms people. Render it with an explicit non-secret tag, and make the config line state the secret was stored (not shown) — e.g.:\n\n```\n- [x] API key created — key id JW4LO… (non-secret identifier; used to revoke the key)\n- [x] Config saved — ~\u002FLibrary\u002FApplication Support\u002Ftemporalio\u002Ftemporal.toml (chmod 600; secret stored, not shown)\n```\n\nNever render the `key_id` bare and unlabeled, and never put the `eyJ…` token on either line.\n\n**Env vars override the profile.** Env-config gives `TEMPORAL_*` env vars **higher precedence** than the TOML profile — the Phase 1 preflight flags any stray `TEMPORAL_ADDRESS`\u002F`TEMPORAL_NAMESPACE`\u002F`TEMPORAL_API_KEY`. If `stray_env` was non-empty, make sure they're unset in the run shell or they'll override the saved profile at run time.\n\n**If the user asks at the checkpoint, explain (plain language):** created your Cloud namespace and, in parallel, cloned a small money-transfer app in your language and installed its dependencies. Then minted an API key for your namespace (`\u003Cnamespace-handle>`) and saved the connection — address, namespace, key — into a locked `cloud-setup` profile your app reads at run time. (Docs: https:\u002F\u002Fdocs.temporal.io\u002Fdevelop · https:\u002F\u002Fdocs.temporal.io\u002Fcloud\u002Fapi-keys)\n\n## Phase 3 — Run your first Workflow\n\n*Intent: prove the whole setup works by running a real Workflow on Temporal Cloud.*\n\nStep checklist: `Worker running` · `Workflow completed`.\n\nThe app connects from config and Phase 2 supplied the credentials — this phase is **run-only**. All SDKs read the `cloud-setup` profile from `temporal.toml`; confirm it's present with `scripts\u002Fprovision.sh verify-config` if you haven't already.\n\n**Connect-readiness is handled for you — do not hand-roll the Worker.** The Worker start, the wait-until-it's-polling, the starter, and the Worker teardown all live in **one deterministic call** (`run-workflow`), so you never launch `nohup … &` \u002F `ps` \u002F `pgrep` yourself — that is exactly the flaky, noisy step this replaces. Two things still matter:\n\n1. A freshly-minted API key isn't accepted by the data plane *immediately* — wait on `await-auth` first.\n2. If the connect still fails, the namespace endpoint (`\u003Chandle>.tmprl.cloud:7233`) is correct — do **not** switch to a regional endpoint, re-mint the key, or edit the profile (per temporalio\u002Fdocumentation#4733). The failure is readiness, not the endpoint.\n\nRun two script calls, both using `repo_path` from Phase 2 (the script handles per-SDK run commands and Python venv activation internally — you don't):\n\n1. **Wait for auth** (`await-auth`, DISCLOSE — render, then run): render its gate from the `await-auth` template (§Gate templates), then run `scripts\u002Fprovision.sh await-auth` and wait for `auth_ready=true`. On `error_code=key-expired`, the key is permanently rejected (commonly a next-day re-test against a key that auto-expired in ~25h) — re-run `create-key` (see Failure Handling); on `auth-timeout`, read the appended redacted CLI stderr, wait, and re-run.\n2. **Run the Workflow** (`run-workflow --sdk \u003Csdk> --dir \u003Crepo_path>`, **GO-AHEAD** — the deliberate moment): render its gate from the `run-workflow` (clean run) template (§Gate templates), append `1. Run it \u002F 2. Chat about this` (on `2`, answer, then re-present), and on `Run it` one synchronous call starts the Worker, waits until it's polling (Temporal's API, not the OS process table), runs the starter, and stops the Worker. Wait for `workflow_status=COMPLETED`; it emits the run's **`workflow_id`** + **`run_id`** (don't run `workflow list` yourself). On `worker-unauthorized`, re-run `await-auth` then `run-workflow` (see Failure Handling).\n3. **Show the success link, then confirm the win.** `run-workflow` already verified `COMPLETED`. Surface the run's **timeline** page on its own bare line (bare URL so the terminal auto-linkifies it — no backticks\u002Ffence), using the `workflow_id` and `run_id` from the RESULT block:\n\n   **View your completed Workflow on Temporal Cloud:**\n\n   https:\u002F\u002Fcloud.temporal.io\u002Fnamespaces\u002F\u003Cnamespace-handle>\u002Fworkflows\u002F\u003Cworkflow-id>\u002F\u003Crun-id>\u002Ftimeline\n\n   That's your first Workflow on the Cloud — no separate `workflow describe` needed.\n\n   *Fallback — only if `run_id` came back `unknown` (the data plane was briefly lagging): show the Workflow **detail** page instead, rendered exactly like the link above — bold lead-in, then a bare URL alone on its own line (no backticks) so it auto-linkifies:*\n\n   **View your completed Workflow on Temporal Cloud:**\n\n   https:\u002F\u002Fcloud.temporal.io\u002Fnamespaces\u002F\u003Cnamespace-handle>\u002Fworkflows\u002F\u003Cworkflow-id>\n\n   *Never fall back to the bare `…\u002Fworkflows` namespace list.*\n\nAt the **Phase 3 checkpoint**, lead with the win — `**Phase 3 complete ✅ — your first Workflow ran clean.**` — then the standard numbered prompt (`1. Continue` \u002F `2. I have a question about this phase`). Phase 4 itself frames and triggers the failure injection, so this checkpoint stays a plain **Continue**.\n\n**If the user asks at the checkpoint, explain (plain language):** started a Worker that polls your Cloud namespace, ran the money-transfer Workflow against Temporal Cloud, and confirmed it reached `COMPLETED` — your first Workflow on the Cloud. (Docs: https:\u002F\u002Fdocs.temporal.io\u002Fworkflows)\n\n## Phase 4 — See Durable Execution (inject a failure)\n\n*Intent: break the transfer on purpose and watch Temporal retry and recover it — the durable-execution payoff. This phase is **required**; the user reaches it via **Continue** at the Phase 3 checkpoint, then triggers the break via the prompt below.*\n\nStep checklist: `Failure injected` · `Recovered & completed`.\n\n**Open by framing the break, then let the user trigger it.** After the tracker + intent + unchecked checklist, explain in one or two plain sentences what's about to happen — *we'll run the same transfer again, but force the deposit to fail on its first attempts, then watch Temporal automatically retry until it succeeds* — then present a numbered prompt so the user actively triggers it:\n\n```\n1. Inject the failure\n2. Chat about this\n```\n\nOn `1`, run the inject step below; on `2`, answer the question and re-present. This is a genuine engagement point (genuine input, not a checkpoint), not a checkpoint.\n\n> The `DEMO_FAILURE` toggle is shipped on the `money-transfer-project-cloud-setup` branches (the deposit activity reads it), verified end-to-end on real Cloud for all six supported SDKs.\n\n**Step — Inject the failure.** The `1. Inject the failure` choice above is this step's go-ahead — so disclose, then run (don't add a second go-ahead prompt):\n\n- **Disclose:** render its gate from the `run-workflow` (inject + recover) template (§Gate templates).\n- **Run:** `scripts\u002Fprovision.sh run-workflow --sdk \u003Csdk> --dir \u003Crepo_path> --demo-failure transient`. Starts the Worker with `DEMO_FAILURE=transient` (the deposit activity fails its first attempts, then succeeds), runs **the same starter command — the sample's source is never edited** (it reads its Workflow ID from the environment), and stops the Worker when done.\n- **Distinct Workflow ID:** this run is named `money-transfer-demo-recovery` (vs the clean run's `money-transfer-demo`), so it appears as a **separate Workflow** in Cloud whose history shows the failure-and-recovery.\n- **Wait for `workflow_status=COMPLETED`** — the retry recovered it. **Keep this call's `workflow_id` + `run_id`**; they identify the recovery run the Ending link points at.\n\n**Step — Show the recovery.** Keep it to **one line**: the deposit failed on purpose, Temporal retried it automatically, and the Workflow still reached `COMPLETED` (the withdrawal never re-ran) — then send them to the dashboard to see it. Don't walk through the worker logs or event history line-by-line; the dashboard CTA carries the detail.\n\n*(Variant — advanced, manual.)* `DEMO_FAILURE=permanent` makes the deposit fail **non-retryably**, so the **`refund`** compensation runs — the saga\u002Frollback story. Two caveats:\n\n- **Run it by hand, not through `run-workflow`** — `run-workflow` expects `COMPLETED` and would report a non-zero starter as `workflow-failed`.\n- **Terminal state differs by SDK** — narrate what the history actually shows, don't assert one outcome:\n  - Python \u002F Go \u002F TypeScript \u002F .NET → **`FAILED`** (the original error propagates after the refund).\n  - Java \u002F Ruby → **`COMPLETED`** (their saga returns after compensating).\n\nThere is **no checkpoint after Phase 4** — go straight to the Ending, whose Cloud-UI link is the recovered run's timeline page (`money-transfer-demo-recovery`).\n\n**If the user asks (plain language):** we made the deposit fail on purpose; Temporal retried it automatically and the Workflow still finished correctly — no lost state, no manual recovery. (Docs: https:\u002F\u002Fdocs.temporal.io\u002Fencyclopedia\u002Fretry-policies)\n\n\u003C\u002Fphases>\n\n## Ending the Skill\n\nOnce Phase 4 has shown the recovery, the setup is done. **Close with a short summary and the recovery link — keep it tight, no big recap table.** Do exactly this:\n\n1. **No Worker should still be running** — `run-workflow` stops its Worker when it returns, so Phases 3 and 4 leave nothing polling Cloud. Only stop a process by hand if you ran the advanced manual `DEMO_FAILURE=permanent` variant.\n2. **Show the recovered Workflow, then close with the summary.** First the Cloud UI link (bold lead-in, bare URL alone on its own line, no backticks) — the **recovery run's timeline** page, using the `workflow_id`\u002F`run_id` Phase 4 emitted:\n\n   **View your recovered Workflow on Temporal Cloud:**\n\n   https:\u002F\u002Fcloud.temporal.io\u002Fnamespaces\u002F\u003Cnamespace-handle>\u002Fworkflows\u002F\u003Cworkflow-id>\u002F\u003Crun-id>\u002Ftimeline\n\n   *Fallback — only if `run_id` is `unknown`: show the Workflow **detail** page the same way — bold lead-in, bare URL on its own line:*\n\n   **View your recovered Workflow on Temporal Cloud:**\n\n   https:\u002F\u002Fcloud.temporal.io\u002Fnamespaces\u002F\u003Cnamespace-handle>\u002Fworkflows\u002F\u003Cworkflow-id>\n\n   *— never the bare `…\u002Fworkflows` list.*\n\n   Then close with a short summary (a few plain sentences, no table) that makes the durable-execution payoff concrete — for example:\n\n   > 🎉 You're set up on Temporal Cloud — and you just watched **Durable Execution** in action. Your money-transfer Workflow ran on real Cloud infrastructure, and when the deposit failed on purpose, Temporal automatically retried it until it succeeded — the transfer still completed, with no lost state and not a line of retry code from you. That's the whole idea: you write the business logic; Temporal makes it survive failures and run to completion.\n\n3. **One-line note:** the API key is saved in `temporal.toml` (give the path, `chmod 600`) and **auto-expires in ~25 hours** — don't share raw terminal logs and never commit the TOML.\n\nThe summary above is the payoff — keep it to that one short recap. The only calls-to-action are the **two Workflow timeline links** — the completed run (Phase 3) and the recovered run (here at the end). Don't loop back, re-run, keep teaching, offer teardown, or suggest other next steps — a successful completion is the terminal state.\n\n## Failure Handling\n\nOn `status=error`, map the `error_code` via **`references\u002Ffailure-handling.md`** and fix the exact cause it names — never improvise an alternate command, switch output formats, or poll. Read that file only when an error fires (progressive disclosure); the Steps spine's On-error column indexes which codes each step can emit.\n\n## Files\n\n- `scripts\u002Fprovision.sh` — **the deterministic executor.** Owns preflight \u002F **detect-tools** \u002F **preview** \u002F install \u002F login \u002F regions \u002F namespace-create \u002F **install-deps (manager-parameterized)** \u002F key-mint+config-write \u002F verify \u002F await-auth \u002F **run-workflow (Worker + starter)** \u002F clone \u002F repair-config \u002F cleanup-info. Invoke it and parse its `=== RESULT ===` block (see \"Execution model\" above); it is the single source of truth for the pinned CLI flags, the per-SDK run commands, **and the per-(SDK,manager) install matrix + minimum-version table**. Pure bash, portable across Claude Code, Codex, and Cursor. **Read-only during a run — invoke it, never edit it (read-only script).**\n- `references\u002Funified-cli.md` — background on the prerelease CLI and the client-config TOML: `login`\u002F`whoami`, `region list`, `namespace create`, `apikey create-for-me`, file locations, and the auth-override gotcha. The script encodes these; read the reference when a flag drifts and you need to update the script.\n- `references\u002Fsdk-cloud.md` — per-SDK table: repo + cloud branch, task-queue name, how each connects (`cloud-setup` profile), and worker\u002Fstarter run commands. No connection edits — the branch is pre-wired.\n- `references\u002Ffailure-handling.md` — the `error_code` → remediation map. Read it **only when a subcommand returns `status=error`** (progressive disclosure — the happy path never opens it); the Failure Handling section above is a one-line pointer to it, and the Steps spine's On-error column is the index.\n",{"data":37,"body":40},{"name":4,"description":6,"version":38,"disable-model-invocation":39},"0.8.1",true,{"type":41,"children":42},"root",[43,51,58,72,100,207,213,230,1045,1051,2078,2085,2105,2266,2272,2302,2321,2330,2370,2382,2715,2810,2894,2920,2926,2965,3001,3057,3066,3085,3094,3119,3128,3138,3226,3232,3252,3332,3338,3690,3722,3728,3754,3955,3988,4017,4147,4159,4185,4372,4396,4582,4608,4614,4629,4638,4652,4661,4675,4684,4698,4707,4721,4730,4743,4752,4765,4774,4788,4797,4824,4833,4847,4856,4914,4927,4936,4956,4965,4978,4987,5001,5010,5024,5033,5048,5057,5107,5120,5193,5202,5208,5227,5232,5241,5246,5256,5262,5287,5409,5452,5461,5500,5506,5532,5541,5613,5617,5623,5632,8757,8763,8775,8972,8984,8989,9017,9023],{"type":44,"tag":45,"props":46,"children":47},"element","h1",{"id":4},[48],{"type":49,"value":50},"text","Temporal Cloud Setup",{"type":44,"tag":52,"props":53,"children":55},"h2",{"id":54},"role",[56],{"type":49,"value":57},"Role",{"type":44,"tag":59,"props":60,"children":61},"p",{},[62,64,70],{"type":49,"value":63},"You are an operator running the Temporal Cloud setup ",{"type":44,"tag":65,"props":66,"children":67},"strong",{},[68],{"type":49,"value":69},"for",{"type":49,"value":71}," the user. Do the work; do not turn this into a lecture. Ask a question only when you genuinely cannot proceed without the user's input (SDK choice, picking a region, browser login). Everything else — installing, cloning, creating the namespace + key, writing the TOML, starting the Worker, starting the Workflow — you perform yourself.",{"type":44,"tag":59,"props":73,"children":74},{},[75,77,81,83,90,92,98],{"type":49,"value":76},"This is the ",{"type":44,"tag":65,"props":78,"children":79},{},[80],{"type":49,"value":20},{"type":49,"value":82}," path. It is distinct from ",{"type":44,"tag":84,"props":85,"children":87},"code",{"className":86},[],[88],{"type":49,"value":89},"temporal-getting-started",{"type":49,"value":91},", which teaches Temporal locally with ",{"type":44,"tag":84,"props":93,"children":95},{"className":94},[],[96],{"type":49,"value":97},"temporal server start-dev",{"type":49,"value":99},". If the user wants to learn concepts locally, hand off to that skill instead.",{"type":44,"tag":59,"props":101,"children":102},{},[103,108,110,116,118,123,125,131,133,139,141,146,148,153,155,161,163,168,170,175,177,182,184,190,192,198,200,205],{"type":44,"tag":65,"props":104,"children":105},{},[106],{"type":49,"value":107},"Environment this skill needs — a local shell with outbound network.",{"type":49,"value":109}," It shells out to the real CLI and reaches the Temporal Cloud API over gRPC (",{"type":44,"tag":84,"props":111,"children":113},{"className":112},[],[114],{"type":49,"value":115},"*.tmprl.cloud",{"type":49,"value":117},"). It will ",{"type":44,"tag":65,"props":119,"children":120},{},[121],{"type":49,"value":122},"not",{"type":49,"value":124}," work from a sandbox that blocks outbound network. The trap: browser sign-in (",{"type":44,"tag":84,"props":126,"children":128},{"className":127},[],[129],{"type":49,"value":130},"login",{"type":49,"value":132},") and ",{"type":44,"tag":84,"props":134,"children":136},{"className":135},[],[137],{"type":49,"value":138},"whoami",{"type":49,"value":140}," both succeed ",{"type":44,"tag":65,"props":142,"children":143},{},[144],{"type":49,"value":145},"offline",{"type":49,"value":147}," — ",{"type":44,"tag":84,"props":149,"children":151},{"className":150},[],[152],{"type":49,"value":130},{"type":49,"value":154}," uses a ",{"type":44,"tag":84,"props":156,"children":158},{"className":157},[],[159],{"type":49,"value":160},"127.0.0.1",{"type":49,"value":162}," loopback and ",{"type":44,"tag":84,"props":164,"children":166},{"className":165},[],[167],{"type":49,"value":138},{"type":49,"value":169}," reads a cached token with no live API call — so a passing ",{"type":44,"tag":84,"props":171,"children":173},{"className":172},[],[174],{"type":49,"value":138},{"type":49,"value":176}," proves only that a ",{"type":44,"tag":65,"props":178,"children":179},{},[180],{"type":49,"value":181},"credential is present",{"type":49,"value":183},", never that the Cloud API is reachable. ",{"type":44,"tag":84,"props":185,"children":187},{"className":186},[],[188],{"type":49,"value":189},"regions",{"type":49,"value":191}," runs an authoritative post-login connectivity pulse; if it reports ",{"type":44,"tag":84,"props":193,"children":195},{"className":194},[],[196],{"type":49,"value":197},"cloud-unreachable",{"type":49,"value":199},", the fix is ",{"type":44,"tag":65,"props":201,"children":202},{},[203],{"type":49,"value":204},"network \u002F sandbox connectivity, not re-authentication",{"type":49,"value":206}," (see Failure Handling). Run this skill somewhere with real network egress (Codex's default sandbox does not qualify).",{"type":44,"tag":52,"props":208,"children":210},{"id":209},"output-contract-how-you-drive-every-step",[211],{"type":49,"value":212},"Output contract — how you drive every step",{"type":44,"tag":59,"props":214,"children":215},{},[216,218,223,225],{"type":49,"value":217},"For many users this is the ",{"type":44,"tag":65,"props":219,"children":220},{},[221],{"type":49,"value":222},"first time they ever see Temporal.",{"type":49,"value":224}," It's a guided, phased wizard for a newcomer: the work is real, the wizard is the presentation. ",{"type":44,"tag":65,"props":226,"children":227},{},[228],{"type":49,"value":229},"The tracker + step checklists tell the story — not prose.",{"type":44,"tag":231,"props":232,"children":233},"output-contract",{},[234,242,492,569,644,661,706,714],{"type":44,"tag":59,"props":235,"children":236},{},[237],{"type":44,"tag":65,"props":238,"children":239},{},[240],{"type":49,"value":241},"The per-step loop — disclose every command, then run it. The user's own tool-permission prompt is the approval (it shows them the same command and they allow\u002Fdeny it there); the skill does not add its own approval — except three deliberate steps that wait for a go-ahead.",{"type":44,"tag":243,"props":244,"children":245},"ol",{},[246,316,370],{"type":44,"tag":247,"props":248,"children":249},"li",{},[250,255,256,261,263,269,271,276,278,284,286,292,294,300,302,307,309,314],{"type":44,"tag":65,"props":251,"children":252},{},[253],{"type":49,"value":254},"Disclose",{"type":49,"value":147},{"type":44,"tag":65,"props":257,"children":258},{},[259],{"type":49,"value":260},"render the step's gate from its template in §Gate templates",{"type":49,"value":262},", filling the ",{"type":44,"tag":84,"props":264,"children":266},{"className":265},[],[267],{"type":49,"value":268},"‹slots›",{"type":49,"value":270}," from their named sources. This is ",{"type":44,"tag":65,"props":272,"children":273},{},[274],{"type":49,"value":275},"agent-rendered text — zero tool calls",{"type":49,"value":277},", so the gate is always on screen ",{"type":44,"tag":279,"props":280,"children":281},"em",{},[282],{"type":49,"value":283},"before",{"type":49,"value":285}," the command runs and disclosure never trips a permission prompt. The template is the exact final gate (a plain bold heading, then a fenced ",{"type":44,"tag":84,"props":287,"children":289},{"className":288},[],[290],{"type":49,"value":291},"```bash",{"type":49,"value":293}," block with ",{"type":44,"tag":84,"props":295,"children":297},{"className":296},[],[298],{"type":49,"value":299},"#",{"type":49,"value":301}," comments above each command); substitute ",{"type":44,"tag":65,"props":303,"children":304},{},[305],{"type":49,"value":306},"only",{"type":49,"value":308}," the ",{"type":44,"tag":84,"props":310,"children":312},{"className":311},[],[313],{"type":49,"value":268},{"type":49,"value":315}," and print it exactly — do not compose, reorder, or reformat it.",{"type":44,"tag":247,"props":317,"children":318},{},[319,324,326,332,334,345,347,353,355,361,363,368],{"type":44,"tag":65,"props":320,"children":321},{},[322],{"type":49,"value":323},"Run it",{"type":49,"value":325}," — run the real ",{"type":44,"tag":84,"props":327,"children":329},{"className":328},[],[330],{"type":49,"value":331},"scripts\u002Fprovision.sh \u003Csubcommand>",{"type":49,"value":333}," straight away (the user approves or denies at their own permission prompt). ",{"type":44,"tag":65,"props":335,"children":336},{},[337,339],{"type":49,"value":338},"Parse the ",{"type":44,"tag":84,"props":340,"children":342},{"className":341},[],[343],{"type":49,"value":344},"=== RESULT ===",{"type":49,"value":346}," on stdout. On ",{"type":44,"tag":84,"props":348,"children":350},{"className":349},[],[351],{"type":49,"value":352},"status=error",{"type":49,"value":354},", map ",{"type":44,"tag":84,"props":356,"children":358},{"className":357},[],[359],{"type":49,"value":360},"error_code",{"type":49,"value":362}," via ",{"type":44,"tag":65,"props":364,"children":365},{},[366],{"type":49,"value":367},"Failure Handling",{"type":49,"value":369}," and fix the named cause — never improvise an alternate command, switch output formats, or poll.",{"type":44,"tag":247,"props":371,"children":372},{},[373,378,380,418,422,424,429,430,436,438,450,453,459,461,467,469,474,476,482,484,490],{"type":44,"tag":65,"props":374,"children":375},{},[376],{"type":49,"value":377},"Go-ahead exception — three steps wait for the user before running",{"type":49,"value":379},", because starting blind makes no sense:",{"type":44,"tag":381,"props":382,"children":383},"ul",{},[384,397],{"type":44,"tag":247,"props":385,"children":386},{},[387,395],{"type":44,"tag":65,"props":388,"children":389},{},[390],{"type":44,"tag":84,"props":391,"children":393},{"className":392},[],[394],{"type":49,"value":130},{"type":49,"value":396}," — a browser window opens and blocks; the user must be ready.",{"type":44,"tag":247,"props":398,"children":399},{},[400,409,411,416],{"type":44,"tag":65,"props":401,"children":402},{},[403],{"type":44,"tag":84,"props":404,"children":406},{"className":405},[],[407],{"type":49,"value":408},"run-workflow",{"type":49,"value":410}," (Phase 3) and ",{"type":44,"tag":65,"props":412,"children":413},{},[414],{"type":49,"value":415},"inject-failure",{"type":49,"value":417}," (Phase 4) — running \u002F breaking the Workflow is the deliberate moment the user came for.",{"type":44,"tag":419,"props":420,"children":421},"br",{},[],{"type":49,"value":423},"For these, after rendering the gate, append two choices and ",{"type":44,"tag":65,"props":425,"children":426},{},[427],{"type":49,"value":428},"wait",{"type":49,"value":147},{"type":44,"tag":84,"props":431,"children":433},{"className":432},[],[434],{"type":49,"value":435},"1. \u003Caction> \u002F 2. Chat about this",{"type":49,"value":437},", where the action verb is step-specific:",{"type":44,"tag":439,"props":440,"children":444},"pre",{"className":441,"code":443,"language":49},[442],"language-text","1. \u003Caction>          (Sign in — login · Run it — run-workflow · Inject the failure — inject-failure)\n2. Chat about this\n",[445],{"type":44,"tag":84,"props":446,"children":448},{"__ignoreMap":447},"",[449],{"type":49,"value":443},{"type":44,"tag":419,"props":451,"children":452},{},[],{"type":44,"tag":84,"props":454,"children":456},{"className":455},[],[457],{"type":49,"value":458},"1",{"type":49,"value":460}," → run it. ",{"type":44,"tag":84,"props":462,"children":464},{"className":463},[],[465],{"type":49,"value":466},"2. Chat about this",{"type":49,"value":468}," → answer the user's question in plain language, then re-present the same choice (loop until they pick ",{"type":44,"tag":84,"props":470,"children":472},{"className":471},[],[473],{"type":49,"value":458},{"type":49,"value":475},"). If during that chat they ask to change a value (",{"type":44,"tag":84,"props":477,"children":479},{"className":478},[],[480],{"type":49,"value":481},"--dir",{"type":49,"value":483}," \u002F ",{"type":44,"tag":84,"props":485,"children":487},{"className":486},[],[488],{"type":49,"value":489},"--max-secs",{"type":49,"value":491}," \u002F SDK), re-invoke the subcommand with that user-facing arg — never the pinned internal flags.",{"type":44,"tag":59,"props":493,"children":494},{},[495,508,510,516,518,524,526,531,533,538,540,545,547,552,554,560,562,567],{"type":44,"tag":65,"props":496,"children":497},{},[498,500,506],{"type":49,"value":499},"A state-changing command that isn't a ",{"type":44,"tag":84,"props":501,"children":503},{"className":502},[],[504],{"type":49,"value":505},"provision.sh",{"type":49,"value":507}," subcommand",{"type":49,"value":509}," (so it has no template in §Gate templates — e.g. a one-off ",{"type":44,"tag":84,"props":511,"children":513},{"className":512},[],[514],{"type":49,"value":515},"gh",{"type":49,"value":517}," or ",{"type":44,"tag":84,"props":519,"children":521},{"className":520},[],[522],{"type":49,"value":523},"git",{"type":49,"value":525},"): ",{"type":44,"tag":65,"props":527,"children":528},{},[529],{"type":49,"value":530},"hand-render its gate yourself",{"type":49,"value":532}," in the same shape (a plain bold heading, then the ",{"type":44,"tag":84,"props":534,"children":536},{"className":535},[],[537],{"type":49,"value":299},{"type":49,"value":539}," comment + command in a fenced ",{"type":44,"tag":84,"props":541,"children":543},{"className":542},[],[544],{"type":49,"value":291},{"type":49,"value":546}," block) so the user sees exactly what will run, then run it — never silently, never buried inside an opaque script call. (This skill's normal flow has none: all ",{"type":44,"tag":84,"props":548,"children":550},{"className":549},[],[551],{"type":49,"value":523},{"type":49,"value":553}," runs inside ",{"type":44,"tag":84,"props":555,"children":557},{"className":556},[],[558],{"type":49,"value":559},"provision.sh scaffold",{"type":49,"value":561},", and it uses no ",{"type":44,"tag":84,"props":563,"children":565},{"className":564},[],[566],{"type":49,"value":515},{"type":49,"value":568},".)",{"type":44,"tag":59,"props":570,"children":571},{},[572,591,593,598,600,605,607,613,615,621,622,628,629,635,637,642],{"type":44,"tag":65,"props":573,"children":574},{},[575,577,583,585],{"type":49,"value":576},"Give every real ",{"type":44,"tag":84,"props":578,"children":580},{"className":579},[],[581],{"type":49,"value":582},"scripts\u002Fprovision.sh",{"type":49,"value":584}," Bash call a clear, plain-language ",{"type":44,"tag":84,"props":586,"children":588},{"className":587},[],[589],{"type":49,"value":590},"description",{"type":49,"value":592}," — since the user's permission prompt is now the approval surface, the ",{"type":44,"tag":84,"props":594,"children":596},{"className":595},[],[597],{"type":49,"value":590},{"type":49,"value":599}," is what they read when deciding to allow it. Never a bare \"Run script\", and ",{"type":44,"tag":65,"props":601,"children":602},{},[603],{"type":49,"value":604},"name material side effects",{"type":49,"value":606},": e.g. ",{"type":44,"tag":84,"props":608,"children":610},{"className":609},[],[611],{"type":49,"value":612},"Run the preflight check (read-only)",{"type":49,"value":614},", ",{"type":44,"tag":84,"props":616,"children":618},{"className":617},[],[619],{"type":49,"value":620},"Install the Temporal CLI (adds software)",{"type":49,"value":614},{"type":44,"tag":84,"props":623,"children":625},{"className":624},[],[626],{"type":49,"value":627},"Create your billable Cloud namespace",{"type":49,"value":614},{"type":44,"tag":84,"props":630,"children":632},{"className":631},[],[633],{"type":49,"value":634},"Mint the API key and write temporal.toml",{"type":49,"value":636},". (Disclosure is agent-rendered text from §Gate templates — no tool call — so only the ",{"type":44,"tag":84,"props":638,"children":640},{"className":639},[],[641],{"type":49,"value":582},{"type":49,"value":643}," runs need a description.)",{"type":44,"tag":59,"props":645,"children":646},{},[647,652,654,659],{"type":44,"tag":65,"props":648,"children":649},{},[650],{"type":49,"value":651},"Genuine questions",{"type":49,"value":653}," (SDK pick, region pick, clone-dir) are normal inputs presented as ",{"type":44,"tag":65,"props":655,"children":656},{},[657],{"type":49,"value":658},"numbered lists",{"type":49,"value":660},", not gates and not checkpoints.",{"type":44,"tag":59,"props":662,"children":663},{},[664,669,671,676,678,683,685,691,693,698,700,704],{"type":44,"tag":65,"props":665,"children":666},{},[667],{"type":49,"value":668},"Everything you print is a template — fill the slots, add nothing else.",{"type":49,"value":670}," Your entire output is one of: (a) a ",{"type":44,"tag":65,"props":672,"children":673},{},[674],{"type":49,"value":675},"gate rendered from its template in §Gate templates",{"type":49,"value":677}," (slots filled, otherwise verbatim), or (b) one of the ",{"type":44,"tag":65,"props":679,"children":680},{},[681],{"type":49,"value":682},"verbatim templates",{"type":49,"value":684}," defined in this skill — the roadmap, the tracker line, the step checklist, the phase checkpoint, the numbered questions, the result-link blocks, the ending — with its ",{"type":44,"tag":84,"props":686,"children":688},{"className":687},[],[689],{"type":49,"value":690},"\u003Cslots>",{"type":49,"value":692}," filled in. ",{"type":44,"tag":65,"props":694,"children":695},{},[696],{"type":49,"value":697},"Do not write any prose outside these templates",{"type":49,"value":699}," — no preambles, transitions, \"now I'll…\", or \"what this did\" summaries. The ",{"type":44,"tag":279,"props":701,"children":702},{},[703],{"type":49,"value":306},{"type":49,"value":705}," time you add free text is when you must do something the templates don't cover: answer a user's question (at a checkpoint) or report a genuine error. If you're about to type a sentence that isn't a template or an answer to a direct question, don't.",{"type":44,"tag":59,"props":707,"children":708},{},[709],{"type":44,"tag":65,"props":710,"children":711},{},[712],{"type":49,"value":713},"Exceptions \u002F hard limits — the only \"don'ts\":",{"type":44,"tag":381,"props":715,"children":716},{},[717,760,838,861,898,916,933,971,1003,1035],{"type":44,"tag":247,"props":718,"children":719},{},[720,732,734,739,740,745,747,752,754,758],{"type":44,"tag":65,"props":721,"children":722},{},[723,725,730],{"type":49,"value":724},"Gate before run — never call a ",{"type":44,"tag":84,"props":726,"children":728},{"className":727},[],[729],{"type":49,"value":505},{"type":49,"value":731}," command before its gate is on screen",{"type":49,"value":733}," (the other common Cursor failure: running the command with no preceding gate text, so the user sees nothing before a billable\u002Finstalling action). The gate is agent-rendered text from §Gate templates; render that block ",{"type":44,"tag":65,"props":735,"children":736},{},[737],{"type":49,"value":738},"first",{"type":49,"value":614},{"type":44,"tag":279,"props":741,"children":742},{},[743],{"type":49,"value":744},"then",{"type":49,"value":746}," make the tool call. As a backstop the script now also echoes the same gate to its own output, but that surfaces bundled with the result ",{"type":44,"tag":279,"props":748,"children":749},{},[750],{"type":49,"value":751},"after",{"type":49,"value":753}," the action — it is a record, ",{"type":44,"tag":65,"props":755,"children":756},{},[757],{"type":49,"value":122},{"type":49,"value":759}," a substitute for the pre-run gate. Order is always: render the gate, then run.",{"type":44,"tag":247,"props":761,"children":762},{},[763,768,770,775,777,782,784,789,791,796,798,803,805,817,819,823,825,829,831,836],{"type":44,"tag":65,"props":764,"children":765},{},[766],{"type":49,"value":767},"One step at a time — never stack steps, gates, or questions",{"type":49,"value":769}," (a common Cursor failure). Emit exactly ",{"type":44,"tag":65,"props":771,"children":772},{},[773],{"type":49,"value":774},"one",{"type":49,"value":776}," thing per message — a single gate, or a single numbered question — then ",{"type":44,"tag":65,"props":778,"children":779},{},[780],{"type":49,"value":781},"STOP and wait for it to resolve",{"type":49,"value":783}," before you disclose, ask, or run anything for the next step: wait for the ",{"type":44,"tag":65,"props":785,"children":786},{},[787],{"type":49,"value":788},"tool result",{"type":49,"value":790}," on a DISCLOSE\u002Frun step, or for the ",{"type":44,"tag":65,"props":792,"children":793},{},[794],{"type":49,"value":795},"user's reply",{"type":49,"value":797}," on an INPUT question or a GO-AHEAD step. Never render two gates together, never pair a question with the next step's gate, and ",{"type":44,"tag":65,"props":799,"children":800},{},[801],{"type":49,"value":802},"never ask the user to answer two things in one reply",{"type":49,"value":804}," (e.g. ",{"type":44,"tag":279,"props":806,"children":807},{},[808,810,815],{"type":49,"value":809},"\"reply with your manager choice ",{"type":44,"tag":65,"props":811,"children":812},{},[813],{"type":49,"value":814},"and",{"type":49,"value":816}," whether to sign in\"",{"type":49,"value":818},"). Concretely in Phase 1: pick the package manager → wait; ",{"type":44,"tag":279,"props":820,"children":821},{},[822],{"type":49,"value":744},{"type":49,"value":824}," install-cli → wait; ",{"type":44,"tag":279,"props":826,"children":827},{},[828],{"type":49,"value":744},{"type":49,"value":830}," sign-in → wait — three separate messages, never bundled. And ",{"type":44,"tag":65,"props":832,"children":833},{},[834],{"type":49,"value":835},"emit each prompt exactly once",{"type":49,"value":837},": once a gate, question, or checkpoint is on screen and you're waiting, it's done — never re-print it as a second message (if it's already the closing lines of a message you just sent, don't follow it with a standalone copy).",{"type":44,"tag":247,"props":839,"children":840},{},[841,846,848,852,854,859],{"type":44,"tag":65,"props":842,"children":843},{},[844],{"type":49,"value":845},"Codex turn-boundary visibility — user-input handoffs must be self-contained.",{"type":49,"value":847}," In Codex and other runtimes with separate progress\u002Ftool channels and a final assistant message, any message that waits for the user (SDK pick, package-manager pick, clone-dir pick, region pick, GO-AHEAD choice, checkpoint, or error pause) must include the full relevant visible context in the final assistant message of that turn. Do ",{"type":44,"tag":65,"props":849,"children":850},{},[851],{"type":49,"value":122},{"type":49,"value":853}," put the meaningful context (tracker, checklist, resolved selections, gate, or error) only in an intermediate\u002Fprogress message and then end with a bare prompt line. If the handoff is an end-of-phase checkpoint, hold the completed checklist and emit it once in that final handoff; this ",{"type":44,"tag":65,"props":855,"children":856},{},[857],{"type":49,"value":858},"replaces",{"type":49,"value":860}," the normal end-of-phase completed-checklist render and does not authorize a duplicate render.",{"type":44,"tag":247,"props":862,"children":863},{},[864,869,871,876,878,883,884,889,891,896],{"type":44,"tag":65,"props":865,"children":866},{},[867],{"type":49,"value":868},"No prose narration",{"type":49,"value":870}," (the #1 historical failure, esp. on Codex). Between a phase's opening checklist and its checkpoint, emit zero connective sentences and don't re-print the tracker\u002Fchecklist. Never write lines like ",{"type":44,"tag":279,"props":872,"children":873},{},[874],{"type":49,"value":875},"\"Now installing the CLI…\"",{"type":49,"value":877}," · ",{"type":44,"tag":279,"props":879,"children":880},{},[881],{"type":49,"value":882},"\"whoami came back empty — signing in…\"",{"type":49,"value":877},{"type":44,"tag":279,"props":885,"children":886},{},[887],{"type":49,"value":888},"\"Still waiting, retrying…\"",{"type":49,"value":890}," (all real failures). Retries \u002F polls \u002F readiness-waits inside one confirmed call are ",{"type":44,"tag":65,"props":892,"children":893},{},[894],{"type":49,"value":895},"silent",{"type":49,"value":897},". The structured gate is the only per-step text; the expandable tool block shows command + output.",{"type":44,"tag":247,"props":899,"children":900},{},[901,906,908,914],{"type":44,"tag":65,"props":902,"children":903},{},[904],{"type":49,"value":905},"Numbered lists for every choice",{"type":49,"value":907}," — runtime-agnostic; never an arrow-select \u002F ",{"type":44,"tag":84,"props":909,"children":911},{"className":910},[],[912],{"type":49,"value":913},"AskUserQuestion",{"type":49,"value":915}," menu; always show all options.",{"type":44,"tag":247,"props":917,"children":918},{},[919,924,926,931],{"type":44,"tag":65,"props":920,"children":921},{},[922],{"type":49,"value":923},"No Skip",{"type":49,"value":925}," — a go-ahead step's choices are only ",{"type":44,"tag":84,"props":927,"children":929},{"className":928},[],[930],{"type":49,"value":435},{"type":49,"value":932}," (every step is required; \"Chat about this\" never skips it — it answers a question, then re-presents). Don't print a \"no skip\" note.",{"type":44,"tag":247,"props":934,"children":935},{},[936,941,943,949,951,955,957,962,964,969],{"type":44,"tag":65,"props":937,"children":938},{},[939],{"type":49,"value":940},"Disclose in full.",{"type":49,"value":942}," A bundled subcommand (e.g. ",{"type":44,"tag":84,"props":944,"children":946},{"className":945},[],[947],{"type":49,"value":948},"scaffold",{"type":49,"value":950}," = clone + deps) gets ",{"type":44,"tag":65,"props":952,"children":953},{},[954],{"type":49,"value":774},{"type":49,"value":956}," gate, but its GATE block shows ",{"type":44,"tag":65,"props":958,"children":959},{},[960],{"type":49,"value":961},"all",{"type":49,"value":963}," its commands. Don't unbundle into per-",{"type":44,"tag":84,"props":965,"children":967},{"className":966},[],[968],{"type":49,"value":14},{"type":49,"value":970}," gates; don't hide what it runs.",{"type":44,"tag":247,"props":972,"children":973},{},[974,979,981,986,988,994,996,1001],{"type":44,"tag":65,"props":975,"children":976},{},[977],{"type":49,"value":978},"Never edit this skill's files",{"type":49,"value":980}," — invoke ",{"type":44,"tag":84,"props":982,"children":984},{"className":983},[],[985],{"type":49,"value":582},{"type":49,"value":987}," as shipped; it's pinned to run unchanged on every platform (macOS bash 3.2). Reformatting\u002F\"tidying\" its punctuation, quoting, regexes, or flags is forbidden. The only file you change on disk is the user's ",{"type":44,"tag":84,"props":989,"children":991},{"className":990},[],[992],{"type":49,"value":993},"temporal.toml",{"type":49,"value":995},", via the script. If a flag has genuinely drifted (script returns ",{"type":44,"tag":84,"props":997,"children":999},{"className":998},[],[1000],{"type":49,"value":352},{"type":49,"value":1002},"), stop and report it as a one-line maintenance note — don't fix it mid-run.",{"type":44,"tag":247,"props":1004,"children":1005},{},[1006,1011,1013,1019,1021,1026,1028,1033],{"type":44,"tag":65,"props":1007,"children":1008},{},[1009],{"type":49,"value":1010},"Already-satisfied prerequisite",{"type":49,"value":1012}," → render its checklist item as ",{"type":44,"tag":84,"props":1014,"children":1016},{"className":1015},[],[1017],{"type":49,"value":1018},"- [x] \u003Cthing> — already present, skipped",{"type":49,"value":1020}," (don't fake-install it). ",{"type":44,"tag":65,"props":1022,"children":1023},{},[1024],{"type":49,"value":1025},"Exception: the Temporal CLI.",{"type":49,"value":1027}," When the CLI is already present the Install-CLI step ",{"type":44,"tag":279,"props":1029,"children":1030},{},[1031],{"type":49,"value":1032},"updates",{"type":49,"value":1034}," it to the latest (PE-79), so render that step as updated\u002Fup-to-date, never \"skipped\" — see the Install-CLI flow step.",{"type":44,"tag":247,"props":1036,"children":1037},{},[1038,1043],{"type":44,"tag":65,"props":1039,"children":1040},{},[1041],{"type":49,"value":1042},"Secret carve-out",{"type":49,"value":1044}," (below) overrides disclosure for the API-key token.",{"type":44,"tag":52,"props":1046,"children":1048},{"id":1047},"steps-the-flow-the-spine",[1049],{"type":49,"value":1050},"Steps — the flow (the spine)",{"type":44,"tag":1052,"props":1053,"children":1054},"steps",{},[1055,1102,2065],{"type":44,"tag":59,"props":1056,"children":1057},{},[1058,1060,1065,1067,1072,1074,1079,1081,1086,1088,1093,1095,1100],{"type":49,"value":1059},"The whole run in order. Tier legend (full mechanics in the output contract above): ",{"type":44,"tag":65,"props":1061,"children":1062},{},[1063],{"type":49,"value":1064},"DISCLOSE",{"type":49,"value":1066}," = render the gate, then run (the user's permission prompt is the approval); ",{"type":44,"tag":65,"props":1068,"children":1069},{},[1070],{"type":49,"value":1071},"GO-AHEAD",{"type":49,"value":1073}," = render, then append ",{"type":44,"tag":84,"props":1075,"children":1077},{"className":1076},[],[1078],{"type":49,"value":435},{"type":49,"value":1080}," and wait (only the three deliberate steps); ",{"type":44,"tag":65,"props":1082,"children":1083},{},[1084],{"type":49,"value":1085},"INPUT",{"type":49,"value":1087}," = a numbered question (no script). Each step is one ",{"type":44,"tag":84,"props":1089,"children":1091},{"className":1090},[],[1092],{"type":49,"value":582},{"type":49,"value":1094}," subcommand unless noted. \"On-error\" lists the ",{"type":44,"tag":84,"props":1096,"children":1098},{"className":1097},[],[1099],{"type":49,"value":360},{"type":49,"value":1101},"s to map via Failure Handling.",{"type":44,"tag":1103,"props":1104,"children":1105},"table",{},[1106,1149],{"type":44,"tag":1107,"props":1108,"children":1109},"thead",{},[1110],{"type":44,"tag":1111,"props":1112,"children":1113},"tr",{},[1114,1119,1124,1129,1134,1139,1144],{"type":44,"tag":1115,"props":1116,"children":1117},"th",{},[1118],{"type":49,"value":299},{"type":44,"tag":1115,"props":1120,"children":1121},{},[1122],{"type":49,"value":1123},"Phase",{"type":44,"tag":1115,"props":1125,"children":1126},{},[1127],{"type":49,"value":1128},"Step",{"type":44,"tag":1115,"props":1130,"children":1131},{},[1132],{"type":49,"value":1133},"Tier",{"type":44,"tag":1115,"props":1135,"children":1136},{},[1137],{"type":49,"value":1138},"Subcommand",{"type":44,"tag":1115,"props":1140,"children":1141},{},[1142],{"type":49,"value":1143},"Emits",{"type":44,"tag":1115,"props":1145,"children":1146},{},[1147],{"type":49,"value":1148},"On-error",{"type":44,"tag":1150,"props":1151,"children":1152},"tbody",{},[1153,1189,1252,1317,1419,1476,1519,1567,1602,1678,1747,1818,1861,1916,2023],{"type":44,"tag":1111,"props":1154,"children":1155},{},[1156,1161,1165,1170,1174,1179,1184],{"type":44,"tag":1157,"props":1158,"children":1159},"td",{},[1160],{"type":49,"value":458},{"type":44,"tag":1157,"props":1162,"children":1163},{},[1164],{"type":49,"value":458},{"type":44,"tag":1157,"props":1166,"children":1167},{},[1168],{"type":49,"value":1169},"Choose SDK",{"type":44,"tag":1157,"props":1171,"children":1172},{},[1173],{"type":49,"value":1085},{"type":44,"tag":1157,"props":1175,"children":1176},{},[1177],{"type":49,"value":1178},"— (numbered list)",{"type":44,"tag":1157,"props":1180,"children":1181},{},[1182],{"type":49,"value":1183},"sdk",{"type":44,"tag":1157,"props":1185,"children":1186},{},[1187],{"type":49,"value":1188},"—",{"type":44,"tag":1111,"props":1190,"children":1191},{},[1192,1197,1201,1206,1210,1219,1243],{"type":44,"tag":1157,"props":1193,"children":1194},{},[1195],{"type":49,"value":1196},"2",{"type":44,"tag":1157,"props":1198,"children":1199},{},[1200],{"type":49,"value":458},{"type":44,"tag":1157,"props":1202,"children":1203},{},[1204],{"type":49,"value":1205},"Preflight",{"type":44,"tag":1157,"props":1207,"children":1208},{},[1209],{"type":49,"value":1064},{"type":44,"tag":1157,"props":1211,"children":1212},{},[1213],{"type":44,"tag":84,"props":1214,"children":1216},{"className":1215},[],[1217],{"type":49,"value":1218},"preflight --sdk",{"type":44,"tag":1157,"props":1220,"children":1221},{},[1222,1228,1230,1236,1237],{"type":44,"tag":84,"props":1223,"children":1225},{"className":1224},[],[1226],{"type":49,"value":1227},"config_path",{"type":49,"value":1229},",",{"type":44,"tag":84,"props":1231,"children":1233},{"className":1232},[],[1234],{"type":49,"value":1235},"warnings",{"type":49,"value":1229},{"type":44,"tag":84,"props":1238,"children":1240},{"className":1239},[],[1241],{"type":49,"value":1242},"stray_env",{"type":44,"tag":1157,"props":1244,"children":1245},{},[1246],{"type":44,"tag":84,"props":1247,"children":1249},{"className":1248},[],[1250],{"type":49,"value":1251},"config-dir-unwritable",{"type":44,"tag":1111,"props":1253,"children":1254},{},[1255,1260,1264,1269,1274,1283,1306],{"type":44,"tag":1157,"props":1256,"children":1257},{},[1258],{"type":49,"value":1259},"3",{"type":44,"tag":1157,"props":1261,"children":1262},{},[1263],{"type":49,"value":458},{"type":44,"tag":1157,"props":1265,"children":1266},{},[1267],{"type":49,"value":1268},"Detect tools + pick manager",{"type":44,"tag":1157,"props":1270,"children":1271},{},[1272],{"type":49,"value":1273},"DISCLOSE (+ INPUT if >1 manager)",{"type":44,"tag":1157,"props":1275,"children":1276},{},[1277],{"type":44,"tag":84,"props":1278,"children":1280},{"className":1279},[],[1281],{"type":49,"value":1282},"detect-tools --sdk",{"type":44,"tag":1157,"props":1284,"children":1285},{},[1286,1292,1293,1299,1300],{"type":44,"tag":84,"props":1287,"children":1289},{"className":1288},[],[1290],{"type":49,"value":1291},"default",{"type":49,"value":1229},{"type":44,"tag":84,"props":1294,"children":1296},{"className":1295},[],[1297],{"type":49,"value":1298},"managers",{"type":49,"value":1229},{"type":44,"tag":84,"props":1301,"children":1303},{"className":1302},[],[1304],{"type":49,"value":1305},"discrepancies",{"type":44,"tag":1157,"props":1307,"children":1308},{},[1309,1315],{"type":44,"tag":84,"props":1310,"children":1312},{"className":1311},[],[1313],{"type":49,"value":1314},"version-too-old",{"type":49,"value":1316}," (advisory)",{"type":44,"tag":1111,"props":1318,"children":1319},{},[1320,1325,1329,1334,1338,1347,1403],{"type":44,"tag":1157,"props":1321,"children":1322},{},[1323],{"type":49,"value":1324},"4",{"type":44,"tag":1157,"props":1326,"children":1327},{},[1328],{"type":49,"value":458},{"type":44,"tag":1157,"props":1330,"children":1331},{},[1332],{"type":49,"value":1333},"Install \u002F update CLI",{"type":44,"tag":1157,"props":1335,"children":1336},{},[1337],{"type":49,"value":1064},{"type":44,"tag":1157,"props":1339,"children":1340},{},[1341],{"type":44,"tag":84,"props":1342,"children":1344},{"className":1343},[],[1345],{"type":49,"value":1346},"install-cli",{"type":44,"tag":1157,"props":1348,"children":1349},{},[1350,1356,1358,1364,1366,1372,1373,1379,1381,1387,1388,1394,1395,1401],{"type":44,"tag":84,"props":1351,"children":1353},{"className":1352},[],[1354],{"type":49,"value":1355},"status",{"type":49,"value":1357}," (",{"type":44,"tag":84,"props":1359,"children":1361},{"className":1360},[],[1362],{"type":49,"value":1363},"ok",{"type":49,"value":1365},"); ",{"type":44,"tag":84,"props":1367,"children":1369},{"className":1368},[],[1370],{"type":49,"value":1371},"update",{"type":49,"value":1357},{"type":44,"tag":84,"props":1374,"children":1376},{"className":1375},[],[1377],{"type":49,"value":1378},"updated",{"type":49,"value":1380},"\u002F",{"type":44,"tag":84,"props":1382,"children":1384},{"className":1383},[],[1385],{"type":49,"value":1386},"up-to-date",{"type":49,"value":1380},{"type":44,"tag":84,"props":1389,"children":1391},{"className":1390},[],[1392],{"type":49,"value":1393},"skipped",{"type":49,"value":1380},{"type":44,"tag":84,"props":1396,"children":1398},{"className":1397},[],[1399],{"type":49,"value":1400},"failed",{"type":49,"value":1402},")",{"type":44,"tag":1157,"props":1404,"children":1405},{},[1406,1412,1413],{"type":44,"tag":84,"props":1407,"children":1409},{"className":1408},[],[1410],{"type":49,"value":1411},"brew-missing",{"type":49,"value":1229},{"type":44,"tag":84,"props":1414,"children":1416},{"className":1415},[],[1417],{"type":49,"value":1418},"manual-install",{"type":44,"tag":1111,"props":1420,"children":1421},{},[1422,1427,1431,1436,1443,1451,1460],{"type":44,"tag":1157,"props":1423,"children":1424},{},[1425],{"type":49,"value":1426},"5",{"type":44,"tag":1157,"props":1428,"children":1429},{},[1430],{"type":49,"value":458},{"type":44,"tag":1157,"props":1432,"children":1433},{},[1434],{"type":49,"value":1435},"Sign in",{"type":44,"tag":1157,"props":1437,"children":1438},{},[1439],{"type":44,"tag":65,"props":1440,"children":1441},{},[1442],{"type":49,"value":1071},{"type":44,"tag":1157,"props":1444,"children":1445},{},[1446],{"type":44,"tag":84,"props":1447,"children":1449},{"className":1448},[],[1450],{"type":49,"value":130},{"type":44,"tag":1157,"props":1452,"children":1453},{},[1454],{"type":44,"tag":84,"props":1455,"children":1457},{"className":1456},[],[1458],{"type":49,"value":1459},"identity",{"type":44,"tag":1157,"props":1461,"children":1462},{},[1463,1469,1470],{"type":44,"tag":84,"props":1464,"children":1466},{"className":1465},[],[1467],{"type":49,"value":1468},"login-failed",{"type":49,"value":1229},{"type":44,"tag":84,"props":1471,"children":1473},{"className":1472},[],[1474],{"type":49,"value":1475},"not-authenticated",{"type":44,"tag":1111,"props":1477,"children":1478},{},[1479,1484,1488,1493,1498,1506,1511],{"type":44,"tag":1157,"props":1480,"children":1481},{},[1482],{"type":49,"value":1483},"6",{"type":44,"tag":1157,"props":1485,"children":1486},{},[1487],{"type":49,"value":458},{"type":44,"tag":1157,"props":1489,"children":1490},{},[1491],{"type":49,"value":1492},"List + pick region",{"type":44,"tag":1157,"props":1494,"children":1495},{},[1496],{"type":49,"value":1497},"DISCLOSE + INPUT",{"type":44,"tag":1157,"props":1499,"children":1500},{},[1501],{"type":44,"tag":84,"props":1502,"children":1504},{"className":1503},[],[1505],{"type":49,"value":189},{"type":44,"tag":1157,"props":1507,"children":1508},{},[1509],{"type":49,"value":1510},"region list",{"type":44,"tag":1157,"props":1512,"children":1513},{},[1514],{"type":44,"tag":84,"props":1515,"children":1517},{"className":1516},[],[1518],{"type":49,"value":197},{"type":44,"tag":1111,"props":1520,"children":1521},{},[1522,1527,1531,1536,1540,1549,1558],{"type":44,"tag":1157,"props":1523,"children":1524},{},[1525],{"type":49,"value":1526},"7",{"type":44,"tag":1157,"props":1528,"children":1529},{},[1530],{"type":49,"value":1196},{"type":44,"tag":1157,"props":1532,"children":1533},{},[1534],{"type":49,"value":1535},"Start namespace (async)",{"type":44,"tag":1157,"props":1537,"children":1538},{},[1539],{"type":49,"value":1064},{"type":44,"tag":1157,"props":1541,"children":1542},{},[1543],{"type":44,"tag":84,"props":1544,"children":1546},{"className":1545},[],[1547],{"type":49,"value":1548},"start-namespace --sdk --region",{"type":44,"tag":1157,"props":1550,"children":1551},{},[1552],{"type":44,"tag":84,"props":1553,"children":1555},{"className":1554},[],[1556],{"type":49,"value":1557},"namespace_name",{"type":44,"tag":1157,"props":1559,"children":1560},{},[1561],{"type":44,"tag":84,"props":1562,"children":1564},{"className":1563},[],[1565],{"type":49,"value":1566},"create-rejected",{"type":44,"tag":1111,"props":1568,"children":1569},{},[1570,1575,1579,1584,1588,1593,1598],{"type":44,"tag":1157,"props":1571,"children":1572},{},[1573],{"type":49,"value":1574},"8",{"type":44,"tag":1157,"props":1576,"children":1577},{},[1578],{"type":49,"value":1196},{"type":44,"tag":1157,"props":1580,"children":1581},{},[1582],{"type":49,"value":1583},"Choose clone dir",{"type":44,"tag":1157,"props":1585,"children":1586},{},[1587],{"type":49,"value":1085},{"type":44,"tag":1157,"props":1589,"children":1590},{},[1591],{"type":49,"value":1592},"— (1=default \u002F 2=Edit)",{"type":44,"tag":1157,"props":1594,"children":1595},{},[1596],{"type":49,"value":1597},"dir",{"type":44,"tag":1157,"props":1599,"children":1600},{},[1601],{"type":49,"value":1188},{"type":44,"tag":1111,"props":1603,"children":1604},{},[1605,1610,1614,1619,1623,1632,1648],{"type":44,"tag":1157,"props":1606,"children":1607},{},[1608],{"type":49,"value":1609},"9",{"type":44,"tag":1157,"props":1611,"children":1612},{},[1613],{"type":49,"value":1196},{"type":44,"tag":1157,"props":1615,"children":1616},{},[1617],{"type":49,"value":1618},"Scaffold the app",{"type":44,"tag":1157,"props":1620,"children":1621},{},[1622],{"type":49,"value":1064},{"type":44,"tag":1157,"props":1624,"children":1625},{},[1626],{"type":44,"tag":84,"props":1627,"children":1629},{"className":1628},[],[1630],{"type":49,"value":1631},"scaffold --sdk [--manager] [--dir]",{"type":44,"tag":1157,"props":1633,"children":1634},{},[1635,1641,1642],{"type":44,"tag":84,"props":1636,"children":1638},{"className":1637},[],[1639],{"type":49,"value":1640},"repo_path",{"type":49,"value":1229},{"type":44,"tag":84,"props":1643,"children":1645},{"className":1644},[],[1646],{"type":49,"value":1647},"manager",{"type":44,"tag":1157,"props":1649,"children":1650},{},[1651,1657,1658,1664,1665,1671,1672],{"type":44,"tag":84,"props":1652,"children":1654},{"className":1653},[],[1655],{"type":49,"value":1656},"clone-failed",{"type":49,"value":1229},{"type":44,"tag":84,"props":1659,"children":1661},{"className":1660},[],[1662],{"type":49,"value":1663},"unknown-sdk",{"type":49,"value":1229},{"type":44,"tag":84,"props":1666,"children":1668},{"className":1667},[],[1669],{"type":49,"value":1670},"manager-not-found",{"type":49,"value":1229},{"type":44,"tag":84,"props":1673,"children":1675},{"className":1674},[],[1676],{"type":49,"value":1677},"unsupported-manager",{"type":44,"tag":1111,"props":1679,"children":1680},{},[1681,1686,1690,1695,1699,1708,1724],{"type":44,"tag":1157,"props":1682,"children":1683},{},[1684],{"type":49,"value":1685},"10",{"type":44,"tag":1157,"props":1687,"children":1688},{},[1689],{"type":49,"value":1196},{"type":44,"tag":1157,"props":1691,"children":1692},{},[1693],{"type":49,"value":1694},"Await namespace (join)",{"type":44,"tag":1157,"props":1696,"children":1697},{},[1698],{"type":49,"value":1064},{"type":44,"tag":1157,"props":1700,"children":1701},{},[1702],{"type":44,"tag":84,"props":1703,"children":1705},{"className":1704},[],[1706],{"type":49,"value":1707},"await-namespace --name",{"type":44,"tag":1157,"props":1709,"children":1710},{},[1711,1717,1718],{"type":44,"tag":84,"props":1712,"children":1714},{"className":1713},[],[1715],{"type":49,"value":1716},"namespace_handle",{"type":49,"value":1229},{"type":44,"tag":84,"props":1719,"children":1721},{"className":1720},[],[1722],{"type":49,"value":1723},"address",{"type":44,"tag":1157,"props":1725,"children":1726},{},[1727,1733,1734,1740,1741],{"type":44,"tag":84,"props":1728,"children":1730},{"className":1729},[],[1731],{"type":49,"value":1732},"namespace-timeout",{"type":49,"value":1229},{"type":44,"tag":84,"props":1735,"children":1737},{"className":1736},[],[1738],{"type":49,"value":1739},"namespace-not-provisioning",{"type":49,"value":1229},{"type":44,"tag":84,"props":1742,"children":1744},{"className":1743},[],[1745],{"type":49,"value":1746},"handle-not-found",{"type":44,"tag":1111,"props":1748,"children":1749},{},[1750,1755,1759,1764,1768,1777,1788],{"type":44,"tag":1157,"props":1751,"children":1752},{},[1753],{"type":49,"value":1754},"11",{"type":44,"tag":1157,"props":1756,"children":1757},{},[1758],{"type":49,"value":1196},{"type":44,"tag":1157,"props":1760,"children":1761},{},[1762],{"type":49,"value":1763},"Create key + save config",{"type":44,"tag":1157,"props":1765,"children":1766},{},[1767],{"type":49,"value":1064},{"type":44,"tag":1157,"props":1769,"children":1770},{},[1771],{"type":44,"tag":84,"props":1772,"children":1774},{"className":1773},[],[1775],{"type":49,"value":1776},"create-key --handle --address",{"type":44,"tag":1157,"props":1778,"children":1779},{},[1780,1786],{"type":44,"tag":84,"props":1781,"children":1783},{"className":1782},[],[1784],{"type":49,"value":1785},"key_id",{"type":49,"value":1787}," (token never printed)",{"type":44,"tag":1157,"props":1789,"children":1790},{},[1791,1797,1798,1804,1805,1811,1812],{"type":44,"tag":84,"props":1792,"children":1794},{"className":1793},[],[1795],{"type":49,"value":1796},"key-empty",{"type":49,"value":1229},{"type":44,"tag":84,"props":1799,"children":1801},{"className":1800},[],[1802],{"type":49,"value":1803},"key-limit-reached",{"type":49,"value":1229},{"type":44,"tag":84,"props":1806,"children":1808},{"className":1807},[],[1809],{"type":49,"value":1810},"no-json-parser",{"type":49,"value":1229},{"type":44,"tag":84,"props":1813,"children":1815},{"className":1814},[],[1816],{"type":49,"value":1817},"manual-key-needed",{"type":44,"tag":1111,"props":1819,"children":1820},{},[1821,1826,1830,1835,1839,1848,1852],{"type":44,"tag":1157,"props":1822,"children":1823},{},[1824],{"type":49,"value":1825},"12",{"type":44,"tag":1157,"props":1827,"children":1828},{},[1829],{"type":49,"value":1196},{"type":44,"tag":1157,"props":1831,"children":1832},{},[1833],{"type":49,"value":1834},"Verify config",{"type":44,"tag":1157,"props":1836,"children":1837},{},[1838],{"type":49,"value":1064},{"type":44,"tag":1157,"props":1840,"children":1841},{},[1842],{"type":44,"tag":84,"props":1843,"children":1845},{"className":1844},[],[1846],{"type":49,"value":1847},"verify-config",{"type":44,"tag":1157,"props":1849,"children":1850},{},[1851],{"type":49,"value":1188},{"type":44,"tag":1157,"props":1853,"children":1854},{},[1855],{"type":44,"tag":84,"props":1856,"children":1858},{"className":1857},[],[1859],{"type":49,"value":1860},"profile-missing",{"type":44,"tag":1111,"props":1862,"children":1863},{},[1864,1869,1873,1878,1882,1891,1900],{"type":44,"tag":1157,"props":1865,"children":1866},{},[1867],{"type":49,"value":1868},"13",{"type":44,"tag":1157,"props":1870,"children":1871},{},[1872],{"type":49,"value":1259},{"type":44,"tag":1157,"props":1874,"children":1875},{},[1876],{"type":49,"value":1877},"Await auth",{"type":44,"tag":1157,"props":1879,"children":1880},{},[1881],{"type":49,"value":1064},{"type":44,"tag":1157,"props":1883,"children":1884},{},[1885],{"type":44,"tag":84,"props":1886,"children":1888},{"className":1887},[],[1889],{"type":49,"value":1890},"await-auth",{"type":44,"tag":1157,"props":1892,"children":1893},{},[1894],{"type":44,"tag":84,"props":1895,"children":1897},{"className":1896},[],[1898],{"type":49,"value":1899},"auth_ready",{"type":44,"tag":1157,"props":1901,"children":1902},{},[1903,1909,1910],{"type":44,"tag":84,"props":1904,"children":1906},{"className":1905},[],[1907],{"type":49,"value":1908},"auth-timeout",{"type":49,"value":1229},{"type":44,"tag":84,"props":1911,"children":1913},{"className":1912},[],[1914],{"type":49,"value":1915},"key-expired",{"type":44,"tag":1111,"props":1917,"children":1918},{},[1919,1924,1928,1933,1940,1949,1972],{"type":44,"tag":1157,"props":1920,"children":1921},{},[1922],{"type":49,"value":1923},"14",{"type":44,"tag":1157,"props":1925,"children":1926},{},[1927],{"type":49,"value":1259},{"type":44,"tag":1157,"props":1929,"children":1930},{},[1931],{"type":49,"value":1932},"Run the Workflow",{"type":44,"tag":1157,"props":1934,"children":1935},{},[1936],{"type":44,"tag":65,"props":1937,"children":1938},{},[1939],{"type":49,"value":1071},{"type":44,"tag":1157,"props":1941,"children":1942},{},[1943],{"type":44,"tag":84,"props":1944,"children":1946},{"className":1945},[],[1947],{"type":49,"value":1948},"run-workflow --sdk --dir",{"type":44,"tag":1157,"props":1950,"children":1951},{},[1952,1958,1959,1965,1966],{"type":44,"tag":84,"props":1953,"children":1955},{"className":1954},[],[1956],{"type":49,"value":1957},"workflow_status",{"type":49,"value":1229},{"type":44,"tag":84,"props":1960,"children":1962},{"className":1961},[],[1963],{"type":49,"value":1964},"workflow_id",{"type":49,"value":1229},{"type":44,"tag":84,"props":1967,"children":1969},{"className":1968},[],[1970],{"type":49,"value":1971},"run_id",{"type":44,"tag":1157,"props":1973,"children":1974},{},[1975,1981,1982,1988,1989,1995,1996,2002,2003,2009,2010,2016,2017],{"type":44,"tag":84,"props":1976,"children":1978},{"className":1977},[],[1979],{"type":49,"value":1980},"worker-unauthorized",{"type":49,"value":1229},{"type":44,"tag":84,"props":1983,"children":1985},{"className":1984},[],[1986],{"type":49,"value":1987},"worker-not-polling",{"type":49,"value":1229},{"type":44,"tag":84,"props":1990,"children":1992},{"className":1991},[],[1993],{"type":49,"value":1994},"worker-start-failed",{"type":49,"value":1229},{"type":44,"tag":84,"props":1997,"children":1999},{"className":1998},[],[2000],{"type":49,"value":2001},"workflow-failed",{"type":49,"value":1229},{"type":44,"tag":84,"props":2004,"children":2006},{"className":2005},[],[2007],{"type":49,"value":2008},"workflow-not-submitted",{"type":49,"value":1229},{"type":44,"tag":84,"props":2011,"children":2013},{"className":2012},[],[2014],{"type":49,"value":2015},"workflow-timeout",{"type":49,"value":1229},{"type":44,"tag":84,"props":2018,"children":2020},{"className":2019},[],[2021],{"type":49,"value":2022},"precompile-failed",{"type":44,"tag":1111,"props":2024,"children":2025},{},[2026,2031,2035,2040,2047,2056,2061],{"type":44,"tag":1157,"props":2027,"children":2028},{},[2029],{"type":49,"value":2030},"15",{"type":44,"tag":1157,"props":2032,"children":2033},{},[2034],{"type":49,"value":1324},{"type":44,"tag":1157,"props":2036,"children":2037},{},[2038],{"type":49,"value":2039},"Inject failure + recover",{"type":44,"tag":1157,"props":2041,"children":2042},{},[2043],{"type":44,"tag":65,"props":2044,"children":2045},{},[2046],{"type":49,"value":1071},{"type":44,"tag":1157,"props":2048,"children":2049},{},[2050],{"type":44,"tag":84,"props":2051,"children":2053},{"className":2052},[],[2054],{"type":49,"value":2055},"run-workflow … --demo-failure transient",{"type":44,"tag":1157,"props":2057,"children":2058},{},[2059],{"type":49,"value":2060},"same as 14",{"type":44,"tag":1157,"props":2062,"children":2063},{},[2064],{"type":49,"value":2060},{"type":44,"tag":59,"props":2066,"children":2067},{},[2068,2070,2076],{"type":49,"value":2069},"Phase bodies below add only the human nuance the table can't (region-pick guardrails, KeyId-vs-secret labeling, the result links). The exact command of any step comes from its gate — render it from the ",{"type":44,"tag":84,"props":2071,"children":2073},{"className":2072},[],[2074],{"type":49,"value":2075},"‹sub›",{"type":49,"value":2077}," template in §Gate templates (slots filled), don't hand-write it.",{"type":44,"tag":2079,"props":2080,"children":2082},"h3",{"id":2081},"secret-handling-carve-out-overrides-command-disclosure",[2083],{"type":49,"value":2084},"Secret-handling carve-out (overrides command disclosure)",{"type":44,"tag":59,"props":2086,"children":2087},{},[2088,2090,2095,2097,2103],{"type":49,"value":2089},"The output contract says disclose the real command. ",{"type":44,"tag":65,"props":2091,"children":2092},{},[2093],{"type":49,"value":2094},"The API-key steps are the exception.",{"type":49,"value":2096}," The ",{"type":44,"tag":84,"props":2098,"children":2100},{"className":2099},[],[2101],{"type":49,"value":2102},"eyJ…",{"type":49,"value":2104}," token must never be reprinted, logged, rendered in a diff, or passed as an argv (a rendered diff is the one exposure that leaves the local machine). For the key-capture and TOML-write actions:",{"type":44,"tag":381,"props":2106,"children":2107},{},[2108,2128,2133,2158,2225],{"type":44,"tag":247,"props":2109,"children":2110},{},[2111,2113,2118,2120,2126],{"type":49,"value":2112},"Show the friendly label and a ",{"type":44,"tag":65,"props":2114,"children":2115},{},[2116],{"type":49,"value":2117},"redacted",{"type":49,"value":2119}," form of the command — e.g. ",{"type":44,"tag":84,"props":2121,"children":2123},{"className":2122},[],[2124],{"type":49,"value":2125},"api_key = \"eyJ…(captured, not shown)\"",{"type":49,"value":2127},".",{"type":44,"tag":247,"props":2129,"children":2130},{},[2131],{"type":49,"value":2132},"Never let the real token appear in the expandable block, in chat, or in a file-edit diff.",{"type":44,"tag":247,"props":2134,"children":2135},{},[2136,2138,2143,2144,2150,2152,2156],{"type":49,"value":2137},"The ",{"type":44,"tag":65,"props":2139,"children":2140},{},[2141],{"type":49,"value":2142},"KeyId",{"type":49,"value":804},{"type":44,"tag":84,"props":2145,"children":2147},{"className":2146},[],[2148],{"type":49,"value":2149},"JW4LO…",{"type":49,"value":2151},") is ",{"type":44,"tag":279,"props":2153,"children":2154},{},[2155],{"type":49,"value":122},{"type":49,"value":2157}," secret and may be shown. See Phase 2 for the KeyId-vs-secret distinction.",{"type":44,"tag":247,"props":2159,"children":2160},{},[2161,2188,2190,2195,2197,2202,2204,2208,2210,2216,2218,2223],{"type":44,"tag":65,"props":2162,"children":2163},{},[2164,2166,2172,2173,2179,2181,2186],{"type":49,"value":2165},"Never read, ",{"type":44,"tag":84,"props":2167,"children":2169},{"className":2168},[],[2170],{"type":49,"value":2171},"cat",{"type":49,"value":614},{"type":44,"tag":84,"props":2174,"children":2176},{"className":2175},[],[2177],{"type":49,"value":2178},"grep",{"type":49,"value":2180},", or open ",{"type":44,"tag":84,"props":2182,"children":2184},{"className":2183},[],[2185],{"type":49,"value":993},{"type":49,"value":2187}," (or any key-capture file) with the Read\u002FEdit\u002FUpdate tool.",{"type":49,"value":2189}," The file holds the ",{"type":44,"tag":84,"props":2191,"children":2193},{"className":2192},[],[2194],{"type":49,"value":2102},{"type":49,"value":2196}," token, so ",{"type":44,"tag":279,"props":2198,"children":2199},{},[2200],{"type":49,"value":2201},"any",{"type":49,"value":2203}," read of it surfaces the secret into this transcript — this is the most common accidental leak. To confirm the profile, use ",{"type":44,"tag":65,"props":2205,"children":2206},{},[2207],{"type":49,"value":306},{"type":49,"value":2209}," ",{"type":44,"tag":84,"props":2211,"children":2213},{"className":2212},[],[2214],{"type":49,"value":2215},"scripts\u002Fprovision.sh verify-config",{"type":49,"value":2217}," (it lists profile ",{"type":44,"tag":279,"props":2219,"children":2220},{},[2221],{"type":49,"value":2222},"names",{"type":49,"value":2224},", never the key value).",{"type":44,"tag":247,"props":2226,"children":2227},{},[2228,2256,2258,2264],{"type":44,"tag":65,"props":2229,"children":2230},{},[2231,2233,2239,2241,2247,2248,2254],{"type":49,"value":2232},"Never run ",{"type":44,"tag":84,"props":2234,"children":2236},{"className":2235},[],[2237],{"type":49,"value":2238},"temporal cloud apikey create-for-me",{"type":49,"value":2240}," (or any ",{"type":44,"tag":84,"props":2242,"children":2244},{"className":2243},[],[2245],{"type":49,"value":2246},"apikey",{"type":49,"value":1380},{"type":44,"tag":84,"props":2249,"children":2251},{"className":2250},[],[2252],{"type":49,"value":2253},"config",{"type":49,"value":2255}," command that emits the key) yourself.",{"type":49,"value":2257}," Only ",{"type":44,"tag":84,"props":2259,"children":2261},{"className":2260},[],[2262],{"type":49,"value":2263},"scripts\u002Fprovision.sh create-key",{"type":49,"value":2265}," mints and stores the token — it redirects the one-time secret straight into the locked file. Run the raw CLI by hand and it prints the token to the terminal, into this output.",{"type":44,"tag":52,"props":2267,"children":2269},{"id":2268},"execution-model-drive-the-bundled-script-dont-hand-roll-the-cli",[2270],{"type":49,"value":2271},"Execution model — drive the bundled script, don't hand-roll the CLI",{"type":44,"tag":59,"props":2273,"children":2274},{},[2275,2277,2285,2287,2300],{"type":49,"value":2276},"The variance-prone work — installing the CLI, signing in, listing regions, creating the namespace, minting the API key, and writing the client-config TOML — is owned by a bundled script: ",{"type":44,"tag":65,"props":2278,"children":2279},{},[2280],{"type":44,"tag":84,"props":2281,"children":2283},{"className":2282},[],[2284],{"type":49,"value":582},{"type":49,"value":2286},". ",{"type":44,"tag":65,"props":2288,"children":2289},{},[2290,2292,2298],{"type":49,"value":2291},"Invoke it and parse its result block; do not reassemble these ",{"type":44,"tag":84,"props":2293,"children":2295},{"className":2294},[],[2296],{"type":49,"value":2297},"temporal cloud",{"type":49,"value":2299}," commands yourself.",{"type":49,"value":2301}," That is what makes a run deterministic: the flags are pinned in one place, the retry \u002F auth-recheck \u002F \"read the handle from the create output\" logic is baked in, and the API-key token is written straight into the locked TOML by the script — so it never enters your context and can never leak into a rendered diff.",{"type":44,"tag":59,"props":2303,"children":2304},{},[2305,2307,2312,2314,2319],{"type":49,"value":2306},"Each operation prints one delimited block on ",{"type":44,"tag":65,"props":2308,"children":2309},{},[2310],{"type":49,"value":2311},"stdout",{"type":49,"value":2313}," — parse ",{"type":44,"tag":279,"props":2315,"children":2316},{},[2317],{"type":49,"value":2318},"that",{"type":49,"value":2320},", not the prose:",{"type":44,"tag":439,"props":2322,"children":2325},{"className":2323,"code":2324,"language":49},[442],"=== RESULT ===\nstatus=ok            # ok | error | skipped\n\u003Ckey>=\u003Cvalue>        # operation-specific, e.g. namespace_handle=…, address=…, key_id=…\n=== END ===\n",[2326],{"type":44,"tag":84,"props":2327,"children":2328},{"__ignoreMap":447},[2329],{"type":49,"value":2324},{"type":44,"tag":59,"props":2331,"children":2332},{},[2333,2335,2340,2342,2347,2349,2354,2356,2362,2364,2368],{"type":49,"value":2334},"Human-readable progress goes to ",{"type":44,"tag":65,"props":2336,"children":2337},{},[2338],{"type":49,"value":2339},"stderr",{"type":49,"value":2341}," (it shows in the expandable tool block — the teaching surface). On ",{"type":44,"tag":84,"props":2343,"children":2345},{"className":2344},[],[2346],{"type":49,"value":352},{"type":49,"value":2348}," the block carries ",{"type":44,"tag":84,"props":2350,"children":2352},{"className":2351},[],[2353],{"type":49,"value":360},{"type":49,"value":2355}," + ",{"type":44,"tag":84,"props":2357,"children":2359},{"className":2358},[],[2360],{"type":49,"value":2361},"message",{"type":49,"value":2363}," — map it via ",{"type":44,"tag":65,"props":2365,"children":2366},{},[2367],{"type":49,"value":367},{"type":49,"value":2369}," and fix the named cause (never improvise, switch output formats, or poll — as the output contract requires).",{"type":44,"tag":59,"props":2371,"children":2372},{},[2373,2375,2380],{"type":49,"value":2374},"The flow steps — subcommand, tier, and error codes — are the ",{"type":44,"tag":65,"props":2376,"children":2377},{},[2378],{"type":49,"value":2379},"Steps spine table above",{"type":49,"value":2381}," (single source of truth). The RESULT keys each emits:",{"type":44,"tag":381,"props":2383,"children":2384},{},[2385,2428,2462,2577,2629,2664],{"type":44,"tag":247,"props":2386,"children":2387},{},[2388,2394,2396,2402,2403,2408,2409,2415,2417,2422,2423],{"type":44,"tag":84,"props":2389,"children":2391},{"className":2390},[],[2392],{"type":49,"value":2393},"preflight",{"type":49,"value":2395}," → ",{"type":44,"tag":84,"props":2397,"children":2399},{"className":2398},[],[2400],{"type":49,"value":2401},"os",{"type":49,"value":614},{"type":44,"tag":84,"props":2404,"children":2406},{"className":2405},[],[2407],{"type":49,"value":1227},{"type":49,"value":614},{"type":44,"tag":84,"props":2410,"children":2412},{"className":2411},[],[2413],{"type":49,"value":2414},"cli_installed",{"type":49,"value":2416}," (drives Install-CLI: install if absent, update if present), ",{"type":44,"tag":84,"props":2418,"children":2420},{"className":2419},[],[2421],{"type":49,"value":1235},{"type":49,"value":614},{"type":44,"tag":84,"props":2424,"children":2426},{"className":2425},[],[2427],{"type":49,"value":1242},{"type":44,"tag":247,"props":2429,"children":2430},{},[2431,2437,2438,2443,2444,2449,2450,2456,2457],{"type":44,"tag":84,"props":2432,"children":2434},{"className":2433},[],[2435],{"type":49,"value":2436},"detect-tools",{"type":49,"value":2395},{"type":44,"tag":84,"props":2439,"children":2441},{"className":2440},[],[2442],{"type":49,"value":1291},{"type":49,"value":614},{"type":44,"tag":84,"props":2445,"children":2447},{"className":2446},[],[2448],{"type":49,"value":1298},{"type":49,"value":614},{"type":44,"tag":84,"props":2451,"children":2453},{"className":2452},[],[2454],{"type":49,"value":2455},"versions",{"type":49,"value":614},{"type":44,"tag":84,"props":2458,"children":2460},{"className":2459},[],[2461],{"type":49,"value":1305},{"type":44,"tag":247,"props":2463,"children":2464},{},[2465,2470,2471,2476,2477,2482,2484,2489,2490,2495,2496,2501,2502,2507,2508,2513,2515,2520,2521,2526,2528,2534,2535,2540,2541,2547,2549,2555,2557,2562,2563,2568,2570,2575],{"type":44,"tag":84,"props":2466,"children":2468},{"className":2467},[],[2469],{"type":49,"value":1346},{"type":49,"value":2395},{"type":44,"tag":84,"props":2472,"children":2474},{"className":2473},[],[2475],{"type":49,"value":1355},{"type":49,"value":1357},{"type":44,"tag":84,"props":2478,"children":2480},{"className":2479},[],[2481],{"type":49,"value":1363},{"type":49,"value":2483},") + ",{"type":44,"tag":84,"props":2485,"children":2487},{"className":2486},[],[2488],{"type":49,"value":1371},{"type":49,"value":1357},{"type":44,"tag":84,"props":2491,"children":2493},{"className":2492},[],[2494],{"type":49,"value":1378},{"type":49,"value":1380},{"type":44,"tag":84,"props":2497,"children":2499},{"className":2498},[],[2500],{"type":49,"value":1386},{"type":49,"value":1380},{"type":44,"tag":84,"props":2503,"children":2505},{"className":2504},[],[2506],{"type":49,"value":1393},{"type":49,"value":1380},{"type":44,"tag":84,"props":2509,"children":2511},{"className":2510},[],[2512],{"type":49,"value":1400},{"type":49,"value":2514}," when present; ",{"type":44,"tag":84,"props":2516,"children":2518},{"className":2517},[],[2519],{"type":49,"value":1393},{"type":49,"value":1380},{"type":44,"tag":84,"props":2522,"children":2524},{"className":2523},[],[2525],{"type":49,"value":1400},{"type":49,"value":2527}," still proceed with the working CLI) + ",{"type":44,"tag":84,"props":2529,"children":2531},{"className":2530},[],[2532],{"type":49,"value":2533},"reason",{"type":49,"value":1357},{"type":44,"tag":84,"props":2536,"children":2538},{"className":2537},[],[2539],{"type":49,"value":1411},{"type":49,"value":1380},{"type":44,"tag":84,"props":2542,"children":2544},{"className":2543},[],[2545],{"type":49,"value":2546},"unsupported-os",{"type":49,"value":2548},", present only alongside ",{"type":44,"tag":84,"props":2550,"children":2552},{"className":2551},[],[2553],{"type":49,"value":2554},"update=skipped",{"type":49,"value":2556},")  ·  ",{"type":44,"tag":84,"props":2558,"children":2560},{"className":2559},[],[2561],{"type":49,"value":130},{"type":49,"value":2395},{"type":44,"tag":84,"props":2564,"children":2566},{"className":2565},[],[2567],{"type":49,"value":1459},{"type":49,"value":2569},"  ·  ",{"type":44,"tag":84,"props":2571,"children":2573},{"className":2572},[],[2574],{"type":49,"value":189},{"type":49,"value":2576}," → raw list on stderr (you recommend, user picks)",{"type":44,"tag":247,"props":2578,"children":2579},{},[2580,2586,2587,2592,2593,2598,2599,2604,2605,2610,2611,2617,2618,2623,2624],{"type":44,"tag":84,"props":2581,"children":2583},{"className":2582},[],[2584],{"type":49,"value":2585},"start-namespace",{"type":49,"value":2395},{"type":44,"tag":84,"props":2588,"children":2590},{"className":2589},[],[2591],{"type":49,"value":1557},{"type":49,"value":2569},{"type":44,"tag":84,"props":2594,"children":2596},{"className":2595},[],[2597],{"type":49,"value":948},{"type":49,"value":2395},{"type":44,"tag":84,"props":2600,"children":2602},{"className":2601},[],[2603],{"type":49,"value":1640},{"type":49,"value":614},{"type":44,"tag":84,"props":2606,"children":2608},{"className":2607},[],[2609],{"type":49,"value":1647},{"type":49,"value":2569},{"type":44,"tag":84,"props":2612,"children":2614},{"className":2613},[],[2615],{"type":49,"value":2616},"await-namespace",{"type":49,"value":2395},{"type":44,"tag":84,"props":2619,"children":2621},{"className":2620},[],[2622],{"type":49,"value":1716},{"type":49,"value":614},{"type":44,"tag":84,"props":2625,"children":2627},{"className":2626},[],[2628],{"type":49,"value":1723},{"type":44,"tag":247,"props":2630,"children":2631},{},[2632,2638,2639,2644,2646,2651,2653,2658,2659],{"type":44,"tag":84,"props":2633,"children":2635},{"className":2634},[],[2636],{"type":49,"value":2637},"create-key",{"type":49,"value":2395},{"type":44,"tag":84,"props":2640,"children":2642},{"className":2641},[],[2643],{"type":49,"value":1785},{"type":49,"value":2645}," (token never printed)  ·  ",{"type":44,"tag":84,"props":2647,"children":2649},{"className":2648},[],[2650],{"type":49,"value":1847},{"type":49,"value":2652}," → profile names only  ·  ",{"type":44,"tag":84,"props":2654,"children":2656},{"className":2655},[],[2657],{"type":49,"value":1890},{"type":49,"value":2395},{"type":44,"tag":84,"props":2660,"children":2662},{"className":2661},[],[2663],{"type":49,"value":1899},{"type":44,"tag":247,"props":2665,"children":2666},{},[2667,2672,2673,2678,2679,2685,2687,2692,2693,2698,2699,2705,2707,2713],{"type":44,"tag":84,"props":2668,"children":2670},{"className":2669},[],[2671],{"type":49,"value":408},{"type":49,"value":2395},{"type":44,"tag":84,"props":2674,"children":2676},{"className":2675},[],[2677],{"type":49,"value":1957},{"type":49,"value":1357},{"type":44,"tag":84,"props":2680,"children":2682},{"className":2681},[],[2683],{"type":49,"value":2684},"COMPLETED",{"type":49,"value":2686},"), ",{"type":44,"tag":84,"props":2688,"children":2690},{"className":2689},[],[2691],{"type":49,"value":1964},{"type":49,"value":614},{"type":44,"tag":84,"props":2694,"children":2696},{"className":2695},[],[2697],{"type":49,"value":1971},{"type":49,"value":614},{"type":44,"tag":84,"props":2700,"children":2702},{"className":2701},[],[2703],{"type":49,"value":2704},"task_queue",{"type":49,"value":2706}," (add ",{"type":44,"tag":84,"props":2708,"children":2710},{"className":2709},[],[2711],{"type":49,"value":2712},"--demo-failure transient",{"type":49,"value":2714}," for Phase 4)",{"type":44,"tag":59,"props":2716,"children":2717},{},[2718,2723,2724,2730,2732,2738,2740,2746,2748,2753,2755,2761,2763,2769,2771,2777,2779,2785,2787,2793,2795,2800,2802,2808],{"type":44,"tag":65,"props":2719,"children":2720},{},[2721],{"type":49,"value":2722},"Utility subcommands (not in the main flow):",{"type":49,"value":2209},{"type":44,"tag":84,"props":2725,"children":2727},{"className":2726},[],[2728],{"type":49,"value":2729},"preview \u003Csub> [args]",{"type":49,"value":2731}," (emits the ",{"type":44,"tag":84,"props":2733,"children":2735},{"className":2734},[],[2736],{"type":49,"value":2737},"=== GATE ===",{"type":49,"value":2739}," block + ",{"type":44,"tag":84,"props":2741,"children":2743},{"className":2742},[],[2744],{"type":49,"value":2745},"cmd_N",{"type":49,"value":2747}," + resolved params; side-effect-free — ",{"type":44,"tag":65,"props":2749,"children":2750},{},[2751],{"type":49,"value":2752},"maintenance\u002Ftesting only, not used in the flow",{"type":49,"value":2754},": gates are rendered from §Gate templates, never by calling a script) · ",{"type":44,"tag":84,"props":2756,"children":2758},{"className":2757},[],[2759],{"type":49,"value":2760},"provision-and-scaffold",{"type":49,"value":2762}," (the older bundled namespace+clone+deps call — superseded by start\u002Fscaffold\u002Fawait, kept as a fallback) · ",{"type":44,"tag":84,"props":2764,"children":2766},{"className":2765},[],[2767],{"type":49,"value":2768},"install-deps",{"type":49,"value":2770}," (re-install \u002F switch manager) · ",{"type":44,"tag":84,"props":2772,"children":2774},{"className":2773},[],[2775],{"type":49,"value":2776},"clone",{"type":49,"value":2778}," (clone only) · ",{"type":44,"tag":84,"props":2780,"children":2782},{"className":2781},[],[2783],{"type":49,"value":2784},"repair-config",{"type":49,"value":2786}," (strip duplicate ",{"type":44,"tag":84,"props":2788,"children":2790},{"className":2789},[],[2791],{"type":49,"value":2792},"cloud-setup",{"type":49,"value":2794}," blocks; keeps ",{"type":44,"tag":84,"props":2796,"children":2798},{"className":2797},[],[2799],{"type":49,"value":1291},{"type":49,"value":2801},") · ",{"type":44,"tag":84,"props":2803,"children":2805},{"className":2804},[],[2806],{"type":49,"value":2807},"cleanup-info",{"type":49,"value":2809}," (prints the teardown commands, never runs them).",{"type":44,"tag":59,"props":2811,"children":2812},{},[2813,2818,2820,2825,2826,2830,2832,2837,2839,2844,2846,2851,2853,2858,2859,2865,2867,2872,2874,2879,2881,2885,2887,2892],{"type":44,"tag":65,"props":2814,"children":2815},{},[2816],{"type":49,"value":2817},"Utility subcommands are gated exactly like flow steps — disclose before running.",{"type":49,"value":2819}," \"Not in the main flow\" means ",{"type":44,"tag":279,"props":2821,"children":2822},{},[2823],{"type":49,"value":2824},"don't run them as routine steps",{"type":49,"value":614},{"type":44,"tag":65,"props":2827,"children":2828},{},[2829],{"type":49,"value":122},{"type":49,"value":2831}," that they skip disclosure: if you ever invoke one (",{"type":44,"tag":84,"props":2833,"children":2835},{"className":2834},[],[2836],{"type":49,"value":2768},{"type":49,"value":2838}," to switch a manager, ",{"type":44,"tag":84,"props":2840,"children":2842},{"className":2841},[],[2843],{"type":49,"value":2784},{"type":49,"value":2845}," to fix a duplicate profile, ",{"type":44,"tag":84,"props":2847,"children":2849},{"className":2848},[],[2850],{"type":49,"value":2776},{"type":49,"value":2852},", etc.), render its gate first (derive it from the ",{"type":44,"tag":84,"props":2854,"children":2856},{"className":2855},[],[2857],{"type":49,"value":948},{"type":49,"value":1380},{"type":44,"tag":84,"props":2860,"children":2862},{"className":2861},[],[2863],{"type":49,"value":2864},"install-cmd",{"type":49,"value":2866}," shapes in §Gate templates — these utilities have no dedicated template). ",{"type":44,"tag":65,"props":2868,"children":2869},{},[2870],{"type":49,"value":2871},"And don't improvise them into the flow:",{"type":49,"value":2873}," the main steps already cover the work (",{"type":44,"tag":84,"props":2875,"children":2877},{"className":2876},[],[2878],{"type":49,"value":948},{"type":49,"value":2880}," clones ",{"type":44,"tag":279,"props":2882,"children":2883},{},[2884],{"type":49,"value":814},{"type":49,"value":2886}," installs dependencies — never add an extra ",{"type":44,"tag":84,"props":2888,"children":2890},{"className":2889},[],[2891],{"type":49,"value":2768},{"type":49,"value":2893}," \"to confirm deps resolve\", and never narrate doing so).",{"type":44,"tag":59,"props":2895,"children":2896},{},[2897,2899,2904,2906,2911,2913,2918],{"type":49,"value":2898},"The script is the ",{"type":44,"tag":65,"props":2900,"children":2901},{},[2902],{"type":49,"value":2903},"single source of truth for CLI flags",{"type":49,"value":2905}," and is ",{"type":44,"tag":65,"props":2907,"children":2908},{},[2909],{"type":49,"value":2910},"read-only during a run",{"type":49,"value":2912}," — invoke it as shipped, never edit it; if a prerelease flag has genuinely drifted (",{"type":44,"tag":84,"props":2914,"children":2916},{"className":2915},[],[2917],{"type":49,"value":352},{"type":49,"value":2919},"), stop and report it as a one-line maintenance note (per the output contract), never fix it mid-setup. The wizard layer (tracker, checklists, checkpoints, the no-narration rules above) is still yours; only the imperative CLI work lives in the script.",{"type":44,"tag":52,"props":2921,"children":2923},{"id":2922},"per-command-gate-disclose-then-run",[2924],{"type":49,"value":2925},"Per-command gate — disclose, then run",{"type":44,"tag":59,"props":2927,"children":2928},{},[2929,2931,2936,2938,2943,2945,2950,2951,2956,2958,2963],{"type":49,"value":2930},"This setup runs real commands that ",{"type":44,"tag":65,"props":2932,"children":2933},{},[2934],{"type":49,"value":2935},"create billable Cloud resources and install software on the user's machine",{"type":49,"value":2937}," — which is why the disclose-then-run loop and the three ",{"type":44,"tag":65,"props":2939,"children":2940},{},[2941],{"type":49,"value":2942},"go-ahead",{"type":49,"value":2944}," steps (",{"type":44,"tag":84,"props":2946,"children":2948},{"className":2947},[],[2949],{"type":49,"value":130},{"type":49,"value":614},{"type":44,"tag":84,"props":2952,"children":2954},{"className":2953},[],[2955],{"type":49,"value":408},{"type":49,"value":2957},", inject-failure), both defined in the output contract above, matter here. This section pins the ",{"type":44,"tag":65,"props":2959,"children":2960},{},[2961],{"type":49,"value":2962},"exact shape",{"type":49,"value":2964}," of the gate you render.",{"type":44,"tag":59,"props":2966,"children":2967},{},[2968,2973,2975,2980,2982,2986,2988,2992,2994,3000],{"type":44,"tag":65,"props":2969,"children":2970},{},[2971],{"type":49,"value":2972},"Deterministic backstop (don't rely on it):",{"type":49,"value":2974}," every effectful ",{"type":44,"tag":84,"props":2976,"children":2978},{"className":2977},[],[2979],{"type":49,"value":505},{"type":49,"value":2981}," subcommand now also echoes its own gate to stderr (the tool block) ",{"type":44,"tag":279,"props":2983,"children":2984},{},[2985],{"type":49,"value":283},{"type":49,"value":2987}," it acts, so the run is self-documenting even if you forget the chat-side gate. This is a safety net — it surfaces bundled with the result, ",{"type":44,"tag":279,"props":2989,"children":2990},{},[2991],{"type":49,"value":751},{"type":49,"value":2993}," the action — so it never replaces rendering the gate first. Always render the §Gate-template gate, then run. (Disable only for tests via ",{"type":44,"tag":84,"props":2995,"children":2997},{"className":2996},[],[2998],{"type":49,"value":2999},"TCLOUD_DISCLOSE=0",{"type":49,"value":568},{"type":44,"tag":59,"props":3002,"children":3003},{},[3004,3009,3011,3015,3017,3022,3024,3029,3031,3035,3037,3042,3044,3049,3050,3055],{"type":44,"tag":65,"props":3005,"children":3006},{},[3007],{"type":49,"value":3008},"The gate — render it from the matching template in §Gate templates; never run a script to build it",{"type":49,"value":3010}," (hand-assembling the formatting is error-prone: dropped fences, comment-only, glued rules). Fill ",{"type":44,"tag":65,"props":3012,"children":3013},{},[3014],{"type":49,"value":306},{"type":49,"value":3016}," its ",{"type":44,"tag":84,"props":3018,"children":3020},{"className":3019},[],[3021],{"type":49,"value":268},{"type":49,"value":3023}," and print it exactly; rendering is ",{"type":44,"tag":65,"props":3025,"children":3026},{},[3027],{"type":49,"value":3028},"agent text — zero tool calls",{"type":49,"value":3030},". For a ",{"type":44,"tag":65,"props":3032,"children":3033},{},[3034],{"type":49,"value":2942},{"type":49,"value":3036}," step, append the numbered choices ",{"type":44,"tag":65,"props":3038,"children":3039},{},[3040],{"type":49,"value":3041},"stacked one per line",{"type":49,"value":3043}," and wait. The gate's shape — a plain bold heading, then a fenced ",{"type":44,"tag":84,"props":3045,"children":3047},{"className":3046},[],[3048],{"type":49,"value":291},{"type":49,"value":293},{"type":44,"tag":84,"props":3051,"children":3053},{"className":3052},[],[3054],{"type":49,"value":299},{"type":49,"value":3056}," comments above each command — looks like this (a disclose step — render it, then run):",{"type":44,"tag":439,"props":3058,"children":3061},{"className":3059,"code":3060,"language":49},[442],"**Installing the Temporal CLI**\n\n```bash\n# install the prerelease Temporal CLI via Homebrew (adds software to your machine)\nbrew install temporalio\u002Fprerelease\u002Ftemporal-cloud\n```\n",[3062],{"type":44,"tag":84,"props":3063,"children":3064},{"__ignoreMap":447},[3065],{"type":49,"value":3060},{"type":44,"tag":59,"props":3067,"children":3068},{},[3069,3071,3076,3078,3083],{"type":49,"value":3070},"A multi-step subcommand shows each underlying command, one per step — a terse ",{"type":44,"tag":84,"props":3072,"children":3074},{"className":3073},[],[3075],{"type":49,"value":299},{"type":49,"value":3077}," note ",{"type":44,"tag":65,"props":3079,"children":3080},{},[3081],{"type":49,"value":3082},"followed by the actual command",{"type":49,"value":3084}," (never a comment on its own). Still a disclose step — render, then run:",{"type":44,"tag":439,"props":3086,"children":3089},{"className":3087,"code":3088,"language":49},[442],"**Creating your namespace & downloading the sample app**\n\n```bash\n# 1. create your Cloud namespace — billable; provisions on Temporal's servers (~a few min)\ntemporal cloud namespace create --name \u003Cname> --region aws-us-east-1 \\\n  --api-key-auth-enabled --retention-days 30 --auto-confirm\n\n# 2. clone the Cloud-ready sample\ngit clone --branch money-transfer-project-cloud-setup --single-branch \\\n  \u003Crepo-url> money-transfer-project-template-python\n\n# 3. install dependencies (pip)\ncd money-transfer-project-template-python \\\n  && python3 -m venv env && source env\u002Fbin\u002Factivate \\\n  && python -m pip install -q temporalio\n```\n",[3090],{"type":44,"tag":84,"props":3091,"children":3092},{"__ignoreMap":447},[3093],{"type":49,"value":3088},{"type":44,"tag":59,"props":3095,"children":3096},{},[3097,3099,3103,3105,3117],{"type":49,"value":3098},"The run step is a ",{"type":44,"tag":65,"props":3100,"children":3101},{},[3102],{"type":49,"value":2942},{"type":49,"value":3104}," step — it shows the real Worker + starter commands (",{"type":44,"tag":65,"props":3106,"children":3107},{},[3108,3110,3115],{"type":49,"value":3109},"the commands themselves, not just their ",{"type":44,"tag":84,"props":3111,"children":3113},{"className":3112},[],[3114],{"type":49,"value":299},{"type":49,"value":3116}," labels",{"type":49,"value":3118},") and waits for the choice:",{"type":44,"tag":439,"props":3120,"children":3123},{"className":3121,"code":3122,"language":49},[442],"**Run your first Workflow**\n\n```bash\n# Worker — runs in the background, polls the task queue, stopped when done\ncd money-transfer-project-template-python && source env\u002Fbin\u002Factivate && python run_worker.py\n\n# starter — submits the Workflow, waits for it to reach COMPLETED, then exits\ncd money-transfer-project-template-python && WORKFLOW_ID=money-transfer-demo python run_workflow.py\n```\n\n1. Run it\n2. Chat about this\n",[3124],{"type":44,"tag":84,"props":3125,"children":3126},{"__ignoreMap":447},[3127],{"type":49,"value":3122},{"type":44,"tag":59,"props":3129,"children":3130},{},[3131,3136],{"type":44,"tag":65,"props":3132,"children":3133},{},[3134],{"type":49,"value":3135},"A few rules these examples encode",{"type":49,"value":3137}," (everything else is in the output contract above — don't restate it):",{"type":44,"tag":381,"props":3139,"children":3140},{},[3141,3173,3204],{"type":44,"tag":247,"props":3142,"children":3143},{},[3144,3156,3158,3164,3165,3171],{"type":44,"tag":65,"props":3145,"children":3146},{},[3147,3149,3154],{"type":49,"value":3148},"A ",{"type":44,"tag":84,"props":3150,"children":3152},{"className":3151},[],[3153],{"type":49,"value":299},{"type":49,"value":3155}," comment above every command — never a comment alone, never a bare command.",{"type":49,"value":3157}," The real commands must appear (never just ",{"type":44,"tag":84,"props":3159,"children":3161},{"className":3160},[],[3162],{"type":49,"value":3163},"# Worker",{"type":49,"value":483},{"type":44,"tag":84,"props":3166,"children":3168},{"className":3167},[],[3169],{"type":49,"value":3170},"# starter",{"type":49,"value":3172}," with the commands missing). Keep each comment to a few words; it's both a label and a one-line lesson for a newcomer.",{"type":44,"tag":247,"props":3174,"children":3175},{},[3176,3181,3182,3188,3189,3195,3196,3202],{"type":44,"tag":65,"props":3177,"children":3178},{},[3179],{"type":49,"value":3180},"Name material side effects in the relevant comment",{"type":49,"value":147},{"type":44,"tag":84,"props":3183,"children":3185},{"className":3184},[],[3186],{"type":49,"value":3187},"# … - billable",{"type":49,"value":614},{"type":44,"tag":84,"props":3190,"children":3192},{"className":3191},[],[3193],{"type":49,"value":3194},"# … (adds software to your machine)",{"type":49,"value":614},{"type":44,"tag":84,"props":3197,"children":3199},{"className":3198},[],[3200],{"type":49,"value":3201},"# mint key + write the cloud-setup profile to temporal.toml",{"type":49,"value":3203},". The §Gate templates already encode this; render them verbatim.",{"type":44,"tag":247,"props":3205,"children":3206},{},[3207,3217,3219,3224],{"type":44,"tag":65,"props":3208,"children":3209},{},[3210,3215],{"type":44,"tag":84,"props":3211,"children":3213},{"className":3212},[],[3214],{"type":49,"value":2637},{"type":49,"value":3216}," secret carve-out:",{"type":49,"value":3218}," its GATE block shows the mint command ",{"type":44,"tag":65,"props":3220,"children":3221},{},[3222],{"type":49,"value":3223},"without",{"type":49,"value":3225}," the token (captured straight into the locked TOML) — render as-is; never a token, never a redacted diff.",{"type":44,"tag":52,"props":3227,"children":3229},{"id":3228},"gate-templates",[3230],{"type":49,"value":3231},"Gate templates",{"type":44,"tag":59,"props":3233,"children":3234},{},[3235,3237,3242,3244,3250],{"type":49,"value":3236},"These are the ",{"type":44,"tag":65,"props":3238,"children":3239},{},[3240],{"type":49,"value":3241},"verbatim source",{"type":49,"value":3243}," for every step's gate — agent-rendered text (zero tool calls), so only the effectful ",{"type":44,"tag":84,"props":3245,"children":3247},{"className":3246},[],[3248],{"type":49,"value":3249},"scripts\u002Fprovision.sh \u003Csub>",{"type":49,"value":3251}," run ever prompts.",{"type":44,"tag":59,"props":3253,"children":3254},{},[3255,3260,3262,3266,3267,3272,3274,3279,3281,3286,3288,3294,3296,3300,3302,3308,3310,3315,3317,3323,3325,3330],{"type":44,"tag":65,"props":3256,"children":3257},{},[3258],{"type":49,"value":3259},"Hard rule — render the matching template verbatim.",{"type":49,"value":3261}," Substitute ",{"type":44,"tag":65,"props":3263,"children":3264},{},[3265],{"type":49,"value":306},{"type":49,"value":308},{"type":44,"tag":84,"props":3268,"children":3270},{"className":3269},[],[3271],{"type":49,"value":268},{"type":49,"value":3273},", never add\u002Fdrop\u002Freorder\u002Freformat lines or fences; keep every static character (headings, ",{"type":44,"tag":84,"props":3275,"children":3277},{"className":3276},[],[3278],{"type":49,"value":299},{"type":49,"value":3280}," comments, the ",{"type":44,"tag":84,"props":3282,"children":3284},{"className":3283},[],[3285],{"type":49,"value":291},{"type":49,"value":3287}," fence, spacing) byte-for-byte. Each ",{"type":44,"tag":84,"props":3289,"children":3291},{"className":3290},[],[3292],{"type":49,"value":3293},"‹slot›",{"type":49,"value":3295},"'s value comes ",{"type":44,"tag":65,"props":3297,"children":3298},{},[3299],{"type":49,"value":306},{"type":49,"value":3301}," from its named source in \"Filling the slots\" below — never from memory, never improvised. The result is exactly what ",{"type":44,"tag":84,"props":3303,"children":3305},{"className":3304},[],[3306],{"type":49,"value":3307},"scripts\u002Fprovision.sh preview \u003Csub>",{"type":49,"value":3309}," prints between its ",{"type":44,"tag":84,"props":3311,"children":3313},{"className":3312},[],[3314],{"type":49,"value":2737},{"type":49,"value":3316},"…",{"type":44,"tag":84,"props":3318,"children":3320},{"className":3319},[],[3321],{"type":49,"value":3322},"=== END GATE ===",{"type":49,"value":3324}," markers (a maintenance\u002Ftesting subcommand — the flow never calls it; the drift-guard test keeps these templates and ",{"type":44,"tag":84,"props":3326,"children":3328},{"className":3327},[],[3329],{"type":49,"value":505},{"type":49,"value":3331},"'s runtime commands in sync).",{"type":44,"tag":2079,"props":3333,"children":3335},{"id":3334},"filling-the-slots",[3336],{"type":49,"value":3337},"Filling the slots",{"type":44,"tag":1103,"props":3339,"children":3340},{},[3341,3357],{"type":44,"tag":1107,"props":3342,"children":3343},{},[3344],{"type":44,"tag":1111,"props":3345,"children":3346},{},[3347,3352],{"type":44,"tag":1115,"props":3348,"children":3349},{},[3350],{"type":49,"value":3351},"Slot",{"type":44,"tag":1115,"props":3353,"children":3354},{},[3355],{"type":49,"value":3356},"Source",{"type":44,"tag":1150,"props":3358,"children":3359},{},[3360,3377,3401,3430,3454,3480,3506,3532,3554,3581,3602,3623,3644,3667],{"type":44,"tag":1111,"props":3361,"children":3362},{},[3363,3372],{"type":44,"tag":1157,"props":3364,"children":3365},{},[3366],{"type":44,"tag":84,"props":3367,"children":3369},{"className":3368},[],[3370],{"type":49,"value":3371},"‹sdk›",{"type":44,"tag":1157,"props":3373,"children":3374},{},[3375],{"type":49,"value":3376},"the user's SDK pick (Phase 1)",{"type":44,"tag":1111,"props":3378,"children":3379},{},[3380,3389],{"type":44,"tag":1157,"props":3381,"children":3382},{},[3383],{"type":44,"tag":84,"props":3384,"children":3386},{"className":3385},[],[3387],{"type":49,"value":3388},"‹region›",{"type":44,"tag":1157,"props":3390,"children":3391},{},[3392,3394,3399],{"type":49,"value":3393},"the user's region pick (Phase 1, from the ",{"type":44,"tag":84,"props":3395,"children":3397},{"className":3396},[],[3398],{"type":49,"value":189},{"type":49,"value":3400}," list)",{"type":44,"tag":1111,"props":3402,"children":3403},{},[3404,3413],{"type":44,"tag":1157,"props":3405,"children":3406},{},[3407],{"type":44,"tag":84,"props":3408,"children":3410},{"className":3409},[],[3411],{"type":49,"value":3412},"‹manager›",{"type":44,"tag":1157,"props":3414,"children":3415},{},[3416,3421,3423,3428],{"type":44,"tag":84,"props":3417,"children":3419},{"className":3418},[],[3420],{"type":49,"value":2436},{"type":49,"value":3422}," RESULT ",{"type":44,"tag":84,"props":3424,"children":3426},{"className":3425},[],[3427],{"type":49,"value":1291},{"type":49,"value":3429},", or the user's override when they pick a non-default manager",{"type":44,"tag":1111,"props":3431,"children":3432},{},[3433,3442],{"type":44,"tag":1157,"props":3434,"children":3435},{},[3436],{"type":44,"tag":84,"props":3437,"children":3439},{"className":3438},[],[3440],{"type":49,"value":3441},"‹clone-dir›",{"type":44,"tag":1157,"props":3443,"children":3444},{},[3445,3447,3452],{"type":49,"value":3446},"the user's clone-dir pick (Phase 2); default = the repo basename for ",{"type":44,"tag":84,"props":3448,"children":3450},{"className":3449},[],[3451],{"type":49,"value":3371},{"type":49,"value":3453}," (see SDK command reference)",{"type":44,"tag":1111,"props":3455,"children":3456},{},[3457,3466],{"type":44,"tag":1157,"props":3458,"children":3459},{},[3460],{"type":44,"tag":84,"props":3461,"children":3463},{"className":3462},[],[3464],{"type":49,"value":3465},"‹namespace-name›",{"type":44,"tag":1157,"props":3467,"children":3468},{},[3469,3474,3475],{"type":44,"tag":84,"props":3470,"children":3472},{"className":3471},[],[3473],{"type":49,"value":2585},{"type":49,"value":3422},{"type":44,"tag":84,"props":3476,"children":3478},{"className":3477},[],[3479],{"type":49,"value":1557},{"type":44,"tag":1111,"props":3481,"children":3482},{},[3483,3492],{"type":44,"tag":1157,"props":3484,"children":3485},{},[3486],{"type":44,"tag":84,"props":3487,"children":3489},{"className":3488},[],[3490],{"type":49,"value":3491},"‹namespace-handle›",{"type":44,"tag":1157,"props":3493,"children":3494},{},[3495,3500,3501],{"type":44,"tag":84,"props":3496,"children":3498},{"className":3497},[],[3499],{"type":49,"value":2616},{"type":49,"value":3422},{"type":44,"tag":84,"props":3502,"children":3504},{"className":3503},[],[3505],{"type":49,"value":1716},{"type":44,"tag":1111,"props":3507,"children":3508},{},[3509,3518],{"type":44,"tag":1157,"props":3510,"children":3511},{},[3512],{"type":44,"tag":84,"props":3513,"children":3515},{"className":3514},[],[3516],{"type":49,"value":3517},"‹address›",{"type":44,"tag":1157,"props":3519,"children":3520},{},[3521,3526,3527],{"type":44,"tag":84,"props":3522,"children":3524},{"className":3523},[],[3525],{"type":49,"value":2616},{"type":49,"value":3422},{"type":44,"tag":84,"props":3528,"children":3530},{"className":3529},[],[3531],{"type":49,"value":1723},{"type":44,"tag":1111,"props":3533,"children":3534},{},[3535,3544],{"type":44,"tag":1157,"props":3536,"children":3537},{},[3538],{"type":44,"tag":84,"props":3539,"children":3541},{"className":3540},[],[3542],{"type":49,"value":3543},"‹repo-url›",{"type":44,"tag":1157,"props":3545,"children":3546},{},[3547,3549],{"type":49,"value":3548},"SDK command reference, keyed by ",{"type":44,"tag":84,"props":3550,"children":3552},{"className":3551},[],[3553],{"type":49,"value":3371},{"type":44,"tag":1111,"props":3555,"children":3556},{},[3557,3566],{"type":44,"tag":1157,"props":3558,"children":3559},{},[3560],{"type":44,"tag":84,"props":3561,"children":3563},{"className":3562},[],[3564],{"type":49,"value":3565},"‹install-cmd›",{"type":44,"tag":1157,"props":3567,"children":3568},{},[3569,3570,3575,3576],{"type":49,"value":3548},{"type":44,"tag":84,"props":3571,"children":3573},{"className":3572},[],[3574],{"type":49,"value":3371},{"type":49,"value":1380},{"type":44,"tag":84,"props":3577,"children":3579},{"className":3578},[],[3580],{"type":49,"value":3412},{"type":44,"tag":1111,"props":3582,"children":3583},{},[3584,3593],{"type":44,"tag":1157,"props":3585,"children":3586},{},[3587],{"type":44,"tag":84,"props":3588,"children":3590},{"className":3589},[],[3591],{"type":49,"value":3592},"‹worker-cmd›",{"type":44,"tag":1157,"props":3594,"children":3595},{},[3596,3597],{"type":49,"value":3548},{"type":44,"tag":84,"props":3598,"children":3600},{"className":3599},[],[3601],{"type":49,"value":3371},{"type":44,"tag":1111,"props":3603,"children":3604},{},[3605,3614],{"type":44,"tag":1157,"props":3606,"children":3607},{},[3608],{"type":44,"tag":84,"props":3609,"children":3611},{"className":3610},[],[3612],{"type":49,"value":3613},"‹starter-cmd›",{"type":44,"tag":1157,"props":3615,"children":3616},{},[3617,3618],{"type":49,"value":3548},{"type":44,"tag":84,"props":3619,"children":3621},{"className":3620},[],[3622],{"type":49,"value":3371},{"type":44,"tag":1111,"props":3624,"children":3625},{},[3626,3635],{"type":44,"tag":1157,"props":3627,"children":3628},{},[3629],{"type":44,"tag":84,"props":3630,"children":3632},{"className":3631},[],[3633],{"type":49,"value":3634},"‹task-queue›",{"type":44,"tag":1157,"props":3636,"children":3637},{},[3638,3639],{"type":49,"value":3548},{"type":44,"tag":84,"props":3640,"children":3642},{"className":3641},[],[3643],{"type":49,"value":3371},{"type":44,"tag":1111,"props":3645,"children":3646},{},[3647,3656],{"type":44,"tag":1157,"props":3648,"children":3649},{},[3650],{"type":44,"tag":84,"props":3651,"children":3653},{"className":3652},[],[3654],{"type":49,"value":3655},"‹runtime›",{"type":44,"tag":1157,"props":3657,"children":3658},{},[3659,3660,3665],{"type":49,"value":3548},{"type":44,"tag":84,"props":3661,"children":3663},{"className":3662},[],[3664],{"type":49,"value":3371},{"type":49,"value":3666}," (the version-probe binary)",{"type":44,"tag":1111,"props":3668,"children":3669},{},[3670,3679],{"type":44,"tag":1157,"props":3671,"children":3672},{},[3673],{"type":44,"tag":84,"props":3674,"children":3676},{"className":3675},[],[3677],{"type":49,"value":3678},"‹probe-bins›",{"type":44,"tag":1157,"props":3680,"children":3681},{},[3682,3683,3688],{"type":49,"value":3548},{"type":44,"tag":84,"props":3684,"children":3686},{"className":3685},[],[3687],{"type":49,"value":3371},{"type":49,"value":3689}," (the manager binaries to look for)",{"type":44,"tag":59,"props":3691,"children":3692},{},[3693,3699,3701,3706,3708,3713,3715,3720],{"type":44,"tag":84,"props":3694,"children":3696},{"className":3695},[],[3697],{"type":49,"value":3698},"‹key-id›",{"type":49,"value":3700}," is ",{"type":44,"tag":65,"props":3702,"children":3703},{},[3704],{"type":49,"value":3705},"never",{"type":49,"value":3707}," shown in any gate — it appears only in the final summary (Phase 2 checklist). There is ",{"type":44,"tag":65,"props":3709,"children":3710},{},[3711],{"type":49,"value":3712},"no token slot",{"type":49,"value":3714},": the ",{"type":44,"tag":84,"props":3716,"children":3718},{"className":3717},[],[3719],{"type":49,"value":2102},{"type":49,"value":3721}," token never appears in a template.",{"type":44,"tag":2079,"props":3723,"children":3725},{"id":3724},"sdk-command-reference",[3726],{"type":49,"value":3727},"SDK command reference",{"type":44,"tag":59,"props":3729,"children":3730},{},[3731,3733,3738,3740,3745,3747,3752],{"type":49,"value":3732},"Source of truth = ",{"type":44,"tag":84,"props":3734,"children":3736},{"className":3735},[],[3737],{"type":49,"value":582},{"type":49,"value":3739},". Keyed by ",{"type":44,"tag":84,"props":3741,"children":3743},{"className":3742},[],[3744],{"type":49,"value":3371},{"type":49,"value":3746}," (and ",{"type":44,"tag":84,"props":3748,"children":3750},{"className":3749},[],[3751],{"type":49,"value":3412},{"type":49,"value":3753}," where it varies):",{"type":44,"tag":1103,"props":3755,"children":3756},{},[3757,3795],{"type":44,"tag":1107,"props":3758,"children":3759},{},[3760],{"type":44,"tag":1111,"props":3761,"children":3762},{},[3763,3771,3779,3787],{"type":44,"tag":1115,"props":3764,"children":3765},{},[3766],{"type":44,"tag":84,"props":3767,"children":3769},{"className":3768},[],[3770],{"type":49,"value":3371},{"type":44,"tag":1115,"props":3772,"children":3773},{},[3774],{"type":44,"tag":84,"props":3775,"children":3777},{"className":3776},[],[3778],{"type":49,"value":3543},{"type":44,"tag":1115,"props":3780,"children":3781},{},[3782],{"type":44,"tag":84,"props":3783,"children":3785},{"className":3784},[],[3786],{"type":49,"value":3655},{"type":44,"tag":1115,"props":3788,"children":3789},{},[3790],{"type":44,"tag":84,"props":3791,"children":3793},{"className":3792},[],[3794],{"type":49,"value":3634},{"type":44,"tag":1150,"props":3796,"children":3797},{},[3798,3827,3852,3879,3905,3930],{"type":44,"tag":1111,"props":3799,"children":3800},{},[3801,3806,3817,3822],{"type":44,"tag":1157,"props":3802,"children":3803},{},[3804],{"type":49,"value":3805},"python",{"type":44,"tag":1157,"props":3807,"children":3808},{},[3809],{"type":44,"tag":3810,"props":3811,"children":3815},"a",{"href":3812,"rel":3813},"https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-template-python",[3814],"nofollow",[3816],{"type":49,"value":3812},{"type":44,"tag":1157,"props":3818,"children":3819},{},[3820],{"type":49,"value":3821},"python3",{"type":44,"tag":1157,"props":3823,"children":3824},{},[3825],{"type":49,"value":3826},"TRANSFER_MONEY_TASK_QUEUE",{"type":44,"tag":1111,"props":3828,"children":3829},{},[3830,3835,3844,3848],{"type":44,"tag":1157,"props":3831,"children":3832},{},[3833],{"type":49,"value":3834},"go",{"type":44,"tag":1157,"props":3836,"children":3837},{},[3838],{"type":44,"tag":3810,"props":3839,"children":3842},{"href":3840,"rel":3841},"https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-template-go",[3814],[3843],{"type":49,"value":3840},{"type":44,"tag":1157,"props":3845,"children":3846},{},[3847],{"type":49,"value":3834},{"type":44,"tag":1157,"props":3849,"children":3850},{},[3851],{"type":49,"value":3826},{"type":44,"tag":1111,"props":3853,"children":3854},{},[3855,3860,3869,3874],{"type":44,"tag":1157,"props":3856,"children":3857},{},[3858],{"type":49,"value":3859},"ts",{"type":44,"tag":1157,"props":3861,"children":3862},{},[3863],{"type":44,"tag":3810,"props":3864,"children":3867},{"href":3865,"rel":3866},"https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-template-ts",[3814],[3868],{"type":49,"value":3865},{"type":44,"tag":1157,"props":3870,"children":3871},{},[3872],{"type":49,"value":3873},"node",{"type":44,"tag":1157,"props":3875,"children":3876},{},[3877],{"type":49,"value":3878},"money-transfer",{"type":44,"tag":1111,"props":3880,"children":3881},{},[3882,3887,3896,3900],{"type":44,"tag":1157,"props":3883,"children":3884},{},[3885],{"type":49,"value":3886},"java",{"type":44,"tag":1157,"props":3888,"children":3889},{},[3890],{"type":44,"tag":3810,"props":3891,"children":3894},{"href":3892,"rel":3893},"https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-java",[3814],[3895],{"type":49,"value":3892},{"type":44,"tag":1157,"props":3897,"children":3898},{},[3899],{"type":49,"value":3886},{"type":44,"tag":1157,"props":3901,"children":3902},{},[3903],{"type":49,"value":3904},"MONEY_TRANSFER_TASK_QUEUE",{"type":44,"tag":1111,"props":3906,"children":3907},{},[3908,3913,3922,3926],{"type":44,"tag":1157,"props":3909,"children":3910},{},[3911],{"type":49,"value":3912},"dotnet",{"type":44,"tag":1157,"props":3914,"children":3915},{},[3916],{"type":44,"tag":3810,"props":3917,"children":3920},{"href":3918,"rel":3919},"https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-template-dotnet",[3814],[3921],{"type":49,"value":3918},{"type":44,"tag":1157,"props":3923,"children":3924},{},[3925],{"type":49,"value":3912},{"type":44,"tag":1157,"props":3927,"children":3928},{},[3929],{"type":49,"value":3904},{"type":44,"tag":1111,"props":3931,"children":3932},{},[3933,3938,3947,3951],{"type":44,"tag":1157,"props":3934,"children":3935},{},[3936],{"type":49,"value":3937},"ruby",{"type":44,"tag":1157,"props":3939,"children":3940},{},[3941],{"type":44,"tag":3810,"props":3942,"children":3945},{"href":3943,"rel":3944},"https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-template-ruby",[3814],[3946],{"type":49,"value":3943},{"type":44,"tag":1157,"props":3948,"children":3949},{},[3950],{"type":49,"value":3937},{"type":44,"tag":1157,"props":3952,"children":3953},{},[3954],{"type":49,"value":3878},{"type":44,"tag":59,"props":3956,"children":3957},{},[3958,3963,3965,3970,3972,3978,3980,3986],{"type":44,"tag":84,"props":3959,"children":3961},{"className":3960},[],[3962],{"type":49,"value":3441},{"type":49,"value":3964}," default (repo basename) = the trailing path segment of ",{"type":44,"tag":84,"props":3966,"children":3968},{"className":3967},[],[3969],{"type":49,"value":3543},{"type":49,"value":3971}," (e.g. python → ",{"type":44,"tag":84,"props":3973,"children":3975},{"className":3974},[],[3976],{"type":49,"value":3977},"money-transfer-project-template-python",{"type":49,"value":3979},", java → ",{"type":44,"tag":84,"props":3981,"children":3983},{"className":3982},[],[3984],{"type":49,"value":3985},"money-transfer-project-java",{"type":49,"value":3987},").",{"type":44,"tag":59,"props":3989,"children":3990},{},[3991],{"type":44,"tag":65,"props":3992,"children":3993},{},[3994,3996,4001,4003,4008,4010,4015],{"type":49,"value":3995},"Managers (",{"type":44,"tag":84,"props":3997,"children":3999},{"className":3998},[],[4000],{"type":49,"value":1291},{"type":49,"value":4002}," first) + ",{"type":44,"tag":84,"props":4004,"children":4006},{"className":4005},[],[4007],{"type":49,"value":3678},{"type":49,"value":4009}," (the binaries ",{"type":44,"tag":84,"props":4011,"children":4013},{"className":4012},[],[4014],{"type":49,"value":2436},{"type":49,"value":4016}," looks for):",{"type":44,"tag":1103,"props":4018,"children":4019},{},[4020,4046],{"type":44,"tag":1107,"props":4021,"children":4022},{},[4023],{"type":44,"tag":1111,"props":4024,"children":4025},{},[4026,4034,4038],{"type":44,"tag":1115,"props":4027,"children":4028},{},[4029],{"type":44,"tag":84,"props":4030,"children":4032},{"className":4031},[],[4033],{"type":49,"value":3371},{"type":44,"tag":1115,"props":4035,"children":4036},{},[4037],{"type":49,"value":1298},{"type":44,"tag":1115,"props":4039,"children":4040},{},[4041],{"type":44,"tag":84,"props":4042,"children":4044},{"className":4043},[],[4045],{"type":49,"value":3678},{"type":44,"tag":1150,"props":4047,"children":4048},{},[4049,4066,4083,4098,4115,4130],{"type":44,"tag":1111,"props":4050,"children":4051},{},[4052,4056,4061],{"type":44,"tag":1157,"props":4053,"children":4054},{},[4055],{"type":49,"value":3805},{"type":44,"tag":1157,"props":4057,"children":4058},{},[4059],{"type":49,"value":4060},"pip (default), uv",{"type":44,"tag":1157,"props":4062,"children":4063},{},[4064],{"type":49,"value":4065},"python3 uv",{"type":44,"tag":1111,"props":4067,"children":4068},{},[4069,4073,4078],{"type":44,"tag":1157,"props":4070,"children":4071},{},[4072],{"type":49,"value":3859},{"type":44,"tag":1157,"props":4074,"children":4075},{},[4076],{"type":49,"value":4077},"npm (default), pnpm, yarn",{"type":44,"tag":1157,"props":4079,"children":4080},{},[4081],{"type":49,"value":4082},"npm pnpm yarn",{"type":44,"tag":1111,"props":4084,"children":4085},{},[4086,4090,4094],{"type":44,"tag":1157,"props":4087,"children":4088},{},[4089],{"type":49,"value":3834},{"type":44,"tag":1157,"props":4091,"children":4092},{},[4093],{"type":49,"value":3834},{"type":44,"tag":1157,"props":4095,"children":4096},{},[4097],{"type":49,"value":3834},{"type":44,"tag":1111,"props":4099,"children":4100},{},[4101,4105,4110],{"type":44,"tag":1157,"props":4102,"children":4103},{},[4104],{"type":49,"value":3886},{"type":44,"tag":1157,"props":4106,"children":4107},{},[4108],{"type":49,"value":4109},"maven",{"type":44,"tag":1157,"props":4111,"children":4112},{},[4113],{"type":49,"value":4114},"mvn",{"type":44,"tag":1111,"props":4116,"children":4117},{},[4118,4122,4126],{"type":44,"tag":1157,"props":4119,"children":4120},{},[4121],{"type":49,"value":3912},{"type":44,"tag":1157,"props":4123,"children":4124},{},[4125],{"type":49,"value":3912},{"type":44,"tag":1157,"props":4127,"children":4128},{},[4129],{"type":49,"value":3912},{"type":44,"tag":1111,"props":4131,"children":4132},{},[4133,4137,4142],{"type":44,"tag":1157,"props":4134,"children":4135},{},[4136],{"type":49,"value":3937},{"type":44,"tag":1157,"props":4138,"children":4139},{},[4140],{"type":49,"value":4141},"bundler",{"type":44,"tag":1157,"props":4143,"children":4144},{},[4145],{"type":49,"value":4146},"bundle",{"type":44,"tag":59,"props":4148,"children":4149},{},[4150,4152,4157],{"type":49,"value":4151},"(manager → its probe binary: pip→python3, uv→uv, npm→npm, pnpm→pnpm, yarn→yarn, go→go, maven→mvn, dotnet→dotnet, bundler→bundle. ",{"type":44,"tag":84,"props":4153,"children":4155},{"className":4154},[],[4156],{"type":49,"value":3678},{"type":49,"value":4158}," for an SDK is the space-joined probe binaries of all its managers, in the order above.)",{"type":44,"tag":59,"props":4160,"children":4161},{},[4162,4170,4172,4177,4178,4183],{"type":44,"tag":65,"props":4163,"children":4164},{},[4165],{"type":44,"tag":84,"props":4166,"children":4168},{"className":4167},[],[4169],{"type":49,"value":3565},{"type":49,"value":4171}," (keyed by ",{"type":44,"tag":84,"props":4173,"children":4175},{"className":4174},[],[4176],{"type":49,"value":3371},{"type":49,"value":1380},{"type":44,"tag":84,"props":4179,"children":4181},{"className":4180},[],[4182],{"type":49,"value":3412},{"type":49,"value":4184},"):",{"type":44,"tag":1103,"props":4186,"children":4187},{},[4188,4216],{"type":44,"tag":1107,"props":4189,"children":4190},{},[4191],{"type":44,"tag":1111,"props":4192,"children":4193},{},[4194,4208],{"type":44,"tag":1115,"props":4195,"children":4196},{},[4197,4202,4203],{"type":44,"tag":84,"props":4198,"children":4200},{"className":4199},[],[4201],{"type":49,"value":3371},{"type":49,"value":1380},{"type":44,"tag":84,"props":4204,"children":4206},{"className":4205},[],[4207],{"type":49,"value":3412},{"type":44,"tag":1115,"props":4209,"children":4210},{},[4211],{"type":44,"tag":84,"props":4212,"children":4214},{"className":4213},[],[4215],{"type":49,"value":3565},{"type":44,"tag":1150,"props":4217,"children":4218},{},[4219,4236,4253,4270,4287,4304,4321,4338,4355],{"type":44,"tag":1111,"props":4220,"children":4221},{},[4222,4227],{"type":44,"tag":1157,"props":4223,"children":4224},{},[4225],{"type":49,"value":4226},"python\u002Fpip",{"type":44,"tag":1157,"props":4228,"children":4229},{},[4230],{"type":44,"tag":84,"props":4231,"children":4233},{"className":4232},[],[4234],{"type":49,"value":4235},"python3 -m venv env && . env\u002Fbin\u002Factivate && python -m pip install -q temporalio",{"type":44,"tag":1111,"props":4237,"children":4238},{},[4239,4244],{"type":44,"tag":1157,"props":4240,"children":4241},{},[4242],{"type":49,"value":4243},"python\u002Fuv",{"type":44,"tag":1157,"props":4245,"children":4246},{},[4247],{"type":44,"tag":84,"props":4248,"children":4250},{"className":4249},[],[4251],{"type":49,"value":4252},"uv venv env && . env\u002Fbin\u002Factivate && uv pip install -q temporalio",{"type":44,"tag":1111,"props":4254,"children":4255},{},[4256,4261],{"type":44,"tag":1157,"props":4257,"children":4258},{},[4259],{"type":49,"value":4260},"ts\u002Fnpm",{"type":44,"tag":1157,"props":4262,"children":4263},{},[4264],{"type":44,"tag":84,"props":4265,"children":4267},{"className":4266},[],[4268],{"type":49,"value":4269},"npm install",{"type":44,"tag":1111,"props":4271,"children":4272},{},[4273,4278],{"type":44,"tag":1157,"props":4274,"children":4275},{},[4276],{"type":49,"value":4277},"ts\u002Fpnpm",{"type":44,"tag":1157,"props":4279,"children":4280},{},[4281],{"type":44,"tag":84,"props":4282,"children":4284},{"className":4283},[],[4285],{"type":49,"value":4286},"pnpm install",{"type":44,"tag":1111,"props":4288,"children":4289},{},[4290,4295],{"type":44,"tag":1157,"props":4291,"children":4292},{},[4293],{"type":49,"value":4294},"ts\u002Fyarn",{"type":44,"tag":1157,"props":4296,"children":4297},{},[4298],{"type":44,"tag":84,"props":4299,"children":4301},{"className":4300},[],[4302],{"type":49,"value":4303},"yarn install",{"type":44,"tag":1111,"props":4305,"children":4306},{},[4307,4312],{"type":44,"tag":1157,"props":4308,"children":4309},{},[4310],{"type":49,"value":4311},"go\u002Fgo",{"type":44,"tag":1157,"props":4313,"children":4314},{},[4315],{"type":44,"tag":84,"props":4316,"children":4318},{"className":4317},[],[4319],{"type":49,"value":4320},"go mod download",{"type":44,"tag":1111,"props":4322,"children":4323},{},[4324,4329],{"type":44,"tag":1157,"props":4325,"children":4326},{},[4327],{"type":49,"value":4328},"java\u002Fmaven",{"type":44,"tag":1157,"props":4330,"children":4331},{},[4332],{"type":44,"tag":84,"props":4333,"children":4335},{"className":4334},[],[4336],{"type":49,"value":4337},"mvn -q -DskipTests dependency:resolve",{"type":44,"tag":1111,"props":4339,"children":4340},{},[4341,4346],{"type":44,"tag":1157,"props":4342,"children":4343},{},[4344],{"type":49,"value":4345},"dotnet\u002Fdotnet",{"type":44,"tag":1157,"props":4347,"children":4348},{},[4349],{"type":44,"tag":84,"props":4350,"children":4352},{"className":4351},[],[4353],{"type":49,"value":4354},"dotnet restore",{"type":44,"tag":1111,"props":4356,"children":4357},{},[4358,4363],{"type":44,"tag":1157,"props":4359,"children":4360},{},[4361],{"type":49,"value":4362},"ruby\u002Fbundler",{"type":44,"tag":1157,"props":4364,"children":4365},{},[4366],{"type":44,"tag":84,"props":4367,"children":4369},{"className":4368},[],[4370],{"type":49,"value":4371},"bundle install",{"type":44,"tag":59,"props":4373,"children":4374},{},[4375,4389,4390,4395],{"type":44,"tag":65,"props":4376,"children":4377},{},[4378,4383,4384],{"type":44,"tag":84,"props":4379,"children":4381},{"className":4380},[],[4382],{"type":49,"value":3592},{"type":49,"value":483},{"type":44,"tag":84,"props":4385,"children":4387},{"className":4386},[],[4388],{"type":49,"value":3613},{"type":49,"value":4171},{"type":44,"tag":84,"props":4391,"children":4393},{"className":4392},[],[4394],{"type":49,"value":3371},{"type":49,"value":4184},{"type":44,"tag":1103,"props":4397,"children":4398},{},[4399,4429],{"type":44,"tag":1107,"props":4400,"children":4401},{},[4402],{"type":44,"tag":1111,"props":4403,"children":4404},{},[4405,4413,4421],{"type":44,"tag":1115,"props":4406,"children":4407},{},[4408],{"type":44,"tag":84,"props":4409,"children":4411},{"className":4410},[],[4412],{"type":49,"value":3371},{"type":44,"tag":1115,"props":4414,"children":4415},{},[4416],{"type":44,"tag":84,"props":4417,"children":4419},{"className":4418},[],[4420],{"type":49,"value":3592},{"type":44,"tag":1115,"props":4422,"children":4423},{},[4424],{"type":44,"tag":84,"props":4425,"children":4427},{"className":4426},[],[4428],{"type":49,"value":3613},{"type":44,"tag":1150,"props":4430,"children":4431},{},[4432,4457,4482,4507,4532,4557],{"type":44,"tag":1111,"props":4433,"children":4434},{},[4435,4439,4448],{"type":44,"tag":1157,"props":4436,"children":4437},{},[4438],{"type":49,"value":3805},{"type":44,"tag":1157,"props":4440,"children":4441},{},[4442],{"type":44,"tag":84,"props":4443,"children":4445},{"className":4444},[],[4446],{"type":49,"value":4447},"source env\u002Fbin\u002Factivate && python run_worker.py",{"type":44,"tag":1157,"props":4449,"children":4450},{},[4451],{"type":44,"tag":84,"props":4452,"children":4454},{"className":4453},[],[4455],{"type":49,"value":4456},"source env\u002Fbin\u002Factivate && python run_workflow.py",{"type":44,"tag":1111,"props":4458,"children":4459},{},[4460,4464,4473],{"type":44,"tag":1157,"props":4461,"children":4462},{},[4463],{"type":49,"value":3834},{"type":44,"tag":1157,"props":4465,"children":4466},{},[4467],{"type":44,"tag":84,"props":4468,"children":4470},{"className":4469},[],[4471],{"type":49,"value":4472},"go run worker\u002Fmain.go",{"type":44,"tag":1157,"props":4474,"children":4475},{},[4476],{"type":44,"tag":84,"props":4477,"children":4479},{"className":4478},[],[4480],{"type":49,"value":4481},"go run start\u002Fmain.go",{"type":44,"tag":1111,"props":4483,"children":4484},{},[4485,4489,4498],{"type":44,"tag":1157,"props":4486,"children":4487},{},[4488],{"type":49,"value":3859},{"type":44,"tag":1157,"props":4490,"children":4491},{},[4492],{"type":44,"tag":84,"props":4493,"children":4495},{"className":4494},[],[4496],{"type":49,"value":4497},"npm run worker",{"type":44,"tag":1157,"props":4499,"children":4500},{},[4501],{"type":44,"tag":84,"props":4502,"children":4504},{"className":4503},[],[4505],{"type":49,"value":4506},"npm run client",{"type":44,"tag":1111,"props":4508,"children":4509},{},[4510,4514,4523],{"type":44,"tag":1157,"props":4511,"children":4512},{},[4513],{"type":49,"value":3886},{"type":44,"tag":1157,"props":4515,"children":4516},{},[4517],{"type":44,"tag":84,"props":4518,"children":4520},{"className":4519},[],[4521],{"type":49,"value":4522},"mvn -q compile exec:java -Dexec.mainClass=moneytransferapp.MoneyTransferWorker -Dorg.slf4j.simpleLogger.defaultLogLevel=warn",{"type":44,"tag":1157,"props":4524,"children":4525},{},[4526],{"type":44,"tag":84,"props":4527,"children":4529},{"className":4528},[],[4530],{"type":49,"value":4531},"mvn -q compile exec:java -Dexec.mainClass=moneytransferapp.TransferApp -Dorg.slf4j.simpleLogger.defaultLogLevel=warn",{"type":44,"tag":1111,"props":4533,"children":4534},{},[4535,4539,4548],{"type":44,"tag":1157,"props":4536,"children":4537},{},[4538],{"type":49,"value":3912},{"type":44,"tag":1157,"props":4540,"children":4541},{},[4542],{"type":44,"tag":84,"props":4543,"children":4545},{"className":4544},[],[4546],{"type":49,"value":4547},"dotnet run --project MoneyTransferWorker",{"type":44,"tag":1157,"props":4549,"children":4550},{},[4551],{"type":44,"tag":84,"props":4552,"children":4554},{"className":4553},[],[4555],{"type":49,"value":4556},"dotnet run --project MoneyTransferClient",{"type":44,"tag":1111,"props":4558,"children":4559},{},[4560,4564,4573],{"type":44,"tag":1157,"props":4561,"children":4562},{},[4563],{"type":49,"value":3937},{"type":44,"tag":1157,"props":4565,"children":4566},{},[4567],{"type":44,"tag":84,"props":4568,"children":4570},{"className":4569},[],[4571],{"type":49,"value":4572},"ruby worker.rb",{"type":44,"tag":1157,"props":4574,"children":4575},{},[4576],{"type":44,"tag":84,"props":4577,"children":4579},{"className":4578},[],[4580],{"type":49,"value":4581},"ruby starter.rb",{"type":44,"tag":59,"props":4583,"children":4584},{},[4585,4587,4592,4593,4598,4600,4606],{"type":49,"value":4586},"The scaffold install-comment also varies by where deps land — keep the comment exactly as the template shows for that ",{"type":44,"tag":84,"props":4588,"children":4590},{"className":4589},[],[4591],{"type":49,"value":3371},{"type":49,"value":1380},{"type":44,"tag":84,"props":4594,"children":4596},{"className":4595},[],[4597],{"type":49,"value":3412},{"type":49,"value":4599}," (python\u002Fts say \"inside the repo\"; go\u002Fjava\u002Fdotnet\u002Fruby say \"GLOBAL, outside the repo …\"). The worked example and templates below carry the right wording per SDK; for non-python SDKs use the install comment from ",{"type":44,"tag":84,"props":4601,"children":4603},{"className":4602},[],[4604],{"type":49,"value":4605},"scripts\u002Fprovision.sh preview scaffold --sdk ‹sdk›",{"type":49,"value":4607}," if you ever need to re-verify it (maintenance only).",{"type":44,"tag":2079,"props":4609,"children":4611},{"id":4610},"templates",[4612],{"type":49,"value":4613},"Templates",{"type":44,"tag":59,"props":4615,"children":4616},{},[4617,4627],{"type":44,"tag":65,"props":4618,"children":4619},{},[4620,4622],{"type":49,"value":4621},"Phase 1 — ",{"type":44,"tag":84,"props":4623,"children":4625},{"className":4624},[],[4626],{"type":49,"value":2393},{"type":49,"value":4628}," (static):",{"type":44,"tag":439,"props":4630,"children":4633},{"className":4631,"code":4632,"language":49},[442],"**Checking your environment**\n\n```bash\n# check git \u002F jq \u002F brew are available (read-only, local)\ncommand -v git jq brew\n\n# check the Temporal config directory is writable (so temporal.toml can be saved)\ntouch \"$(dirname \"\u003Cconfig_path>\")\u002F.probe\" && rm -f \"$(dirname \"\u003Cconfig_path>\")\u002F.probe\"\n\n# flag any stray TEMPORAL_* env vars that would override your saved config\nenv | grep '^TEMPORAL_' || true\n```\n",[4634],{"type":44,"tag":84,"props":4635,"children":4636},{"__ignoreMap":447},[4637],{"type":49,"value":4632},{"type":44,"tag":59,"props":4639,"children":4640},{},[4641],{"type":44,"tag":65,"props":4642,"children":4643},{},[4644,4645,4650],{"type":49,"value":4621},{"type":44,"tag":84,"props":4646,"children":4648},{"className":4647},[],[4649],{"type":49,"value":2436},{"type":49,"value":4651},":",{"type":44,"tag":439,"props":4653,"children":4656},{"className":4654,"code":4655,"language":49},[442],"**Detecting your local tools**\n\n```bash\n# detect which package managers are installed for ‹sdk› (read-only, local)\ncommand -v ‹probe-bins›\n\n# read each tool's version to flag anything below the minimum\n‹runtime› --version\n```\n",[4657],{"type":44,"tag":84,"props":4658,"children":4659},{"__ignoreMap":447},[4660],{"type":49,"value":4655},{"type":44,"tag":59,"props":4662,"children":4663},{},[4664],{"type":44,"tag":65,"props":4665,"children":4666},{},[4667,4668,4673],{"type":49,"value":4621},{"type":44,"tag":84,"props":4669,"children":4671},{"className":4670},[],[4672],{"type":49,"value":1346},{"type":49,"value":4674}," (not installed):",{"type":44,"tag":439,"props":4676,"children":4679},{"className":4677,"code":4678,"language":49},[442],"**Installing the Temporal CLI**\n\n```bash\n# install the Temporal CLI via Homebrew (adds software)\nbrew install temporalio\u002Fprerelease\u002Ftemporal-cloud\n```\n",[4680],{"type":44,"tag":84,"props":4681,"children":4682},{"__ignoreMap":447},[4683],{"type":49,"value":4678},{"type":44,"tag":59,"props":4685,"children":4686},{},[4687],{"type":44,"tag":65,"props":4688,"children":4689},{},[4690,4691,4696],{"type":49,"value":4621},{"type":44,"tag":84,"props":4692,"children":4694},{"className":4693},[],[4695],{"type":49,"value":1346},{"type":49,"value":4697}," (already installed — render this variant instead when the CLI is present):",{"type":44,"tag":439,"props":4699,"children":4702},{"className":4700,"code":4701,"language":49},[442],"**Updating the Temporal CLI to the latest**\n\n```bash\n# BETA: the prerelease CLI has no real versions yet, so always pull the latest (adds\u002Fupdates software)\nbrew upgrade temporalio\u002Fprerelease\u002Ftemporal-cloud\n```\n",[4703],{"type":44,"tag":84,"props":4704,"children":4705},{"__ignoreMap":447},[4706],{"type":49,"value":4701},{"type":44,"tag":59,"props":4708,"children":4709},{},[4710],{"type":44,"tag":65,"props":4711,"children":4712},{},[4713,4714,4719],{"type":49,"value":4621},{"type":44,"tag":84,"props":4715,"children":4717},{"className":4716},[],[4718],{"type":49,"value":1346},{"type":49,"value":4720}," (already installed, non-macOS — render this variant when the CLI is present and you're not on macOS; there's no prerelease tap to upgrade from):",{"type":44,"tag":439,"props":4722,"children":4725},{"className":4723,"code":4724,"language":49},[442],"**Updating the Temporal CLI to the latest**\n\n```bash\n# already installed; update temporal-cloud manually from https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fcloud-cli\u002Freleases\u002Flatest\n```\n",[4726],{"type":44,"tag":84,"props":4727,"children":4728},{"__ignoreMap":447},[4729],{"type":49,"value":4724},{"type":44,"tag":59,"props":4731,"children":4732},{},[4733,4742],{"type":44,"tag":65,"props":4734,"children":4735},{},[4736,4737],{"type":49,"value":4621},{"type":44,"tag":84,"props":4738,"children":4740},{"className":4739},[],[4741],{"type":49,"value":130},{"type":49,"value":4628},{"type":44,"tag":439,"props":4744,"children":4747},{"className":4745,"code":4746,"language":49},[442],"**Sign in to Temporal Cloud**\n\n```bash\n# open a browser to sign in (blocks until you finish)\ntemporal cloud login\n\n# confirm the signed-in identity\ntemporal cloud whoami\n```\n",[4748],{"type":44,"tag":84,"props":4749,"children":4750},{"__ignoreMap":447},[4751],{"type":49,"value":4746},{"type":44,"tag":59,"props":4753,"children":4754},{},[4755,4764],{"type":44,"tag":65,"props":4756,"children":4757},{},[4758,4759],{"type":49,"value":4621},{"type":44,"tag":84,"props":4760,"children":4762},{"className":4761},[],[4763],{"type":49,"value":189},{"type":49,"value":4628},{"type":44,"tag":439,"props":4766,"children":4769},{"className":4767,"code":4768,"language":49},[442],"**Listing your Cloud regions**\n\n```bash\n# list the regions your account can use\ntemporal cloud region list\n```\n",[4770],{"type":44,"tag":84,"props":4771,"children":4772},{"__ignoreMap":447},[4773],{"type":49,"value":4768},{"type":44,"tag":59,"props":4775,"children":4776},{},[4777],{"type":44,"tag":65,"props":4778,"children":4779},{},[4780,4782,4787],{"type":49,"value":4781},"Phase 2 — ",{"type":44,"tag":84,"props":4783,"children":4785},{"className":4784},[],[4786],{"type":49,"value":2585},{"type":49,"value":4651},{"type":44,"tag":439,"props":4789,"children":4792},{"className":4790,"code":4791,"language":49},[442],"**Creating your Cloud namespace**\n\n```bash\n# create your Cloud namespace - billable; submits async, provisions server-side (~a few min)\ntemporal cloud namespace create --name \u003Cname> --region ‹region› --api-key-auth-enabled --retention-days 30 --auto-confirm --async\n```\n",[4793],{"type":44,"tag":84,"props":4794,"children":4795},{"__ignoreMap":447},[4796],{"type":49,"value":4791},{"type":44,"tag":59,"props":4798,"children":4799},{},[4800,4810,4812,4817,4818,4823],{"type":44,"tag":65,"props":4801,"children":4802},{},[4803,4804],{"type":49,"value":4781},{"type":44,"tag":84,"props":4805,"children":4807},{"className":4806},[],[4808],{"type":49,"value":4809},"create-namespace",{"type":49,"value":4811}," (the synchronous variant — rare; the flow uses ",{"type":44,"tag":84,"props":4813,"children":4815},{"className":4814},[],[4816],{"type":49,"value":2585},{"type":49,"value":2355},{"type":44,"tag":84,"props":4819,"children":4821},{"className":4820},[],[4822],{"type":49,"value":2616},{"type":49,"value":4184},{"type":44,"tag":439,"props":4825,"children":4828},{"className":4826,"code":4827,"language":49},[442],"**Creating your Cloud namespace**\n\n```bash\n# create your Cloud namespace - billable; provisions server-side (~a few min)\ntemporal cloud namespace create --name \u003Cname> --region ‹region› --api-key-auth-enabled --retention-days 30 --auto-confirm\n```\n",[4829],{"type":44,"tag":84,"props":4830,"children":4831},{"__ignoreMap":447},[4832],{"type":49,"value":4827},{"type":44,"tag":59,"props":4834,"children":4835},{},[4836],{"type":44,"tag":65,"props":4837,"children":4838},{},[4839,4840,4845],{"type":49,"value":4781},{"type":44,"tag":84,"props":4841,"children":4843},{"className":4842},[],[4844],{"type":49,"value":948},{"type":49,"value":4846}," (clone + deps):",{"type":44,"tag":439,"props":4848,"children":4851},{"className":4849,"code":4850,"language":49},[442],"**Downloading the sample app (clone + dependencies)**\n\n```bash\n# clone the Cloud-ready sample\ngit clone --branch money-transfer-project-cloud-setup --single-branch ‹repo-url› ‹clone-dir›\n\n# install dependencies with ‹manager› ‹install-location-note›\n(cd ‹clone-dir› && ‹install-cmd›)\n```\n",[4852],{"type":44,"tag":84,"props":4853,"children":4854},{"__ignoreMap":447},[4855],{"type":49,"value":4850},{"type":44,"tag":59,"props":4857,"children":4858},{},[4859,4865,4867,4873,4875,4881,4883,4889,4891,4897,4899,4905,4907,4913],{"type":44,"tag":84,"props":4860,"children":4862},{"className":4861},[],[4863],{"type":49,"value":4864},"‹install-location-note›",{"type":49,"value":4866}," per SDK (keep verbatim): python = ",{"type":44,"tag":84,"props":4868,"children":4870},{"className":4869},[],[4871],{"type":49,"value":4872},"into a local venv (env\u002F) inside the repo",{"type":49,"value":4874}," · ts = ",{"type":44,"tag":84,"props":4876,"children":4878},{"className":4877},[],[4879],{"type":49,"value":4880},"into node_modules inside the repo",{"type":49,"value":4882}," · go = ",{"type":44,"tag":84,"props":4884,"children":4886},{"className":4885},[],[4887],{"type":49,"value":4888},"into the shared Go module cache - GLOBAL, outside the repo (~\u002Fgo\u002Fpkg\u002Fmod)",{"type":49,"value":4890}," · java = ",{"type":44,"tag":84,"props":4892,"children":4894},{"className":4893},[],[4895],{"type":49,"value":4896},"into the shared Maven cache - GLOBAL, outside the repo (~\u002F.m2)",{"type":49,"value":4898}," · dotnet = ",{"type":44,"tag":84,"props":4900,"children":4902},{"className":4901},[],[4903],{"type":49,"value":4904},"into the global NuGet cache - GLOBAL, outside the repo (~\u002F.nuget\u002Fpackages)",{"type":49,"value":4906}," · ruby = ",{"type":44,"tag":84,"props":4908,"children":4910},{"className":4909},[],[4911],{"type":49,"value":4912},"into globally-installed gems - GLOBAL, outside the repo",{"type":49,"value":2127},{"type":44,"tag":59,"props":4915,"children":4916},{},[4917,4926],{"type":44,"tag":65,"props":4918,"children":4919},{},[4920,4921],{"type":49,"value":4781},{"type":44,"tag":84,"props":4922,"children":4924},{"className":4923},[],[4925],{"type":49,"value":2616},{"type":49,"value":4628},{"type":44,"tag":439,"props":4928,"children":4931},{"className":4929,"code":4930,"language":49},[442],"**Waiting for the namespace to provision**\n\n```bash\n# poll until the namespace is ACTIVE — provisioning usually takes ~a few minutes (bounded)\ntemporal cloud namespace list --name \u003Cnamespace-name> -o json\n```\n",[4932],{"type":44,"tag":84,"props":4933,"children":4934},{"__ignoreMap":447},[4935],{"type":49,"value":4930},{"type":44,"tag":59,"props":4937,"children":4938},{},[4939,4948,4950,4954],{"type":44,"tag":65,"props":4940,"children":4941},{},[4942,4943],{"type":49,"value":4781},{"type":44,"tag":84,"props":4944,"children":4946},{"className":4945},[],[4947],{"type":49,"value":2637},{"type":49,"value":4949}," (secret carve-out — the token is captured to a 0600 file, never shown; ",{"type":44,"tag":65,"props":4951,"children":4952},{},[4953],{"type":49,"value":3705},{"type":49,"value":4955}," add a token slot):",{"type":44,"tag":439,"props":4957,"children":4960},{"className":4958,"code":4959,"language":49},[442],"**Creating your API key and saving the config**\n\n```bash\n# mint the key + write the cloud-setup profile to temporal.toml (token captured to a 0600 file, never printed)\ntemporal cloud apikey create-for-me --display-name money-transfer-cloud-setup-\u003Crandom> --expiry-duration 25h --auto-confirm -o json\n```\n",[4961],{"type":44,"tag":84,"props":4962,"children":4963},{"__ignoreMap":447},[4964],{"type":49,"value":4959},{"type":44,"tag":59,"props":4966,"children":4967},{},[4968,4977],{"type":44,"tag":65,"props":4969,"children":4970},{},[4971,4972],{"type":49,"value":4781},{"type":44,"tag":84,"props":4973,"children":4975},{"className":4974},[],[4976],{"type":49,"value":1847},{"type":49,"value":4628},{"type":44,"tag":439,"props":4979,"children":4982},{"className":4980,"code":4981,"language":49},[442],"**Verifying the saved config**\n\n```bash\n# list the cloud-setup profile fields (api_key redacted, never shown)\ntemporal --profile cloud-setup config list\n```\n",[4983],{"type":44,"tag":84,"props":4984,"children":4985},{"__ignoreMap":447},[4986],{"type":49,"value":4981},{"type":44,"tag":59,"props":4988,"children":4989},{},[4990,5000],{"type":44,"tag":65,"props":4991,"children":4992},{},[4993,4995],{"type":49,"value":4994},"Phase 3 — ",{"type":44,"tag":84,"props":4996,"children":4998},{"className":4997},[],[4999],{"type":49,"value":1890},{"type":49,"value":4628},{"type":44,"tag":439,"props":5002,"children":5005},{"className":5003,"code":5004,"language":49},[442],"**Waiting for the API key to be accepted**\n\n```bash\n# poll an authorized call until the new key is accepted (bounded ~90s)\ntemporal --profile cloud-setup workflow list --limit 1\n```\n",[5006],{"type":44,"tag":84,"props":5007,"children":5008},{"__ignoreMap":447},[5009],{"type":49,"value":5004},{"type":44,"tag":59,"props":5011,"children":5012},{},[5013],{"type":44,"tag":65,"props":5014,"children":5015},{},[5016,5017,5022],{"type":49,"value":4994},{"type":44,"tag":84,"props":5018,"children":5020},{"className":5019},[],[5021],{"type":49,"value":408},{"type":49,"value":5023}," (clean run):",{"type":44,"tag":439,"props":5025,"children":5028},{"className":5026,"code":5027,"language":49},[442],"**Run your first Workflow**\n\n```bash\n# Worker - runs in the background, polls the task queue, stopped when done\n(cd ‹clone-dir› && ‹worker-cmd›)\n\n# starter - submits the Workflow, waits for COMPLETED, exits (the run can take a minute or two)\n(cd ‹clone-dir› && WORKFLOW_ID=money-transfer-demo ‹starter-cmd›)\n```\n",[5029],{"type":44,"tag":84,"props":5030,"children":5031},{"__ignoreMap":447},[5032],{"type":49,"value":5027},{"type":44,"tag":59,"props":5034,"children":5035},{},[5036],{"type":44,"tag":65,"props":5037,"children":5038},{},[5039,5041,5046],{"type":49,"value":5040},"Phase 4 — ",{"type":44,"tag":84,"props":5042,"children":5044},{"className":5043},[],[5045],{"type":49,"value":2055},{"type":49,"value":5047}," (inject + recover):",{"type":44,"tag":439,"props":5049,"children":5052},{"className":5050,"code":5051,"language":49},[442],"**Run the recovery Workflow (inject a failure)**\n\n```bash\n# Worker - runs in the background, polls the task queue, stopped when done\n(cd ‹clone-dir› && DEMO_FAILURE=transient ‹worker-cmd›)\n\n# starter - submits the Workflow, waits for COMPLETED, exits (the run can take a minute or two)\n(cd ‹clone-dir› && WORKFLOW_ID=money-transfer-demo-recovery ‹starter-cmd›)\n```\n",[5053],{"type":44,"tag":84,"props":5054,"children":5055},{"__ignoreMap":447},[5056],{"type":49,"value":5051},{"type":44,"tag":59,"props":5058,"children":5059},{},[5060,5062,5067,5068,5073,5074,5079,5080,5085,5087,5092,5094,5099,5100,5105],{"type":49,"value":5061},"(Utility subcommands — ",{"type":44,"tag":84,"props":5063,"children":5065},{"className":5064},[],[5066],{"type":49,"value":2776},{"type":49,"value":614},{"type":44,"tag":84,"props":5069,"children":5071},{"className":5070},[],[5072],{"type":49,"value":2768},{"type":49,"value":614},{"type":44,"tag":84,"props":5075,"children":5077},{"className":5076},[],[5078],{"type":49,"value":2760},{"type":49,"value":614},{"type":44,"tag":84,"props":5081,"children":5083},{"className":5082},[],[5084],{"type":49,"value":2784},{"type":49,"value":5086}," — are ",{"type":44,"tag":65,"props":5088,"children":5089},{},[5090],{"type":49,"value":5091},"rare",{"type":49,"value":5093}," and have no dedicated template; derive their gate from the ",{"type":44,"tag":84,"props":5095,"children":5097},{"className":5096},[],[5098],{"type":49,"value":948},{"type":49,"value":1380},{"type":44,"tag":84,"props":5101,"children":5103},{"className":5102},[],[5104],{"type":49,"value":2864},{"type":49,"value":5106}," shapes above if you ever invoke one.)",{"type":44,"tag":2079,"props":5108,"children":5110},{"id":5109},"worked-example-the-scaffold-gate-for-java-fully-filled",[5111,5113,5118],{"type":49,"value":5112},"Worked example — the ",{"type":44,"tag":84,"props":5114,"children":5116},{"className":5115},[],[5117],{"type":49,"value":948},{"type":49,"value":5119}," gate for Java, fully filled",{"type":44,"tag":59,"props":5121,"children":5122},{},[5123,5128,5130,5135,5137,5142,5143,5148,5150,5155,5156,5161,5162,5167,5168,5173,5174,5179,5180,5185,5186,5191],{"type":44,"tag":84,"props":5124,"children":5126},{"className":5125},[],[5127],{"type":49,"value":3371},{"type":49,"value":5129}," = java → ",{"type":44,"tag":84,"props":5131,"children":5133},{"className":5132},[],[5134],{"type":49,"value":3543},{"type":49,"value":5136}," = ",{"type":44,"tag":84,"props":5138,"children":5140},{"className":5139},[],[5141],{"type":49,"value":3892},{"type":49,"value":614},{"type":44,"tag":84,"props":5144,"children":5146},{"className":5145},[],[5147],{"type":49,"value":3441},{"type":49,"value":5149}," (default) = ",{"type":44,"tag":84,"props":5151,"children":5153},{"className":5152},[],[5154],{"type":49,"value":3985},{"type":49,"value":614},{"type":44,"tag":84,"props":5157,"children":5159},{"className":5158},[],[5160],{"type":49,"value":3412},{"type":49,"value":5136},{"type":44,"tag":84,"props":5163,"children":5165},{"className":5164},[],[5166],{"type":49,"value":4109},{"type":49,"value":614},{"type":44,"tag":84,"props":5169,"children":5171},{"className":5170},[],[5172],{"type":49,"value":3565},{"type":49,"value":5136},{"type":44,"tag":84,"props":5175,"children":5177},{"className":5176},[],[5178],{"type":49,"value":4337},{"type":49,"value":614},{"type":44,"tag":84,"props":5181,"children":5183},{"className":5182},[],[5184],{"type":49,"value":4864},{"type":49,"value":5136},{"type":44,"tag":84,"props":5187,"children":5189},{"className":5188},[],[5190],{"type":49,"value":4896},{"type":49,"value":5192},". The rendered gate:",{"type":44,"tag":439,"props":5194,"children":5197},{"className":5195,"code":5196,"language":49},[442],"**Downloading the sample app (clone + dependencies)**\n\n```bash\n# clone the Cloud-ready sample\ngit clone --branch money-transfer-project-cloud-setup --single-branch https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Fmoney-transfer-project-java money-transfer-project-java\n\n# install dependencies with maven into the shared Maven cache - GLOBAL, outside the repo (~\u002F.m2)\n(cd money-transfer-project-java && mvn -q -DskipTests dependency:resolve)\n```\n",[5198],{"type":44,"tag":84,"props":5199,"children":5200},{"__ignoreMap":447},[5201],{"type":49,"value":5196},{"type":44,"tag":52,"props":5203,"children":5205},{"id":5204},"start-show-the-plan-then-begin-phase-1",[5206],{"type":49,"value":5207},"Start — show the plan, then begin Phase 1",{"type":44,"tag":59,"props":5209,"children":5210},{},[5211,5213,5219,5221,5225],{"type":49,"value":5212},"This skill begins when the user invokes it (e.g. ",{"type":44,"tag":84,"props":5214,"children":5216},{"className":5215},[],[5217],{"type":49,"value":5218},"\u002Ftemporal-cloud-setup",{"type":49,"value":5220},") or asks to set up Temporal Cloud. On start, print the roadmap, then go straight into Phase 1 (whose first step is choosing the SDK). Do ",{"type":44,"tag":65,"props":5222,"children":5223},{},[5224],{"type":49,"value":122},{"type":49,"value":5226}," narrate.",{"type":44,"tag":59,"props":5228,"children":5229},{},[5230],{"type":49,"value":5231},"Print this opening block verbatim — the ⚠️ notice first, then the plan and the profile line:",{"type":44,"tag":439,"props":5233,"children":5236},{"className":5234,"code":5235,"language":49},[442],"> ⚠️ **Heads-up:** this creates real resources in your Temporal Cloud account — a namespace and an API key — which may incur cost.\n\n**Let's get you set up on Temporal Cloud.** Four phases, end to end.\n\n1. **Get set up** — install the CLI, sign in, and choose your SDK + region\n2. **Download the sample app & create your API key** — create your Cloud namespace and clone the money-transfer app (already wired for Cloud) in parallel, then mint your API key\n3. **Run your first Workflow** — start the Worker and run the money-transfer Workflow\n4. **See Durable Execution** — break the transfer on purpose and watch Temporal recover it\n\nI'll show each command before running it — and depending on your setup, your tool may ask you to approve it first.\n\nSetting up for:  **\u003COS> · SDK pending**\n",[5237],{"type":44,"tag":84,"props":5238,"children":5239},{"__ignoreMap":447},[5240],{"type":49,"value":5235},{"type":44,"tag":59,"props":5242,"children":5243},{},[5244],{"type":49,"value":5245},"The ⚠️ Heads-up in that block is a notice, not a blocking gate — continue unless the user objects.",{"type":44,"tag":59,"props":5247,"children":5248},{},[5249,5254],{"type":44,"tag":65,"props":5250,"children":5251},{},[5252],{"type":49,"value":5253},"Selections are collected up front, in Phase 1, while the user is most engaged",{"type":49,"value":5255}," — SDK first (no prerequisite), then region right after sign-in (the live region list requires being logged in). Do not begin cloning before the SDK answer — the SDK selects which repo is cloned.",{"type":44,"tag":52,"props":5257,"children":5259},{"id":5258},"phase-output-envelope",[5260],{"type":49,"value":5261},"Phase output envelope",{"type":44,"tag":59,"props":5263,"children":5264},{},[5265,5266,5271,5273,5278,5280,5285],{"type":49,"value":76},{"type":44,"tag":65,"props":5267,"children":5268},{},[5269],{"type":49,"value":5270},"single source of truth for per-phase formatting",{"type":49,"value":5272}," — the phase bodies below supply only ",{"type":44,"tag":279,"props":5274,"children":5275},{},[5276],{"type":49,"value":5277},"content",{"type":49,"value":5279}," (the intent sentence and the steps); this envelope supplies the ",{"type":44,"tag":279,"props":5281,"children":5282},{},[5283],{"type":49,"value":5284},"format",{"type":49,"value":5286},". Render every phase in this fixed order:",{"type":44,"tag":243,"props":5288,"children":5289},{},[5290,5300,5310,5370],{"type":44,"tag":247,"props":5291,"children":5292},{},[5293,5298],{"type":44,"tag":65,"props":5294,"children":5295},{},[5296],{"type":49,"value":5297},"Tracker line",{"type":49,"value":5299}," at the top, marker advanced (see below).",{"type":44,"tag":247,"props":5301,"children":5302},{},[5303,5308],{"type":44,"tag":65,"props":5304,"children":5305},{},[5306],{"type":49,"value":5307},"Intent sentence",{"type":49,"value":5309}," — one short line on what this phase sets up and why it matters (gloss any Temporal term). No more than one line.",{"type":44,"tag":247,"props":5311,"children":5312},{},[5313,5318,5320,5325,5327,5332,5334,5340,5342,5347,5348,5354,5356,5361,5362,5368],{"type":44,"tag":65,"props":5314,"children":5315},{},[5316],{"type":49,"value":5317},"Step checklist — once, all unchecked",{"type":49,"value":5319}," (the phase plan). Then run each step (real tool call with a friendly ",{"type":44,"tag":84,"props":5321,"children":5323},{"className":5322},[],[5324],{"type":49,"value":590},{"type":49,"value":5326},", or a genuine question) ",{"type":44,"tag":65,"props":5328,"children":5329},{},[5330],{"type":49,"value":5331},"without re-printing the checklist or tracker between steps",{"type":49,"value":5333},". Render an already-present prerequisite as ",{"type":44,"tag":84,"props":5335,"children":5337},{"className":5336},[],[5338],{"type":49,"value":5339},"[x] … already present, skipped",{"type":49,"value":5341}," (except the Temporal CLI, which updates when present — render it updated\u002Fup-to-date, not \"skipped\"). ",{"type":44,"tag":65,"props":5343,"children":5344},{},[5345],{"type":49,"value":5346},"No",{"type":49,"value":2209},{"type":44,"tag":84,"props":5349,"children":5351},{"className":5350},[],[5352],{"type":49,"value":5353},"**What this did:**",{"type":49,"value":5355}," summary and ",{"type":44,"tag":65,"props":5357,"children":5358},{},[5359],{"type":49,"value":5360},"no",{"type":49,"value":2209},{"type":44,"tag":84,"props":5363,"children":5365},{"className":5364},[],[5366],{"type":49,"value":5367},"↪ Learn more:",{"type":49,"value":5369}," link during the run.",{"type":44,"tag":247,"props":5371,"children":5372},{},[5373,5378,5380,5385,5387,5393,5395,5400,5402,5407],{"type":44,"tag":65,"props":5374,"children":5375},{},[5376],{"type":49,"value":5377},"End-of-phase: completed checklist + checkpoint",{"type":49,"value":5379}," — print the checklist once more with ",{"type":44,"tag":65,"props":5381,"children":5382},{},[5383],{"type":49,"value":5384},"every box checked",{"type":49,"value":5386},", show ",{"type":44,"tag":84,"props":5388,"children":5390},{"className":5389},[],[5391],{"type":49,"value":5392},"**Phase N complete ✅**",{"type":49,"value":5394},", and ",{"type":44,"tag":65,"props":5396,"children":5397},{},[5398],{"type":49,"value":5399},"close that same message",{"type":49,"value":5401}," with the numbered checkpoint prompt (its content is detailed in the next section — it belongs to ",{"type":44,"tag":279,"props":5403,"children":5404},{},[5405],{"type":49,"value":5406},"this",{"type":49,"value":5408}," message, it is not a second message). In Codex-style runtimes, this entire block must be the final assistant message of the turn when you pause for the user; do not print it earlier as progress and then repeat or fragment it in the final response. No checkpoint after Phase 4 — go straight to the Ending.",{"type":44,"tag":59,"props":5410,"children":5411},{},[5412,5414,5419,5421,5427,5429,5435,5437,5443,5445,5450],{"type":49,"value":5413},"The tracker is just the four phase markers and the phase counter — ",{"type":44,"tag":65,"props":5415,"children":5416},{},[5417],{"type":49,"value":5418},"no leading label",{"type":49,"value":5420}," (don't prefix it with \"Setup\" or anything before the first marker). Legend: completed = ",{"type":44,"tag":84,"props":5422,"children":5424},{"className":5423},[],[5425],{"type":49,"value":5426},"✅",{"type":49,"value":5428},", current = ",{"type":44,"tag":84,"props":5430,"children":5432},{"className":5431},[],[5433],{"type":49,"value":5434},"🔵",{"type":49,"value":5436},", upcoming = ",{"type":44,"tag":84,"props":5438,"children":5440},{"className":5439},[],[5441],{"type":49,"value":5442},"⚪",{"type":49,"value":5444}," (a white dot — same filled-circle style as the blue current dot). ",{"type":44,"tag":65,"props":5446,"children":5447},{},[5448],{"type":49,"value":5449},"Bold the current step's name",{"type":49,"value":5451}," (the one with the blue dot). Reprint it at the top of each phase, advancing one marker:",{"type":44,"tag":439,"props":5453,"children":5456},{"className":5454,"code":5455,"language":49},[442],"🔵 **Set up** · ⚪ App & API key · ⚪ Run · ⚪ Recover   ·  phase 1\u002F4\n✅ Set up · 🔵 **App & API key** · ⚪ Run · ⚪ Recover   ·  phase 2\u002F4\n✅ Set up · ✅ App & API key · 🔵 **Run** · ⚪ Recover   ·  phase 3\u002F4\n✅ Set up · ✅ App & API key · ✅ Run · 🔵 **Recover**   ·  phase 4\u002F4\n",[5457],{"type":44,"tag":84,"props":5458,"children":5459},{"__ignoreMap":447},[5460],{"type":49,"value":5455},{"type":44,"tag":59,"props":5462,"children":5463},{},[5464,5466,5471,5473,5478,5480,5485,5487,5492,5494,5499],{"type":49,"value":5465},"(Glyph notes: ",{"type":44,"tag":84,"props":5467,"children":5469},{"className":5468},[],[5470],{"type":49,"value":5442},{"type":49,"value":5472}," white dot = upcoming and ",{"type":44,"tag":84,"props":5474,"children":5476},{"className":5475},[],[5477],{"type":49,"value":5434},{"type":49,"value":5479}," blue dot = current — same filled-circle style, so the row reads as one consistent set. ",{"type":44,"tag":84,"props":5481,"children":5483},{"className":5482},[],[5484],{"type":49,"value":5426},{"type":49,"value":5486}," = the reliably-green completion mark; a green ",{"type":44,"tag":279,"props":5488,"children":5489},{},[5490],{"type":49,"value":5491},"circle",{"type":49,"value":5493},"-with-check isn't a dependable cross-platform glyph, so stick with ",{"type":44,"tag":84,"props":5495,"children":5497},{"className":5496},[],[5498],{"type":49,"value":5426},{"type":49,"value":568},{"type":44,"tag":52,"props":5501,"children":5503},{"id":5502},"after-phase-checkpoint-after-phases-13",[5504],{"type":49,"value":5505},"After-phase checkpoint (after Phases 1–3)",{"type":44,"tag":59,"props":5507,"children":5508},{},[5509,5511,5516,5518,5523,5525,5530],{"type":49,"value":5510},"This documents the checkpoint prompt that the envelope's step 4 already emits as the closing lines of the completed-checklist message — ",{"type":44,"tag":65,"props":5512,"children":5513},{},[5514],{"type":49,"value":5515},"it is described here, not a second message to send.",{"type":49,"value":5517}," It hands control back via a numbered prompt (not an arrow-select — numbered works on every runtime). ",{"type":44,"tag":65,"props":5519,"children":5520},{},[5521],{"type":49,"value":5522},"Do not explain anything proactively",{"type":49,"value":5524},"; the checklist already told the story. At a turn boundary, the checkpoint handoff must be self-contained and emitted exactly once: tracker\u002Fchecklist context + ",{"type":44,"tag":84,"props":5526,"children":5528},{"className":5527},[],[5529],{"type":49,"value":5392},{"type":49,"value":5531}," + this prompt together in the final assistant message. The prompt is:",{"type":44,"tag":439,"props":5533,"children":5536},{"className":5534,"code":5535,"language":49},[442],"1. Continue\n2. I have a question about this phase\n\nChoose a number, or write your response.\n",[5537],{"type":44,"tag":84,"props":5538,"children":5539},{"__ignoreMap":447},[5540],{"type":49,"value":5535},{"type":44,"tag":381,"props":5542,"children":5543},{},[5544,5578,5590,5602],{"type":44,"tag":247,"props":5545,"children":5546},{},[5547,5549,5554,5556,5562,5563,5569,5570,5576],{"type":49,"value":5548},"If they pick ",{"type":44,"tag":65,"props":5550,"children":5551},{},[5552],{"type":49,"value":5553},"2 (question):",{"type":49,"value":5555}," give a short, plain-language explanation of what the phase just did, answer their typed question in newcomer-friendly language, then re-present the numbered prompt — ",{"type":44,"tag":84,"props":5557,"children":5559},{"className":5558},[],[5560],{"type":49,"value":5561},"1. Continue",{"type":49,"value":483},{"type":44,"tag":84,"props":5564,"children":5566},{"className":5565},[],[5567],{"type":49,"value":5568},"2. I have another question",{"type":49,"value":483},{"type":44,"tag":84,"props":5571,"children":5573},{"className":5572},[],[5574],{"type":49,"value":5575},"Choose a number, or write your response.",{"type":49,"value":5577}," — and loop until they proceed.",{"type":44,"tag":247,"props":5579,"children":5580},{},[5581,5583,5588],{"type":49,"value":5582},"Explanation is ",{"type":44,"tag":65,"props":5584,"children":5585},{},[5586],{"type":49,"value":5587},"on-demand only",{"type":49,"value":5589}," — it appears solely when they pick the question option.",{"type":44,"tag":247,"props":5591,"children":5592},{},[5593,5595,5600],{"type":49,"value":5594},"A checkpoint follows Phases 1–3. ",{"type":44,"tag":65,"props":5596,"children":5597},{},[5598],{"type":49,"value":5599},"No checkpoint after Phase 4",{"type":49,"value":5601}," — go straight to the Ending.",{"type":44,"tag":247,"props":5603,"children":5604},{},[5605,5607,5611],{"type":49,"value":5606},"Genuine blocking input (SDK pick, browser sign-in, region pick) is normal work, ",{"type":44,"tag":65,"props":5608,"children":5609},{},[5610],{"type":49,"value":122},{"type":49,"value":5612}," this checkpoint (genuine input, not a checkpoint).",{"type":44,"tag":5614,"props":5615,"children":5616},"hr",{},[],{"type":44,"tag":45,"props":5618,"children":5620},{"id":5619},"the-phases",[5621],{"type":49,"value":5622},"The phases",{"type":44,"tag":439,"props":5624,"children":5627},{"className":5625,"code":5626,"language":49,"meta":447},[442],"Phase 1 — Get set up:            choose SDK · install CLI · sign in · choose region\nPhase 2 — App & API key:         create namespace + clone sample + install deps (parallel) · create API key · write config TOML\nPhase 3 — Run your first Workflow: start the Worker · run the Workflow (success)\nPhase 4 — See Durable Execution: inject a failure · watch Temporal retry & recover  ──► then END\n",[5628],{"type":44,"tag":84,"props":5629,"children":5630},{"__ignoreMap":447},[5631],{"type":49,"value":5626},{"type":44,"tag":5633,"props":5634,"children":5635},"phases",{},[5636,5642,5650,5690,5715,5782,5813,6029,6080,6232,6244,6354,6384,6546,6563,6569,6577,6616,6650,6679,6737,6767,6776,6811,6846,6862,6959,7051,7056,7181,7208,7264,7288,7403,7441,7452,7588,7640,7664,7673,7692,7745,7783,7789,7797,7815,7847,7892,7933,7945,8272,8312,8335,8341,8362,8380,8397,8406,8424,8447,8464,8582,8606,8641,8722,8740],{"type":44,"tag":52,"props":5637,"children":5639},{"id":5638},"phase-1-get-set-up",[5640],{"type":49,"value":5641},"Phase 1 — Get set up",{"type":44,"tag":59,"props":5643,"children":5644},{},[5645],{"type":44,"tag":279,"props":5646,"children":5647},{},[5648],{"type":49,"value":5649},"Intent: get the tools on your machine, sign you in, and capture your choices — everything the rest of the run needs.",{"type":44,"tag":59,"props":5651,"children":5652},{},[5653,5655,5661,5662,5668,5669,5675,5676,5682,5683,5689],{"type":49,"value":5654},"Step checklist: ",{"type":44,"tag":84,"props":5656,"children":5658},{"className":5657},[],[5659],{"type":49,"value":5660},"SDK chosen",{"type":49,"value":877},{"type":44,"tag":84,"props":5663,"children":5665},{"className":5664},[],[5666],{"type":49,"value":5667},"Tools detected",{"type":49,"value":877},{"type":44,"tag":84,"props":5670,"children":5672},{"className":5671},[],[5673],{"type":49,"value":5674},"CLI installed",{"type":49,"value":877},{"type":44,"tag":84,"props":5677,"children":5679},{"className":5678},[],[5680],{"type":49,"value":5681},"Signed in",{"type":49,"value":877},{"type":44,"tag":84,"props":5684,"children":5686},{"className":5685},[],[5687],{"type":49,"value":5688},"Region chosen",{"type":49,"value":2127},{"type":44,"tag":59,"props":5691,"children":5692},{},[5693,5698,5700,5705,5707,5713],{"type":44,"tag":65,"props":5694,"children":5695},{},[5696],{"type":49,"value":5697},"Step — Choose your SDK",{"type":49,"value":5699}," (genuine input, not a checkpoint): present the six as a ",{"type":44,"tag":65,"props":5701,"children":5702},{},[5703],{"type":49,"value":5704},"numbered list",{"type":49,"value":5706}," (numbered list, runtime-agnostic) — Python, Go, TypeScript, Java, .NET, Ruby — and take a typed name\u002Fnumber. This selects which repo is cloned and the language of the local app. Echo the resolved profile line (",{"type":44,"tag":84,"props":5708,"children":5710},{"className":5709},[],[5711],{"type":49,"value":5712},"Setting up for: macOS · Python SDK",{"type":49,"value":5714},") once answered.",{"type":44,"tag":59,"props":5716,"children":5717},{},[5718,5720,5724,5726,5731,5733,5739,5741,5746,5748,5753,5755,5761,5763,5768,5769,5774,5775,5780],{"type":49,"value":5719},"Right after the SDK pick, the ",{"type":44,"tag":65,"props":5721,"children":5722},{},[5723],{"type":49,"value":2393},{"type":49,"value":5725}," check (DISCLOSE — render, then run): render its gate from the ",{"type":44,"tag":84,"props":5727,"children":5729},{"className":5728},[],[5730],{"type":49,"value":2393},{"type":49,"value":5732}," template (§Gate templates), then run ",{"type":44,"tag":84,"props":5734,"children":5736},{"className":5735},[],[5737],{"type":49,"value":5738},"scripts\u002Fprovision.sh preflight --sdk \u003Csdk>",{"type":49,"value":5740},". Note its ",{"type":44,"tag":84,"props":5742,"children":5744},{"className":5743},[],[5745],{"type":49,"value":2414},{"type":49,"value":5747}," flag — it drives whether the Install-CLI step below installs (absent) or updates the existing CLI (present). If its ",{"type":44,"tag":84,"props":5749,"children":5751},{"className":5750},[],[5752],{"type":49,"value":1242},{"type":49,"value":5754}," lists any ",{"type":44,"tag":84,"props":5756,"children":5758},{"className":5757},[],[5759],{"type":49,"value":5760},"TEMPORAL_*",{"type":49,"value":5762}," vars, tell the user they override the saved profile and ask them to unset them before continuing; surface other ",{"type":44,"tag":84,"props":5764,"children":5766},{"className":5765},[],[5767],{"type":49,"value":1235},{"type":49,"value":804},{"type":44,"tag":84,"props":5770,"children":5772},{"className":5771},[],[5773],{"type":49,"value":1411},{"type":49,"value":614},{"type":44,"tag":84,"props":5776,"children":5778},{"className":5777},[],[5779],{"type":49,"value":1810},{"type":49,"value":5781},") only if they block a later step.",{"type":44,"tag":59,"props":5783,"children":5784},{},[5785,5790,5792,5797,5798,5804,5806,5811],{"type":44,"tag":65,"props":5786,"children":5787},{},[5788],{"type":49,"value":5789},"Step — Detect local tools + choose your package manager",{"type":49,"value":5791}," (DISCLOSE — render, then run). Render its gate from the ",{"type":44,"tag":84,"props":5793,"children":5795},{"className":5794},[],[5796],{"type":49,"value":2436},{"type":49,"value":5732},{"type":44,"tag":84,"props":5799,"children":5801},{"className":5800},[],[5802],{"type":49,"value":5803},"scripts\u002Fprovision.sh detect-tools --sdk \u003Csdk>",{"type":49,"value":5805}," and read its RESULT. This adapts the setup to the user's machine, and it surfaces tooling problems ",{"type":44,"tag":65,"props":5807,"children":5808},{},[5809],{"type":49,"value":5810},"early",{"type":49,"value":5812}," (here in Phase 1) instead of deep in Phase 2\u002F3.",{"type":44,"tag":381,"props":5814,"children":5815},{},[5816,5936,6017],{"type":44,"tag":247,"props":5817,"children":5818},{},[5819,5824,5825,5830,5832,5837,5839,5844,5846,5850,5852,5856,5858,5863,5865,5871,5872,5878,5880,5886,5887,5893,5894,5900,5902,5908,5909,5914,5916,5921,5923,5929,5930,5935],{"type":44,"tag":65,"props":5820,"children":5821},{},[5822],{"type":49,"value":5823},"Package manager (Python & TypeScript only).",{"type":49,"value":2209},{"type":44,"tag":84,"props":5826,"children":5828},{"className":5827},[],[5829],{"type":49,"value":1298},{"type":49,"value":5831}," is the set of package managers ",{"type":44,"tag":65,"props":5833,"children":5834},{},[5835],{"type":49,"value":5836},"this sample supports",{"type":49,"value":5838}," for the chosen SDK. When it lists more than one, ask ",{"type":44,"tag":65,"props":5840,"children":5841},{},[5842],{"type":49,"value":5843},"which of the sample-supported managers to use",{"type":49,"value":5845}," — frame it that way (\"the sample supports these — which should we use?\"), ",{"type":44,"tag":65,"props":5847,"children":5848},{},[5849],{"type":49,"value":122},{"type":49,"value":5851}," as \"here's what's installed on your machine.\" Present them as a ",{"type":44,"tag":65,"props":5853,"children":5854},{},[5855],{"type":49,"value":5704},{"type":49,"value":5857}," (runtime-agnostic) with the ",{"type":44,"tag":84,"props":5859,"children":5861},{"className":5860},[],[5862],{"type":49,"value":1291},{"type":49,"value":5864}," marked — e.g. Python ",{"type":44,"tag":84,"props":5866,"children":5868},{"className":5867},[],[5869],{"type":49,"value":5870},"1. pip (default)",{"type":49,"value":483},{"type":44,"tag":84,"props":5873,"children":5875},{"className":5874},[],[5876],{"type":49,"value":5877},"2. uv",{"type":49,"value":5879},"; TypeScript ",{"type":44,"tag":84,"props":5881,"children":5883},{"className":5882},[],[5884],{"type":49,"value":5885},"1. npm (default)",{"type":49,"value":483},{"type":44,"tag":84,"props":5888,"children":5890},{"className":5889},[],[5891],{"type":49,"value":5892},"2. pnpm",{"type":49,"value":483},{"type":44,"tag":84,"props":5895,"children":5897},{"className":5896},[],[5898],{"type":49,"value":5899},"3. yarn",{"type":49,"value":5901},". The user confirms the default or overrides; carry the choice into Phase 2 as ",{"type":44,"tag":84,"props":5903,"children":5905},{"className":5904},[],[5906],{"type":49,"value":5907},"scaffold --manager \u003Cm>",{"type":49,"value":2286},{"type":44,"tag":65,"props":5910,"children":5911},{},[5912],{"type":49,"value":5913},"This is a question — ask it alone and wait for the answer; do not disclose install-cli or sign-in in the same message",{"type":49,"value":5915}," (see \"One step at a time\"). For ",{"type":44,"tag":65,"props":5917,"children":5918},{},[5919],{"type":49,"value":5920},"Go \u002F Java \u002F .NET \u002F Ruby",{"type":49,"value":5922}," the sample has a single toolchain — state it (",{"type":44,"tag":84,"props":5924,"children":5926},{"className":5925},[],[5927],{"type":49,"value":5928},"Using: maven",{"type":49,"value":132},{"type":44,"tag":65,"props":5931,"children":5932},{},[5933],{"type":49,"value":5934},"skip the prompt",{"type":49,"value":2127},{"type":44,"tag":247,"props":5937,"children":5938},{},[5939,5951],{"type":44,"tag":65,"props":5940,"children":5941},{},[5942,5944,5949],{"type":49,"value":5943},"Surface ",{"type":44,"tag":84,"props":5945,"children":5947},{"className":5946},[],[5948],{"type":49,"value":1305},{"type":49,"value":5950}," HERE (fail-early), plain language:",{"type":44,"tag":381,"props":5952,"children":5953},{},[5954,5979],{"type":44,"tag":247,"props":5955,"children":5956},{},[5957,5963,5965,5970,5972,5977],{"type":44,"tag":84,"props":5958,"children":5960},{"className":5959},[],[5961],{"type":49,"value":5962},"version-too-old:\u003Ctool>@\u003Chave>(min\u003Cmin>)",{"type":49,"value":5964}," — an ",{"type":44,"tag":65,"props":5966,"children":5967},{},[5968],{"type":49,"value":5969},"advisory",{"type":49,"value":5971}," warning with remediation (e.g. ",{"type":44,"tag":279,"props":5973,"children":5974},{},[5975],{"type":49,"value":5976},"\"Node 16 detected; 18+ recommended — consider upgrading, but I can proceed\"",{"type":49,"value":5978},"). Not a hard stop.",{"type":44,"tag":247,"props":5980,"children":5981},{},[5982,5988,5989,5995,5997,6002,6004,6009,6011,6016],{"type":44,"tag":84,"props":5983,"children":5985},{"className":5984},[],[5986],{"type":49,"value":5987},"tool-missing:\u003Cruntime>",{"type":49,"value":483},{"type":44,"tag":84,"props":5990,"children":5992},{"className":5991},[],[5993],{"type":49,"value":5994},"manager-not-found:\u003Cm>",{"type":49,"value":5996}," — the runtime or chosen manager isn't installed. Offer another ",{"type":44,"tag":65,"props":5998,"children":5999},{},[6000],{"type":49,"value":6001},"sample-supported",{"type":49,"value":6003}," manager from ",{"type":44,"tag":84,"props":6005,"children":6007},{"className":6006},[],[6008],{"type":49,"value":1298},{"type":49,"value":6010},", or ask the user to install the tool, then re-run ",{"type":44,"tag":84,"props":6012,"children":6014},{"className":6013},[],[6015],{"type":49,"value":2436},{"type":49,"value":2127},{"type":44,"tag":247,"props":6018,"children":6019},{},[6020,6022,6027],{"type":49,"value":6021},"The default proposal is ",{"type":44,"tag":65,"props":6023,"children":6024},{},[6025],{"type":49,"value":6026},"deterministic",{"type":49,"value":6028}," — the same machine yields the same default every run; nothing is persisted (no state file).",{"type":44,"tag":59,"props":6030,"children":6031},{},[6032,6037,6039,6044,6046,6052,6054,6064,6066,6071,6073,6078],{"type":44,"tag":65,"props":6033,"children":6034},{},[6035],{"type":49,"value":6036},"Step — Install or update the unified Temporal CLI",{"type":49,"value":6038}," (DISCLOSE — render, then run). It ships the ",{"type":44,"tag":84,"props":6040,"children":6042},{"className":6041},[],[6043],{"type":49,"value":2297},{"type":49,"value":6045}," command group (binary ",{"type":44,"tag":84,"props":6047,"children":6049},{"className":6048},[],[6050],{"type":49,"value":6051},"temporal-cloud",{"type":49,"value":6053},"). ",{"type":44,"tag":65,"props":6055,"children":6056},{},[6057,6059],{"type":49,"value":6058},"Branch on preflight's ",{"type":44,"tag":84,"props":6060,"children":6062},{"className":6061},[],[6063],{"type":49,"value":2414},{"type":49,"value":6065}," (it used the same ",{"type":44,"tag":84,"props":6067,"children":6069},{"className":6068},[],[6070],{"type":49,"value":2297},{"type":49,"value":6072}," probe the installer does, so it's authoritative — don't re-check by calling ",{"type":44,"tag":84,"props":6074,"children":6076},{"className":6075},[],[6077],{"type":49,"value":1346},{"type":49,"value":6079}," just to confirm):",{"type":44,"tag":381,"props":6081,"children":6082},{},[6083,6170,6227],{"type":44,"tag":247,"props":6084,"children":6085},{},[6086,6097,6099,6104,6106,6112,6113,6118,6120,6126,6128,6133,6135,6141,6143,6148,6150,6155,6156,6161,6163,6168],{"type":44,"tag":65,"props":6087,"children":6088},{},[6089,6095],{"type":44,"tag":84,"props":6090,"children":6092},{"className":6091},[],[6093],{"type":49,"value":6094},"cli_installed=true",{"type":49,"value":6096}," → update it to the latest.",{"type":49,"value":6098}," Render its gate from the ",{"type":44,"tag":84,"props":6100,"children":6102},{"className":6101},[],[6103],{"type":49,"value":1346},{"type":49,"value":6105}," (already-installed) template (§Gate templates), then run ",{"type":44,"tag":84,"props":6107,"children":6109},{"className":6108},[],[6110],{"type":49,"value":6111},"scripts\u002Fprovision.sh install-cli",{"type":49,"value":2286},{"type":44,"tag":65,"props":6114,"children":6115},{},[6116],{"type":49,"value":6117},"BETA stopgap:",{"type":49,"value":6119}," the prerelease CLI has no meaningful version numbers yet, so instead of a real \"is it out of date?\" check we always try to pull the latest from the ",{"type":44,"tag":84,"props":6121,"children":6123},{"className":6122},[],[6124],{"type":49,"value":6125},"temporalio\u002Fprerelease",{"type":49,"value":6127}," Homebrew tap; ",{"type":44,"tag":84,"props":6129,"children":6131},{"className":6130},[],[6132],{"type":49,"value":1346},{"type":49,"value":6134}," returns ",{"type":44,"tag":84,"props":6136,"children":6138},{"className":6137},[],[6139],{"type":49,"value":6140},"status=ok",{"type":49,"value":6142}," with ",{"type":44,"tag":84,"props":6144,"children":6146},{"className":6145},[],[6147],{"type":49,"value":1371},{"type":49,"value":6149},"=",{"type":44,"tag":84,"props":6151,"children":6153},{"className":6152},[],[6154],{"type":49,"value":1378},{"type":49,"value":1380},{"type":44,"tag":84,"props":6157,"children":6159},{"className":6158},[],[6160],{"type":49,"value":1386},{"type":49,"value":6162},". When it can't update — Homebrew missing, or a non-macOS host — it emits ",{"type":44,"tag":84,"props":6164,"children":6166},{"className":6165},[],[6167],{"type":49,"value":2554},{"type":49,"value":6169}," and proceeds with the working CLI rather than failing (never yank a working install). Once the CLI ships real versions this becomes a genuine version check; we no longer skip a present CLI.",{"type":44,"tag":247,"props":6171,"children":6172},{},[6173,6184,6185,6190,6192,6197,6199,6204,6206,6212,6213,6218,6220,6225],{"type":44,"tag":65,"props":6174,"children":6175},{},[6176,6182],{"type":44,"tag":84,"props":6177,"children":6179},{"className":6178},[],[6180],{"type":49,"value":6181},"cli_installed=false",{"type":49,"value":6183}," → install it.",{"type":49,"value":6098},{"type":44,"tag":84,"props":6186,"children":6188},{"className":6187},[],[6189],{"type":49,"value":1346},{"type":49,"value":6191}," (not-installed) template (§Gate templates), then run ",{"type":44,"tag":84,"props":6193,"children":6195},{"className":6194},[],[6196],{"type":49,"value":6111},{"type":49,"value":6198},". It installs via the ",{"type":44,"tag":84,"props":6200,"children":6202},{"className":6201},[],[6203],{"type":49,"value":6125},{"type":49,"value":6205}," Homebrew tap on macOS, and returns ",{"type":44,"tag":84,"props":6207,"children":6209},{"className":6208},[],[6210],{"type":49,"value":6211},"error_code=brew-missing",{"type":49,"value":483},{"type":44,"tag":84,"props":6214,"children":6216},{"className":6215},[],[6217],{"type":49,"value":1418},{"type":49,"value":6219}," with the fallback URL if it can't — do not auto-install Homebrew; relay the message and wait. (",{"type":44,"tag":84,"props":6221,"children":6223},{"className":6222},[],[6224],{"type":49,"value":1346},{"type":49,"value":6226}," self-checks presence, so if it's actually already there it updates instead of installing.)",{"type":44,"tag":247,"props":6228,"children":6229},{},[6230],{"type":49,"value":6231},"(No prerelease disclaimer here — the ⚠️ notice at the top of the run already covers that.)",{"type":44,"tag":59,"props":6233,"children":6234},{},[6235,6237,6242],{"type":49,"value":6236},"This CLI is separate from any local ",{"type":44,"tag":84,"props":6238,"children":6240},{"className":6239},[],[6241],{"type":49,"value":97},{"type":49,"value":6243},". The Cloud path does not start a local server.",{"type":44,"tag":59,"props":6245,"children":6246},{},[6247,6252,6253,6257,6259,6264,6266,6272,6274,6279,6281,6286,6288,6294,6296,6302,6304,6309,6310,6315,6317,6323,6325,6330,6332,6338,6339,6344,6346,6352],{"type":44,"tag":65,"props":6248,"children":6249},{},[6250],{"type":49,"value":6251},"Step — Sign in",{"type":49,"value":1357},{"type":44,"tag":65,"props":6254,"children":6255},{},[6256],{"type":49,"value":1071},{"type":49,"value":6258}," — a browser opens, so wait for the user). Render its gate from the ",{"type":44,"tag":84,"props":6260,"children":6262},{"className":6261},[],[6263],{"type":49,"value":130},{"type":49,"value":6265}," template (§Gate templates), then present ",{"type":44,"tag":84,"props":6267,"children":6269},{"className":6268},[],[6270],{"type":49,"value":6271},"1. Sign in \u002F 2. Chat about this",{"type":49,"value":6273}," and wait. On ",{"type":44,"tag":84,"props":6275,"children":6277},{"className":6276},[],[6278],{"type":49,"value":1196},{"type":49,"value":6280},", answer the question and re-present. On ",{"type":44,"tag":84,"props":6282,"children":6284},{"className":6283},[],[6285],{"type":49,"value":458},{"type":49,"value":6287},", run ",{"type":44,"tag":84,"props":6289,"children":6291},{"className":6290},[],[6292],{"type":49,"value":6293},"scripts\u002Fprovision.sh login",{"type":49,"value":6295}," — it runs ",{"type":44,"tag":84,"props":6297,"children":6299},{"className":6298},[],[6300],{"type":49,"value":6301},"temporal cloud login",{"type":49,"value":6303}," (which opens a browser on the user's machine and blocks until they finish) and then confirms with ",{"type":44,"tag":84,"props":6305,"children":6307},{"className":6306},[],[6308],{"type":49,"value":138},{"type":49,"value":2286},{"type":44,"tag":65,"props":6311,"children":6312},{},[6313],{"type":49,"value":6314},"Do not ask the user to run the command themselves",{"type":49,"value":6316}," (no ",{"type":44,"tag":84,"props":6318,"children":6320},{"className":6319},[],[6321],{"type":49,"value":6322},"! temporal cloud login",{"type":49,"value":6324}," hand-off); you run the script, the user just completes the browser prompt. Tell them to complete the sign-in in the browser. On success the result block carries ",{"type":44,"tag":84,"props":6326,"children":6328},{"className":6327},[],[6329],{"type":49,"value":1459},{"type":49,"value":6331},"; on ",{"type":44,"tag":84,"props":6333,"children":6335},{"className":6334},[],[6336],{"type":49,"value":6337},"error_code=login-failed",{"type":49,"value":1380},{"type":44,"tag":84,"props":6340,"children":6342},{"className":6341},[],[6343],{"type":49,"value":1475},{"type":49,"value":6345},", ask them to finish the browser login and re-run. If they're not part of a Cloud account yet, point them to ",{"type":44,"tag":3810,"props":6347,"children":6350},{"href":6348,"rel":6349},"https:\u002F\u002Ftemporal.io\u002Fget-cloud",[3814],[6351],{"type":49,"value":6348},{"type":49,"value":6353}," and pause.",{"type":44,"tag":59,"props":6355,"children":6356},{},[6357,6362,6364,6369,6370,6376,6378,6382],{"type":44,"tag":65,"props":6358,"children":6359},{},[6360],{"type":49,"value":6361},"Step — Choose your region",{"type":49,"value":6363}," (DISCLOSE — render, then run): render its gate from the ",{"type":44,"tag":84,"props":6365,"children":6367},{"className":6366},[],[6368],{"type":49,"value":189},{"type":49,"value":5732},{"type":44,"tag":84,"props":6371,"children":6373},{"className":6372},[],[6374],{"type":49,"value":6375},"scripts\u002Fprovision.sh regions",{"type":49,"value":6377}," (you're authenticated now). It prints the live region list; present it as a ",{"type":44,"tag":65,"props":6379,"children":6380},{},[6381],{"type":49,"value":5704},{"type":49,"value":6383}," (runtime-agnostic), then apply these picking rules:",{"type":44,"tag":381,"props":6385,"children":6386},{},[6387,6421,6439,6456,6529],{"type":44,"tag":247,"props":6388,"children":6389},{},[6390,6395,6397,6403,6405,6411,6413,6419],{"type":44,"tag":65,"props":6391,"children":6392},{},[6393],{"type":49,"value":6394},"Recommend the nearest",{"type":49,"value":6396}," — infer it from the system timezone\u002Flocale (e.g. ",{"type":44,"tag":84,"props":6398,"children":6400},{"className":6399},[],[6401],{"type":49,"value":6402},"America\u002FNew_York",{"type":49,"value":6404}," → suggest ",{"type":44,"tag":84,"props":6406,"children":6408},{"className":6407},[],[6409],{"type":49,"value":6410},"aws-us-east-1",{"type":49,"value":6412},") and mark it ",{"type":44,"tag":84,"props":6414,"children":6416},{"className":6415},[],[6417],{"type":49,"value":6418},"(recommended)",{"type":49,"value":6420},", but the user still picks.",{"type":44,"tag":247,"props":6422,"children":6423},{},[6424,6429,6431,6437],{"type":44,"tag":65,"props":6425,"children":6426},{},[6427],{"type":49,"value":6428},"Never accept a region from memory and never auto-select",{"type":49,"value":6430}," — a valid-but-wrong region creates a persistent, billable namespace in the wrong place (and has set off internal alerts). Use the exact identifier the user picks (shape ",{"type":44,"tag":84,"props":6432,"children":6434},{"className":6433},[],[6435],{"type":49,"value":6436},"\u003Cprovider>-\u003Cregion>",{"type":49,"value":6438},"); it's passed to the create step next.",{"type":44,"tag":247,"props":6440,"children":6441},{},[6442,6454],{"type":44,"tag":65,"props":6443,"children":6444},{},[6445,6447,6452],{"type":49,"value":6446},"Fail fast — only accept a region that appears in the ",{"type":44,"tag":84,"props":6448,"children":6450},{"className":6449},[],[6451],{"type":49,"value":189},{"type":49,"value":6453}," output",{"type":49,"value":6455}," (it reflects what your account can actually use). If the user names one that isn't listed, don't pass it to create (a region your account lacks access to is the classic \"it spun for minutes\" trap) — re-show the list and have them pick a listed value.",{"type":44,"tag":247,"props":6457,"children":6458},{},[6459,6470,6472,6477,6479,6484,6486,6492,6494,6500,6502,6507,6509,6515,6516,6521,6523,6528],{"type":44,"tag":65,"props":6460,"children":6461},{},[6462,6464],{"type":49,"value":6463},"Steer away from ",{"type":44,"tag":84,"props":6465,"children":6467},{"className":6466},[],[6468],{"type":49,"value":6469},"unsupported_regions",{"type":49,"value":6471}," — the ",{"type":44,"tag":84,"props":6473,"children":6475},{"className":6474},[],[6476],{"type":49,"value":189},{"type":49,"value":6478}," RESULT may list ",{"type":44,"tag":84,"props":6480,"children":6482},{"className":6481},[],[6483],{"type":49,"value":6469},{"type":49,"value":6485}," (regions whose provider reads ",{"type":44,"tag":84,"props":6487,"children":6489},{"className":6488},[],[6490],{"type":49,"value":6491},"UNKNOWN",{"type":49,"value":6493},", e.g. ",{"type":44,"tag":84,"props":6495,"children":6497},{"className":6496},[],[6498],{"type":49,"value":6499},"azure-centralus",{"type":49,"value":6501},"). On such accounts those ",{"type":44,"tag":65,"props":6503,"children":6504},{},[6505],{"type":49,"value":6506},"accept a namespace create but never provision it",{"type":49,"value":6508}," — a phantom that stalls the next phase. Mark any listed there as ",{"type":44,"tag":84,"props":6510,"children":6512},{"className":6511},[],[6513],{"type":49,"value":6514},"(may not be available on your account)",{"type":49,"value":614},{"type":44,"tag":65,"props":6517,"children":6518},{},[6519],{"type":49,"value":6520},"don't recommend it",{"type":49,"value":6522},", and steer to an AWS\u002FGCP region. If the user insists, warn it may never provision (you'll catch it fast — see ",{"type":44,"tag":84,"props":6524,"children":6526},{"className":6525},[],[6527],{"type":49,"value":1739},{"type":49,"value":3987},{"type":44,"tag":247,"props":6530,"children":6531},{},[6532,6537,6539,6544],{"type":44,"tag":65,"props":6533,"children":6534},{},[6535],{"type":49,"value":6536},"If the create is still rejected",{"type":49,"value":6538}," for the region, see Failure Handling (",{"type":44,"tag":84,"props":6540,"children":6542},{"className":6541},[],[6543],{"type":49,"value":1566},{"type":49,"value":6545},") — re-list and re-pick, never silently retry the same region.",{"type":44,"tag":59,"props":6547,"children":6548},{},[6549,6554,6556,6562],{"type":44,"tag":65,"props":6550,"children":6551},{},[6552],{"type":49,"value":6553},"If the user asks at the checkpoint, explain (plain language):",{"type":49,"value":6555}," installed the Temporal CLI, signed you in, and recorded your SDK + region. Your namespace itself gets created in the next phase — in parallel with setting up your app. (Docs: ",{"type":44,"tag":3810,"props":6557,"children":6560},{"href":6558,"rel":6559},"https:\u002F\u002Fdocs.temporal.io\u002Fcli",[3814],[6561],{"type":49,"value":6558},{"type":49,"value":1402},{"type":44,"tag":52,"props":6564,"children":6566},{"id":6565},"phase-2-app-api-key",[6567],{"type":49,"value":6568},"Phase 2 — App & API key",{"type":44,"tag":59,"props":6570,"children":6571},{},[6572],{"type":44,"tag":279,"props":6573,"children":6574},{},[6575],{"type":49,"value":6576},"Intent: create your Cloud namespace and download the sample app (clone + dependencies) in parallel, then mint your API key and save the connection config — everything needed to run Workflows on Cloud.",{"type":44,"tag":59,"props":6578,"children":6579},{},[6580,6581,6587,6588,6594,6595,6601,6602,6608,6609,6615],{"type":49,"value":5654},{"type":44,"tag":84,"props":6582,"children":6584},{"className":6583},[],[6585],{"type":49,"value":6586},"Namespace active",{"type":49,"value":877},{"type":44,"tag":84,"props":6589,"children":6591},{"className":6590},[],[6592],{"type":49,"value":6593},"Sample cloned",{"type":49,"value":877},{"type":44,"tag":84,"props":6596,"children":6598},{"className":6597},[],[6599],{"type":49,"value":6600},"Dependencies installed",{"type":49,"value":877},{"type":44,"tag":84,"props":6603,"children":6605},{"className":6604},[],[6606],{"type":49,"value":6607},"API key created",{"type":49,"value":877},{"type":44,"tag":84,"props":6610,"children":6612},{"className":6611},[],[6613],{"type":49,"value":6614},"Config saved",{"type":49,"value":2127},{"type":44,"tag":59,"props":6617,"children":6618},{},[6619,6621,6626,6628,6633,6635,6641,6643,6648],{"type":49,"value":6620},"The namespace and the app are set up as ",{"type":44,"tag":65,"props":6622,"children":6623},{},[6624],{"type":49,"value":6625},"three separate, individually-gated steps",{"type":49,"value":6627}," — so the ",{"type":44,"tag":65,"props":6629,"children":6630},{},[6631],{"type":49,"value":6632},"billable",{"type":49,"value":6634}," namespace gets its own explicit approval, distinct from the benign clone. The namespace provisions on Temporal's servers (",{"type":44,"tag":84,"props":6636,"children":6638},{"className":6637},[],[6639],{"type":49,"value":6640},"--async",{"type":49,"value":6642},") ",{"type":44,"tag":65,"props":6644,"children":6645},{},[6646],{"type":49,"value":6647},"while",{"type":49,"value":6649}," the app is cloned, so the parallelism is preserved without any background process having to survive across steps (identical on Claude Code, Codex, Cursor).",{"type":44,"tag":59,"props":6651,"children":6652},{},[6653,6658,6659,6664,6666,6670,6672,6677],{"type":44,"tag":65,"props":6654,"children":6655},{},[6656],{"type":49,"value":6657},"Step — Start your namespace",{"type":49,"value":1357},{"type":44,"tag":84,"props":6660,"children":6662},{"className":6661},[],[6663],{"type":49,"value":2585},{"type":49,"value":6665},", DISCLOSE — its own gate, then run; the user's permission prompt approves this ",{"type":44,"tag":65,"props":6667,"children":6668},{},[6669],{"type":49,"value":6632},{"type":49,"value":6671}," create — make the ",{"type":44,"tag":84,"props":6673,"children":6675},{"className":6674},[],[6676],{"type":49,"value":590},{"type":49,"value":6678}," say so):",{"type":44,"tag":381,"props":6680,"children":6681},{},[6682,6699,6721],{"type":44,"tag":247,"props":6683,"children":6684},{},[6685,6690,6692,6697],{"type":44,"tag":65,"props":6686,"children":6687},{},[6688],{"type":49,"value":6689},"Fire-and-forget:",{"type":49,"value":6691}," submits the create with ",{"type":44,"tag":84,"props":6693,"children":6695},{"className":6694},[],[6696],{"type":49,"value":6640},{"type":49,"value":6698},", returns immediately, and provisions server-side while you download the sample app.",{"type":44,"tag":247,"props":6700,"children":6701},{},[6702,6712,6714,6719],{"type":44,"tag":65,"props":6703,"children":6704},{},[6705,6707],{"type":49,"value":6706},"Read ",{"type":44,"tag":84,"props":6708,"children":6710},{"className":6709},[],[6711],{"type":49,"value":1557},{"type":49,"value":6713}," from the result — you pass it to ",{"type":44,"tag":84,"props":6715,"children":6717},{"className":6716},[],[6718],{"type":49,"value":2616},{"type":49,"value":6720}," below. The handle isn't known yet (it resolves once provisioning completes).",{"type":44,"tag":247,"props":6722,"children":6723},{},[6724,6729,6730,6735],{"type":44,"tag":65,"props":6725,"children":6726},{},[6727],{"type":49,"value":6728},"Errors:",{"type":49,"value":2209},{"type":44,"tag":84,"props":6731,"children":6733},{"className":6732},[],[6734],{"type":49,"value":1566},{"type":49,"value":6736}," (region\u002Fname).",{"type":44,"tag":59,"props":6738,"children":6739},{},[6740,6745,6747,6752,6754,6759,6761,6766],{"type":44,"tag":65,"props":6741,"children":6742},{},[6743],{"type":49,"value":6744},"Step — Ask where to clone",{"type":49,"value":6746}," (genuine input — ",{"type":44,"tag":65,"props":6748,"children":6749},{},[6750],{"type":49,"value":6751},"always ask, don't silently default",{"type":49,"value":6753},"). Present a two-option numbered choice where ",{"type":44,"tag":65,"props":6755,"children":6756},{},[6757],{"type":49,"value":6758},"option 1 is the default clone path itself",{"type":49,"value":6760}," (so the user sees and confirms the real path) and ",{"type":44,"tag":65,"props":6762,"children":6763},{},[6764],{"type":49,"value":6765},"option 2 is \"Somewhere else\"",{"type":49,"value":4651},{"type":44,"tag":439,"props":6768,"children":6771},{"className":6769,"code":6770,"language":49},[442],"Where should I clone the sample app?\n1. .\u002Fmoney-transfer-project-template-python\n2. Somewhere else\n",[6772],{"type":44,"tag":84,"props":6773,"children":6774},{"__ignoreMap":447},[6775],{"type":49,"value":6770},{"type":44,"tag":381,"props":6777,"children":6778},{},[6779,6795],{"type":44,"tag":247,"props":6780,"children":6781},{},[6782,6786,6788,6793],{"type":44,"tag":65,"props":6783,"children":6784},{},[6785],{"type":49,"value":458},{"type":49,"value":6787}," → clone to that path (omit ",{"type":44,"tag":84,"props":6789,"children":6791},{"className":6790},[],[6792],{"type":49,"value":481},{"type":49,"value":6794},", or pass it explicitly — same result).",{"type":44,"tag":247,"props":6796,"children":6797},{},[6798,6803,6805,6810],{"type":44,"tag":65,"props":6799,"children":6800},{},[6801],{"type":49,"value":6802},"2 (Somewhere else)",{"type":49,"value":6804}," → ask for the path, then pass it as ",{"type":44,"tag":84,"props":6806,"children":6808},{"className":6807},[],[6809],{"type":49,"value":481},{"type":49,"value":2127},{"type":44,"tag":59,"props":6812,"children":6813},{},[6814,6816,6822,6824,6830,6832,6837,6839,6844],{"type":49,"value":6815},"Show the concrete default for the chosen SDK in option 1 (e.g. ",{"type":44,"tag":84,"props":6817,"children":6819},{"className":6818},[],[6820],{"type":49,"value":6821},".\u002Fmoney-transfer-project-template-ts",{"type":49,"value":6823}," for TypeScript, ",{"type":44,"tag":84,"props":6825,"children":6827},{"className":6826},[],[6828],{"type":49,"value":6829},".\u002Fmoney-transfer-project-template-go",{"type":49,"value":6831}," for Go). Pass the chosen path as ",{"type":44,"tag":84,"props":6833,"children":6835},{"className":6834},[],[6836],{"type":49,"value":481},{"type":49,"value":6838}," to ",{"type":44,"tag":84,"props":6840,"children":6842},{"className":6841},[],[6843],{"type":49,"value":948},{"type":49,"value":6845}," below.",{"type":44,"tag":59,"props":6847,"children":6848},{},[6849,6854,6855,6860],{"type":44,"tag":65,"props":6850,"children":6851},{},[6852],{"type":49,"value":6853},"Step — Download the sample app",{"type":49,"value":1357},{"type":44,"tag":84,"props":6856,"children":6858},{"className":6857},[],[6859],{"type":49,"value":948},{"type":49,"value":6861},", DISCLOSE — its own gate, then run, separate from the namespace):",{"type":44,"tag":381,"props":6863,"children":6864},{},[6865,6882,6916,6949],{"type":44,"tag":247,"props":6866,"children":6867},{},[6868,6873,6875,6880],{"type":44,"tag":65,"props":6869,"children":6870},{},[6871],{"type":49,"value":6872},"Clones the cloud-ready sample + installs dependencies",{"type":49,"value":6874}," — runs ",{"type":44,"tag":65,"props":6876,"children":6877},{},[6878],{"type":49,"value":6879},"while the namespace provisions",{"type":49,"value":6881},", threading the Phase 1 manager choice and the clone dir just chosen.",{"type":44,"tag":247,"props":6883,"children":6884},{},[6885,6902,6904,6909,6910,6915],{"type":44,"tag":65,"props":6886,"children":6887},{},[6888,6894,6895,6900],{"type":44,"tag":84,"props":6889,"children":6891},{"className":6890},[],[6892],{"type":49,"value":6893},"--manager",{"type":49,"value":1380},{"type":44,"tag":84,"props":6896,"children":6898},{"className":6897},[],[6899],{"type":49,"value":481},{"type":49,"value":6901}," are validated fail-fast before the clone",{"type":49,"value":6903}," — a bad\u002Funinstalled manager errors immediately (",{"type":44,"tag":84,"props":6905,"children":6907},{"className":6906},[],[6908],{"type":49,"value":1670},{"type":49,"value":483},{"type":44,"tag":84,"props":6911,"children":6913},{"className":6912},[],[6914],{"type":49,"value":1677},{"type":49,"value":3987},{"type":44,"tag":247,"props":6917,"children":6918},{},[6919,6935,6937,6942,6943,6948],{"type":44,"tag":65,"props":6920,"children":6921},{},[6922,6923,6928,6929,6934],{"type":49,"value":6706},{"type":44,"tag":84,"props":6924,"children":6926},{"className":6925},[],[6927],{"type":49,"value":1640},{"type":49,"value":2355},{"type":44,"tag":84,"props":6930,"children":6932},{"className":6931},[],[6933],{"type":49,"value":1647},{"type":49,"value":2127},{"type":49,"value":6936}," Other errors: ",{"type":44,"tag":84,"props":6938,"children":6940},{"className":6939},[],[6941],{"type":49,"value":1656},{"type":49,"value":614},{"type":44,"tag":84,"props":6944,"children":6946},{"className":6945},[],[6947],{"type":49,"value":1663},{"type":49,"value":2127},{"type":44,"tag":247,"props":6950,"children":6951},{},[6952,6954],{"type":49,"value":6953},"The cloned branch ships wired for Cloud — ",{"type":44,"tag":65,"props":6955,"children":6956},{},[6957],{"type":49,"value":6958},"no connection code to edit.",{"type":44,"tag":59,"props":6960,"children":6961},{},[6962,6967,6968,6974,6976,6981,6982,6988,6990,6996,6998,7003,7005,7013,7014,7022,7024,7029,7031,7036,7038,7043,7045,7050],{"type":44,"tag":65,"props":6963,"children":6964},{},[6965],{"type":49,"value":6966},"Step — Wait for the namespace",{"type":49,"value":1357},{"type":44,"tag":84,"props":6969,"children":6971},{"className":6970},[],[6972],{"type":49,"value":6973},"await-namespace --name \u003Cnamespace_name>",{"type":49,"value":6975},", DISCLOSE — render, then run): render its gate from the ",{"type":44,"tag":84,"props":6977,"children":6979},{"className":6978},[],[6980],{"type":49,"value":2616},{"type":49,"value":5732},{"type":44,"tag":84,"props":6983,"children":6985},{"className":6984},[],[6986],{"type":49,"value":6987},"scripts\u002Fprovision.sh await-namespace --name \u003Cnamespace_name>",{"type":49,"value":6989},". Polls (via the exact ",{"type":44,"tag":84,"props":6991,"children":6993},{"className":6992},[],[6994],{"type":49,"value":6995},"namespace list --name",{"type":49,"value":6997}," filter) until the namespace is ",{"type":44,"tag":65,"props":6999,"children":7000},{},[7001],{"type":49,"value":7002},"ACTIVE",{"type":49,"value":7004},", then reads the handle + endpoint from that result. Read ",{"type":44,"tag":65,"props":7006,"children":7007},{},[7008],{"type":44,"tag":84,"props":7009,"children":7011},{"className":7010},[],[7012],{"type":49,"value":1716},{"type":49,"value":2355},{"type":44,"tag":65,"props":7015,"children":7016},{},[7017],{"type":44,"tag":84,"props":7018,"children":7020},{"className":7019},[],[7021],{"type":49,"value":1723},{"type":49,"value":7023},"; carry both into the key step below. Errors: ",{"type":44,"tag":84,"props":7025,"children":7027},{"className":7026},[],[7028],{"type":49,"value":1732},{"type":49,"value":7030}," (appeared but slow — re-run), ",{"type":44,"tag":84,"props":7032,"children":7034},{"className":7033},[],[7035],{"type":49,"value":1739},{"type":49,"value":7037}," (never appeared — bad region, re-run ",{"type":44,"tag":84,"props":7039,"children":7041},{"className":7040},[],[7042],{"type":49,"value":2585},{"type":49,"value":7044}," elsewhere), ",{"type":44,"tag":84,"props":7046,"children":7048},{"className":7047},[],[7049],{"type":49,"value":1746},{"type":49,"value":2127},{"type":44,"tag":59,"props":7052,"children":7053},{},[7054],{"type":49,"value":7055},"For reference, the per-SDK repo mapping (the script selects the right one):",{"type":44,"tag":1103,"props":7057,"children":7058},{},[7059,7082],{"type":44,"tag":1107,"props":7060,"children":7061},{},[7062],{"type":44,"tag":1111,"props":7063,"children":7064},{},[7065,7070],{"type":44,"tag":1115,"props":7066,"children":7067},{},[7068],{"type":49,"value":7069},"SDK",{"type":44,"tag":1115,"props":7071,"children":7072},{},[7073,7075,7081],{"type":49,"value":7074},"Repository (branch ",{"type":44,"tag":84,"props":7076,"children":7078},{"className":7077},[],[7079],{"type":49,"value":7080},"money-transfer-project-cloud-setup",{"type":49,"value":1402},{"type":44,"tag":1150,"props":7083,"children":7084},{},[7085,7101,7117,7133,7149,7165],{"type":44,"tag":1111,"props":7086,"children":7087},{},[7088,7093],{"type":44,"tag":1157,"props":7089,"children":7090},{},[7091],{"type":49,"value":7092},"Python",{"type":44,"tag":1157,"props":7094,"children":7095},{},[7096],{"type":44,"tag":84,"props":7097,"children":7099},{"className":7098},[],[7100],{"type":49,"value":3812},{"type":44,"tag":1111,"props":7102,"children":7103},{},[7104,7109],{"type":44,"tag":1157,"props":7105,"children":7106},{},[7107],{"type":49,"value":7108},"Go",{"type":44,"tag":1157,"props":7110,"children":7111},{},[7112],{"type":44,"tag":84,"props":7113,"children":7115},{"className":7114},[],[7116],{"type":49,"value":3840},{"type":44,"tag":1111,"props":7118,"children":7119},{},[7120,7125],{"type":44,"tag":1157,"props":7121,"children":7122},{},[7123],{"type":49,"value":7124},"TypeScript",{"type":44,"tag":1157,"props":7126,"children":7127},{},[7128],{"type":44,"tag":84,"props":7129,"children":7131},{"className":7130},[],[7132],{"type":49,"value":3865},{"type":44,"tag":1111,"props":7134,"children":7135},{},[7136,7141],{"type":44,"tag":1157,"props":7137,"children":7138},{},[7139],{"type":49,"value":7140},"Java",{"type":44,"tag":1157,"props":7142,"children":7143},{},[7144],{"type":44,"tag":84,"props":7145,"children":7147},{"className":7146},[],[7148],{"type":49,"value":3892},{"type":44,"tag":1111,"props":7150,"children":7151},{},[7152,7157],{"type":44,"tag":1157,"props":7153,"children":7154},{},[7155],{"type":49,"value":7156},".NET",{"type":44,"tag":1157,"props":7158,"children":7159},{},[7160],{"type":44,"tag":84,"props":7161,"children":7163},{"className":7162},[],[7164],{"type":49,"value":3918},{"type":44,"tag":1111,"props":7166,"children":7167},{},[7168,7173],{"type":44,"tag":1157,"props":7169,"children":7170},{},[7171],{"type":49,"value":7172},"Ruby",{"type":44,"tag":1157,"props":7174,"children":7175},{},[7176],{"type":44,"tag":84,"props":7177,"children":7179},{"className":7178},[],[7180],{"type":49,"value":3943},{"type":44,"tag":59,"props":7182,"children":7183},{},[7184,7189,7191,7199,7201,7206],{"type":44,"tag":65,"props":7185,"children":7186},{},[7187],{"type":49,"value":7188},"How it connects (no edit needed):",{"type":49,"value":7190}," all six SDKs load the ",{"type":44,"tag":65,"props":7192,"children":7193},{},[7194],{"type":44,"tag":84,"props":7195,"children":7197},{"className":7196},[],[7198],{"type":49,"value":2792},{"type":49,"value":7200}," profile from ",{"type":44,"tag":84,"props":7202,"children":7204},{"className":7203},[],[7205],{"type":49,"value":993},{"type":49,"value":7207}," (env-config). The key step below writes it; nothing else is needed at run time.",{"type":44,"tag":59,"props":7209,"children":7210},{},[7211],{"type":44,"tag":65,"props":7212,"children":7213},{},[7214,7216,7221,7223,7228,7230,7235,7237,7242,7244,7248,7250,7255,7257,7262],{"type":49,"value":7215},"After ",{"type":44,"tag":84,"props":7217,"children":7219},{"className":7218},[],[7220],{"type":49,"value":2616},{"type":49,"value":7222}," returns, go straight to the ",{"type":44,"tag":84,"props":7224,"children":7226},{"className":7225},[],[7227],{"type":49,"value":2637},{"type":49,"value":7229}," step — no ",{"type":44,"tag":279,"props":7231,"children":7232},{},[7233],{"type":49,"value":7234},"phase checkpoint",{"type":49,"value":7236}," between them, and don't re-print the checklist or tracker. But ",{"type":44,"tag":84,"props":7238,"children":7240},{"className":7239},[],[7241],{"type":49,"value":2637},{"type":49,"value":7243}," still gets its own gate — its command is disclosed, then run (the user's permission prompt approves it, like every step); it mints your key ",{"type":44,"tag":279,"props":7245,"children":7246},{},[7247],{"type":49,"value":814},{"type":49,"value":7249}," writes\u002Freplaces the ",{"type":44,"tag":84,"props":7251,"children":7253},{"className":7252},[],[7254],{"type":49,"value":2792},{"type":49,"value":7256}," profile in ",{"type":44,"tag":84,"props":7258,"children":7260},{"className":7259},[],[7261],{"type":49,"value":993},{"type":49,"value":7263},". The next checklist render is the completed one at the end of the phase.",{"type":44,"tag":59,"props":7265,"children":7266},{},[7267,7272,7273,7279,7281,7286],{"type":44,"tag":65,"props":7268,"children":7269},{},[7270],{"type":49,"value":7271},"Step — Create the key and save the config",{"type":49,"value":1357},{"type":44,"tag":84,"props":7274,"children":7276},{"className":7275},[],[7277],{"type":49,"value":7278},"create-key --handle \u003Cnamespace-handle> --address \u003Caddress>",{"type":49,"value":7280},", DISCLOSE — render, then run, using the values from the ",{"type":44,"tag":84,"props":7282,"children":7284},{"className":7283},[],[7285],{"type":49,"value":2616},{"type":49,"value":7287}," step above). In one deterministic, secret-safe operation the script:",{"type":44,"tag":381,"props":7289,"children":7290},{},[7291,7307,7317,7350,7387],{"type":44,"tag":247,"props":7292,"children":7293},{},[7294,7299,7300,7305],{"type":44,"tag":65,"props":7295,"children":7296},{},[7297],{"type":49,"value":7298},"re-verifies auth",{"type":49,"value":1357},{"type":44,"tag":84,"props":7301,"children":7303},{"className":7302},[],[7304],{"type":49,"value":138},{"type":49,"value":7306},", re-prompting login if expired);",{"type":44,"tag":247,"props":7308,"children":7309},{},[7310,7315],{"type":44,"tag":65,"props":7311,"children":7312},{},[7313],{"type":49,"value":7314},"mints the key",{"type":49,"value":7316}," with the pinned flags;",{"type":44,"tag":247,"props":7318,"children":7319},{},[7320,7341,7343,7348],{"type":44,"tag":65,"props":7321,"children":7322},{},[7323,7325,7331,7333,7339],{"type":49,"value":7324},"captures it via ",{"type":44,"tag":84,"props":7326,"children":7328},{"className":7327},[],[7329],{"type":49,"value":7330},"-o json",{"type":49,"value":7332}," into a ",{"type":44,"tag":84,"props":7334,"children":7336},{"className":7335},[],[7337],{"type":49,"value":7338},"0600",{"type":49,"value":7340}," temp file",{"type":49,"value":7342}," so the ",{"type":44,"tag":84,"props":7344,"children":7346},{"className":7345},[],[7347],{"type":49,"value":2102},{"type":49,"value":7349}," token never reaches stdout, your context, or a rendered diff;",{"type":44,"tag":247,"props":7351,"children":7352},{},[7353,7365,7367,7372,7374,7385],{"type":44,"tag":65,"props":7354,"children":7355},{},[7356,7358,7363],{"type":49,"value":7357},"writes a named ",{"type":44,"tag":84,"props":7359,"children":7361},{"className":7360},[],[7362],{"type":49,"value":2792},{"type":49,"value":7364}," profile",{"type":49,"value":7366}," into the shared ",{"type":44,"tag":84,"props":7368,"children":7370},{"className":7369},[],[7371],{"type":49,"value":993},{"type":49,"value":7373}," (address, namespace, api_key) ",{"type":44,"tag":65,"props":7375,"children":7376},{},[7377,7379],{"type":49,"value":7378},"without touching ",{"type":44,"tag":84,"props":7380,"children":7382},{"className":7381},[],[7383],{"type":49,"value":7384},"[profile.default]",{"type":49,"value":7386}," or its login session;",{"type":44,"tag":247,"props":7388,"children":7389},{},[7390,7401],{"type":44,"tag":65,"props":7391,"children":7392},{},[7393,7399],{"type":44,"tag":84,"props":7394,"children":7396},{"className":7395},[],[7397],{"type":49,"value":7398},"chmod 600",{"type":49,"value":7400},"s the file",{"type":49,"value":7402}," and deletes the temp capture.",{"type":44,"tag":59,"props":7404,"children":7405},{},[7406,7408,7413,7414,7419,7421,7426,7428,7433,7434,7439],{"type":49,"value":7407},"It returns only the ",{"type":44,"tag":65,"props":7409,"children":7410},{},[7411],{"type":49,"value":7412},"non-secret",{"type":49,"value":2209},{"type":44,"tag":84,"props":7415,"children":7417},{"className":7416},[],[7418],{"type":49,"value":1785},{"type":49,"value":7420}," and the ",{"type":44,"tag":84,"props":7422,"children":7424},{"className":7423},[],[7425],{"type":49,"value":1227},{"type":49,"value":7427}," — never the token. Then verify the profile (DISCLOSE — render, then run): render its gate from the ",{"type":44,"tag":84,"props":7429,"children":7431},{"className":7430},[],[7432],{"type":49,"value":1847},{"type":49,"value":5732},{"type":44,"tag":84,"props":7435,"children":7437},{"className":7436},[],[7438],{"type":49,"value":2215},{"type":49,"value":7440}," to confirm the profile loads (it never prints the api_key value).",{"type":44,"tag":59,"props":7442,"children":7443},{},[7444,7445,7450],{"type":49,"value":76},{"type":44,"tag":65,"props":7446,"children":7447},{},[7448],{"type":49,"value":7449},"secret-handling carve-out",{"type":49,"value":7451}," (§ above): render the action's label without the token; never reprint, log, argv-pass, or commit it.",{"type":44,"tag":381,"props":7453,"children":7454},{},[7455,7474,7517,7543,7583],{"type":44,"tag":247,"props":7456,"children":7457},{},[7458,7460,7466,7467,7472],{"type":49,"value":7459},"On ",{"type":44,"tag":84,"props":7461,"children":7463},{"className":7462},[],[7464],{"type":49,"value":7465},"error_code=key-empty",{"type":49,"value":1380},{"type":44,"tag":84,"props":7468,"children":7470},{"className":7469},[],[7471],{"type":49,"value":1475},{"type":49,"value":7473},": an expired login — let the script re-prompt and retry once; don't switch output formats or poll.",{"type":44,"tag":247,"props":7475,"children":7476},{},[7477,7478,7484,7486,7492,7494,7500,7502,7508,7510,7515],{"type":49,"value":7459},{"type":44,"tag":84,"props":7479,"children":7481},{"className":7480},[],[7482],{"type":49,"value":7483},"error_code=key-limit-reached",{"type":49,"value":7485},": the account is at its API-key cap — the mint was rejected at create time. Have the user delete stale keys (",{"type":44,"tag":84,"props":7487,"children":7489},{"className":7488},[],[7490],{"type":49,"value":7491},"temporal cloud apikey list",{"type":49,"value":7493},", then ",{"type":44,"tag":84,"props":7495,"children":7497},{"className":7496},[],[7498],{"type":49,"value":7499},"temporal cloud apikey delete --key-id \u003Cid>",{"type":49,"value":7501}," on old ",{"type":44,"tag":84,"props":7503,"children":7505},{"className":7504},[],[7506],{"type":49,"value":7507},"money-transfer-cloud-setup-*",{"type":49,"value":7509}," keys), then re-run ",{"type":44,"tag":84,"props":7511,"children":7513},{"className":7512},[],[7514],{"type":49,"value":2637},{"type":49,"value":7516},". Don't re-run login.",{"type":44,"tag":247,"props":7518,"children":7519},{},[7520,7521,7527,7529,7535,7536,7541],{"type":49,"value":7459},{"type":44,"tag":84,"props":7522,"children":7524},{"className":7523},[],[7525],{"type":49,"value":7526},"error_code=no-json-parser",{"type":49,"value":7528},": install ",{"type":44,"tag":84,"props":7530,"children":7532},{"className":7531},[],[7533],{"type":49,"value":7534},"jq",{"type":49,"value":517},{"type":44,"tag":84,"props":7537,"children":7539},{"className":7538},[],[7540],{"type":49,"value":3821},{"type":49,"value":7542},", then re-run (the safe capture needs one).",{"type":44,"tag":247,"props":7544,"children":7545},{},[7546,7547,7553,7555,7560,7562,7567,7569,7574,7576,7581],{"type":49,"value":7459},{"type":44,"tag":84,"props":7548,"children":7550},{"className":7549},[],[7551],{"type":49,"value":7552},"error_code=manual-key-needed",{"type":49,"value":7554},": automatic capture failed and there was no terminal to paste into. Ask the ",{"type":44,"tag":65,"props":7556,"children":7557},{},[7558],{"type":49,"value":7559},"user",{"type":49,"value":7561}," to paste the one-time key and re-run ",{"type":44,"tag":84,"props":7563,"children":7565},{"className":7564},[],[7566],{"type":49,"value":2637},{"type":49,"value":7568}," from a context with a terminal — the script reads the paste ",{"type":44,"tag":279,"props":7570,"children":7571},{},[7572],{"type":49,"value":7573},"hidden",{"type":49,"value":7575},", straight into the locked file. ",{"type":44,"tag":65,"props":7577,"children":7578},{},[7579],{"type":49,"value":7580},"Never",{"type":49,"value":7582}," have the user paste the key into the chat, and never paste it yourself.",{"type":44,"tag":247,"props":7584,"children":7585},{},[7586],{"type":49,"value":7587},"The secret is shown only once and cannot be retrieved later; if it's truly lost, mint a new key (re-run this step) — don't try to recover the old value.",{"type":44,"tag":59,"props":7589,"children":7590},{},[7591,7596,7597,7602,7604,7609,7611,7616,7618,7624,7626,7638],{"type":44,"tag":65,"props":7592,"children":7593},{},[7594],{"type":49,"value":7595},"KeyId vs. secret — not the same thing.",{"type":49,"value":2096},{"type":44,"tag":84,"props":7598,"children":7600},{"className":7599},[],[7601],{"type":49,"value":1785},{"type":49,"value":7603}," the script returns (e.g. ",{"type":44,"tag":84,"props":7605,"children":7607},{"className":7606},[],[7608],{"type":49,"value":2149},{"type":49,"value":7610},") is a non-secret ",{"type":44,"tag":279,"props":7612,"children":7613},{},[7614],{"type":49,"value":7615},"identifier",{"type":49,"value":7617}," — the handle used to revoke the key later (",{"type":44,"tag":84,"props":7619,"children":7621},{"className":7620},[],[7622],{"type":49,"value":7623},"temporal cloud apikey delete --key-id \u003CKeyId>",{"type":49,"value":7625},"); fine to show. ",{"type":44,"tag":65,"props":7627,"children":7628},{},[7629,7631,7636],{"type":49,"value":7630},"Only the ",{"type":44,"tag":84,"props":7632,"children":7634},{"className":7633},[],[7635],{"type":49,"value":2102},{"type":49,"value":7637}," token is the credential",{"type":49,"value":7639}," — never reprint, log, or commit it.",{"type":44,"tag":59,"props":7641,"children":7642},{},[7643,7655,7657,7662],{"type":44,"tag":65,"props":7644,"children":7645},{},[7646,7648,7653],{"type":49,"value":7647},"When you check off \"API key created,\" label the ",{"type":44,"tag":84,"props":7649,"children":7651},{"className":7650},[],[7652],{"type":49,"value":1785},{"type":49,"value":7654}," so a newcomer can't mistake it for the secret.",{"type":49,"value":7656}," A bare 32-char ",{"type":44,"tag":84,"props":7658,"children":7660},{"className":7659},[],[7661],{"type":49,"value":1785},{"type":49,"value":7663}," on its own reads like a leaked key and alarms people. Render it with an explicit non-secret tag, and make the config line state the secret was stored (not shown) — e.g.:",{"type":44,"tag":439,"props":7665,"children":7668},{"className":7666,"code":7667,"language":49},[442],"- [x] API key created — key id JW4LO… (non-secret identifier; used to revoke the key)\n- [x] Config saved — ~\u002FLibrary\u002FApplication Support\u002Ftemporalio\u002Ftemporal.toml (chmod 600; secret stored, not shown)\n",[7669],{"type":44,"tag":84,"props":7670,"children":7671},{"__ignoreMap":447},[7672],{"type":49,"value":7667},{"type":44,"tag":59,"props":7674,"children":7675},{},[7676,7678,7683,7685,7690],{"type":49,"value":7677},"Never render the ",{"type":44,"tag":84,"props":7679,"children":7681},{"className":7680},[],[7682],{"type":49,"value":1785},{"type":49,"value":7684}," bare and unlabeled, and never put the ",{"type":44,"tag":84,"props":7686,"children":7688},{"className":7687},[],[7689],{"type":49,"value":2102},{"type":49,"value":7691}," token on either line.",{"type":44,"tag":59,"props":7693,"children":7694},{},[7695,7700,7702,7707,7709,7714,7716,7722,7723,7729,7730,7736,7738,7743],{"type":44,"tag":65,"props":7696,"children":7697},{},[7698],{"type":49,"value":7699},"Env vars override the profile.",{"type":49,"value":7701}," Env-config gives ",{"type":44,"tag":84,"props":7703,"children":7705},{"className":7704},[],[7706],{"type":49,"value":5760},{"type":49,"value":7708}," env vars ",{"type":44,"tag":65,"props":7710,"children":7711},{},[7712],{"type":49,"value":7713},"higher precedence",{"type":49,"value":7715}," than the TOML profile — the Phase 1 preflight flags any stray ",{"type":44,"tag":84,"props":7717,"children":7719},{"className":7718},[],[7720],{"type":49,"value":7721},"TEMPORAL_ADDRESS",{"type":49,"value":1380},{"type":44,"tag":84,"props":7724,"children":7726},{"className":7725},[],[7727],{"type":49,"value":7728},"TEMPORAL_NAMESPACE",{"type":49,"value":1380},{"type":44,"tag":84,"props":7731,"children":7733},{"className":7732},[],[7734],{"type":49,"value":7735},"TEMPORAL_API_KEY",{"type":49,"value":7737},". If ",{"type":44,"tag":84,"props":7739,"children":7741},{"className":7740},[],[7742],{"type":49,"value":1242},{"type":49,"value":7744}," was non-empty, make sure they're unset in the run shell or they'll override the saved profile at run time.",{"type":44,"tag":59,"props":7746,"children":7747},{},[7748,7752,7754,7760,7762,7767,7769,7775,7776,7782],{"type":44,"tag":65,"props":7749,"children":7750},{},[7751],{"type":49,"value":6553},{"type":49,"value":7753}," created your Cloud namespace and, in parallel, cloned a small money-transfer app in your language and installed its dependencies. Then minted an API key for your namespace (",{"type":44,"tag":84,"props":7755,"children":7757},{"className":7756},[],[7758],{"type":49,"value":7759},"\u003Cnamespace-handle>",{"type":49,"value":7761},") and saved the connection — address, namespace, key — into a locked ",{"type":44,"tag":84,"props":7763,"children":7765},{"className":7764},[],[7766],{"type":49,"value":2792},{"type":49,"value":7768}," profile your app reads at run time. (Docs: ",{"type":44,"tag":3810,"props":7770,"children":7773},{"href":7771,"rel":7772},"https:\u002F\u002Fdocs.temporal.io\u002Fdevelop",[3814],[7774],{"type":49,"value":7771},{"type":49,"value":877},{"type":44,"tag":3810,"props":7777,"children":7780},{"href":7778,"rel":7779},"https:\u002F\u002Fdocs.temporal.io\u002Fcloud\u002Fapi-keys",[3814],[7781],{"type":49,"value":7778},{"type":49,"value":1402},{"type":44,"tag":52,"props":7784,"children":7786},{"id":7785},"phase-3-run-your-first-workflow",[7787],{"type":49,"value":7788},"Phase 3 — Run your first Workflow",{"type":44,"tag":59,"props":7790,"children":7791},{},[7792],{"type":44,"tag":279,"props":7793,"children":7794},{},[7795],{"type":49,"value":7796},"Intent: prove the whole setup works by running a real Workflow on Temporal Cloud.",{"type":44,"tag":59,"props":7798,"children":7799},{},[7800,7801,7807,7808,7814],{"type":49,"value":5654},{"type":44,"tag":84,"props":7802,"children":7804},{"className":7803},[],[7805],{"type":49,"value":7806},"Worker running",{"type":49,"value":877},{"type":44,"tag":84,"props":7809,"children":7811},{"className":7810},[],[7812],{"type":49,"value":7813},"Workflow completed",{"type":49,"value":2127},{"type":44,"tag":59,"props":7816,"children":7817},{},[7818,7820,7825,7827,7832,7833,7838,7840,7845],{"type":49,"value":7819},"The app connects from config and Phase 2 supplied the credentials — this phase is ",{"type":44,"tag":65,"props":7821,"children":7822},{},[7823],{"type":49,"value":7824},"run-only",{"type":49,"value":7826},". All SDKs read the ",{"type":44,"tag":84,"props":7828,"children":7830},{"className":7829},[],[7831],{"type":49,"value":2792},{"type":49,"value":7200},{"type":44,"tag":84,"props":7834,"children":7836},{"className":7835},[],[7837],{"type":49,"value":993},{"type":49,"value":7839},"; confirm it's present with ",{"type":44,"tag":84,"props":7841,"children":7843},{"className":7842},[],[7844],{"type":49,"value":2215},{"type":49,"value":7846}," if you haven't already.",{"type":44,"tag":59,"props":7848,"children":7849},{},[7850,7855,7857,7862,7863,7868,7870,7876,7877,7883,7884,7890],{"type":44,"tag":65,"props":7851,"children":7852},{},[7853],{"type":49,"value":7854},"Connect-readiness is handled for you — do not hand-roll the Worker.",{"type":49,"value":7856}," The Worker start, the wait-until-it's-polling, the starter, and the Worker teardown all live in ",{"type":44,"tag":65,"props":7858,"children":7859},{},[7860],{"type":49,"value":7861},"one deterministic call",{"type":49,"value":1357},{"type":44,"tag":84,"props":7864,"children":7866},{"className":7865},[],[7867],{"type":49,"value":408},{"type":49,"value":7869},"), so you never launch ",{"type":44,"tag":84,"props":7871,"children":7873},{"className":7872},[],[7874],{"type":49,"value":7875},"nohup … &",{"type":49,"value":483},{"type":44,"tag":84,"props":7878,"children":7880},{"className":7879},[],[7881],{"type":49,"value":7882},"ps",{"type":49,"value":483},{"type":44,"tag":84,"props":7885,"children":7887},{"className":7886},[],[7888],{"type":49,"value":7889},"pgrep",{"type":49,"value":7891}," yourself — that is exactly the flaky, noisy step this replaces. Two things still matter:",{"type":44,"tag":243,"props":7893,"children":7894},{},[7895,7914],{"type":44,"tag":247,"props":7896,"children":7897},{},[7898,7900,7905,7907,7912],{"type":49,"value":7899},"A freshly-minted API key isn't accepted by the data plane ",{"type":44,"tag":279,"props":7901,"children":7902},{},[7903],{"type":49,"value":7904},"immediately",{"type":49,"value":7906}," — wait on ",{"type":44,"tag":84,"props":7908,"children":7910},{"className":7909},[],[7911],{"type":49,"value":1890},{"type":49,"value":7913}," first.",{"type":44,"tag":247,"props":7915,"children":7916},{},[7917,7919,7925,7927,7931],{"type":49,"value":7918},"If the connect still fails, the namespace endpoint (",{"type":44,"tag":84,"props":7920,"children":7922},{"className":7921},[],[7923],{"type":49,"value":7924},"\u003Chandle>.tmprl.cloud:7233",{"type":49,"value":7926},") is correct — do ",{"type":44,"tag":65,"props":7928,"children":7929},{},[7930],{"type":49,"value":122},{"type":49,"value":7932}," switch to a regional endpoint, re-mint the key, or edit the profile (per temporalio\u002Fdocumentation#4733). The failure is readiness, not the endpoint.",{"type":44,"tag":59,"props":7934,"children":7935},{},[7936,7938,7943],{"type":49,"value":7937},"Run two script calls, both using ",{"type":44,"tag":84,"props":7939,"children":7941},{"className":7940},[],[7942],{"type":49,"value":1640},{"type":49,"value":7944}," from Phase 2 (the script handles per-SDK run commands and Python venv activation internally — you don't):",{"type":44,"tag":243,"props":7946,"children":7947},{},[7948,8007,8113],{"type":44,"tag":247,"props":7949,"children":7950},{},[7951,7956,7957,7962,7963,7968,7969,7975,7977,7983,7985,7991,7993,7998,8000,8005],{"type":44,"tag":65,"props":7952,"children":7953},{},[7954],{"type":49,"value":7955},"Wait for auth",{"type":49,"value":1357},{"type":44,"tag":84,"props":7958,"children":7960},{"className":7959},[],[7961],{"type":49,"value":1890},{"type":49,"value":6975},{"type":44,"tag":84,"props":7964,"children":7966},{"className":7965},[],[7967],{"type":49,"value":1890},{"type":49,"value":5732},{"type":44,"tag":84,"props":7970,"children":7972},{"className":7971},[],[7973],{"type":49,"value":7974},"scripts\u002Fprovision.sh await-auth",{"type":49,"value":7976}," and wait for ",{"type":44,"tag":84,"props":7978,"children":7980},{"className":7979},[],[7981],{"type":49,"value":7982},"auth_ready=true",{"type":49,"value":7984},". On ",{"type":44,"tag":84,"props":7986,"children":7988},{"className":7987},[],[7989],{"type":49,"value":7990},"error_code=key-expired",{"type":49,"value":7992},", the key is permanently rejected (commonly a next-day re-test against a key that auto-expired in ~25h) — re-run ",{"type":44,"tag":84,"props":7994,"children":7996},{"className":7995},[],[7997],{"type":49,"value":2637},{"type":49,"value":7999}," (see Failure Handling); on ",{"type":44,"tag":84,"props":8001,"children":8003},{"className":8002},[],[8004],{"type":49,"value":1908},{"type":49,"value":8006},", read the appended redacted CLI stderr, wait, and re-run.",{"type":44,"tag":247,"props":8008,"children":8009},{},[8010,8014,8015,8021,8022,8026,8028,8033,8035,8041,8043,8048,8050,8055,8057,8063,8065,8073,8074,8082,8084,8090,8092,8097,8099,8104,8106,8111],{"type":44,"tag":65,"props":8011,"children":8012},{},[8013],{"type":49,"value":1932},{"type":49,"value":1357},{"type":44,"tag":84,"props":8016,"children":8018},{"className":8017},[],[8019],{"type":49,"value":8020},"run-workflow --sdk \u003Csdk> --dir \u003Crepo_path>",{"type":49,"value":614},{"type":44,"tag":65,"props":8023,"children":8024},{},[8025],{"type":49,"value":1071},{"type":49,"value":8027}," — the deliberate moment): render its gate from the ",{"type":44,"tag":84,"props":8029,"children":8031},{"className":8030},[],[8032],{"type":49,"value":408},{"type":49,"value":8034}," (clean run) template (§Gate templates), append ",{"type":44,"tag":84,"props":8036,"children":8038},{"className":8037},[],[8039],{"type":49,"value":8040},"1. Run it \u002F 2. Chat about this",{"type":49,"value":8042}," (on ",{"type":44,"tag":84,"props":8044,"children":8046},{"className":8045},[],[8047],{"type":49,"value":1196},{"type":49,"value":8049},", answer, then re-present), and on ",{"type":44,"tag":84,"props":8051,"children":8053},{"className":8052},[],[8054],{"type":49,"value":323},{"type":49,"value":8056}," one synchronous call starts the Worker, waits until it's polling (Temporal's API, not the OS process table), runs the starter, and stops the Worker. Wait for ",{"type":44,"tag":84,"props":8058,"children":8060},{"className":8059},[],[8061],{"type":49,"value":8062},"workflow_status=COMPLETED",{"type":49,"value":8064},"; it emits the run's ",{"type":44,"tag":65,"props":8066,"children":8067},{},[8068],{"type":44,"tag":84,"props":8069,"children":8071},{"className":8070},[],[8072],{"type":49,"value":1964},{"type":49,"value":2355},{"type":44,"tag":65,"props":8075,"children":8076},{},[8077],{"type":44,"tag":84,"props":8078,"children":8080},{"className":8079},[],[8081],{"type":49,"value":1971},{"type":49,"value":8083}," (don't run ",{"type":44,"tag":84,"props":8085,"children":8087},{"className":8086},[],[8088],{"type":49,"value":8089},"workflow list",{"type":49,"value":8091}," yourself). On ",{"type":44,"tag":84,"props":8093,"children":8095},{"className":8094},[],[8096],{"type":49,"value":1980},{"type":49,"value":8098},", re-run ",{"type":44,"tag":84,"props":8100,"children":8102},{"className":8101},[],[8103],{"type":49,"value":1890},{"type":49,"value":8105}," then ",{"type":44,"tag":84,"props":8107,"children":8109},{"className":8108},[],[8110],{"type":49,"value":408},{"type":49,"value":8112}," (see Failure Handling).",{"type":44,"tag":247,"props":8114,"children":8115},{},[8116,8121,8122,8127,8129,8134,8136,8141,8143,8148,8150,8155,8157,8160,8165,8168,8174,8191,8194,8196,8202,8204,8207,8234,8237,8241,8244,8249,8256,8259],{"type":44,"tag":65,"props":8117,"children":8118},{},[8119],{"type":49,"value":8120},"Show the success link, then confirm the win.",{"type":49,"value":2209},{"type":44,"tag":84,"props":8123,"children":8125},{"className":8124},[],[8126],{"type":49,"value":408},{"type":49,"value":8128}," already verified ",{"type":44,"tag":84,"props":8130,"children":8132},{"className":8131},[],[8133],{"type":49,"value":2684},{"type":49,"value":8135},". Surface the run's ",{"type":44,"tag":65,"props":8137,"children":8138},{},[8139],{"type":49,"value":8140},"timeline",{"type":49,"value":8142}," page on its own bare line (bare URL so the terminal auto-linkifies it — no backticks\u002Ffence), using the ",{"type":44,"tag":84,"props":8144,"children":8146},{"className":8145},[],[8147],{"type":49,"value":1964},{"type":49,"value":8149}," and ",{"type":44,"tag":84,"props":8151,"children":8153},{"className":8152},[],[8154],{"type":49,"value":1971},{"type":49,"value":8156}," from the RESULT block:",{"type":44,"tag":419,"props":8158,"children":8159},{},[],{"type":44,"tag":65,"props":8161,"children":8162},{},[8163],{"type":49,"value":8164},"View your completed Workflow on Temporal Cloud:",{"type":44,"tag":419,"props":8166,"children":8167},{},[],{"type":44,"tag":3810,"props":8169,"children":8172},{"href":8170,"rel":8171},"https:\u002F\u002Fcloud.temporal.io\u002Fnamespaces\u002F",[3814],[8173],{"type":49,"value":8170},{"type":44,"tag":8175,"props":8176,"children":8177},"namespace-handle",{},[8178,8180],{"type":49,"value":8179},"\u002Fworkflows\u002F",{"type":44,"tag":8181,"props":8182,"children":8183},"workflow-id",{},[8184,8185],{"type":49,"value":1380},{"type":44,"tag":8186,"props":8187,"children":8188},"run-id",{},[8189],{"type":49,"value":8190},"\u002Ftimeline",{"type":44,"tag":419,"props":8192,"children":8193},{},[],{"type":49,"value":8195},"That's your first Workflow on the Cloud — no separate ",{"type":44,"tag":84,"props":8197,"children":8199},{"className":8198},[],[8200],{"type":49,"value":8201},"workflow describe",{"type":49,"value":8203}," needed.",{"type":44,"tag":419,"props":8205,"children":8206},{},[],{"type":44,"tag":279,"props":8208,"children":8209},{},[8210,8212,8217,8219,8225,8227,8232],{"type":49,"value":8211},"Fallback — only if ",{"type":44,"tag":84,"props":8213,"children":8215},{"className":8214},[],[8216],{"type":49,"value":1971},{"type":49,"value":8218}," came back ",{"type":44,"tag":84,"props":8220,"children":8222},{"className":8221},[],[8223],{"type":49,"value":8224},"unknown",{"type":49,"value":8226}," (the data plane was briefly lagging): show the Workflow ",{"type":44,"tag":65,"props":8228,"children":8229},{},[8230],{"type":49,"value":8231},"detail",{"type":49,"value":8233}," page instead, rendered exactly like the link above — bold lead-in, then a bare URL alone on its own line (no backticks) so it auto-linkifies:",{"type":44,"tag":419,"props":8235,"children":8236},{},[],{"type":44,"tag":65,"props":8238,"children":8239},{},[8240],{"type":49,"value":8164},{"type":44,"tag":419,"props":8242,"children":8243},{},[],{"type":44,"tag":3810,"props":8245,"children":8247},{"href":8170,"rel":8246},[3814],[8248],{"type":49,"value":8170},{"type":44,"tag":8175,"props":8250,"children":8251},{},[8252,8253],{"type":49,"value":8179},{"type":44,"tag":8181,"props":8254,"children":8255},{},[],{"type":44,"tag":419,"props":8257,"children":8258},{},[],{"type":44,"tag":279,"props":8260,"children":8261},{},[8262,8264,8270],{"type":49,"value":8263},"Never fall back to the bare ",{"type":44,"tag":84,"props":8265,"children":8267},{"className":8266},[],[8268],{"type":49,"value":8269},"…\u002Fworkflows",{"type":49,"value":8271}," namespace list.",{"type":44,"tag":59,"props":8273,"children":8274},{},[8275,8277,8282,8284,8290,8292,8297,8298,8304,8306,8311],{"type":49,"value":8276},"At the ",{"type":44,"tag":65,"props":8278,"children":8279},{},[8280],{"type":49,"value":8281},"Phase 3 checkpoint",{"type":49,"value":8283},", lead with the win — ",{"type":44,"tag":84,"props":8285,"children":8287},{"className":8286},[],[8288],{"type":49,"value":8289},"**Phase 3 complete ✅ — your first Workflow ran clean.**",{"type":49,"value":8291}," — then the standard numbered prompt (",{"type":44,"tag":84,"props":8293,"children":8295},{"className":8294},[],[8296],{"type":49,"value":5561},{"type":49,"value":483},{"type":44,"tag":84,"props":8299,"children":8301},{"className":8300},[],[8302],{"type":49,"value":8303},"2. I have a question about this phase",{"type":49,"value":8305},"). Phase 4 itself frames and triggers the failure injection, so this checkpoint stays a plain ",{"type":44,"tag":65,"props":8307,"children":8308},{},[8309],{"type":49,"value":8310},"Continue",{"type":49,"value":2127},{"type":44,"tag":59,"props":8313,"children":8314},{},[8315,8319,8321,8326,8328,8334],{"type":44,"tag":65,"props":8316,"children":8317},{},[8318],{"type":49,"value":6553},{"type":49,"value":8320}," started a Worker that polls your Cloud namespace, ran the money-transfer Workflow against Temporal Cloud, and confirmed it reached ",{"type":44,"tag":84,"props":8322,"children":8324},{"className":8323},[],[8325],{"type":49,"value":2684},{"type":49,"value":8327}," — your first Workflow on the Cloud. (Docs: ",{"type":44,"tag":3810,"props":8329,"children":8332},{"href":8330,"rel":8331},"https:\u002F\u002Fdocs.temporal.io\u002Fworkflows",[3814],[8333],{"type":49,"value":8330},{"type":49,"value":1402},{"type":44,"tag":52,"props":8336,"children":8338},{"id":8337},"phase-4-see-durable-execution-inject-a-failure",[8339],{"type":49,"value":8340},"Phase 4 — See Durable Execution (inject a failure)",{"type":44,"tag":59,"props":8342,"children":8343},{},[8344],{"type":44,"tag":279,"props":8345,"children":8346},{},[8347,8349,8354,8356,8360],{"type":49,"value":8348},"Intent: break the transfer on purpose and watch Temporal retry and recover it — the durable-execution payoff. This phase is ",{"type":44,"tag":65,"props":8350,"children":8351},{},[8352],{"type":49,"value":8353},"required",{"type":49,"value":8355},"; the user reaches it via ",{"type":44,"tag":65,"props":8357,"children":8358},{},[8359],{"type":49,"value":8310},{"type":49,"value":8361}," at the Phase 3 checkpoint, then triggers the break via the prompt below.",{"type":44,"tag":59,"props":8363,"children":8364},{},[8365,8366,8372,8373,8379],{"type":49,"value":5654},{"type":44,"tag":84,"props":8367,"children":8369},{"className":8368},[],[8370],{"type":49,"value":8371},"Failure injected",{"type":49,"value":877},{"type":44,"tag":84,"props":8374,"children":8376},{"className":8375},[],[8377],{"type":49,"value":8378},"Recovered & completed",{"type":49,"value":2127},{"type":44,"tag":59,"props":8381,"children":8382},{},[8383,8388,8390,8395],{"type":44,"tag":65,"props":8384,"children":8385},{},[8386],{"type":49,"value":8387},"Open by framing the break, then let the user trigger it.",{"type":49,"value":8389}," After the tracker + intent + unchecked checklist, explain in one or two plain sentences what's about to happen — ",{"type":44,"tag":279,"props":8391,"children":8392},{},[8393],{"type":49,"value":8394},"we'll run the same transfer again, but force the deposit to fail on its first attempts, then watch Temporal automatically retry until it succeeds",{"type":49,"value":8396}," — then present a numbered prompt so the user actively triggers it:",{"type":44,"tag":439,"props":8398,"children":8401},{"className":8399,"code":8400,"language":49},[442],"1. Inject the failure\n2. Chat about this\n",[8402],{"type":44,"tag":84,"props":8403,"children":8404},{"__ignoreMap":447},[8405],{"type":49,"value":8400},{"type":44,"tag":59,"props":8407,"children":8408},{},[8409,8410,8415,8417,8422],{"type":49,"value":7459},{"type":44,"tag":84,"props":8411,"children":8413},{"className":8412},[],[8414],{"type":49,"value":458},{"type":49,"value":8416},", run the inject step below; on ",{"type":44,"tag":84,"props":8418,"children":8420},{"className":8419},[],[8421],{"type":49,"value":1196},{"type":49,"value":8423},", answer the question and re-present. This is a genuine engagement point (genuine input, not a checkpoint), not a checkpoint.",{"type":44,"tag":8425,"props":8426,"children":8427},"blockquote",{},[8428],{"type":44,"tag":59,"props":8429,"children":8430},{},[8431,8432,8438,8440,8445],{"type":49,"value":2137},{"type":44,"tag":84,"props":8433,"children":8435},{"className":8434},[],[8436],{"type":49,"value":8437},"DEMO_FAILURE",{"type":49,"value":8439}," toggle is shipped on the ",{"type":44,"tag":84,"props":8441,"children":8443},{"className":8442},[],[8444],{"type":49,"value":7080},{"type":49,"value":8446}," branches (the deposit activity reads it), verified end-to-end on real Cloud for all six supported SDKs.",{"type":44,"tag":59,"props":8448,"children":8449},{},[8450,8455,8456,8462],{"type":44,"tag":65,"props":8451,"children":8452},{},[8453],{"type":49,"value":8454},"Step — Inject the failure.",{"type":49,"value":2096},{"type":44,"tag":84,"props":8457,"children":8459},{"className":8458},[],[8460],{"type":49,"value":8461},"1. Inject the failure",{"type":49,"value":8463}," choice above is this step's go-ahead — so disclose, then run (don't add a second go-ahead prompt):",{"type":44,"tag":381,"props":8465,"children":8466},{},[8467,8484,8516,8549],{"type":44,"tag":247,"props":8468,"children":8469},{},[8470,8475,8477,8482],{"type":44,"tag":65,"props":8471,"children":8472},{},[8473],{"type":49,"value":8474},"Disclose:",{"type":49,"value":8476}," render its gate from the ",{"type":44,"tag":84,"props":8478,"children":8480},{"className":8479},[],[8481],{"type":49,"value":408},{"type":49,"value":8483}," (inject + recover) template (§Gate templates).",{"type":44,"tag":247,"props":8485,"children":8486},{},[8487,8492,8493,8499,8501,8507,8509,8514],{"type":44,"tag":65,"props":8488,"children":8489},{},[8490],{"type":49,"value":8491},"Run:",{"type":49,"value":2209},{"type":44,"tag":84,"props":8494,"children":8496},{"className":8495},[],[8497],{"type":49,"value":8498},"scripts\u002Fprovision.sh run-workflow --sdk \u003Csdk> --dir \u003Crepo_path> --demo-failure transient",{"type":49,"value":8500},". Starts the Worker with ",{"type":44,"tag":84,"props":8502,"children":8504},{"className":8503},[],[8505],{"type":49,"value":8506},"DEMO_FAILURE=transient",{"type":49,"value":8508}," (the deposit activity fails its first attempts, then succeeds), runs ",{"type":44,"tag":65,"props":8510,"children":8511},{},[8512],{"type":49,"value":8513},"the same starter command — the sample's source is never edited",{"type":49,"value":8515}," (it reads its Workflow ID from the environment), and stops the Worker when done.",{"type":44,"tag":247,"props":8517,"children":8518},{},[8519,8524,8526,8532,8534,8540,8542,8547],{"type":44,"tag":65,"props":8520,"children":8521},{},[8522],{"type":49,"value":8523},"Distinct Workflow ID:",{"type":49,"value":8525}," this run is named ",{"type":44,"tag":84,"props":8527,"children":8529},{"className":8528},[],[8530],{"type":49,"value":8531},"money-transfer-demo-recovery",{"type":49,"value":8533}," (vs the clean run's ",{"type":44,"tag":84,"props":8535,"children":8537},{"className":8536},[],[8538],{"type":49,"value":8539},"money-transfer-demo",{"type":49,"value":8541},"), so it appears as a ",{"type":44,"tag":65,"props":8543,"children":8544},{},[8545],{"type":49,"value":8546},"separate Workflow",{"type":49,"value":8548}," in Cloud whose history shows the failure-and-recovery.",{"type":44,"tag":247,"props":8550,"children":8551},{},[8552,8562,8564,8580],{"type":44,"tag":65,"props":8553,"children":8554},{},[8555,8557],{"type":49,"value":8556},"Wait for ",{"type":44,"tag":84,"props":8558,"children":8560},{"className":8559},[],[8561],{"type":49,"value":8062},{"type":49,"value":8563}," — the retry recovered it. ",{"type":44,"tag":65,"props":8565,"children":8566},{},[8567,8569,8574,8575],{"type":49,"value":8568},"Keep this call's ",{"type":44,"tag":84,"props":8570,"children":8572},{"className":8571},[],[8573],{"type":49,"value":1964},{"type":49,"value":2355},{"type":44,"tag":84,"props":8576,"children":8578},{"className":8577},[],[8579],{"type":49,"value":1971},{"type":49,"value":8581},"; they identify the recovery run the Ending link points at.",{"type":44,"tag":59,"props":8583,"children":8584},{},[8585,8590,8592,8597,8599,8604],{"type":44,"tag":65,"props":8586,"children":8587},{},[8588],{"type":49,"value":8589},"Step — Show the recovery.",{"type":49,"value":8591}," Keep it to ",{"type":44,"tag":65,"props":8593,"children":8594},{},[8595],{"type":49,"value":8596},"one line",{"type":49,"value":8598},": the deposit failed on purpose, Temporal retried it automatically, and the Workflow still reached ",{"type":44,"tag":84,"props":8600,"children":8602},{"className":8601},[],[8603],{"type":49,"value":2684},{"type":49,"value":8605}," (the withdrawal never re-ran) — then send them to the dashboard to see it. Don't walk through the worker logs or event history line-by-line; the dashboard CTA carries the detail.",{"type":44,"tag":59,"props":8607,"children":8608},{},[8609,8614,8615,8621,8623,8628,8630,8639],{"type":44,"tag":279,"props":8610,"children":8611},{},[8612],{"type":49,"value":8613},"(Variant — advanced, manual.)",{"type":49,"value":2209},{"type":44,"tag":84,"props":8616,"children":8618},{"className":8617},[],[8619],{"type":49,"value":8620},"DEMO_FAILURE=permanent",{"type":49,"value":8622}," makes the deposit fail ",{"type":44,"tag":65,"props":8624,"children":8625},{},[8626],{"type":49,"value":8627},"non-retryably",{"type":49,"value":8629},", so the ",{"type":44,"tag":65,"props":8631,"children":8632},{},[8633],{"type":44,"tag":84,"props":8634,"children":8636},{"className":8635},[],[8637],{"type":49,"value":8638},"refund",{"type":49,"value":8640}," compensation runs — the saga\u002Frollback story. Two caveats:",{"type":44,"tag":381,"props":8642,"children":8643},{},[8644,8678],{"type":44,"tag":247,"props":8645,"children":8646},{},[8647,8657,8658,8663,8665,8670,8672,8677],{"type":44,"tag":65,"props":8648,"children":8649},{},[8650,8652],{"type":49,"value":8651},"Run it by hand, not through ",{"type":44,"tag":84,"props":8653,"children":8655},{"className":8654},[],[8656],{"type":49,"value":408},{"type":49,"value":147},{"type":44,"tag":84,"props":8659,"children":8661},{"className":8660},[],[8662],{"type":49,"value":408},{"type":49,"value":8664}," expects ",{"type":44,"tag":84,"props":8666,"children":8668},{"className":8667},[],[8669],{"type":49,"value":2684},{"type":49,"value":8671}," and would report a non-zero starter as ",{"type":44,"tag":84,"props":8673,"children":8675},{"className":8674},[],[8676],{"type":49,"value":2001},{"type":49,"value":2127},{"type":44,"tag":247,"props":8679,"children":8680},{},[8681,8686,8688],{"type":44,"tag":65,"props":8682,"children":8683},{},[8684],{"type":49,"value":8685},"Terminal state differs by SDK",{"type":49,"value":8687}," — narrate what the history actually shows, don't assert one outcome:\n",{"type":44,"tag":381,"props":8689,"children":8690},{},[8691,8707],{"type":44,"tag":247,"props":8692,"children":8693},{},[8694,8696,8705],{"type":49,"value":8695},"Python \u002F Go \u002F TypeScript \u002F .NET → ",{"type":44,"tag":65,"props":8697,"children":8698},{},[8699],{"type":44,"tag":84,"props":8700,"children":8702},{"className":8701},[],[8703],{"type":49,"value":8704},"FAILED",{"type":49,"value":8706}," (the original error propagates after the refund).",{"type":44,"tag":247,"props":8708,"children":8709},{},[8710,8712,8720],{"type":49,"value":8711},"Java \u002F Ruby → ",{"type":44,"tag":65,"props":8713,"children":8714},{},[8715],{"type":44,"tag":84,"props":8716,"children":8718},{"className":8717},[],[8719],{"type":49,"value":2684},{"type":49,"value":8721}," (their saga returns after compensating).",{"type":44,"tag":59,"props":8723,"children":8724},{},[8725,8727,8732,8734,8739],{"type":49,"value":8726},"There is ",{"type":44,"tag":65,"props":8728,"children":8729},{},[8730],{"type":49,"value":8731},"no checkpoint after Phase 4",{"type":49,"value":8733}," — go straight to the Ending, whose Cloud-UI link is the recovered run's timeline page (",{"type":44,"tag":84,"props":8735,"children":8737},{"className":8736},[],[8738],{"type":49,"value":8531},{"type":49,"value":3987},{"type":44,"tag":59,"props":8741,"children":8742},{},[8743,8748,8750,8756],{"type":44,"tag":65,"props":8744,"children":8745},{},[8746],{"type":49,"value":8747},"If the user asks (plain language):",{"type":49,"value":8749}," we made the deposit fail on purpose; Temporal retried it automatically and the Workflow still finished correctly — no lost state, no manual recovery. (Docs: ",{"type":44,"tag":3810,"props":8751,"children":8754},{"href":8752,"rel":8753},"https:\u002F\u002Fdocs.temporal.io\u002Fencyclopedia\u002Fretry-policies",[3814],[8755],{"type":49,"value":8752},{"type":49,"value":1402},{"type":44,"tag":52,"props":8758,"children":8760},{"id":8759},"ending-the-skill",[8761],{"type":49,"value":8762},"Ending the Skill",{"type":44,"tag":59,"props":8764,"children":8765},{},[8766,8768,8773],{"type":49,"value":8767},"Once Phase 4 has shown the recovery, the setup is done. ",{"type":44,"tag":65,"props":8769,"children":8770},{},[8771],{"type":49,"value":8772},"Close with a short summary and the recovery link — keep it tight, no big recap table.",{"type":49,"value":8774}," Do exactly this:",{"type":44,"tag":243,"props":8776,"children":8777},{},[8778,8801,8942],{"type":44,"tag":247,"props":8779,"children":8780},{},[8781,8786,8787,8792,8794,8799],{"type":44,"tag":65,"props":8782,"children":8783},{},[8784],{"type":49,"value":8785},"No Worker should still be running",{"type":49,"value":147},{"type":44,"tag":84,"props":8788,"children":8790},{"className":8789},[],[8791],{"type":49,"value":408},{"type":49,"value":8793}," stops its Worker when it returns, so Phases 3 and 4 leave nothing polling Cloud. Only stop a process by hand if you ran the advanced manual ",{"type":44,"tag":84,"props":8795,"children":8797},{"className":8796},[],[8798],{"type":49,"value":8620},{"type":49,"value":8800}," variant.",{"type":44,"tag":247,"props":8802,"children":8803},{},[8804,8809,8811,8816,8818,8823,8824,8829,8831,8834,8839,8842,8847,8859,8862,8885,8888,8892,8895,8900,8907,8910,8922,8925,8927],{"type":44,"tag":65,"props":8805,"children":8806},{},[8807],{"type":49,"value":8808},"Show the recovered Workflow, then close with the summary.",{"type":49,"value":8810}," First the Cloud UI link (bold lead-in, bare URL alone on its own line, no backticks) — the ",{"type":44,"tag":65,"props":8812,"children":8813},{},[8814],{"type":49,"value":8815},"recovery run's timeline",{"type":49,"value":8817}," page, using the ",{"type":44,"tag":84,"props":8819,"children":8821},{"className":8820},[],[8822],{"type":49,"value":1964},{"type":49,"value":1380},{"type":44,"tag":84,"props":8825,"children":8827},{"className":8826},[],[8828],{"type":49,"value":1971},{"type":49,"value":8830}," Phase 4 emitted:",{"type":44,"tag":419,"props":8832,"children":8833},{},[],{"type":44,"tag":65,"props":8835,"children":8836},{},[8837],{"type":49,"value":8838},"View your recovered Workflow on Temporal Cloud:",{"type":44,"tag":419,"props":8840,"children":8841},{},[],{"type":44,"tag":3810,"props":8843,"children":8845},{"href":8170,"rel":8844},[3814],[8846],{"type":49,"value":8170},{"type":44,"tag":8175,"props":8848,"children":8849},{},[8850,8851],{"type":49,"value":8179},{"type":44,"tag":8181,"props":8852,"children":8853},{},[8854,8855],{"type":49,"value":1380},{"type":44,"tag":8186,"props":8856,"children":8857},{},[8858],{"type":49,"value":8190},{"type":44,"tag":419,"props":8860,"children":8861},{},[],{"type":44,"tag":279,"props":8863,"children":8864},{},[8865,8866,8871,8872,8877,8879,8883],{"type":49,"value":8211},{"type":44,"tag":84,"props":8867,"children":8869},{"className":8868},[],[8870],{"type":49,"value":1971},{"type":49,"value":3700},{"type":44,"tag":84,"props":8873,"children":8875},{"className":8874},[],[8876],{"type":49,"value":8224},{"type":49,"value":8878},": show the Workflow ",{"type":44,"tag":65,"props":8880,"children":8881},{},[8882],{"type":49,"value":8231},{"type":49,"value":8884}," page the same way — bold lead-in, bare URL on its own line:",{"type":44,"tag":419,"props":8886,"children":8887},{},[],{"type":44,"tag":65,"props":8889,"children":8890},{},[8891],{"type":49,"value":8838},{"type":44,"tag":419,"props":8893,"children":8894},{},[],{"type":44,"tag":3810,"props":8896,"children":8898},{"href":8170,"rel":8897},[3814],[8899],{"type":49,"value":8170},{"type":44,"tag":8175,"props":8901,"children":8902},{},[8903,8904],{"type":49,"value":8179},{"type":44,"tag":8181,"props":8905,"children":8906},{},[],{"type":44,"tag":419,"props":8908,"children":8909},{},[],{"type":44,"tag":279,"props":8911,"children":8912},{},[8913,8915,8920],{"type":49,"value":8914},"— never the bare ",{"type":44,"tag":84,"props":8916,"children":8918},{"className":8917},[],[8919],{"type":49,"value":8269},{"type":49,"value":8921}," list.",{"type":44,"tag":419,"props":8923,"children":8924},{},[],{"type":49,"value":8926},"Then close with a short summary (a few plain sentences, no table) that makes the durable-execution payoff concrete — for example:",{"type":44,"tag":8425,"props":8928,"children":8929},{},[8930],{"type":44,"tag":59,"props":8931,"children":8932},{},[8933,8935,8940],{"type":49,"value":8934},"🎉 You're set up on Temporal Cloud — and you just watched ",{"type":44,"tag":65,"props":8936,"children":8937},{},[8938],{"type":49,"value":8939},"Durable Execution",{"type":49,"value":8941}," in action. Your money-transfer Workflow ran on real Cloud infrastructure, and when the deposit failed on purpose, Temporal automatically retried it until it succeeded — the transfer still completed, with no lost state and not a line of retry code from you. That's the whole idea: you write the business logic; Temporal makes it survive failures and run to completion.",{"type":44,"tag":247,"props":8943,"children":8944},{},[8945,8950,8952,8957,8959,8964,8965,8970],{"type":44,"tag":65,"props":8946,"children":8947},{},[8948],{"type":49,"value":8949},"One-line note:",{"type":49,"value":8951}," the API key is saved in ",{"type":44,"tag":84,"props":8953,"children":8955},{"className":8954},[],[8956],{"type":49,"value":993},{"type":49,"value":8958}," (give the path, ",{"type":44,"tag":84,"props":8960,"children":8962},{"className":8961},[],[8963],{"type":49,"value":7398},{"type":49,"value":132},{"type":44,"tag":65,"props":8966,"children":8967},{},[8968],{"type":49,"value":8969},"auto-expires in ~25 hours",{"type":49,"value":8971}," — don't share raw terminal logs and never commit the TOML.",{"type":44,"tag":59,"props":8973,"children":8974},{},[8975,8977,8982],{"type":49,"value":8976},"The summary above is the payoff — keep it to that one short recap. The only calls-to-action are the ",{"type":44,"tag":65,"props":8978,"children":8979},{},[8980],{"type":49,"value":8981},"two Workflow timeline links",{"type":49,"value":8983}," — the completed run (Phase 3) and the recovered run (here at the end). Don't loop back, re-run, keep teaching, offer teardown, or suggest other next steps — a successful completion is the terminal state.",{"type":44,"tag":52,"props":8985,"children":8987},{"id":8986},"failure-handling",[8988],{"type":49,"value":367},{"type":44,"tag":59,"props":8990,"children":8991},{},[8992,8993,8998,9000,9005,9006,9015],{"type":49,"value":7459},{"type":44,"tag":84,"props":8994,"children":8996},{"className":8995},[],[8997],{"type":49,"value":352},{"type":49,"value":8999},", map the ",{"type":44,"tag":84,"props":9001,"children":9003},{"className":9002},[],[9004],{"type":49,"value":360},{"type":49,"value":362},{"type":44,"tag":65,"props":9007,"children":9008},{},[9009],{"type":44,"tag":84,"props":9010,"children":9012},{"className":9011},[],[9013],{"type":49,"value":9014},"references\u002Ffailure-handling.md",{"type":49,"value":9016}," and fix the exact cause it names — never improvise an alternate command, switch output formats, or poll. Read that file only when an error fires (progressive disclosure); the Steps spine's On-error column indexes which codes each step can emit.",{"type":44,"tag":52,"props":9018,"children":9020},{"id":9019},"files",[9021],{"type":49,"value":9022},"Files",{"type":44,"tag":381,"props":9024,"children":9025},{},[9026,9087,9131,9149],{"type":44,"tag":247,"props":9027,"children":9028},{},[9029,9034,9035,9040,9042,9046,9047,9052,9054,9059,9061,9066,9068,9073,9075,9080,9082],{"type":44,"tag":84,"props":9030,"children":9032},{"className":9031},[],[9033],{"type":49,"value":582},{"type":49,"value":147},{"type":44,"tag":65,"props":9036,"children":9037},{},[9038],{"type":49,"value":9039},"the deterministic executor.",{"type":49,"value":9041}," Owns preflight \u002F ",{"type":44,"tag":65,"props":9043,"children":9044},{},[9045],{"type":49,"value":2436},{"type":49,"value":483},{"type":44,"tag":65,"props":9048,"children":9049},{},[9050],{"type":49,"value":9051},"preview",{"type":49,"value":9053}," \u002F install \u002F login \u002F regions \u002F namespace-create \u002F ",{"type":44,"tag":65,"props":9055,"children":9056},{},[9057],{"type":49,"value":9058},"install-deps (manager-parameterized)",{"type":49,"value":9060}," \u002F key-mint+config-write \u002F verify \u002F await-auth \u002F ",{"type":44,"tag":65,"props":9062,"children":9063},{},[9064],{"type":49,"value":9065},"run-workflow (Worker + starter)",{"type":49,"value":9067}," \u002F clone \u002F repair-config \u002F cleanup-info. Invoke it and parse its ",{"type":44,"tag":84,"props":9069,"children":9071},{"className":9070},[],[9072],{"type":49,"value":344},{"type":49,"value":9074}," block (see \"Execution model\" above); it is the single source of truth for the pinned CLI flags, the per-SDK run commands, ",{"type":44,"tag":65,"props":9076,"children":9077},{},[9078],{"type":49,"value":9079},"and the per-(SDK,manager) install matrix + minimum-version table",{"type":49,"value":9081},". Pure bash, portable across Claude Code, Codex, and Cursor. ",{"type":44,"tag":65,"props":9083,"children":9084},{},[9085],{"type":49,"value":9086},"Read-only during a run — invoke it, never edit it (read-only script).",{"type":44,"tag":247,"props":9088,"children":9089},{},[9090,9096,9098,9103,9104,9109,9110,9115,9116,9122,9123,9129],{"type":44,"tag":84,"props":9091,"children":9093},{"className":9092},[],[9094],{"type":49,"value":9095},"references\u002Funified-cli.md",{"type":49,"value":9097}," — background on the prerelease CLI and the client-config TOML: ",{"type":44,"tag":84,"props":9099,"children":9101},{"className":9100},[],[9102],{"type":49,"value":130},{"type":49,"value":1380},{"type":44,"tag":84,"props":9105,"children":9107},{"className":9106},[],[9108],{"type":49,"value":138},{"type":49,"value":614},{"type":44,"tag":84,"props":9111,"children":9113},{"className":9112},[],[9114],{"type":49,"value":1510},{"type":49,"value":614},{"type":44,"tag":84,"props":9117,"children":9119},{"className":9118},[],[9120],{"type":49,"value":9121},"namespace create",{"type":49,"value":614},{"type":44,"tag":84,"props":9124,"children":9126},{"className":9125},[],[9127],{"type":49,"value":9128},"apikey create-for-me",{"type":49,"value":9130},", file locations, and the auth-override gotcha. The script encodes these; read the reference when a flag drifts and you need to update the script.",{"type":44,"tag":247,"props":9132,"children":9133},{},[9134,9140,9142,9147],{"type":44,"tag":84,"props":9135,"children":9137},{"className":9136},[],[9138],{"type":49,"value":9139},"references\u002Fsdk-cloud.md",{"type":49,"value":9141}," — per-SDK table: repo + cloud branch, task-queue name, how each connects (",{"type":44,"tag":84,"props":9143,"children":9145},{"className":9144},[],[9146],{"type":49,"value":2792},{"type":49,"value":9148}," profile), and worker\u002Fstarter run commands. No connection edits — the branch is pre-wired.",{"type":44,"tag":247,"props":9150,"children":9151},{},[9152,9157,9158,9163,9165,9175],{"type":44,"tag":84,"props":9153,"children":9155},{"className":9154},[],[9156],{"type":49,"value":9014},{"type":49,"value":6471},{"type":44,"tag":84,"props":9159,"children":9161},{"className":9160},[],[9162],{"type":49,"value":360},{"type":49,"value":9164}," → remediation map. Read it ",{"type":44,"tag":65,"props":9166,"children":9167},{},[9168,9170],{"type":49,"value":9169},"only when a subcommand returns ",{"type":44,"tag":84,"props":9171,"children":9173},{"className":9172},[],[9174],{"type":49,"value":352},{"type":49,"value":9176}," (progressive disclosure — the happy path never opens it); the Failure Handling section above is a one-line pointer to it, and the Steps spine's On-error column is the index.",{"items":9178,"total":9276},[9179,9198,9214,9226,9241,9252,9264],{"slug":9180,"name":9180,"fn":9181,"description":9182,"org":9183,"tags":9184,"stars":25,"repoUrl":26,"updatedAt":9197},"accessibility-and-inclusive-visualization","make data visualizations accessible","Make data visualizations accessible and inclusive. Use when the user needs chart or diagram accessibility guidance, text alternatives for complex visuals, color and contrast review, keyboard support, reduced-motion behavior for animation or parallax, or an accessibility QA workflow for exported figures, UML-like diagrams, and dashboards.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9185,9188,9191,9194],{"name":9186,"slug":9187,"type":15},"Accessibility","accessibility",{"name":9189,"slug":9190,"type":15},"Charts","charts",{"name":9192,"slug":9193,"type":15},"Data Visualization","data-visualization",{"name":9195,"slug":9196,"type":15},"Design","design","2026-06-30T19:00:57.102",{"slug":9199,"name":9199,"fn":9200,"description":9201,"org":9202,"tags":9203,"stars":25,"repoUrl":26,"updatedAt":9213},"adobe-batch-edit-photos","apply consistent photo adjustments","Apply consistent photo adjustments across a set of images so they look like they were edited together. Use this skill whenever the user says \"make my photos look cohesive\", \"give all these the same style\", \"apply a warm and golden feel to all of these\", \"make this cinematic\", \"match the look across my photos\", \"edit all my travel photos the same way\", \"batch edit these\", \"make these consistent\", \"fix my phone photos\", or uploads a folder of photos and wants a unified, polished result. Also triggers for requests like \"apply a preset to all of these\", \"make these look professional\", or \"they were shot in mixed lighting — can you fix them all\". Outputs direct final image URLs plus an in-chat preview grid and optional Firefly Board link. Access: 🔐 Signed-In required | Gen AI: ❌\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9204,9207,9210],{"name":9205,"slug":9206,"type":15},"Creative","creative",{"name":9208,"slug":9209,"type":15},"Editing","editing",{"name":9211,"slug":9212,"type":15},"Imaging","imaging","2026-08-28T15:09:11.185865",{"slug":9215,"name":9215,"fn":9216,"description":9217,"org":9218,"tags":9219,"stars":25,"repoUrl":26,"updatedAt":9225},"adobe-create-mockups","create product and scene mockups","Use when a user wants to see their logo, design, or sketch on a product or scene mockup — mugs, t-shirts, business cards, hats, phone screens, posters, billboards, or similar. Triggers on \"create mockups\", \"show my logo on products\", or any logo upload with a request to visualize it on items. Access: 🔐 Signed-In required | Gen AI: ✅ Adobe Firefly via `image_generate` used for design creation, sketch polishing, and mockup scene generation\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9220,9221,9222],{"name":9205,"slug":9206,"type":15},{"name":9195,"slug":9196,"type":15},{"name":9223,"slug":9224,"type":15},"Graphics","graphics","2026-08-28T15:09:07.42507",{"slug":9227,"name":9227,"fn":9228,"description":9229,"org":9230,"tags":9231,"stars":25,"repoUrl":26,"updatedAt":9240},"adobe-create-social-variations","export platform-ready social media assets","Resize, crop, or export any image or video into platform-ready social media assets using Adobe Creative Cloud tools. Use this skill when a user wants to prepare a photo, image, or video for one or more social platforms — Instagram, TikTok, LinkedIn, Facebook, YouTube, Snapchat, Pinterest, Threads, or X\u002FTwitter. Triggers on: \"prepare my image for Instagram\", \"resize for TikTok\", \"get this ready to post\", \"make versions for all platforms\", \"social media sizes\", \"crop for stories\", \"export for LinkedIn\", \"resize my video for social\", \"make social media assets\", or any request to adapt a photo or video for specific platforms. Handles subject-aware cropping, AI canvas expansion, test previews before full runs, and same-ratio video resizing.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9232,9233,9234,9237],{"name":9205,"slug":9206,"type":15},{"name":9223,"slug":9224,"type":15},{"name":9235,"slug":9236,"type":15},"Marketing","marketing",{"name":9238,"slug":9239,"type":15},"Social Media","social-media","2026-08-28T15:10:07.282096",{"slug":9242,"name":9242,"fn":9243,"description":9244,"org":9245,"tags":9246,"stars":25,"repoUrl":26,"updatedAt":9251},"adobe-design-from-template","create visual designs from templates","Create any visual design using Adobe Express templates — flyers, posters, social media posts (Instagram, Facebook, LinkedIn), business cards, invitations, greeting cards, resumes, cover letters, brochures, newsletters, certificates, presentations, YouTube thumbnails, email headers, logos, menus, and labels. Use this skill whenever the user wants to make, design, or build any visual — even if they just say \"make me a flyer\", \"design a poster\", \"I need something for Instagram\", \"create an event invite\", or \"make a business card\". Also handles browsing templates, editing text, replacing images, changing backgrounds, animating, and exporting designs. Access: 🔐 Signed-In required | Gen AI: ❌ by default — image replacement only where the surface permits generative AI (e.g. Codex); none on Claude\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9247,9248,9249,9250],{"name":9205,"slug":9206,"type":15},{"name":9195,"slug":9196,"type":15},{"name":9223,"slug":9224,"type":15},{"name":4613,"slug":4610,"type":15},"2026-08-28T15:10:03.050113",{"slug":9253,"name":9253,"fn":9254,"description":9255,"org":9256,"tags":9257,"stars":25,"repoUrl":26,"updatedAt":9263},"adobe-edit-quick-cut","create video sizzle reels","Create a punchy sizzle reel from a video using Adobe Quick Cut. Use this skill whenever a user wants to cut, trim, or shorten a video into highlights — including phrases like \"make a sizzle reel\", \"make a highlight reel\", \"quick cut this\", \"cut the best parts\", \"shorten this video\", \"make a highlight clip\", \"summarize this video visually\", or any request to produce a shorter edited version of a video. Use this skill for Quick Cut requests before suggesting manual editing in Premiere. Requires the user to upload a video file.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9258,9259,9260],{"name":9205,"slug":9206,"type":15},{"name":9208,"slug":9209,"type":15},{"name":9261,"slug":9262,"type":15},"Video","video","2026-08-28T15:09:07.765245",{"slug":9265,"name":9265,"fn":9266,"description":9267,"org":9268,"tags":9269,"stars":25,"repoUrl":26,"updatedAt":9275},"adobe-retouch-portraits","batch retouch portrait photos","Bulk-retouch a folder of portrait photos using Adobe tools — designed for wedding photographers and event photographers who need fast, walk-away batch processing. Use this skill when the user says \"retouch my photos\", \"batch process these portraits\", \"process my wedding photos\", \"clean up this folder of images\", \"run my headshots through Adobe\", or uploads\u002Fselects a folder of photos and wants them polished and ready to review. Automatically applies auto-straighten, auto-tone, and auto-light to every image. Outputs a preview grid and download folder. Access: 🔐 Signed-In required | Gen AI: ❌ by default — optional background-only cleanup only where the surface permits generative AI (e.g. Codex); none on Claude\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9270,9271,9272],{"name":9205,"slug":9206,"type":15},{"name":9211,"slug":9212,"type":15},{"name":9273,"slug":9274,"type":15},"Photography","photography","2026-08-28T15:09:10.386974",499,{"items":9278,"total":9475},[9279,9300,9321,9338,9354,9371,9390,9404,9420,9434,9446,9459],{"slug":9280,"name":9280,"fn":9281,"description":9282,"org":9283,"tags":9284,"stars":9297,"repoUrl":9298,"updatedAt":9299},"prior-auth-packet-builder","build healthcare prior authorization packets","Build a concise prior authorization packet from local case files and payer policy docs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9285,9288,9291,9294],{"name":9286,"slug":9287,"type":15},"Documents","documents",{"name":9289,"slug":9290,"type":15},"Healthcare","healthcare",{"name":9292,"slug":9293,"type":15},"Insurance","insurance",{"name":9295,"slug":9296,"type":15},"Regulatory Compliance","regulatory-compliance",28169,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python","2026-08-02T05:48:07.395855",{"slug":9301,"name":9301,"fn":9302,"description":9303,"org":9304,"tags":9305,"stars":9318,"repoUrl":9319,"updatedAt":9320},"aspnet-core","build ASP.NET Core web applications","Build, review, refactor, or architect ASP.NET Core web applications using current official guidance for .NET web development. Use when working on Blazor Web Apps, Razor Pages, MVC, Minimal APIs, controller-based Web APIs, SignalR, gRPC, middleware, dependency injection, configuration, authentication, authorization, testing, performance, deployment, or ASP.NET Core upgrades.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9306,9307,9309,9312,9315],{"name":7156,"slug":3912,"type":15},{"name":9308,"slug":9301,"type":15},"ASP.NET Core",{"name":9310,"slug":9311,"type":15},"Blazor","blazor",{"name":9313,"slug":9314,"type":15},"C#","csharp",{"name":9316,"slug":9317,"type":15},"Web Development","web-development",23787,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fskills","2026-04-12T05:07:02.819491",{"slug":9322,"name":9322,"fn":9323,"description":9324,"org":9325,"tags":9326,"stars":9318,"repoUrl":9319,"updatedAt":9337},"chatgpt-apps","build ChatGPT Apps SDK applications","Build, scaffold, refactor, and troubleshoot ChatGPT Apps SDK applications that combine an MCP server and widget UI. Use when Codex needs to design tools, register UI resources, wire the MCP Apps bridge or ChatGPT compatibility APIs, apply Apps SDK metadata or CSP or domain settings, or produce a docs-aligned project scaffold. Prefer a docs-first workflow by invoking the openai-docs skill or OpenAI developer docs MCP tools before generating code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9327,9330,9333,9336],{"name":9328,"slug":9329,"type":15},"Apps SDK","apps-sdk",{"name":9331,"slug":9332,"type":15},"ChatGPT","chatgpt",{"name":9334,"slug":9335,"type":15},"MCP","mcp",{"name":9,"slug":8,"type":15},"2026-04-12T05:07:05.468097",{"slug":9339,"name":9339,"fn":9340,"description":9341,"org":9342,"tags":9343,"stars":9318,"repoUrl":9319,"updatedAt":9353},"cli-creator","build CLIs from API docs","Build a composable CLI for Codex from API docs, an OpenAPI spec, existing curl examples, an SDK, a web app, an admin tool, or a local script. Use when the user wants Codex to create a command-line tool that can run from any repo, expose composable read\u002Fwrite commands, return stable JSON, manage auth, and pair with a companion skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9344,9347,9350],{"name":9345,"slug":9346,"type":15},"API Development","api-development",{"name":9348,"slug":9349,"type":15},"CLI","cli",{"name":9351,"slug":9352,"type":15},"Codex","codex","2026-04-12T05:07:04.132762",{"slug":9355,"name":9355,"fn":9356,"description":9357,"org":9358,"tags":9359,"stars":9318,"repoUrl":9319,"updatedAt":9370},"cloudflare-deploy","deploy projects to Cloudflare","Deploy applications and infrastructure to Cloudflare using Workers, Pages, and related platform services. Use when the user asks to deploy, host, publish, or set up a project on Cloudflare.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9360,9363,9366,9369],{"name":9361,"slug":9362,"type":15},"Cloudflare","cloudflare",{"name":9364,"slug":9365,"type":15},"Cloudflare Pages","cloudflare-pages",{"name":9367,"slug":9368,"type":15},"Cloudflare Workers","cloudflare-workers",{"name":17,"slug":18,"type":15},"2026-04-12T05:07:14.275118",{"slug":9372,"name":9372,"fn":9373,"description":9374,"org":9375,"tags":9376,"stars":9318,"repoUrl":9319,"updatedAt":9389},"define-goal","define and set measurable project goals","Help the user define a concrete, measurable goal before starting work, especially when they ask to use the goal tool, create a goal, set an objective, clarify success criteria, or turn a fuzzy intention into a quantitative outcome. Use this skill for goal creation and goal refinement only; it does not manage durable snapshots, decision logs, or long-running execution artifacts.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9377,9380,9383,9386],{"name":9378,"slug":9379,"type":15},"Productivity","productivity",{"name":9381,"slug":9382,"type":15},"Project Management","project-management",{"name":9384,"slug":9385,"type":15},"Strategy","strategy",{"name":9387,"slug":9388,"type":15},"Task Management","task-management","2026-05-23T06:17:16.870838",{"slug":9391,"name":9391,"fn":9392,"description":9393,"org":9394,"tags":9395,"stars":9318,"repoUrl":9319,"updatedAt":9403},"figma","translate Figma designs into code","Use the Figma MCP server to fetch design context, screenshots, variables, and assets from Figma, and to translate Figma nodes into production code. Trigger when a task involves Figma URLs, node IDs, design-to-code implementation, or Figma MCP setup and troubleshooting.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9396,9397,9399,9402],{"name":9195,"slug":9196,"type":15},{"name":9398,"slug":9391,"type":15},"Figma",{"name":9400,"slug":9401,"type":15},"Frontend","frontend",{"name":9334,"slug":9335,"type":15},"2026-04-12T05:06:47.939943",{"slug":9405,"name":9405,"fn":9406,"description":9407,"org":9408,"tags":9409,"stars":9318,"repoUrl":9319,"updatedAt":9419},"figma-code-connect-components","connect Figma designs to code components","Connects Figma design components to code components using Code Connect mapping tools. Use when user says \"code connect\", \"connect this component to code\", \"map this component\", \"link component to code\", \"create code connect mapping\", or wants to establish mappings between Figma designs and code implementations. For canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9410,9411,9414,9415,9416],{"name":9195,"slug":9196,"type":15},{"name":9412,"slug":9413,"type":15},"Design System","design-system",{"name":9398,"slug":9391,"type":15},{"name":9400,"slug":9401,"type":15},{"name":9417,"slug":9418,"type":15},"UI Components","ui-components","2026-05-10T05:59:52.971881",{"slug":9421,"name":9421,"fn":9422,"description":9423,"org":9424,"tags":9425,"stars":9318,"repoUrl":9319,"updatedAt":9433},"figma-create-design-system-rules","generate design system rules from Figma","Generates custom design system rules for the user's codebase. Use when user says \"create design system rules\", \"generate rules for my project\", \"set up design rules\", \"customize design system guidelines\", or wants to establish project-specific conventions for Figma-to-code workflows. Requires Figma MCP server connection.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9426,9427,9428,9431,9432],{"name":9195,"slug":9196,"type":15},{"name":9412,"slug":9413,"type":15},{"name":9429,"slug":9430,"type":15},"Documentation","documentation",{"name":9398,"slug":9391,"type":15},{"name":9400,"slug":9401,"type":15},"2026-05-16T06:07:47.821474",{"slug":9435,"name":9435,"fn":9436,"description":9437,"org":9438,"tags":9439,"stars":9318,"repoUrl":9319,"updatedAt":9445},"figma-implement-design","translate Figma designs into application code","Translates Figma designs into production-ready application code with 1:1 visual fidelity. Use when implementing UI code from Figma files, when user mentions \"implement design\", \"generate code\", \"implement component\", provides Figma URLs, or asks to build components matching Figma specs. For Figma canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9440,9441,9442,9443,9444],{"name":9195,"slug":9196,"type":15},{"name":9398,"slug":9391,"type":15},{"name":9400,"slug":9401,"type":15},{"name":9417,"slug":9418,"type":15},{"name":9316,"slug":9317,"type":15},"2026-05-16T06:07:40.583615",{"slug":9447,"name":9447,"fn":9448,"description":9449,"org":9450,"tags":9451,"stars":9318,"repoUrl":9319,"updatedAt":9458},"hatch-pet","create animated pets for Codex","Create, repair, validate, visually QA, and package Codex-compatible animated pets and pet spritesheets from character art, generated images, company or prospect brand cues, or visual references. Use when a user wants a lightweight-worker Codex pet workflow, a non-pixel custom pet style, a prospect or company mascot pet, or a full 8x9 animated pet atlas with transparent unused cells, QA contact sheets, and pet.json packaging. This skill composes the installed $imagegen system skill for visual generation and uses bundled scripts for deterministic spritesheet assembly.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9452,9455,9456,9457],{"name":9453,"slug":9454,"type":15},"Animation","animation",{"name":9351,"slug":9352,"type":15},{"name":9205,"slug":9206,"type":15},{"name":9195,"slug":9196,"type":15},"2026-05-02T05:31:48.48485",{"slug":9460,"name":9460,"fn":9461,"description":9462,"org":9463,"tags":9464,"stars":9318,"repoUrl":9319,"updatedAt":9474},"imagegen","generate and edit raster images","Generate or edit raster images when the task benefits from AI-created bitmap visuals such as photos, illustrations, textures, sprites, mockups, or transparent-background cutouts. Use when Codex should create a brand-new image, transform an existing image, or derive visual variants from references, and the output should be a bitmap asset rather than repo-native code or vector. Do not use when the task is better handled by editing existing SVG\u002Fvector\u002Fcode-native assets, extending an established icon or logo system, or building the visual directly in HTML\u002FCSS\u002Fcanvas.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[9465,9466,9467,9470,9473],{"name":9205,"slug":9206,"type":15},{"name":9195,"slug":9196,"type":15},{"name":9468,"slug":9469,"type":15},"Image Generation","image-generation",{"name":9471,"slug":9472,"type":15},"Images","images",{"name":9,"slug":8,"type":15},"2026-05-15T06:23:24.312127",578]