cursor-direnv is a small CLI that installs a Cursor preToolUse hook to run Shell tool commands through direnv when a project has an .envrc.
Run without installing globally:
npx cursor-direnv installInstall user-level hook into ~/.cursor:
npx cursor-direnv install -ginstall verifies that direnv is available in PATH and exits with a clear error if it is missing.
Local install also creates .cursor/rules/direnv-hook.mdc when missing.
Global install prints rule text for manual copy/paste into Cursor User Rules.
Uninstall:
npx cursor-direnv uninstall
npx cursor-direnv uninstall -gLocal uninstall removes both .cursor/hooks/pretooluse-direnv.mjs and .cursor/rules/direnv-hook.mdc.
The installed hook rewrites Shell commands from:
<original command>
to:
direnv exec . zsh -lc "<original command>"
The hook only rewrites when all of the following are true:
- the tool is
Shell - command is non-empty
- you are not already in a direnv context (
DIRENV_DIR/DIRENV_DIFF) - a project
.envrcexists (CURSOR_PROJECT_DIRfallback to cwd) - command does not already begin with
direnv exec direnvis callable from PATH
installalways preserves unrelatedhooks.jsonkeys and hook arrays.- It only adds the exact
preToolUseentry if it is missing. - Running
installrepeatedly does not create duplicates. - Existing
.cursor/rules/direnv-hook.mdcis left unchanged.
- Trust the workspace in Cursor so hooks can run.
- Restart Cursor after changing hook setup.
- Ensure
nodeanddirenvare available in your PATH. - Confirm your project has a valid
.envrc.
npm install
npm run ci- Create a release note in your PR with
npm run changeset. - Changesets automation opens/updates a
chore: version packagesPR onmain. - Merging that PR updates
package.json+ changelog and publishes to npm. - Publishing uses npm trusted publishing (OIDC), not
NPM_TOKEN. - Configure npm package settings with trusted publisher workflow filename
release.yml. - Keep GitHub Actions permissions set to read/write and allow workflows to create pull requests.
MIT, see LICENSE.