Bash tool
The bash tool enables Claude to execute shell commands in a persistent bash session, allowing system operations, script execution, and command-line automation.
Overview
The bash tool provides Claude with:
- Persistent bash session that maintains state
- Ability to run any shell command
- Access to environment variables and working directory
- Command chaining and scripting capabilities
Tool versions
Model | Tool Version |
---|---|
Claude 4 & Sonnet 3.7 | bash_20250124 |
Claude Sonnet 3.5 | bash_20241022 |
Claude Sonnet 3.5 requires the computer-use-2024-10-22
beta header when using the bash tool.
The bash tool is generally available in Claude 4 and Sonnet 3.7.
Use cases
- Development workflows: Run build commands, tests, and development tools
- System automation: Execute scripts, manage files, automate tasks
- Data processing: Process files, run analysis scripts, manage datasets
- Environment setup: Install packages, configure environments
Quick start
How it works
The bash tool maintains a persistent session:
- Claude determines what command to run
- You execute the command in a bash shell
- Return the output (stdout and stderr) to Claude
- Session state persists between commands (environment variables, working directory)
Parameters
Parameter | Required | Description |
---|---|---|
command | Yes* | The bash command to run |
restart | No | Set to true to restart the bash session |
*Required unless using restart
Example: Multi-step automation
Claude can chain commands to complete complex tasks:
The session maintains state between commands, so files created in step 2 are available in step 3.
Implement the bash tool
The bash tool is implemented as a schema-less tool. When using this tool, you don’t need to provide an input schema as with other tools; the schema is built into Claude’s model and can’t be modified.
Set up a bash environment
Create a persistent bash session that Claude can interact with:
Handle command execution
Create a function to execute commands and capture output:
Process Claude's tool calls
Extract and execute commands from Claude’s responses:
Implement safety measures
Add validation and restrictions:
Handle errors
When implementing the bash tool, handle various error scenarios:
Follow implementation best practices
Security
The bash tool provides direct system access. Implement these essential safety measures:
- Running in isolated environments (Docker/VM)
- Implementing command filtering and allowlists
- Setting resource limits (CPU, memory, disk)
- Logging all executed commands
Key recommendations
- Use
ulimit
to set resource constraints - Filter dangerous commands (
sudo
,rm -rf
, etc.) - Run with minimal user permissions
- Monitor and log all command execution
Pricing
The bash tool adds 245 input tokens to your API calls.
Additional tokens are consumed by:
- Command outputs (stdout/stderr)
- Error messages
- Large file contents
See tool use pricing for complete pricing details.
Common patterns
Development workflows
- Running tests:
pytest && coverage report
- Building projects:
npm install && npm run build
- Git operations:
git status && git add . && git commit -m "message"
File operations
- Processing data:
wc -l *.csv && ls -lh *.csv
- Searching files:
find . -name "*.py" | xargs grep "pattern"
- Creating backups:
tar -czf backup.tar.gz ./data
System tasks
- Checking resources:
df -h && free -m
- Process management:
ps aux | grep python
- Environment setup:
export PATH=$PATH:/new/path && echo $PATH
Limitations
- No interactive commands: Cannot handle
vim
,less
, or password prompts - No GUI applications: Command-line only
- Session scope: Persists within conversation, lost between API calls
- Output limits: Large outputs may be truncated
- No streaming: Results returned after completion
Combining with other tools
The bash tool is most powerful when combined with the text editor and other tools.