Remote Probes
VibeBar Probe is a normal Linux service, not an AI agent. It reads only allowlisted local CLI usage metadata, keeps a durable local ledger/outbox, and sends outbound end-to-end encrypted batches through a Relay to your Vibe Bar Core on macOS.
The observed machine opens no inbound port. Probe, Relay, Core, Web, and future iOS clients are separate roles; one user's devices never share a workspace, credential, cursor, or encryption key with another user.
Requirements
- 64-bit x86 Linux with systemd;
- root access for the hardened service install;
- a Vibe Bar Core already enrolled for the workspace;
- outbound HTTPS access to the Control service and chosen Relay.
The current recommended binary release is v0.2.1. Other CPU architectures can still run a reviewed source build, but they do not yet have an official binary asset.
1. Download and verify
Download the bundle and its checksum from the public Probe repository:
gh release download v0.2.1 --repo AstroQore/vibebar-probe \
--pattern 'vibebar-probe-0.2.1-linux-x86_64.tar.gz*'
sha256sum -c vibebar-probe-0.2.1-linux-x86_64.tar.gz.sha256
tar -xzf vibebar-probe-0.2.1-linux-x86_64.tar.gz
cd vibebar-probe-0.2.1-linux-x86_64If GitHub CLI is not installed on the server, use the same public assets with curl:
curl -fLO https://github.com/AstroQore/vibebar-probe/releases/download/v0.2.1/vibebar-probe-0.2.1-linux-x86_64.tar.gz
curl -fLO https://github.com/AstroQore/vibebar-probe/releases/download/v0.2.1/vibebar-probe-0.2.1-linux-x86_64.tar.gz.sha256
sha256sum -c vibebar-probe-0.2.1-linux-x86_64.tar.gz.sha256
tar -xzf vibebar-probe-0.2.1-linux-x86_64.tar.gz
cd vibebar-probe-0.2.1-linux-x86_64Stop if the checksum does not report OK.
2. Install
The default unit observes supported CLI session roots below /root:
sudo ./install.shTo observe another account, let the installer resolve that account's real home:
sudo ./install.sh --observe-user exampleThe installer puts immutable binaries below /opt/vibebar-probe/releases/, sets /opt/vibebar-probe/current atomically, installs systemd units, and keeps configuration/state separately under /etc/vibebar-probe and /var/lib/vibebar-probe.
3. Create a one-time code
On the Mac, open Vibe Bar Settings → Remote Probe Sync and confirm that this Mac is the active Core. In the Web control center, open Enroll device and create a one-time Probe code for the same workspace.
The code is short-lived and single-use. Do not paste it into an issue, chat, service file, or command line.
4. Enroll and start
Run enrollment without --code; the CLI prompts securely so the code does not enter shell history:
sudo /opt/vibebar-probe/current/vibebar-probe enroll \
--control-url https://vibebar.aqor.io \
--home-directory /root \
--alias "My server"
sudo systemctl enable --now vibebar-probe.serviceIf you installed with --observe-user, use that user's home for --home-directory.
Verify all three layers:
sudo systemctl status --no-pager vibebar-probe.service
sudo /opt/vibebar-probe/current/vibebar-probe status
sudo journalctl -u vibebar-probe.service -n 50 --no-pagerThen check Vibe Bar's Remote Machines page. The sequence should advance and each supported source should report a bounded status such as ok.
Update and rollback
Download and verify a newer bundle exactly as above, extract it, then run:
sudo /usr/local/sbin/vibebar-probe-update \
--bundle "$PWD/vibebar-probe-<version>-linux-x86_64"The updater verifies every bundled file, checks the reported version, runs an offline self-test, stops active Probe units, creates a mode-0600 state backup, switches the immutable current link, and requires restarted units to remain healthy. On failure it restores the prior link and systemd units. Enrollment credentials, facts, and pending encrypted outbox rows are never stored in a release directory.
An old 0.1.x source/virtualenv install has no bundled updater. Run the 0.2.1 installer once; it preserves existing configuration and state while migrating the service to the binary layout. Recognized legacy Python systemd overrides are backed up and removed transactionally; unfamiliar partial overrides are refused and rolled back instead of being guessed.
Automatic unattended downloads are intentionally disabled. The current SHA-256 file detects corruption, but a pinned Ed25519 release manifest is still required before GitHub can be treated as an unattended update channel.
Live, Delayed, and Stale
Probe scans frequently, but it sends a status heartbeat about every five minutes when no usage fact changed. After Core observes at least two batches, Vibe Bar learns that cadence:
- Live — still within the machine's expected reporting window;
- Delayed — one expected report is late;
- Stale — a second report window was missed.
This avoids labeling a healthy five-minute heartbeat as delayed after only two minutes. A delayed badge does not by itself mean data was lost: Probe retains a durable outbox and Relay retains unconsumed ciphertext until Core acknowledges it.
Include a Probe in totals
Remote machines are excluded from cost totals by default so an upgrade cannot silently change numbers you already understand. Enable Include in totals on the Remote Machines page or under Settings → Remote Probe Sync → Cost aggregation.
Selected machines are merged with this Mac's local Core snapshots in Overview and the Codex, Claude, AntiGravity, and Grok cost/token pages. The choice and the aggregation stay on this Mac. Do not select a Probe that scans the same CLI logs this Mac already scans locally, or those events will be counted twice.
End-to-end encryption and Web freshness
Probe facts are encrypted to the workspace's active Core. The Relay stores ciphertext and cursors on the Relay node; the hosted database stores account, workspace, enrollment, directory, and audit metadata only. Neither service can calculate your usage.
The Web control center currently manages metadata and enrollment. An encrypted Web/iOS usage view is not released yet. When it ships, every browser/iOS device will have its own Core-approved recipient key and decrypt Core-published view snapshots locally. If Core is asleep, Web/iOS must show the last snapshot as stale; there is no hosted plaintext fallback. An always-on, user-owned headless Core is the future option for users who need continuously fresh companion views.
Troubleshooting
The service cannot read a provider source
Re-run the installer with the correct --observe-user, or inspect /etc/systemd/system/vibebar-probe.service.d/10-observed-home.conf. Do not grant the service an entire home directory; keep read-only mounts limited to the documented session roots.
Enrollment says there is no active Core
Open Vibe Bar on the Mac and complete Core enrollment first. Probe must receive the active Core public key from the authenticated Control service; it never trusts a Relay to choose the encryption recipient.
Data stops after a Core replacement
Probe 0.2.x follows authenticated Core-key rotation automatically (normally within five minutes). Confirm the installed version and inspect the journal:
/opt/vibebar-probe/current/vibebar-probe version
journalctl -u vibebar-probe.service -n 100 --no-pagerSee the public Probe repository for its complete security and update design.