Environment Variable Persistence - Claude Code
SessionStart hooks can persist env vars across Bash tool calls.
Environment variable persistence lets you set values once at session start and have them survive every subsequent Bash tool call.
What it does
Normally each Bash tool call gets a fresh shell - export FOO=bar in one call is gone in the next. A SessionStart hook can set env vars that Claude Code injects into every Bash invocation, so secrets from a vault, feature flags, or project-specific paths are always available. This is the clean alternative to hardcoding values in prompts.
When to use it
- Injecting API keys from a secret manager into every tool call.
- Pointing Claude at a specific Node, Python, or Ruby version.
- Setting project-specific env vars without committing them.
- Toggling debug flags for a whole session.
Gotchas
- The hook runs once per session. If the value changes mid-session, you have to restart.
- Large env payloads slow down every Bash call. Keep them lean.
- Hooks run in your environment with your permissions - treat them like any other secret-touching script.
Official docs: https://code.claude.com/docs/en/tools-reference.md#bash-tool-behavior
Technical content at the intersection of AI and development. Building with AI agents, Claude Code, and modern dev tools - then showing you exactly how it works.
Get the weekly deep dive
Tutorials on Claude Code, AI agents, and dev tools - delivered free every week.
Was this helpful?




