AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻译准备中
Cross-platform, native, and sharp looking Linux server control plane.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗[!WARNING] Crow is in active development. It's reshaped and debugged constantly: features change or move between releases, things break, and the vault format can change. Try it on servers you can afford to experiment with, not production, and expect rough edges. Bug reports are welcome.
Crow is a native desktop app for operators and SREs who manage Linux servers over SSH. It's inspired by the density and keyboard speed of k9s and lazygit, drawn as a hardware-accelerated GUI with GPUI.
Crow is agentless: it talks to your servers over plain SSH, reusing one connection per server, and never installs anything on them.
Website: crow.rs · Community: forum.errorware.net
Work across many servers at once. Changes to many servers list what they will do first, go one server at a time and stop at the first failure.
journalctl with unit, priority, time and PID filters, highlighted search matches, and an optional plain-English explanation from an AI provider you configure.sshd_config, /etc/hosts, pg_hba.conf and ufw rules as structured, validated rows through crow-config. Edits are surgical, every change is a revision you can roll back, and values rated never on prod need a typed confirmation. Files are written atomically (temp file, then rename).Crow is in English, and can be in any language someone writes a pack for. A pack is one .ftl file in ~/.config/crow/languages/; pick it in Settings → Personalisation → Language. Spanish and Japanese packs are in languages/, and languages/README.md explains how to make one. Commands, config files and the audit log's action names stay as they are in every language.
Crow holds things that matter: provider tokens that can power servers off, AI keys, and SSH access to your fleet. Security has a cost, so Crow doesn't hide the trade-off. It shows you which stance you're in, and what that protects and exposes. The badge in the titlebar is always visible; click it for the details.
| OPEN (default) | LOCKED | |
|---|---|---|
| How | No password; the OS keyring (Keychain, Secret Service, Credential Manager) holds Crow's encryption key | Master password + TOTP 2FA; the key is locked by your password |
| Protects against | Someone copying crow.db or your backups | That, and anything or anyone using your computer while Crow is locked |
| Exposed to | Anything running as you while you're logged in can read the key from the keyring; anyone at your unlocked desk can use Crow | Anyone at your computer while Crow is unlocked (it auto-locks when idle) |
| Costs | Nothing to type | Unlock with password + 2FA; lose either and the stored secrets are gone for good |
In both stances:
curl on stdin.crow.db (server list, settings, history) and your SSH keys in ~/.ssh.~/.ssh/config says.The first secret you save asks you to choose a stance on purpose. See docs/security.md for the full model.
Crow's extensions are plugins described by crow-config manifests:
provider.hosts (where servers come from) today, provider.dns next.instances.list, instances.power, snapshots). Crow only offers what a provider declares.| Provider | Category | Capabilities |
|---|---|---|
| Linode | provider.hosts | list instances, power, backup snapshots |
| UpCloud | provider.hosts | list instances, power |
Providers are compiled in, one cargo feature each (provider-linode, provider-upcloud, both on by default). Their settings forms are generated from the manifest, and tokens are stored only in the encrypted vault.
Your own plugins. Besides the built-in ones, Crow loads plugins you write or download: a folder with a plugin.toml and its scripts, dropped into ~/.config/crow/plugins/. Crow shows every command a plugin can run before you accept it, pins its files (a changed file turns it off until you review it again), asks before anything changes, and records every run. A plugin's actions run on a server's page, across the fleet with a canary, or on this machine against an inventory Crow writes (Ansible, for example), and can add badges to the fleet. crow --check-plugin <folder> checks one before you share it. Examples are in plugins/, including DevSec hardening through Ansible; how to write one is in docs/plugins.md.
crow/
├── src/ # the app
├── crates/
│ ├── crow-provider-core/ # provider contracts: Provider, ListInstances, PowerControl, Snapshots; curl-based HTTP
│ ├── crow-provider-linode/ # Linode API v4
│ └── crow-provider-upcloud/ # UpCloud API 1.3
├── assets/ # icons, flags, distro logos, fonts (each with its license), i18n/en.ftl
├── languages/ # language packs (Spanish, Japanese) and how to write one
└── docs/
The provider crates live here, next to the app they serve. crow-config, the general-purpose config engine, has its own repository.
Prebuilt binaries for Linux (x86_64) and macOS (Apple Silicon) are attached to each GitHub release, alongside SLSA provenance (.intoto.jsonl) you can check with slsa-verifier.
Linux: unpack and run the installer. It puts crow in ~/.local/bin and adds Crow (with its icon) to your app launcher; ./install.sh --uninstall removes it.
tar -xzf crow-linux-x86_64.tar.gz
cd crow-linux-x86_64 && ./install.sh
macOS: unpack crow-macos-arm64.tar.gz and drag Crow.app to Applications. The app is ad-hoc signed but not notarized, so Gatekeeper blocks the first launch: right-click it and choose Open, or clear the quarantine flag once:
xattr -dr com.apple.quarantine /Applications/Crow.app
Updates: Crow checks the release list on GitHub once a day and shows vX available next to its version (Settings → General turns this off; nothing else is sent). Installing updates by themselves is opt-in, and only happens after slsa-verifier (which must be on your PATH) confirms the release's signed provenance. Only an installed copy (~/.local/bin/crow, Crow.app) is replaced, and Crow offers a restart rather than restarting itself.
A Rust toolchain (1.85+), native windowing and font libraries, and curl (Crow uses it for provider and AI requests).
# Fedora / Bazzite
sudo dnf install fontconfig-devel libxkbcommon-devel libxcb-devel wayland-devel
# Ubuntu / Debian
sudo apt install libfontconfig1-dev libxkbcommon-dev libxcb1-dev libwayland-dev
For the Open stance on Linux you need a Secret Service provider (GNOME Keyring or KWallet); most desktops have one running.
Crow uses JetBrains Mono:
brew install --cask font-jetbrains-mono # macOS
brew install font-jetbrains-mono # Linux (Homebrew)
Crow builds against crow-config from a sibling checkout:
git clone [email protected]:errorware/crow-config.git crow-config-core
git clone [email protected]:errorware/crow.git
cd crow
cargo test --workspace
cargo run --release
| Shortcut | Action |
|---|---|
⌘K / Ctrl+K | Command palette |
⌘1 / ⌘2 / ⌘3 / ⌘4 | Fleet / server overview / configs / logs |
⌘N | Add server |
⇧⌘F | Fleet Setup |
⌘, | Settings |
⌘S | Save settings (on Settings) |
⌘/ | Open config.toml in your editor (on Settings) |
⌘\ | Collapse / expand the sidebar |
⇧⌘L | Lock Crow (Locked stance) |
/ | Search the table (services, processes, users, logs) |
Tab / ⇧Tab | Next / previous field in a form |
Esc | Close the dialog or form, or cancel |
Ctrl works wherever ⌘ is shown.
Crow builds on GPUI, alacritty_terminal, the RustCrypto crates, SQLite and many more, and ships Tabler Icons, flag-icons, Dashboard Icons and JetBrains Mono. ACKNOWLEDGEMENTS.md lists them all with their licenses; the bundled assets carry their own in assets/.
Crow is licensed under the AEUPL-1.2 (The Ancient European Union Public License).
Free for anyone to use, copy, modify, and share for any non-commercial purpose without restriction. Commercial use requires a physical letter sent to the author written in Latin on genuine sheepskin parchment.
See the LICENSE file or visit aeupl.org for full terms and conditions.