---
title: shell
---

import VersionLabel from '@site/src/components/Docs/VersionLabel';

<VersionLabel version="0.54.0" header />

The `proto shell <tools...>` (or `proto sh`, `proto session`) command will initialize a list of
tools into the environment and start an interactive shell session with that environment active.

```shell
$ proto shell node@20 npm@10
```

Tools will automatically detect a version to launch with based on loaded `.prototools`, but the
version can be provided inline by suffixing the tool with `@<version>`. If no tools are provided,
the list will be inherited from the current `.prototools` configuration.

```shell
$ proto shell node pnpm
```

This is effectively a convenience wrapper around [`proto exec`](./exec) that launches an interactive
shell instead of an arbitrary command. Inside the session, all configured environment variables and
`PATH` modifications for the provided tools are active.

### Choosing a shell

By default, the current shell is detected and reused. To start a different shell, pass `--shell`
with the shell name.

```shell
$ proto shell node@20 --shell fish
```

### Arguments

- `[tools...]` - List of tool identifiers with optional version. If omitted, tools are inherited
  from `.prototools` configs.

### Options

- `--shell` - Shell to start an interactive session for (e.g. `bash`, `pwsh`).
