Building from source
Toolchain
- Rust stable, via rustup (
rustup.rs). The repository pins thestablechannel withrustfmtandclippyinrust-toolchain.toml; the minimum supported version is 1.85 (edition 2024). - Linux desktop app only: a webview and tray libraries —
Debian/Ubuntu
libwebkit2gtk-4.1-dev libayatana-appindicator3-dev libxdo-dev, Archwebkit2gtk-4.1 libayatana-appindicator xdotool. - The Studio bundle only: the
wasm32-unknown-unknowntarget and the Dioxus CLI (rustup target add wasm32-unknown-unknown,cargo install dioxus-cli), plusjust(github.com/casey/just). - Voice only: a C++ compiler (for
whisper-rs).
Build and run
git clone https://github.com/Aivyx-Agent/aivyx-pa
cd aivyx-pa
cargo build --release # the aivyx-pa binary → target/release/aivyx-pa
./target/release/aivyx-pa init
A plain cargo build or cargo test (no -p) covers the workspace’s
default-members. Two crates are deliberately left out and built
explicitly:
| Crate | Why it’s separate | Build it |
|---|---|---|
aivyx-web |
The Studio — Dioxus, compiled to WebAssembly | just check-web (compile check), just build-web (the bundle) |
aivyx-desktop |
The desktop app — links a system webview | cargo build -p aivyx-desktop --release |
just build-web writes the bundle to crates/aivyx-web/dist/, which the
daemon’s build script embeds. Without it the daemon serves a small fallback
page, so a plain cargo build never needs the wasm toolchain.
Test and lint
cargo clippy --workspace --all-targets -- -D warnings # zero warnings, always
cargo test --workspace
cargo test -p aivyx-core some_test_name # one crate / one test
# Conformance suites for the Python SDK examples (no daemon needed)
python3 -m unittest discover examples/python-channel/tests
python3 -m unittest discover examples/python-tool/tests
Install the pre-commit hook once per clone; it runs the clippy sweep before every commit:
./scripts/install-hooks.sh
A disposable local run
scripts/dev-run.sh builds aivyx-pa and runs it against a local Ollama
with all state under a git-ignored .dev-run/ directory, so experiments
never touch your real assistant:
./scripts/dev-run.sh # debug build, interactive session
./scripts/dev-run.sh --release --reset # release build, fresh state
./scripts/dev-run.sh -- --verify-only # scripted verification pass
Another way to keep a test agent apart is a
named instance:
aivyx-pa instances create scratch.
Generated documentation
Two reference pages are generated from the code; re-run the scripts after changing the config schema or adding a tool, and commit the result:
python3 scripts/gen-config-reference.py > docs/manual/reference/02-configuration.md
python3 scripts/gen-tools-reference.py > docs/manual/reference/03-tools.md
The CLI reference is hand-written, but a test fails if a command in
help.rs has no section in it, and another fails if a guide page in
docs/guide/ isn’t registered in the Studio.