Back to skills
SKILL.md
Bun Shell Commands Shanepadgett Agent Extensions
ASecurityWriting shell commands for OpenCode custom commands using Bun Shell
- 666 stars
- 0 votes
- 0 copies
- 0 views
- Added June 2, 2026
Security analysis
100/100npx -y skills add majiayu000/claude-skill-registry --skill bun-shell-commands-shanepadgett-agent-extensions --agent claude-codeAre you the author of Bun Shell Commands Shanepadgett Agent Extensions?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/majiayu000-bun-shell-commands-shanepadgett-agent-extensions)---
name: bun-shell-commands
description: Writing shell commands for OpenCode custom commands using Bun Shell
---
# Bun Shell Commands
This skill covers how to write effective shell commands in OpenCode custom commands using Bun Shell (Bun's bash-like shell implementation).
## Context
OpenCode uses **Bun Shell** for executing shell commands in custom commands via the !`command` syntax. Bun Shell is a bash-like shell written in Zig that provides cross-platform shell scripting, but it has some differences from traditional bash.
## Supported Features
### ✅ Arguments
Positional arguments work correctly:
```markdown
!`echo "Arg1: $1" && echo "Arg2: $2" && echo "Arg3: $3"`
```
Usage: `/mycommand 5 "hello world" "a,b,c"`
### ✅ Command Substitution
Use `$(command)` for command substitution:
```markdown
!`echo "Sum: $(seq $1 | awk '{s+=$1} END {print s}')"`
```
### ✅ Pipes
Pipe commands using `|`:
```markdown
!`echo "$2" | tr '[:lower:]' '[:upper:]' | rev`
```
### ✅ Environment Variables
Set environment variables and use them:
```markdown
!`TEST_VAR="$1" && echo "TEST_VAR=$TEST_VAR"`
```
Store command substitution results in variables:
```markdown
!`REV=$(echo "$2" | rev) && echo "Reversed: $REV"`
```
### ✅ Command Chaining
Use `&&` to chain commands (instead of newlines or `;`):
```markdown
!`echo "First" && echo "Second" && echo "Third"`
```
### ✅ Available Commands
Bun Shell includes these built-in commands:
- `cd`, `ls`, `rm`, `echo`, `pwd`, `cat`, `touch`, `mkdir`, `which`, `mv`
- `seq`, `dirname`, `basename`, `true`, `false`, `yes`
Common external commands also work:
- `awk`, `sed`, `tr`, `wc`, `grep`, `head`, `tail`
- `find`, `xargs`, `sort`, `uniq`
## Unsupported Features
### ❌ Shell Control Structures
Do NOT use `for`, `while`, `do`, `done`:
```markdown
# ❌ DOESN'T WORK
!`for i in $(seq 1 $1); do echo $i; done`
```
### ❌ Arithmetic Expansion
Do NOT use `$(( ))` directly in the template:
```markdown
# ❌ DOESN'T WORK
!`echo "Squared: $(($1 * $1))"`
```
Use `$(awk '{...}')` instead:
```markdown
# ✅ WORKS
!`echo "$1" | awk '{print $1 * $1}'`
```
### ❌ Native Brace Expansion
Native brace expansion is not supported:
```markdown
# ❌ DOESN'T WORK
!`echo {1,2,3}`
```
Use pipes to simulate expansion:
```markdown
# ✅ WORKS
!`echo "$3" | tr ',' '\n' | awk '{print "Expanded:", $1}'`
```
## Patterns and Best Practices
### Loops via Pipes
Instead of `for` loops, use `seq` with `awk`:
```markdown
# Generate numbers 1 to N with squares
!`seq $1 | awk '{print $1, "-> squared:", $1*$1}'`
```
### Multi-step Operations
Use environment variables to store intermediate results:
```markdown
# Reverse text, count chars, and show both
!`REV=$(echo "$2" | rev) && COUNT=$(echo "$2" | wc -c) && echo "Reversed: $REV (${COUNT} chars)"`
```
### Conditional Logic
Use `awk` for conditionals:
```markdown
# Classify numbers as even/odd
!`seq $1 | awk '{if ($1 % 2 == 0) print $1 ": even"; else print $1 ": odd"}'`
```
### Text Processing
Combine `tr`, `sed`, `awk` for text manipulation:
```markdown
# Uppercase, reverse, and format
!`echo "$2" | tr '[:lower:]' '[:upper:]' | rev | sed 's/^/> /'`
```
### Working with Multiple Arguments
Use separate shell blocks for independent tests:
```markdown
## Test 1: Arithmetic with $1
!`seq $1 | awk '{s+=$1} END {print "Sum:", s}'`
## Test 2: Text processing with $2
!`echo "$2" | tr '[:lower:]' '[:upper:]' | rev`
## Test 3: Pattern with $3
!`echo "$3" | tr ',' '\n' | wc -l`
```
## Example: Complete Command
```markdown
---
description: Test Bun Shell capabilities
---
Test Bun Shell with multiple features:
## Argument passing
!`echo "Arg1: [$1]" && echo "Arg2: [$2]" && echo "Arg3: [$3]"`
## Command substitution
!`echo "Sum of 1 to $1: $(seq $1 | awk '{s+=$1} END {print s}')"`
## Text processing
!`echo "$2" | tr '[:lower:]' '[:upper:]' | rev | wc -c`
## Environment variables
!`REV=$(echo "$2" | rev) && echo "Reversed via var: $REV"`
```
Usage: `/mycommand 5 "hello world" "a,b,c"`
## Debugging
If a shell command fails silently:
1. Simplify to just `echo "$1"` to verify argument passing
2. Test each pipe segment separately
3. Replace complex `awk` with simpler `tr` or `sed`
4. Use `echo` at each step to verify intermediate values
## References
- [Bun Shell Documentation](https://bun.com/docs/runtime/shell.md)
- [OpenCode Commands Documentation](https://opencode.ai/docs/commands/)
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.