Skip to content

fix(pty-proxy): set $SHELL to the spawned shell - #3548

Merged
ellie merged 1 commit into
atuinsh:mainfrom
xav-ie:fix/pty-proxy-shell-env
Jun 25, 2026
Merged

fix(pty-proxy): set $SHELL to the spawned shell#3548
ellie merged 1 commit into
atuinsh:mainfrom
xav-ie:fix/pty-proxy-shell-env

Conversation

@xav-ie

@xav-ie xav-ie commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

The proxy spawns the inner shell (optionally overridden via --shell) but only sets ATUIN_PTY_PROXY_{SOCKET,ACTIVE} on it, never SHELL. So the child — and anything it execs via $SHELL -c such as fzf's become — inherits whatever SHELL leaked down the parent/login chain rather than the shell actually running. Set SHELL to the --shell path so downstream tools resolve the correct interpreter.

Checks

  • I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle
  • I have checked that there are no existing pull requests for the same thing

The proxy spawns the inner shell (optionally overridden via --shell) but
only sets ATUIN_PTY_PROXY_{SOCKET,ACTIVE} on it, never SHELL. So the
child — and anything it execs via `$SHELL -c` such as fzf's `become` —
inherits whatever SHELL leaked down the parent/login chain rather than
the shell actually running. Set SHELL to the --shell path so downstream
tools resolve the correct interpreter.
@greptile-apps

greptile-apps Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR updates the pty proxy shell environment handling. The main changes are:

  • Sets SHELL when an explicit --shell path is used.
  • Keeps proxy-specific environment variables unchanged.
  • Documents why downstream $SHELL -c consumers need the spawned shell path.

Confidence Score: 5/5

This looks safe to merge, but I would clean up one edge case.

  • The explicit --shell path now matches the spawned command.
  • The default-shell path can still leave SHELL stale when no shell path is passed.

crates/atuin-pty-proxy/src/runtime.rs

Important Files Changed

Filename Overview
crates/atuin-pty-proxy/src/runtime.rs Adds SHELL propagation for the explicit shell path, but leaves the default-shell path using the inherited value.

Reviews (1): Last reviewed commit: "fix(pty-proxy): set $SHELL to the spawne..." | Re-trigger Greptile

Comment thread crates/atuin-pty-proxy/src/runtime.rs

@ellie ellie left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice fix, thanks for the work here!

@ellie
ellie merged commit 60b7953 into atuinsh:main Jun 25, 2026
26 checks passed
taylordotfish pushed a commit that referenced this pull request Jul 9, 2026
### Bug Fixes

- *(ai)* Dispatch skills registered in the slash command registry
([#3593](#3593))
- *(ci)* Fossier install in scan workflow
([#3485](#3485))
- *(i18n)* Fix typos in Russian localization
([#3575](#3575))
- *(nu)* Use `char -u 1b` for ESC in OSC 133 sequences
([#3530](#3530))
- *(nu)* Suppress error when `ATUIN_HISTORY_ID` is missing in
`pre_prompt` hook
([#3587](#3587))
- *(pi)* Observe tool events instead of registering a bash tool
([#3557](#3557))
- *(pty-proxy)* Set `$SHELL` to the spawned shell
([#3548](#3548))
- *(search)* Fix terminal clearing with latest Ratatui
([#3578](#3578))
- *(sync)* Skip records that fail to decrypt or decode instead of
failing the whole store
([#3569](#3569))
- Atuin hangs when attempting to spawn daemon from Ctrl+R invocation
([#3502](#3502))
- Capture session ID from stream headers rather than final event
([#3531](#3531))
- Doctor resiliency fo runknown platforms + openbsd warning
([#3551](#3551))
- Double input on arrow keys in AI setup prompt on Windows
([#3552](#3552))
- Exclude AI agent commands from zsh-autosuggestions
([#3567](#3567))
- Silence shellcheck SC2016 on literal `$all-user` author filter
- Respect `store_failed` when using daemon
([#3571](#3571))


### Documentation

- Highlight `Ctrl-r` keybinding on docs page
([#3489](#3489))
- Document store purge workflow
([#3544](#3544))
- Fix command example typo in documentation
([#3536](#3536))
- Make commented-out lines in `config.toml` match real defaults
([#3583](#3583))
- Add fish shell cleanup step to uninstall instructions
([#3582](#3582))


### Features

- *(doctor)* Add whether daemon is enabled to `doctor` output
([#3572](#3572))
- *(pty-proxy)* Add `--shell` flag to override the spawned shell
([#3327](#3327))
- Setup fossier to stop bot slop prs
([#3482](#3482))
- Capture command output + expose to new `atuin_output` tool
([#3510](#3510))
- Cache user contexts on load until `/reload`
([#3525](#3525))
- Create database integration tests for atuin-server
([#3514](#3514))
- Add `/model` slash command for changing models
([#3576](#3576))
- Add mcp server for history tools and expand search filters
([#3581](#3581))
- Add status bar with model and usage information
([#3591](#3591))


### Miscellaneous Tasks

- *(rustdoc)* Fix Rustdoc warnings
([#3585](#3585))
- *(warnings)* Fix compile warnings with latest dependencies
([#3586](#3586))
- Vouch for all existing contributors
([#3486](#3486))
- Update GitHub app token format
- Update to Rust 1.96.1
([#3568](#3568))
- Adopt `derive_more` to reduce boilerplate across the codebase
([#3573](#3573))


### Performance

- *(search)* Scan history by recency until N unique
([#3553](#3553))
- Add `synchronous(Normal)` + `optimize_on_close` to record store SQLite
([#3577](#3577))
- Remove unnecessary clones in a hot path
([#3580](#3580))


### Refactor

- Implement `From<sqlx::Error>` and clean up `fix_error`
([#3484](#3484))
- Pull `fn into_utc` into `atuin-server-database` crate
([#3487](#3487))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants