{"slug": "claude-sh", "title": "claude.sh", "summary": "A developer published a Bash launcher script, claude.sh, that routes Anthropic's Claude Code CLI between Google Vertex AI and an internal \"dogfood\" AI gateway. The script selects a route via the first argument, expands shorthand flags such as -c, -r, and -y into their full Claude Code equivalents, and passes any remaining arguments through to the CLI. It sets the appropriate environment variables for each backend, unsetting Vertex-specific settings when using the gateway, and defaults to the dogfood route.", "body_md": "|  | #!/usr/bin/env bash | \n|  | # claude launcher — route to either Vertex or the dogfood gateway. | \n|  | # Usage: | \n|  | # ./claude <route> [shortcuts...] [extra claude args...] | \n|  | # | \n|  | # Routes: | \n|  | # vertex route via Google Vertex | \n|  | # dogfood route via dogfood AI gateway (default) | \n|  | # | \n|  | # Shortcuts (expand to claude flags; combine freely, any order): | \n|  | # -c \\| continue \\| --continue -> --continue | \n|  | # -r \\| resume \\| --resume -> --resume | \n|  | # -y \\| yolo \\| dangerous -> --dangerously-skip-permissions | \n|  | # | \n|  | # Anything else is passed straight through to claude. | \n|  | # | \n|  | # Examples: | \n|  | # ./claude dogfood -c -y # gateway, continue last, skip permissions | \n|  | # ./claude vertex resume # vertex, pick a session to resume | \n|  | # ./claude -c # default route (dogfood), continue | \n|  | set -euo pipefail | \n|  | DEFAULT_ROUTE=\"dogfood\" | \n|  | # --- Vertex settings --- | \n|  | VERTEX_PROJECT_ID=\"<INSERT_ME>\" | \n|  | VERTEX_REGION=\"global\" | \n|  | VERTEX_MODEL=\"claude-sonnet-4@20250514\" | \n|  | # --- Dogfood gateway settings --- | \n|  | GW_BASE_URL=\"<INSERT_HERE>\" | \n|  | GW_API_KEY=\"<INSERT_HERE>\" | \n|  | # --- Route: first arg if it names one, else default --- | \n|  | route=\"$DEFAULT_ROUTE\" | \n|  | case \"${1:-}\" in | \n|  | vertex\\|dogfood) route=\"$1\"; shift ;; | \n|  | esac | \n|  | # --- Expand shortcuts, pass everything else through --- | \n|  | claude_args=() | \n|  | for arg in \"$@\"; do | \n|  | case \"$arg\" in | \n|  | -c\\|continue\\|--continue) claude_args+=(--continue) ;; | \n|  | -r\\|resume\\|--resume) claude_args+=(--resume) ;; | \n|  | -y\\|yolo\\|dangerous\\|--dangerously-skip-permissions) | \n|  | claude_args+=(--dangerously-skip-permissions) ;; | \n|  | *) claude_args+=(\"$arg\") ;; | \n|  | esac | \n|  | done | \n|  | case \"$route\" in | \n|  | vertex) | \n|  | export CLAUDE_CODE_USE_VERTEX=1 | \n|  | export ANTHROPIC_VERTEX_PROJECT_ID=\"$VERTEX_PROJECT_ID\" | \n|  | export CLOUD_ML_REGION=\"$VERTEX_REGION\" | \n|  | export ANTHROPIC_MODEL=\"$VERTEX_MODEL\" | \n|  | export ANTHROPIC_SMALL_FAST_MODEL=\"$VERTEX_MODEL\" | \n|  | unset ANTHROPIC_BASE_URL ANTHROPIC_API_KEY | \n|  | echo \">> route: VERTEX (project=$VERTEX_PROJECT_ID region=$VERTEX_REGION)\" >&2 | \n|  | ;; | \n|  | dogfood) | \n|  | # unset (not \"\"), so Claude Code doesn't treat Vertex as enabled | \n|  | unset CLAUDE_CODE_USE_VERTEX ANTHROPIC_VERTEX_PROJECT_ID CLOUD_ML_REGION | \n|  | unset ANTHROPIC_MODEL ANTHROPIC_SMALL_FAST_MODEL | \n|  | export ANTHROPIC_BASE_URL=\"$GW_BASE_URL\" | \n|  | export ANTHROPIC_API_KEY=\"$GW_API_KEY\" | \n|  | echo \">> route: DOGFOOD gateway\" >&2 | \n|  | ;; | \n|  | esac | \n|  | exec claude \"${claude_args[@]}\" |", "url": "https://wpnews.pro/news/claude-sh", "canonical_source": "https://gist.github.com/nerdalert/b323769d669e16a447163502faf84e35", "published_at": "2026-09-15 16:19:33+00:00", "updated_at": "2026-09-15 16:48:54.821775+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "ai-infrastructure", "large-language-models"], "entities": ["Claude Code", "Anthropic", "Google Vertex AI"], "alternates": {"html": "https://wpnews.pro/news/claude-sh", "markdown": "https://wpnews.pro/news/claude-sh.md", "text": "https://wpnews.pro/news/claude-sh.txt", "jsonld": "https://wpnews.pro/news/claude-sh.jsonld"}}