mixman
v1.0.1
Published
Pipe-friendly CLI that mixes the first and last 25 lines of stdin output
Maintainers
Readme
mixman
Pipe-friendly CLI that trims verbose command output for logs and agent context.
Usage
random-command | mixmanWhen the upstream command must drive the shell exit code, prefer command mode:
mixman -- random-commandFor the pipe form, enable pipefail in your shell (see Exit codes).
Behavior
- Reads all stdin, then outputs a mix of the first 25 and last 25 lines.
- When total lines are 50 or fewer, overlapping top/bottom ranges are not duplicated — you get every line once.
- Lines longer than 250 characters are truncated (no suffix).
- Empty stdin produces no output and exits immediately.
Examples
# 60 lines → first 25 + last 25 (50 lines)
seq 1 60 | mixman
# 30 lines → all 30 (top and bottom overlap, no duplicates)
seq 1 30 | mixman
# Truncate long lines
python3 -c "print('x' * 300)" | mixman
# Typical Expo pipeline
just validate | mixman
# Preserve upstream exit code (recommended for validate/release gates)
mixman -- just validateExit codes
Unix pipes only connect stdout between processes. A downstream filter like mixman cannot see the upstream exit code when used as cmd | mixman — the shell sets $? to the last command in the pipeline (mixman), which exits 0 after processing stdin successfully.
Recommended: run commands through mixman directly so exit codes propagate:
mixman -- just validate
echo $? # non-zero when validate failsAlternative: keep cmd | mixman and enable pipefail so the pipeline fails when any stage fails:
# bash / zsh
set -o pipefail
just validate | mixman
echo $? # non-zero when validate fails
# one-off
bash -o pipefail -c 'just validate | mixman'Without pipefail, exit 1 | mixman leaves $? at 0 even though the upstream command failed. That is shell pipeline semantics, not a mixman processing error.
Install
npm install -g mixmanOr link locally while developing:
cd /path/to/focus/cli/mixman
npm linkPublish
npm login
npm publishLicense
MIT
