Argonaut reads from standard input, intelligently batches arguments, and executes commands in parallel — turning any pipeline into a high-throughput orchestration engine.
$ find ./services -name '*.deploy' -print0 | argonaut -0 -P 8 -I {} deploy --target {}
[slot:0] deploying → auth-service
[slot:1] deploying → api-gateway
[slot:2] deploying → billing-engine
[slot:3] deploying → user-service
✓ 4 services deployed in parallel (8 slots available)
PIPES INTO EVERYTHING
findgreplscatcurldockerkubectlawsgitsedawkrmEvery flag is a primitive in our execution engine. Compose them to build exactly the pipeline throughput profile your workload demands.
Run up to N processes simultaneously with -P max-procs. Set to 0 for maximum
parallelism. Dynamically scale with SIGUSR1/SIGUSR2 signals at runtime.
Control batch size precisely with -n max-args. Argonaut groups arguments to minimize
exec calls while respecting system-defined command line limits.
Define a replace string with -I {} and Argonaut injects each input item into your
command template. Perfect for complex orchestration patterns.
Handle filenames with spaces, quotes, and special characters cleanly using -0
null-terminated input. Pairs natively with find -print0.
Process input line by line with -L max-lines. Each batch gets exactly the number of
input lines you specify — no more, no less.
Review every command before execution with -p interactive prompting. Combined with
-t verbose tracing for complete auditability.
Prevent unnecessary executions with -r. When stdin is empty, Argonaut skips the
command entirely — zero wasted cycles, zero side effects.
Assign unique slot IDs to each parallel worker via --process-slot-var. Build load
distribution, temp file isolation, and worker-aware logging.
Argonaut reads items from standard input, delimited by whitespace, newlines, or null characters.
Pipe output from any command — find, grep, ls, anything.
find /data -name "*.csv" -print0 |Arguments are intelligently grouped based on your configuration — by count (-n), by
lines (-L), or by max command-line length (-s).
argonaut -0 -n 50 -P 4Each batch is dispatched to the target command. With -P, multiple batches run in
parallel across process slots. Argonaut manages the full lifecycle.
process --inputArgonaut waits for all child processes to terminate, collects exit statuses, and reports. Any invocation exiting 255 triggers an immediate halt — fail-fast by default.
✓ 2,400 items processed across 48 batches| Capability | Manual Loops | GNU Parallel | Argonaut |
|---|---|---|---|
| Parallel execution | ❌ Sequential | ✅ Yes | ✅ -P N |
| Null-safe input | ❌ Breaks on spaces | ✅ -0 |
✅ -0 |
| Argument batching | ❌ One at a time | ✅ -n |
✅ -n / -L / -s |
| Template substitution | ⚠️ Manual variable | ✅ {} |
✅ -I {} |
| Runtime scaling | ❌ | ❌ | ✅ SIGUSR1/2 |
| Process slot isolation | ❌ | ⚠️ Custom | ✅ --process-slot-var |
| Zero dependencies | ✅ | ❌ Perl required | ✅ POSIX-native |
| Interactive audit mode | ❌ | ⚠️ Limited | ✅ -p + -t |
Nexus Infra ran 3,200+ integration tests sequentially in their CI. Each test required spinning up an isolated container, running assertions, and tearing down. The for-loop approach was "good enough" — until their test suite crossed the 40-minute mark.
By replacing the bash loop with a single Argonaut invocation using
-P 16 --process-slot-var=SLOT -n 1, they parallelized across 16 slots with
process-level isolation. Each worker wrote results to /tmp/results-$SLOT,
completely eliminating output contention.
Serial execution is free forever. Unlock more process slots as your orchestration needs grow.
-P 1)-n, -L)-0)-I)-P 4-d)-p)-r)-s)-P 16--process-slot-var--show-limits diagnostics-P 0 parallelism"We replaced a 200-line bash script with a single Argonaut invocation. Eight parallel slots, null-safe input, process isolation — the whole thing is just one pipe."
"The --process-slot-var feature alone justified our entire
migration. Every worker gets a unique slot ID — we use it for temp file isolation, log routing,
port allocation. It's absurdly elegant."
"We went from sequential deployments to 16-way parallel with zero code
changes to our deploy scripts. The -I {} templating just works. Our deploy went
from 45 minutes to under 4."
"The -p interactive mode is underrated. During incident
response, we pipe suspect processes and Argonaut prompts us before each kill. It's the
difference between confidence and catastrophe."
"I was hand-rolling parallel batch jobs in Python. Then I discovered Argonaut and realized the entire orchestration layer was one line of shell. Deleted 400 lines of Python that day."
Real command output. Real orchestration patterns.
$ find /tmp -name core -type f -print0 | argonaut -0 /bin/rm -f
Safely removes files with spaces or special characters in names using null-terminated input.
$ cut -d: -f1 < /etc/passwd | sort | argonaut echo
_apt avahi backup bin daemon games gnats irc list lp mail man messagebus
news nobody operator pollinate proxy root sshd sync sys syslog uucp www-data
Compact listing of all system users, batched into minimal echo invocations.
$ ls services/ | argonaut -I {} -P 4 docker build -t {}:latest ./services/{}
[+] Building auth-service...
[+] Building api-gateway...
[+] Building billing-engine...
[+] Building notification-svc...
✓ 4 images built in parallel
Build multiple Docker images in parallel using template substitution and 4 process slots.
A for loop processes items sequentially and spawns a new shell process per iteration.
Argonaut batches multiple arguments into a single command invocation (reducing exec
overhead), supports parallel execution with -P, handles special characters with
null-termination, and respects system command-line length limits automatically.
Yes. When running with -P, send SIGUSR1 to increase the number of concurrent
processes or SIGUSR2 to decrease. This allows live tuning without restarting the pipeline —
useful for responding to load changes during long-running batch jobs.
Argonaut handles failure gracefully. If any invocation exits with status 1–125, it records the failure and exits with status 123. If a command exits with status 255, Argonaut halts immediately without reading further input. Exit codes 126 and 127 are reserved for "command cannot be run" and "command not found" respectively.
Use the -0 flag with null-terminated input. Pair it with
find -print0 to produce null-delimited output. This ensures every filename is
processed correctly regardless of whitespace, quotes, or backslashes in the name.
It sets an environment variable to a unique value in each parallel child process. Slot values are reused when a process exits. Use it for distributing work across resources — temp directories, ports, log files — without collision. Essential for any parallel workload that writes to shared infrastructure.
Join the waitlist for early access to Argonaut Team and Enterprise tiers. Open Source is available now.