# Immunize Missing Env Var

> Use when reading configuration from os.environ to check for missing values and raise a specific ConfigError instead of letting a raw KeyError escape.

- **Type:** Skill
- **Install:** `agentstack add skill-viditkbhatnagar-immunize-missing-env-var`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [viditkbhatnagar](https://agentstack.voostack.com/s/viditkbhatnagar)
- **Installs:** 0
- **Category:** [AI & ML](https://agentstack.voostack.com/c/ai-and-ml)
- **Latest version:** 0.1.0
- **License:** Apache-2.0
- **Upstream author:** [viditkbhatnagar](https://github.com/viditkbhatnagar)
- **Source:** https://github.com/viditkbhatnagar/immunize/tree/main/src/immunize/patterns/missing-env-var
- **Website:** https://pypi.org/project/immunize/

## Install

```sh
agentstack add skill-viditkbhatnagar-immunize-missing-env-var
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# missing-env-var

`os.environ[...]` is dict-style indexing. Missing keys raise
`KeyError` with no context — the traceback shows an indexing line,
not a message about which variable was expected or why the program
needs it. In production logs, this reads as a mystery crash:

    KeyError: 'APP_API_KEY'
      File "app/config.py", line 12, in get_api_key
        return os.environ["APP_API_KEY"]

## Example

Wrong — opaque KeyError; caller has no idea what to fix:

```python
import os

def get_api_key() -> str:
    return os.environ["APP_API_KEY"]
```

Right — explicit check, specific error, actionable message:

```python
import os

class ConfigError(Exception):
    pass

def get_api_key() -> str:
    value = os.environ.get("APP_API_KEY")
    if not value:
        raise ConfigError(
            "APP_API_KEY is not set. Export it before running."
        )
    return value
```

## Prefer failing at startup

Read configuration once at process boot, not on every request. A
missing key should surface before the first user hits the path:

```python
REQUIRED = ("APP_API_KEY", "APP_DB_URL")

def load_config() -> dict[str, str]:
    missing = [k for k in REQUIRED if not os.environ.get(k)]
    if missing:
        raise ConfigError(f"missing env vars: {', '.join(missing)}")
    return {k: os.environ[k] for k in REQUIRED}
```

This turns a 500 during a user request into a crash at boot — loud,
visible, and immediately fixable.

## Treat empty strings as missing

`.get()` returns the empty string if the var is exported but empty.
Use `if not value:` rather than `if value is None:` — an empty
string is almost never what you want for an API key or URL.

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [viditkbhatnagar](https://github.com/viditkbhatnagar)
- **Source:** [viditkbhatnagar/immunize](https://github.com/viditkbhatnagar/immunize)
- **License:** Apache-2.0
- **Homepage:** https://pypi.org/project/immunize/

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** yes
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-viditkbhatnagar-immunize-missing-env-var
- Seller: https://agentstack.voostack.com/s/viditkbhatnagar
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
