Installing the stack
Status: drafted · Time: 40 min · Audience: new-builder Outcome: Install and verify the White Belt tool stack through the supported setup path and a direct, copyable evidence gate.
Installation is where many new builders lose half a day. Not because they are bad at computers, but because setup is a chain. One missing link makes everything downstream look broken.
White Belt uses the supported setup path. Your job is to run it, read the output, and verify the pieces. Your job is not to become a package-manager expert on day one.
Choose your provisioned route first. If support has not moved you to Claude Team or Claude Max, this chapter’s LiteLLM path mirrors the org-wide rollout announcement from 2026-03-24. If support explicitly provisioned Team or Max, use Y.8’s route chooser and the current SOP they sent instead. Do not apply the LiteLLM settings below to a different route.
If you’re short on time
Section titled “If you’re short on time”- Get access via MyAccess, then use the terminal route support provisioned for you.
- No explicit Team or Max direction? Continue with the LiteLLM setup below. If support moved you, follow Y.8’s route chooser and the current migration SOP instead.
- On the LiteLLM route,
curl -fsSL https://get-claude.dev.razorpay.in/setup.sh | bashis the only install command you should run. - A successful install is not enough. You pass only when
claude --versionprints a version andclaudeopens without errors.
The mental model
Section titled “The mental model”Think of setup as a checklist of tools that depend on each other:
Terminal -> git -> Node runtime -> package manager -> internal package registry access -> Claude Code -> direct setup evidenceIf Node is missing, project commands fail. If package registry access is broken, installs fail. If Claude Code is missing, AI workflows cannot start. Direct evidence tells you which link failed without depending on another installed command.
This is why setup has to be boring and pinned.
The install — two steps
Section titled “The install — two steps”Step 1 — Get access (everyone)
Section titled “Step 1 — Get access (everyone)”- Open myaccess.microsoft.com, search “Claude AI”, submit the request.
- Ask your manager to approve it (under Approvals in MyAccess). If your manager is OOO, post in
#ai-helpand tag@techit— admins bypass the approval after a short delay. - Wait ~30–40 minutes after approval for Azure AD sync. If Claude.ai still shows you on a “Free Plan” after that window, sync is still catching up; give it another 15 minutes before re-routing.
- Install Claude Desktop from Self Service (Mac). Treat this as the enterprise seat / SSO check for chat and co-work — not the code path.
- Go to claude.ai, sign in with SSO → Razorpay email + MFA. You should see your org workspace.
Step 2 — Install Claude Code on the LiteLLM route
Section titled “Step 2 — Install Claude Code on the LiteLLM route”Continue here only if support has not explicitly moved you to Team or Max. If they have, stop and follow the route-specific SOP linked from Y.8. Otherwise, run the program-pinned LiteLLM setup script in your terminal:
curl -fsSL https://get-claude.dev.razorpay.in/setup.sh | bashThe script:
- installs Claude Code,
- writes
~/.claude/settings.jsonpointing at the Razorpay LiteLLM gateway (https://llm-gateway.razorpay.com), - mints and writes your LiteLLM API key once gateway access is provisioned,
- installs the Zscaler certificate trust chain,
- removes any stale Vertex environment variables left over from the March migration.
After the script finishes, restart your terminal (important — environment changes only apply to new shells). Then run claude and follow the browser SSO login prompt if it appears. Do not run claude /login from the shell; /login is an in-session slash command, not a terminal subcommand. You are ready when a fresh prompt returns a response. On this route, trust the terminal path and LiteLLM dashboard over Claude Desktop’s quota display.
Do not paste commands from a teammate’s terminal unless #ai-help confirms they apply to your machine. Two laptops can have different existing state — especially if one of you was on the Vertex-era setup.
Worked example: verify the layers
Section titled “Worked example: verify the layers”After running the setup flow, verify one layer at a time.
Check git:
git --versionCheck Node:
node --versionCheck the package manager your repo expects:
npm --versionpnpm --versionIt is okay if one project uses npm and another uses pnpm. Follow the repo. Do not switch package managers casually inside a repo.
Check Claude Code:
claude --versionCheck you are in a clean sandbox repo before running project commands:
pwdgit statusRun the repo’s documented install command only from the repo root:
npm installor:
pnpm installWhich one? The repo README and lockfile tell you. If you see pnpm-lock.yaml, use pnpm unless the README says otherwise. If you see package-lock.json, use npm unless the README says otherwise.
What LiteLLM ~/.claude/settings.json should look like
Section titled “What LiteLLM ~/.claude/settings.json should look like”The LiteLLM setup script writes this file for you. You should not need to edit it. If you are on that route and need to inspect it because something looks off, this is the canonical shape. Team and Max use their own route-specific configuration; do not compare those settings with this block.
{ "env": { "ANTHROPIC_BASE_URL": "https://llm-gateway.razorpay.com", "ANTHROPIC_CUSTOM_HEADERS": "x-litellm-api-key: Bearer sk-...", "ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-4-8", "ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-4-6", "ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-haiku-4-5", "DISABLE_PROMPT_CACHING": "0", "DISABLE_TELEMETRY": "1" }, "model": "sonnet[1m]", "effortLevel": "low"}The Bearer sk-... value is your personal LiteLLM key — keep it private. If you rotate it (LiteLLM token page → regenerate), replace it in this file.
Two checks on this file:
| Symptom | Likely cause |
|---|---|
claude errors with 403 PERMISSION_DENIED referencing aiplatform.googleapis.com | stale Vertex env vars in ~/.bashrc or ~/.zshrc (see Common failure modes below) |
claude errors with 401 authentication_error after a laptop restart | LiteLLM key rotated or expired — rerun the setup script |
claude runs but usage does not appear in the LiteLLM dashboard | shell env vars ANTHROPIC_BASE_URL or ANTHROPIC_API_KEY overriding settings.json |
Do not “fix” by hand-editing this file unless #ai-help walks you through it. Re-running the setup script is faster and safer.
What setup verification should prove
Section titled “What setup verification should prove”On the LiteLLM route, run this seven-check manual gate. It is the current evidence contract for Quest W-0. If support provisioned Team or Max, use the readiness checks in that route’s current SOP instead of forcing the LiteLLM gateway check to pass.
# 1. Git is installedgit --version
# 2. Node is installednode --version
# 3. The package manager installed by the setup path workspnpm --version
# 4. Claude Code is installed and on PATHclaude --version
# 5. settings.json points at the Razorpay LiteLLM gatewaygrep -F '"ANTHROPIC_BASE_URL": "https://llm-gateway.razorpay.com"' ~/.claude/settings.json
# 6. Retired Vertex variables are absent from this shell and startup filesif env | grep -Eq '^(ANTHROPIC_VERTEX_PROJECT_ID|CLAUDE_CODE_USE_VERTEX|CLOUD_ML_REGION)=' \ || grep -Eq 'ANTHROPIC_VERTEX_PROJECT_ID|CLAUDE_CODE_USE_VERTEX|CLOUD_ML_REGION' ~/.bashrc ~/.zshrc 2>/dev/null; then echo "RED: retired Vertex configuration found"else echo "GREEN: no retired Vertex configuration found"fi
# 7. Claude Code opens and a small prompt round-tripsclaude# Inside Claude, type: hello# Expected: a reply. Exit with Ctrl-D or /exit.Record the redacted output in the W.8 evidence table. If a check fails, use the next section and re-run only that check after the repair. You are GREEN when all seven rows pass on the machine you will use.
The repository’s setup-verify directory preserves a broader ten-check reference definition. It is not evidence that Compass or another marketplace installed an equivalent command; do not block the quest waiting for it.
Common failure modes
Section titled “Common failure modes”These are the ten shapes the support channel sees most often. Each has a known fix — try the fix before re-routing.
1. Manager OOO blocks your MyAccess approval. Symptom: you submitted the access request, manager is on leave, nothing moves. Fix: post in #ai-help with @techit tagged and a one-line “manager OOO, requesting bypass.” Admins bulk-approve in batches; expect ~1 hour business-time, then a fresh ~40-minute Azure AD sync window.
2. “Free Plan” showing on claude.ai after approval. Symptom: MyAccess says approved, but claude.ai shows you on the Free Plan. Fix: wait. Azure AD sync takes ~30–40 minutes after approval, sometimes longer. If you are past 60 minutes, re-route in #ai-help.
3. claude errors with 403 PERMISSION_DENIED / Vertex permission. Symptom: the error references aiplatform.googleapis.com or pod-velocity-claude-code. Cause: stale Vertex environment variables left in your shell rc. Check ~/.bashrc and ~/.zshrc for these and remove them:
# Remove these lines if present:export ANTHROPIC_VERTEX_PROJECT_ID='pod-velocity-claude-code'export CLAUDE_CODE_USE_VERTEX=1export CLOUD_ML_REGION='global'Then re-run the setup script and restart your terminal. The new script auto-purges these, but it cannot purge what your shell has already loaded.
4. claude errors with 401 authentication_error after a laptop restart. Cause: LiteLLM OAuth token expired or rotated. Fix: re-run the setup script. It re-mints a fresh key into ~/.claude/settings.json.
5. LiteLLM account or model access is not enrolled. Symptom: setup ran, but Claude Code says the LiteLLM account/key is not enrolled, the model is not enabled, or key_model_access_denied appears for current models. Cause: the Claude.ai enterprise seat and the LiteLLM gateway key are related but separate; the setup script cannot approve a missing gateway enrollment or model grant by itself. First read the full error. If it says This key can only access models=[...] and ends with Tried to access <model>, your key is enrolled but Claude Code selected a route outside that list; the leading Please run /login is misleading. Inside Claude Code, run /model <exact-enabled-route> using a route named in the error. If an approved route you need is absent, open https://llm-gateway.razorpay.com/auth/, click Add Models, enable it, wait two to three minutes, then restart Claude Code. Ask in #ai-help only when the account/key is not enrolled or an approved route cannot be enabled.
6. exceeded budget for model=claude-opus-4-6 or claude-opus-4-7. Cause: the named enabled frontier model has reached its LiteLLM per-model cap. Exceeded budget is quota wording, not proof that the route retired. Fix: check the LiteLLM usage view and move routine work to a lower-cost enabled route such as Sonnet, an approved GPT route, or an approved open-weight model. Do not switch to Opus 4.8 solely because the error names 4.6 or 4.7; 4.8 can have its own cap. If the route is absent from your enabled-model list or returns key_model_access_denied, follow failure mode #5. If the error says your total user budget is exhausted, follow failure mode #7.
7. Hit a model-wise or LiteLLM usage limit. Symptom: Claude Code errors with ExceededBudget, a model becomes restricted, the visible spend limit changes, or a quota-increase request is declined. Code usage should go through LiteLLM in the CLI: the gateway applies the current total cap across enabled gateway models and can also enforce per-model caps for frontier models such as Opus, Sonnet, or GPT. Open-weight models such as Kimi, Qwen, and DeepSeek draw from the overall budget without per-model caps today, but the gateway error is still the source of truth. Fix: first check whether you hit a frontier-model cap or the total LiteLLM cap. For a frontier-model cap, move everyday work to another enabled LiteLLM route—Claude, GPT, or an approved open-weight model—instead of asking for an automatic bump. Codex is not the default overflow route; use it only if current support guidance explicitly confirms access. For total-budget exhaustion, do not expect another gateway model, open-weight route, or personal Claude Max plan to bypass the cap; wait for reset or post in #ai-help with the blocked work and manager approval visible if your work has an approved exception.
8. Usage not visible in the LiteLLM dashboard. Cause: shell-level env vars ANTHROPIC_BASE_URL or ANTHROPIC_API_KEY overriding what ~/.claude/settings.json sets. Fix: unset ANTHROPIC_BASE_URL ANTHROPIC_API_KEY in your current shell, then check ~/.bashrc / ~/.zshrc and remove any persisted overrides. Restart terminal.
9. Unknown skill: login after running claude /login. Cause: /login is an in-session slash command, not a shell command. Running claude /login passes /login as prompt text and Claude tries to resolve it as a skill. Fix: run claude by itself and follow the browser SSO flow if prompted. If an editor extension session is stuck after setup, run claude auth logout, then claude auth login, restart the editor, and retry.
10. claude native binary not installed. Symptom: claude is on PATH, but startup prints Error: claude native binary not installed with postinstall, --ignore-scripts, or --omit=optional wording. Cause: the JavaScript wrapper installed, but the platform-native Claude Code binary did not download or its postinstall step was skipped. Fix: rerun the Razorpay setup script from a fresh terminal, close old terminal windows, open a new one, then check claude --version. If it still fails, post the exact redacted output in #ai-help; do not copy the node node_modules/@anthropic-ai/claude-code/install.cjs path from the error unless support confirms the install location.
If you hit a shape that isn’t one of these ten, route it to #ai-help with: the command you ran, the redacted output, your machine class, and what you have already tried.
GREEN / YELLOW / RED self-check
Section titled “GREEN / YELLOW / RED self-check”You are GREEN if:
git --version,node --version, package manager version, andclaude --versionwork;- you know whether a repo uses
npmorpnpm; - the readiness checks for your provisioned route report GREEN; on LiteLLM, that means the gateway, retired-Vertex, and prompt-round-trip checks above;
git statusis clean after setup unless a module told you to change a file.
You are YELLOW if:
- one tool is installed but version-misaligned;
- package install fails with registry, auth, or certificate wording;
- setup worked only after a manual workaround.
You are RED if:
- the official setup flow cannot complete;
- registry or certificate repair fails;
- you are tempted to bypass the approved package path.
YELLOW and RED should be posted with the exact command, the redacted output, and your machine class.
What you can say after this module
Section titled “What you can say after this module”“I can verify each layer of the local AI dev stack instead of guessing whether setup worked.”
Pinned reference
Section titled “Pinned reference”For the print-this-and-stick-it-on-your-monitor version:
| Thing you need | Value |
|---|---|
| Default LiteLLM setup script | curl -fsSL https://get-claude.dev.razorpay.in/setup.sh | bash |
| LiteLLM gateway URL | https://llm-gateway.razorpay.com |
| LiteLLM settings file | ~/.claude/settings.json |
| MyAccess portal | myaccess.microsoft.com |
| Support channel | #ai-help |
| Cohort + show-and-tell | #product-ai-labs |
| Canonical rollout thread | Step-by-step in #engineering-all |
| Pricing reference | Anthropic pricing docs |
Last reviewed: 2026-09-10. If any value here is stale, ping #ai-help and this row gets refreshed.
Want this on one page? H.7 — Day-1 quick reference consolidates this table with the channels, the role-holders, and the common failure modes onto a single printable card.
Previous: W.4 Your auth setup - Next: W.6 The LLM Gateway