# Stacks Shell

> Use when executing shell commands in a Stacks application - running system commands, process management, or using the shell operator. Covers @stacksjs/shell which wraps Bun's native $ operator.

- Skill: `stacksjs/stacks-shell` (Agent Skill)
- Install (CLI): `npx skillmds@latest add stacksjs/stacks-shell`
- Raw SKILL.md: https://api.skillmd.com/api/skills/stacksjs/stacks-shell/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: stacksjs (https://skillmd.com/u/stacksjs)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/stacksjs/stacks-shell

---


# Stacks Shell

## Key Paths
- Core package: `storage/framework/core/shell/src/`
- Source: `storage/framework/core/shell/src/index.ts`
- Package: `@stacksjs/shell`

## API

The entire package is a single re-export of Bun's `$` shell operator:

```typescript
export { $ } from 'bun'
```

## Usage

```typescript
import { $ } from '@stacksjs/shell'

// Run shell commands
await $`ls -la`

// Capture output
const result = await $`git status`
console.log(result.text())

// Set working directory
$.cwd('/path/to/dir')
await $`bun install`

// Pipe commands
await $`cat file.txt | grep "pattern"`

// Environment variables
await $`echo $HOME`
```

## Bun $ Operator Features

- **Template literals** — commands written as tagged template strings
- **Auto-escaping** — interpolated values are safely escaped
- **Streaming** — stdout/stderr can be streamed
- **CWD** — `$.cwd(path)` sets working directory
- **Env** — `$.env(vars)` sets environment variables
- **Quiet mode** — `$.quiet()` suppresses output
- **Throws on error** — non-zero exit codes throw by default

## Gotchas
- **Thin wrapper** — this package literally just re-exports `$` from Bun
- **Server-side only** — shell commands run in the server environment, not in the browser
- **For CLI output formatting, use `@stacksjs/cli`** — this package is for raw command execution
- **Bun-specific** — the `$` operator is a Bun feature, not available in Node.js
- **Used throughout the framework** — build actions, CLI commands, and dev server all use `$` for process execution

