This crate builds three binaries, one per backend environment.
| Binary | Firebase project | Default --site |
|---|---|---|
voquill |
voquill-prod |
https://voquill.com |
voquill-dev |
voquill-dev |
http://localhost:4321 |
voquill-emulator |
voquill-dev + Auth emulator on 127.0.0.1:9099 |
http://localhost:4321 |
Each binary writes its credentials to ~/.config/voquill/<env>.json (mode 0600 on Unix). Running one won't overwrite another's session.
Released builds are published to GitHub Releases and mirrored to Homebrew, APT, and RPM repositories. Pick the channel that matches your OS. Append --dev (or -Dev on Windows, or swap the package name on package managers) to install the voquill-dev build that targets the dev Firebase backend.
curl -fsSL https://voquill.com/install.sh | shDev build:
curl -fsSL https://voquill.com/install.sh | sh -s -- --devPin a specific version:
curl -fsSL https://voquill.com/install.sh | sh -s -- --version 1.2.3Installs to $VOQUILL_INSTALL/bin (defaults to ~/.voquill/bin) and appends it to your shell profile.
iwr https://voquill.com/install.ps1 -UseBasicParsing | iexDev build:
& ([scriptblock]::Create((iwr https://voquill.com/install.ps1 -UseBasicParsing))) -DevPin a specific version:
& ([scriptblock]::Create((iwr https://voquill.com/install.ps1 -UseBasicParsing))) -Version 1.2.3Installs to %VOQUILL_INSTALL%\bin (defaults to %USERPROFILE%\.voquill\bin) and adds it to your user PATH.
brew tap voquill/voquill
brew install voquillDev build (side-by-side install is fine — the binaries have different names):
brew install voquill-devUpgrade:
brew update && brew upgrade voquill# Add GPG key
curl -fsSL https://voquill.github.io/apt/gpg-key.asc \
| sudo gpg --dearmor -o /usr/share/keyrings/voquill.gpg
# Add repository
echo "deb [signed-by=/usr/share/keyrings/voquill.gpg] https://voquill.github.io/apt stable main" \
| sudo tee /etc/apt/sources.list.d/voquill.list
sudo apt-get update
sudo apt-get install voquillFor the dev build, swap stable for dev in the deb line and install voquill-dev instead.
Upgrade with sudo apt-get update && sudo apt-get upgrade voquill.
Fedora / RHEL:
sudo tee /etc/yum.repos.d/voquill.repo <<'EOF'
[voquill-stable]
name=Voquill (stable)
baseurl=https://voquill.github.io/rpm/packages/stable
enabled=1
gpgcheck=1
gpgkey=https://voquill.github.io/rpm/gpg-key.asc
EOF
sudo dnf install voquillopenSUSE:
sudo zypper addrepo --gpgcheck https://voquill.github.io/rpm/packages/stable voquill-stable
sudo rpm --import https://voquill.github.io/rpm/gpg-key.asc
sudo zypper install voquillFor the dev build, swap the stable path for dev (baseurl=https://voquill.github.io/rpm/packages/dev) and install voquill-dev instead.
Every release also posts tarballs, zips, .deb, and .rpm artifacts at
https://github.com/voquill/voquill/releases. Prod releases are tagged cli-v<version>, dev releases are tagged cli-dev-v<version> and marked as pre-release.
Once installed, you can re-run the install script through the binary:
voquill upgradeThis re-executes the appropriate installer for the channel you're on.
The release-cli.yml workflow drives every publish target:
- Trigger — every push to
mainthat touchescli/**cuts a new dev release (auto-bumps patch, taggedcli-dev-v<version>, marked pre-release). Prod releases are cut viaworkflow_dispatchand promote the most recent (or specified) dev tag tocli-v<version>. - GitHub Releases — uploads
voquill[-dev]-<target>.tar.gz/.zip, plus.deband.rpmpackages for Linux. - Homebrew tap — regenerates the formula in
voquill/homebrew-voquill. - APT repository — adds the new
.debtovoquill/apt(stablecodename for prod,devfor dev). - RPM repository — adds the new
.rpmtovoquill/rpmunderpackages/stableorpackages/dev. - Install scripts —
apps/web/public/install.shandapps/web/public/install.ps1are served fromvoquill.comand resolve the latest matching tag on each channel.
cargo build # all three, debug
cargo build --releaseBinaries end up in target/debug/ or target/release/.
cargo run --bin voquill -- loginOpens the live authorize page and uses real Firebase.
Astro dev server plus the dev Firebase project:
# terminal 1
cd ../apps/web && pnpm run dev
# terminal 2
cargo run --bin voquill-dev -- loginHits http://localhost:4321/authorize?env=dev&..., which loads the dev Firebase config.
# terminal 1
firebase emulators:start --only auth --project voquill-dev
# terminal 2
cd ../apps/web && pnpm run dev
# terminal 3
cargo run --bin voquill-emulator -- loginWith ?env=emulator the authorize page calls connectAuthEmulator(auth, "http://127.0.0.1:9099"). The whole sign-in round-trip stays on your machine.
Pass --site <origin> to any binary if you want to test against a preview deploy, staging, or some other host. The binary still picks which Firebase project the login goes through.
voquill login --site https://preview-42.voquill.com
voquill-dev login --site https://staging.voquill.comThe CLI appends /authorize itself, so just give it the origin.
Wrap an agent command in a Voquill session:
voquill agent [claude|codex|codebuff]Each session gets a random name (e.g. brave-octopus) — pass --slug my-name to set your own (it's kebab-cased for you). The session is written to the Realtime Database under session/<uid>/<sessionId>. The wrapped command runs inside a pty, so interactive TUIs like claude work. Exiting the wrapped command deletes the session.
You need to login first so the CLI has a token to talk to RTDB. voquill-emulator agent talks to the RTDB emulator on 127.0.0.1:9000 — start it with firebase emulators:start --only auth,database --project voquill-dev.
Do this once for voquill-prod and once for voquill-dev in the Firebase Console:
- Authentication → Sign-in method → enable Google.
- Authentication → Settings → Authorized domains → add wherever the authorize page is hosted (
voquill.comfor prod).localhostis allowed by default.