A cross-platform terminal file manager and command-alias manager
Shortcut any command, automate workflows, and share them with your team
- π Why crower?
- π Quick start
- π¦ Installation
- π³ Usage recipes
- π Commands
- π§© Scripting
- π€ Sharing crower files
- βοΈ Configuration
- π οΈ Development
- π Documentation
- π¬ Contributing
β οΈ What is not proven- π License
Tired of retyping long, complex commands? Need to remember obscure CLI incantations? crower lets you:
- π Shortcut anything - Turn any shell command into a memorable alias
- β‘ Run multi-step workflows - Chain multiple commands together with automatic error handling
- π Nest commands - Call crower commands from within other crower commands with recursion protection
- π Add context - Attach notes to your commands and track history
- β©οΈ Undo anything - Full history with revert capability
- π Manage files - Create, copy, move, open files and folders with simple commands
- π Search - Find files/folders or search the web instantly
- π¦ Share workflows - Export and import crower files, or download from a registry
- π§ Smart execution - Proper parameter quoting, placeholders (
{1},{2},{}), multi-step chains, and safe execution
# Create a shortcut for a complex command
crower create deploy "ssh user@server 'cd /app && git pull && systemctl restart app'"
# Run it by name or alias
crower deploy
# or
cr deploy
# Create with aliases
crower create backup -a bkp "tar -czf backup.tar.gz ~/important-data"
cr bkp
# Run with parameters
crower create greet "echo Hello {1}, welcome to {2}!"
cr greet John Developercurl -fsSL https://raw.githubusercontent.com/fiwon123/crower/main/scripts/install.sh | shIt resolves the newest release, verifies the archive against the release's
checksums.txt, and installs crower and cr into ~/.local/bin. Pin a
version or a directory with sh -s -- --version v0.8.0 --dir ~/.local/bin.
Then crower init --apply puts the directory on your PATH.
Download the latest release for your platform from the releases page.
Archives are named crower_<tag>_<os>_<arch> β for example
crower_v0.4.0_linux_amd64.tar.gz. Every archive contains crower, cr and
crower-gui, with no architecture suffix. Replace v0.4.0 below with the tag
you are installing.
Linux (swap linux_amd64 for linux_arm64, darwin_amd64 or
darwin_arm64 on another platform):
VERSION=v0.8.0
curl -LO "https://github.com/fiwon123/crower/releases/download/$VERSION/crower_${VERSION}_linux_amd64.tar.gz"
tar -xzf "crower_${VERSION}_linux_amd64.tar.gz"
chmod +x crower cr crower-gui
sudo mv crower cr crower-gui /usr/local/bin/Without sudo: the archive also ships add_to_path.sh, which adds the
directory it lives in to the config file of the shell you are running. Extract
it next to the binaries and run ./add_to_path.sh.
Windows: extract crower_<tag>_windows_amd64.zip (or ..._arm64.zip), then
either run add_to_path.bat from the extracted folder or add the folder
containing crower.exe, cr.exe and crower-gui.exe to your PATH.
crower.exe and cr.exe are terminal programs; double-click
crower-gui.exe (the one with the crow icon) to open the window, with no
console behind it.
Verify either install with crower --version.
git clone https://github.com/fiwon123/crower.git
cd crower
go build -o crower .
./crower --help
# short alias, then put both binaries on your PATH
cp crower cr
sudo mv crower cr /usr/local/bin/make help lists every target: make release builds the Windows and Linux
release archives into build/, and make check runs the local gate β gofmt,
vet, test and build.
Requirements: Go 1.25.4 or later
# Create shortcuts for common dev tasks
crower create test "go test ./..."
crower create build "go build ./..."
crower create lint "golangci-lint run"
crower create deploy "git push && ssh prod 'cd app && git pull && systemctl restart app'"
# Run your workflow
cr test && cr build# Create a command with multiple steps (separated by newlines in exec)
crower create release "echo 'Building...'\ngo build -o app .\necho 'Testing...'\ngo test ./...\necho 'Done!'"
cr release# Create files and folders
crower create project -f # creates file
crower create src -o # creates folder
# Copy and move
crower copy file.txt ./backup/
crower move old.txt ./archive/
# Open files/folders
crower open -f README.md
crower open -o ./src# View history
cr list -i
# Revert last N operations
cr revert 2
# Restore a deleted command
cr restore <key>| Command | Description | Example |
|---|---|---|
gui |
Launch interactive TUI GUI | crower gui |
create |
Create a command, file, folder, or script | crower create name "command" |
update |
Update existing commands or last operation | crower update -n oldname -n newname |
delete |
Delete commands, files, folders, or history | crower delete name |
list |
List commands, history, processes, or files | crower list or cr list -i |
execute |
Execute stored commands | crower execute name or just cr name |
open |
Open files, folders, or system settings | crower open -f file.txt |
copy/move |
Copy or move files and folders | crower copy src dst |
search |
Search files or web | crower search -f pattern |
extract |
Extract archives | crower extract archive.tar.gz |
revert |
Revert history | crower revert 1 |
restore |
Restore from history | crower restore <key> |
reset |
Reset all commands | crower reset |
export |
Export commands to share | crower export or crower export name |
import |
Import commands from file | crower import pack.toml |
share |
Browse and pull from registry | crower share list or cr share pull pack |
setup |
Manage named command sets | crower setup use streamer |
init |
Put the install directory on PATH | crower init --apply |
doctor |
Show paths, permissions and environment | crower doctor --json |
Use crower <command> --help for detailed options.
Every archive contains crower, the cr alias and crower-gui, the Fyne
window over the same configuration. The CLI binaries are cgo-free and need no
display; crower gui is the terminal menu.
crower is meant to be called from a script as well as typed by hand.
- Results go to stdout, diagnostics to stderr.
crower listwrites the table and nothing else to stdout; prompts, status lines, warnings and errors go to stderr, so piping the results never picks them up. - The exit status says whether the work happened.
0means it did β or that you answered no to a confirmation, because declining is a choice.1means it did not, and the reason is one line on stderr:error: .... - A prompt never waits forever. With
--no-input, or with stdin closed, a command that needs an answer fails with a message instead of asking again.
# Take the result and leave the status lines behind
greeting="$(crower execute greet)"
# Fail the script when the delete did not happen, without a prompt to block it
crower --no-input delete old-command || exit 1--config <path> points a run at another configuration file, which is how a
script uses its own set of commands without touching your personal one.
Build once, share everywhere. Perfect for onboarding, CI setups, or sharing workflows with your team.
# Export all commands
crower export -o my-workflows.toml
# Export a specific command
crower export deploy -o deploy.toml# Import from a file
crower import my-workflows.toml
# Import and overwrite conflicts
crower import my-workflows.toml --overwrite# Browse available packs
crower share list
# Pull and install a pack
crower share pull docker-setupRegistry Protocol: Any HTTP server can host crower packs using the simple manifest protocol (index.json + packs/<name>.toml). Check the crower-resources repo for examples.
Crower stores data in ~/crower/ by default:
crower.yaml- Your stored commands (TOML format)historyhelper.json- Operation historyhistory/- Command snapshots for revert/restorecrower.log- Execution logsversions.json- The last installed versions, read by--rollbacksettings.json-update_check(daily,weeklyornever), and when the periodic notice last looked
Override with --config /path/to/config.yaml.
Named setups keep separate command sets and separate history:
crower --setup streamer create obs "obs" # ~/crower/setups/streamer/
CROWER_SETUP=streamer crower list
crower --setup streamer revert 1 # only this setup's history# The local gate: gofmt, vet, go test, go build
make check
# Run tests only
go test ./...
# Build for all platforms
make release
# Run from source
go run ./ --helpSee AGENTS.md and PROJECT_CONTEXT.md for architecture details.
The dev sandbox runs the same pinned Go toolchain on every machine:
make dev-up (or docker compose up on any OS with Docker). Native Windows
uses python scripts/dev-up.py dev-up. Run make help for every target.
| I want to⦠| Read |
|---|---|
| see real recipes | Usage recipes |
| look up a command or flag | Command reference |
| script against crower | Scripting |
| browse the wiki | crower wiki |
| see what is planned | Roadmap board |
| understand the code layout | Architecture Β· AGENTS.md Β· PROJECT_CONTEXT.md |
| help prove a claim | Verifying claims |
Issues, ideas, questions and pull requests are welcome β see CONTRIBUTING.md. One feature per pull request. Say what ran and what did not, and do not describe a skipped check as a pass.
The most useful contribution right now is running the unproven parts on real hardware β see What is not proven.
This project says what it verified. CI formats, vets, tests and builds on Linux/amd64, then cross-compiles six archives on the same runner β no gate executes what it built.
- The macOS build runs β the darwin archives are never executed, and shell-backed operations are reported broken (#129).
- The Windows build runs β cross-compiled on Linux, never started.
- The arm64 builds run β built, never executed on ARM hardware.
- The TUI and Fyne GUI render β no gate draws a window; the tests assert the model, not pixels.
- History and revert across a real session β the suite uses isolated temp directories, not a day of real use.
Running the program and reporting exactly what happened β including "it worked" β is the most useful contribution right now. The steps for each claim, and what to record, are on the wiki's Verifying claims page.
crower is MIT licensed β see LICENSE.
The release archives also carry two files that are not crower's licence:
- NOTICE β attribution for the Apache-2.0 dependencies compiled into
the binary (
spf13/cobra,minio/selfupdate,hajimehoshi/ebiten); - LICENSE-APACHE β the Apache License 2.0 text those dependencies require to travel with a distribution.
A dependency's licence does not change this project's: your MIT grant is the only one you need for crower's own code, and the Apache files exist so the bundled libraries arrive with the notices they are owed.