# Runtime environment the binary reads (context crate) The JS scripts learned two things from their own file location that a single binary cannot: which harness built them (`lib/provider.mjs`) and where the skill's `reference/` and `SKILL.md` live (`../reference`, `../SKILL.md`). `crates/context/src/provider.rs` resolves both at run time. | Variable | Meaning | Default | |---|---|---| | `IMPECCABLE_SKILL_DIR` | The skill directory (holds `SKILL.md`, `reference/`, `scripts/`). Used for the native platform references `context` inlines, the local version in the update check, `pin`'s `command-metadata.json`, and `concept-seed`'s default catalog dir (`/scripts`). | Walk up from the executable's directory until a directory containing `reference/ios.md` is found (the binary ships at `/scripts/bin/-/`). None if nothing matches: native refs are then skipped silently, like a missing file in the JS. | | `IMPECCABLE_PROVIDER_ID` | The build provider id (`claude-code`, `codex`, `cursor`, ...). Selects the hook manifest paths `context` and `doctor` inspect and the `$`/`/` command prefix (`$` only for `codex`). | Derived from the skill dir's harness folder (`/.codex/skills/impeccable` -> `codex`); otherwise `source`, which is what the JS reads in a source checkout. | | `IMPECCABLE_SELF` | How to spell this binary in printed commands where the JS printed `node /