A Terminal User Interface (TUI) for managing multiple local development processes. View real-time logs, monitor status, and control all your dev servers from a single dashboard.
Built with OpenTUI.
When working on a full-stack project, you often need to run multiple processes simultaneously—a frontend dev server, a backend API, database containers, workers, etc. corsa gives you:
- Single dashboard for all your processes with tabbed log viewing
- Real-time logs with search and ANSI color support
- Status monitoring to see at a glance what's running, stopped, or crashed
- Health checks to monitor service availability
- AI integration via MCP to let your IDE assistant read logs and control processes
brew install tomagranate/tap/corsanpm install -g @tomagranate/corsacurl -fsSL https://raw.githubusercontent.com/tomagranate/corsa/main/install.sh | bashDownload the latest binary for your platform from Releases.
| Platform | Download |
|---|---|
| macOS (Apple Silicon) | corsa-darwin-arm64.tar.gz |
| macOS (Intel) | corsa-darwin-x64.tar.gz |
| Linux (x64) | corsa-linux-x64.tar.gz |
| Linux (ARM64) | corsa-linux-arm64.tar.gz |
| Windows (x64) | corsa-windows-x64.zip |
- Create a config file in your project:
corsa init- Edit
corsa.config.tomlto add your processes:
[[tools]]
name = "frontend"
command = "npm"
args = ["run", "dev"]
cwd = "./frontend"
[[tools]]
name = "backend"
command = "python"
args = ["-m", "uvicorn", "main:app", "--reload"]
cwd = "./backend"- Start the dashboard:
corsa- Optional: install the
corsaAI skill from this repository:
npx skills add tomagranate/corsa| Command | Description |
|---|---|
corsa |
Start the TUI dashboard |
corsa init |
Create a sample config file in the current directory |
corsa mcp |
Start the MCP server for AI agent integration |
corsa ctl <subcommand> |
Control running processes through the MCP API |
| Option | Description |
|---|---|
-c, --config <path> |
Path to config file (default: corsa.config.toml) |
-h, --help |
Show help message |
-v, --version |
Show version information |
| Subcommand | Description |
|---|---|
corsa ctl list |
List all processes with status and recent logs (ps/ls aliases) |
corsa ctl logs <name> |
Get recent logs for a process |
corsa ctl stop <name> |
Stop a running process (rm alias) |
corsa ctl restart <name> |
Restart a process |
corsa ctl clear <name> |
Clear process logs |
corsa ctl send-keys <name> --key <value> |
Send keypresses/text to an interactive process |
corsa ctl reload |
Reload config and restart processes |
# Start with default config
corsa
# Use a custom config file
corsa --config ./configs/dev.toml
corsa -c ./configs/dev.toml
# Create a new config file
corsa init
# Start MCP server for AI integration
corsa mcp
# List processes via CLI control API
corsa ctl list
corsa ctl ls
# Read logs with filtering
corsa ctl logs backend --lines 200 --search ERROR --search-type substring
# Stop a process (alias)
corsa ctl rm backend
# Send interactive input
corsa ctl send-keys repl --key "help" --key return
# Machine-readable output for agents/scripts
corsa ctl list --jsoncorsa is configured via a TOML file. By default, it looks for corsa.config.toml in the current directory.
[[tools]]
name = "server"
command = "npm"
args = ["run", "dev"][home]
enabled = true
title = "My Project"
[ui]
theme = "mist"
showTabNumbers = true
[mcp]
enabled = true
[[tools]]
name = "web"
command = "npm"
args = ["run", "dev"]
cwd = "./web"
description = "Next.js frontend"
[tools.ui]
label = "Open App"
url = "http://localhost:3000"
[tools.healthCheck]
url = "http://localhost:3000/api/health"
interval = 5000
[[tools]]
name = "api"
command = "cargo"
args = ["watch", "-x", "run"]
cwd = "./api"
description = "Rust API server"
cleanup = ["pkill -f 'target/debug/api'"]
[tools.env]
RUST_LOG = "debug"For a complete reference of all configuration options, see the sample config file.
corsa includes several built-in themes. Set in your config:
[ui]
theme = "mist"Available themes: default (Moss), mist, cappuccino, synthwave, terminal (auto-detect from your terminal).
corsa can expose an HTTP API for AI agents (Cursor, Claude, etc.) via the Model Context Protocol.
[mcp]
enabled = true
port = 18765Add to your MCP configuration (e.g., ~/.cursor/mcp.json):
{
"mcpServers": {
"corsa": {
"command": "corsa",
"args": ["mcp"]
}
}
}| Tool | Description |
|---|---|
list_processes |
List all processes with status, health, and last 20 log lines |
get_logs |
Get recent logs (supports search and line limits) |
stop_process |
Stop a running process |
restart_process |
Restart a process |
clear_logs |
Clear logs for a process |
send_keys |
Send virtual keypresses to an interactive process |
reload_config |
Reload config file and restart all processes |
See the Contributing Guide for development setup and guidelines.
MIT