sanzone.dev

Do this the day before.

You need one thing from me first: the project id for the session. I'll send it before the day. It is a Google Cloud project, and your Northwell Google account needs access to it.

I need one thing from you first: reply and tell me what operating system you're on — Windows, macOS, or Linux. That is the detail that caused most of the trouble last time. Nothing in this document assumes one OS, but I do, if nobody tells me otherwise, and half the fixes below only exist because that assumption was wrong for some of the room.

If step 2 or 3 below fails with a permission error, message me before the day, not on it. A permission error needs an admin, not a change on your machine — the network and certificate issues in step 4 are yours to fix, and that section tells you how.

1. Install the tools

Tool What it's for Version I tested
uv Python and package management. agents-cli installs through it and runs everything else through it. 0.11.8
agents-cli scaffolds and runs the agent 1.5.0
gcloud authentication 579.0.0

Install uv first; agents-cli installs through it.

macOS / Linux:

1curl -LsSf https://astral.sh/uv/install.sh | sh
2uv tool install google-agents-cli

Then install the Google Cloud CLI from cloud.google.com/sdk/docs/install — the platform installer sets up your PATH for you. If you use Homebrew, brew install --cask google-cloud-sdk does the same thing.

Windows (PowerShell):

1powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
2uv tool install google-agents-cli

Then install the Google Cloud CLI from cloud.google.com/sdk/docs/install and run its installer; it adds gcloud to PATH.

Restart your terminal after installing so the PATH changes take effect, then check all three:

1uv --version
2agents-cli --version
3gcloud --version

Close to those versions is fine. You do NOT need a specific Python installed. uv brings its own.

2. Authenticate

The agent talks to Gemini through Vertex AI, which uses Application Default Credentials. A plain gcloud auth login is not enough on its own; the --update-adc flag writes those credentials in the same step. Run both:

1gcloud config set project <session project id>
2gcloud auth login --update-adc

The second one opens a browser. Sign in with your Northwell account.

If either command errors, stop and message me.

3. Prove it works

Run the scaffold in a throwaway folder:

agents-cli scaffold create prereq-check --agent adk --prototype

Look for this line:

> ✓ Connected to project: <session project id>

Careful: the scaffold prints ✅ Success! even when auth failed. Success means the project line above, not the checkmark at the end. If you see this instead, step 2 did not take:

> ⚠️  Looks like you are not authenticated with Google Cloud.

Then open prereq-check/.env and check this line before you delete anything:

GOOGLE_CLOUD_PROJECT=<session project id>

If it says your-gcp-project-id, step 2's gcloud config set project did not take. That is the scaffold's fallback when gcloud has no project configured, and nothing warns you — the scaffold still reports success, and the failure only appears on your first question as Permission denied on resource project your-gcp-project-id. Re-run step 2 and scaffold again.

Delete the folder after.

If something fails on the day

Two failures came up in a dry run. Both are fixed on your machine in under a minute, so they are worth knowing rather than debugging live.

Permission denied on resource project your-gcp-project-id — the placeholder above. Run gcloud config set project <session project id>, then edit that same line in your project's .env to the session project id, and restart the playground. Both halves are needed: gcloud fixes the next scaffold, the .env edit fixes the project you already made.

invalid_grant: Bad Request, shown as RefreshError — your stored credentials expired or were revoked, which happens after a password change or simply after long enough. Nothing is wrong with your access. Sign in again:

gcloud auth login --update-adc

4. One network check

The agent calls PokéAPI directly. No key, no signup, but corporate networks sometimes interfere. Run this inside the prereq-check folder from step 3, before you delete it:

uv run python -c "from urllib.request import urlopen, Request; print(urlopen(Request('https://pokeapi.co/api/v2/pokemon/gengar', headers={'User-Agent':'pokedex-workshop/0.1'}), timeout=10).status)"

You want 200. Anything else, let me know before the session.

It has to be this command rather than a browser or a curl. Your browser, and most command-line tools, trust the certificates your operating system trusts. Python does not: it ships its own list. On a corporate network that inspects traffic, everything else can succeed while Python alone fails, so a check that does not go through Python proves nothing about whether the agent will run.

If it fails with CERTIFICATE_VERIFY_FAILED ... unable to get local issuer certificate, that is exactly this: your network is re-signing traffic with a company certificate that Python does not know about. Nothing is broken and it is not a permissions problem. Fix it by giving Python a list that includes your company's certificate.

macOS:

1security find-certificate -a -p /Library/Keychains/System.keychain > ~/corp-roots.pem
2security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain >> ~/corp-roots.pem
3cat "$(uv run python -c 'import certifi; print(certifi.where())')" ~/corp-roots.pem > ~/workshop-ca.pem
4export SSL_CERT_FILE=~/workshop-ca.pem

Windows (PowerShell):

1$certifi = uv run python -c "import certifi; print(certifi.where())"
2$corp = "$HOME\corp-roots.pem"
3Get-ChildItem Cert:\LocalMachine\Root | ForEach-Object {
4  "-----BEGIN CERTIFICATE-----"
5  [Convert]::ToBase64String($_.RawData, 'InsertLineBreaks')
6  "-----END CERTIFICATE-----"
7} | Set-Content $corp
8Get-Content $certifi, $corp | Set-Content "$HOME\workshop-ca.pem"
9$env:SSL_CERT_FILE = "$HOME\workshop-ca.pem"

Re-run the check in the same terminal; you should now get 200. That export / $env: line only lasts for that terminal window, so either set it again on the day in the terminal you use, or add it to your shell profile to make it permanent. Tell me either way, so I know to expect it.

Before you start Prerequisites Workshop steps Scaffold Talk to what you already have get_pokemon get_evolution_chain compare_pokemon Instruction NoStrategyGuard Testing Split into specialists Where the router fails Coordinator