seristack(v0.2.2)
**Run shell workflows via CLI or HTTP
Seristack is a lightweight automation engine designed to bridge the gap between local task execution and remote triggers. Define your stacks in YAML, manage dependencies, and expose your automation via a built-in HTTP server.
seristack
Features
π Run multiple command stacks from a single config
π Repeat stacks with serial or concurrent execution
π Define dependencies between stacks
π§© Variable substitution using templates
π¦ Share output between stacks
π Expose stacks as HTTP endpoints
π§ Run as an MCP server for IDE integrations
π Works with Bash, sh, and PowerShell

Installation
Using Homebrew (Mac and Linux)
brew install TechXploreLabs/tap/seristack
Linux (using release archive)
- Go to Seristack Releases and download the latest
seristack_VERSION_linux_ARCH.tar.gz (ARCH matches your system, e.g., amd64, arm64).
- Extract the archive:
tar -xzf seristack_VERSION_linux_ARCH.tar.gz
- Move the
seristack binary to a directory in your PATH:
sudo mv seristack /usr/local/bin/
- Set execute permissions (just in case):
sudo chmod +x /usr/local/bin/seristack
- Verify installation:
seristack --help
Windows (using release archive)
- Go to Seristack Releases and download the latest
seristack_VERSION_windows_ARCH.zip or .gz file (where ARCH matches your system, e.g., amd64).
- Extract the zip/gz file (Right click β Extract all, or use a tool like 7-Zip).
- Move
seristack.exe to a folder in your %PATH% (such as C:\Windows, or better, a custom tools folder included in PATH).
- Open PowerShell or Command Prompt and verify installation:
seristack --help
Sample stack yaml file
# description about seristack
# config.yaml
stacks:
- name: stack1 # name of the stack (REQUIRED)
workDir: ./ # working directory to execute the cmds. default is "./"
description: Used for printing
welcome message # used for adding the stack as tool in mcp server, if descrption is empty then
# it won't be added
method: GET # Http methods needs to be added for http server
urlPath: /show # Optional, If not provided stack name will be added as path, ex /stack1
continueOnError: false # if cmds has error, true will not stop execution, false will stop. default is false
count: 3 # count = 0 will not run cmds, count = 3 runs entire cmds three times. default is 0
executionMode: PARALLEL # if count = 3 and executionMode is PARALLEL, then all three iterations of list
# cmds execute parallellely . Valid options are, [PARALLEL/STAGE/PIPELINE/SEQUENTIAL].
# STAGE = execute all iterations conncurrently, list of cmds execeuted serially
# PIPELINE = execute all iterations serially, list of cmds executed concurrently
# SEQUENTIAL = execute all iterations and theirs cmds serially. default is PARALLEL
vars: # vars take key=value pair of variables. default is empty
samplekey: samplevalue
shell: bash # shell takes sh as default for linux, darwin and powershell for windows
shellArg: -c # shellArg takes -c as default for linux, darwin and -Command for windows
dependsOn: [] # dependsOn takes list of stacks to start after them. default is []
cmds: # cmds takes list of shell commands (linux, powershell)
- |
export samplekey={{.Vars.samplekey}} # to use vars for substitution
echo $samplekey
echo "count={{.Count.index}}" # index of count iterations
echo "Hey i'm seristack!"
- name: stack2
workDir: ./
continueOnError: false
count: 3
executionMode: SEQUENTIAL
vars: # vars take key=value pair of variables. default is empty
env: Dev
dependsOn: [stack1] # runs after stack1 completes
cmds:
- |
# Command 1: Produces metadata
echo "{\"index\": {{.Count.index}}, \"step\": \"metadata\", \"status\": \"ok\"}"
- |
# Command 2: Produces metric data
echo "{\"index\": {{.Count.index}}, \"step\": \"metrics\", \"value\": $((RANDOM % 100))}"
output: | # for aggregating outputs from the cmds
echo "--- Aggregation Summary ---"
# We use 'grep' to find JSON lines and 'jq' to format them into an array
echo '{{.Self.result}}' | grep "^{" | jq -s '{
total_records: length,
environment: "{{.Vars.env}}",
results: .
}'
- name: stack3
workDir: ./
count: 1
vars:
invite: hello engineers
cmds:
- |
echo "Current date and time:"
echo `date`
Running the stacks
- Trigger entire stacks, default is config.yaml.
seristack trigger -c config.yaml
or
seristack trigger
- Run the particular stack.
seristack trigger -c config.yaml -s stack3
- Init the http server with endpoint. ctrl+c will stop the server process.
seristack run -c config.yaml
- Init the mcpserver. ctrl+c will stop the server process.
seristack mcp -t streamableHTTP
License
Apache License