Horizon Inc Cloudflare One demo

Setup

What to do before running the demos. Each step says which demos need it - skip the rest.

Who to sign in as

Every account's password is Savetheinternet!1.

is for each app's /admin page and FlareID's admin, not for demos.

Setting up the Windows client

Every demo that uses the Cloudflare One client - all but chapter 4.

  1. On the lab's Windows client, open an elevated PowerShell and run the setup script. It installs the Cloudflare One client, Goose (configured for this lab) and psql:
    irm https://demo./windows-client-setup.ps1 -OutFile windows-client-setup.ps1
    .\windows-client-setup.ps1
  2. Open the Cloudflare One client, enter the team name opportune-viking and sign in as Alice.
  3. Open a new terminal for psql, so the updated PATH is picked up.
Setting up Goose by handonly if you are not using the script, or on macOS
  1. Connect to a provider → + Add a custom provider → Configure manually. Type OpenAI Compatible, API URL https:///compat, API base path empty, model @cf/google/gemma-4-26b-a4b-it.
  2. Extensions → + Add custom extension, type Streamable HTTP, name Company AI Portal, endpoint https:///mcp.
  3. Disable every other extension, so the agent answers from the company's systems and not the local machine.
On Windows, set GOOSE_DISABLE_KEYRING firstif the portal extension says “Failed to load extension”

Windows Credential Manager cannot hold the portal's OAuth token, so Goose discards it. The script sets this for you; by hand, add to %APPDATA%\Block\goose\config\config.yaml:

GOOSE_DISABLE_KEYRING: true

Switching who you are

Chapters 1, 3 and 7, which are run as Rickie.

  1. In the client: Preferences → Account → Log out from Cloudflare Zero Trust.
  2. Clear the browser's sessions - sign out at https://opportune-viking.cloudflareaccess.com/cdn-cgi/access/logout and https:/// - or paste the sign-in link the client opens into an InPrivate window. Otherwise you are signed straight back in as the last person.
  3. Enrol again with team name opportune-viking and sign in as the other person.

Authenticate the MCP servers

Only for the demos that use an AI agent: the Safe AI Adoption walkthrough and the AI agent chapters. Once per lab.

  1. Zero Trust → Access controls → MCP Portals → MCP servers. All five show Waiting.
  2. For each: … → Authenticate server, and sign in as - an Executive, so Ledger works too. Each becomes Ready.
  3. In Goose, send any prompt and authorise the servers at the portal when asked, as Alice. She gets four of five: Ledger is for Executives.

Check the agent works

AI demos only. Ask Goose:

Who am I, and which tools do you have available?

Expect Alice Watson, and tools from four apps - not Ledger.

Other AI clients

Goose is the client the demos are written for - it shows the audience why something was blocked. These work too.

opencodeshows only “HTTP 424” when something is blocked

In ~/.config/opencode/opencode.json. The Desktop app takes this shape whatever its version:

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "cf-ai-demo": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Cloudflare AI Gateway (demo)",
      "options": { "baseURL": "https://aig./compat" },
      "models": { "workers-ai/@cf/google/gemma-4-26b-a4b-it": { "name": "Google Gemma 4 (Workers AI)" } }
    }
  },
  "mcp": { "servers": { "ai-demo": { "type": "remote", "url": "https://mcp./mcp", "codemode": false } } },
  "permission": {
    "execute": "deny", "bash": "deny", "edit": "deny", "read": "deny", "glob": "deny",
    "grep": "deny", "webfetch": "deny", "websearch": "deny", "subagent": "deny", "skill": "deny"
  }
}
Cloudflare OSin the browser at , if deployed - nothing to install
  1. Settings → Choose your model → Add new model → Other Cloudflare Workers AI…, id @cf/google/gemma-4-26b-a4b-it.
  2. On /gatekeepers, add the portal and sign in.
  3. In a chat: + → Add a new connection → Company AI Portal → pick a server → All tools. Repeat per server. The Safe AI Adoption walkthrough needs WorkBox and Pipeline.
Tool names change through the portalwhy the transcript shows hr_list_employees, not list_employees

The portal prefixes every tool with its server: hr_, crm_, work_, wiki_, fin_. The scripts name the underlying tool.