skillby 0xbigboss
zmx
Use when starting dev servers, watchers, tilt, or any process expected to outlive the conversation. Provides zmx session management patterns for long-lived processes.
Installs: 0
Used in: 1 repos
Updated: 4h ago
$
npx ai-builder add skill 0xbigboss/zmxInstalls to .claude/skills/zmx/
# zmx Process Management
## Session Rules
- Check `zmx list --short` before creating sessions — duplicates cause port conflicts and confusing output
- Derive session name from `git rev-parse --show-toplevel` — hardcoded names collide when multiple agent instances run concurrently
- Use `zmx run` to send commands without attaching — `zmx attach` blocks the agent's shell and makes it unresponsive
- Use separate sessions with a common project prefix for multiple processes
One project = one session prefix. Multiple processes = multiple sessions sharing the prefix.
## Session Naming
```bash
PROJECT=$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" || basename "$PWD")
```
All subsequent examples assume `PROJECT` is set. Session names follow `${PROJECT}-<role>`:
- `myapp-server`, `myapp-tests`, `myapp-tilt`
## Starting Processes
```bash
SESSION="${PROJECT}-server"
# Idempotent: skip if already running
if ! zmx list --short 2>/dev/null | grep -q "^${SESSION}$"; then
zmx run "$SESSION" 'npm run dev'
fi
```
For multiple processes, loop over name:command pairs:
```bash
for name_cmd in "server:npm run dev" "tests:npm run test:watch"; do
name="${name_cmd%%:*}"
cmd="${name_cmd#*:}"
SESSION="${PROJECT}-${name}"
if ! zmx list --short 2>/dev/null | grep -q "^${SESSION}$"; then
zmx run "$SESSION" "$cmd"
fi
done
```
## Sending Commands
```bash
# Run a command in a session (creates session if needed)
zmx run "${PROJECT}-main" 'cat README.md'
# Pipe via stdin
echo "ls -lah" | zmx r "${PROJECT}-main"
```
## Monitoring Output
```bash
zmx history "${PROJECT}-server" # full scrollback
zmx history "${PROJECT}-server" | tail -50 # last 50 lines
zmx history "${PROJECT}-server" | rg -i "error|fail" # check for errors
zmx history "${PROJECT}-server" | rg -i "listening|ready" # check for ready
```
## Waiting for Completion
```bash
zmx wait "${PROJECT}-tests" # block until done
zmx wait "${PROJECT}-build" "${PROJECT}-lint" # wait for multiple
```
## Lifecycle
```bash
zmx list # all sessions
zmx list --short # names only
zmx kill "${PROJECT}-server" # kill one session
# Kill all project sessions
zmx list --short 2>/dev/null | grep "^${PROJECT}-" | while read -r s; do
zmx kill "$s"
done
```
## Isolation
- Only kill sessions matching the current project prefix — other agent instances may have their own sessions running
- Always verify the session name before kill operations
## When to Use zmx
| Scenario | Use zmx? |
|----------|----------|
| `tilt up` | Yes, always |
| Dev server (`npm run dev`, `rails s`) | Yes |
| File watcher (`npm run watch`) | Yes |
| Test watcher (`npm run test:watch`) | Yes |
| Database server | Yes |
| One-shot build (`npm run build`) | No |
| Quick command (<10s) | No |
| Need stdout directly in conversation | No |
## Polling for Readiness
```bash
for i in {1..30}; do
if zmx history "${PROJECT}-server" 2>/dev/null | tail -20 | rg -q "listening|ready"; then
echo "Server ready"
break
fi
sleep 1
done
```Quick Install
$
npx ai-builder add skill 0xbigboss/zmxDetails
- Type
- skill
- Author
- 0xbigboss
- Slug
- 0xbigboss/zmx
- Created
- 4h ago