:warning: UNDER HEAVY DEVELOPMENT — DO NOT USE AS THIS COULD BE DANGEROUS SOFTWARE :warning:
This project is in active early development and is not ready for release. APIs, functionality, and behavior may change without notice. Any builds or tagged releases exist purely for testing — they are not to be used in production or any environment where safety is a concern. Use at your own risk.

Fae is a local, private, cross-platform head butler: an orb on your screen backed by a tool-calling brain that runs entirely on your own hardware. She listens, remembers, executes, and improves herself overnight — and nothing leaves your machines.
Fae is not a hugely-capable chatbot. She is a hugely-personalised agent: a modest local model, a deep tool and skill system, a durable memory, and a nightly retraining loop that adapts her to you specifically.
Website: the-fae.com
fae-daemon (in crates/) serves the brain through mistral.rs (Metal/CPU), with a llama.cpp fallback for Vulkan-class hardware — the cross-platform path to Linux and Windows. On macOS the Swift MLX engine remains as fallback and training substrate. Models are swappable details; the butler is the product. you (voice / text)
│
┌──────────────▼───────────────┐
│ Orb — Rust UI shell │ the only product UI:
│ orb · transcript · approval │ breathes while thinking,
│ cards · settings panels │ glows while working
└──────────────┬───────────────┘
│ host bridge
┌──────────────▼───────────────────────────────┐
│ Fae app (Swift, macOS) │
│ push-to-talk capture (hold ⌥ / orb press) │
│ memory (SQLite ANN+FTS5) · scheduler · tools │
│ skills · nightly improvement loop · vault │
└────────┬──────────────────────────┬──────────┘
│ NDJSON / Unix socket │
┌────────▼────────────┐ ┌─────────▼─────────────┐
│ fae-daemon (Rust) │ │ x0x (PQC P2P net) │
│ head-butler brain │ │ ML-DSA-65 identity · │
│ (speech + tools in │ │ your other machines · │
│ one request) · TTS │ │ other agents │
│ mistral.rs primary │ └────────────────────────┘
│ llama.cpp fallback │
│ MLX fallback (mac) │
└─────────────────────┘
Voice in, judgment in the middle, tools out. The daemon owns inference behind a fail-closed control plane (fae-control-plane): capability scopes, per-command authorization, hashed session tokens, audited boundaries. Peer traffic passes a typed envelope gate (fae-envelope-gate) — no free-form peer text ever reaches the LLM, memory, or tools.
Prerequisites: Apple Silicon Mac, Xcode toolchain, just, Rust toolchain (for the orb shell and daemon).
git clone git@github.com:saorsa-labs/fae.git
cd fae
just --list # all recipes
just check # build + test (Swift app)
just check-ui-shell # validate the Rust orb shell
cd crates && just check && cd .. # daemon workspace: fmt + clippy -D warnings + tests
source ~/.secrets && just run-dev # DEV profile: orb host embedded, isolated config/memory
source ~/.secrets && just run-native # production launch
Both run-dev and run-native-with-ui-shell build and embed the Rust orb host into the app bundle. First run downloads models (~8 GB) — the orb shows progress throughout.
To route conversation turns through the Rust daemon brain, enable llm.useDaemonEngine in config. If the daemon is unavailable, Fae fails over to the in-process MLX engine. Which models back each layer is a swappable detail — see docs/guides/model-switching.md.
The brain is deliberately a pattern, not a model: a modest local
tool-calling LLM that hears your speech directly (no separate ASR pass),
reasons, and calls tools in one request — surrounded by the systems that
actually make Fae personal. Specific models are swappable deployment details,
documented in docs/guides/model-switching.md.
| Layer | What runs | Notes |
|---|---|---|
| Brain (primary) | Local audio-capable LLM via fae-daemon + mistral.rs | Speech in, tool calls out — one request; fail-closed models.lock (SHA-256) |
| Brain (portable) | llama.cpp adapter | Fallback for Vulkan-class hardware; the Linux/Windows path |
| Brain (macOS fallback) | MLX text model (Swift) | Also the LoRA training substrate |
| TTS | Kokoro-82M | Served by the Rust daemon (tts.synthesize); Swift MLX fallback |
| Vision | Small local VLMs (MLX) | Presence detection, screen context, on-demand analysis |
~/Library/Application Support/fae/fae.db.~/.fae-vault/ — survives app deletion.Skills are markdown-plus-scripts packages with signed manifests (SHA-256 checksums, schema-versioned). Three lanes:
x0x (../x0x, v0.23.1) is Saorsa Labs' post-quantum agent network. What Fae gets from it:
x0x://agent/… strings anyone can import in one step.This is how Fae becomes a conductor: your Mac, your Linux box, and your homelab become one Fae harness, and your Fae can collaborate with other people's agents under explicit, capability-scoped grants. See docs/architecture/conductor-positioning-and-scope-2026-06-05.md.
models.lock (SHA-256); every daemon command authorized per-capability and audited.| Topic | Where |
|---|---|
| Strategy + cleanup mandate | docs/architecture/great-cleanup-2026-06-11.md |
| Orb-first UI decision | docs/adr/009-rust-orb-ui-shell.md, docs/architecture/butler-ui-redesign-2026-06-05.md |
| Rust daemon (crates/) | crates/README.md, docs/architecture/headless-core-impl-plan-2026-06-01.md |
| Conductor / x0x integration | docs/architecture/conductor-positioning-and-scope-2026-06-05.md |
| Memory system | docs/guides/Memory.md |
| Model selection | docs/guides/model-switching.md |
| Voice-identity retirement | docs/architecture/voice-identity-teardown-plan-2026-06-11.md |
| Self-improvement loop | docs/guides/self-improvement-and-proactive-architecture.md |
| Release validation | docs/checklists/app-release-validation.md |
| ADRs (decision record) | docs/adr/ |
| Superseded docs | docs/archive/ |
| Changelog | docs/CHANGELOG.md |
| Platform | Status | Path |
|---|---|---|
| macOS (Apple Silicon) | Primary, shipping | Swift app + Rust orb shell + Rust daemon |
| Linux / Windows | In progress | fae-daemon + llama.cpp (Vulkan-class hardware); see docs/architecture/cross-platform-go-nogo-2026-06-11.md |
| iOS / iPadOS | Planned | Companion via x0x harness |
1,935 commits
Rust
43.8%
Swift
43.7%
Python
8.1%
C
1.9%
Shell
1.4%
:warning: UNDER HEAVY DEVELOPMENT — DO NOT USE AS THIS COULD BE DANGEROUS SOFTWARE :warning:
This project is in active early development and is not ready for release. APIs, functionality, and behavior may change without notice. Any builds or tagged releases exist purely for testing — they are not to be used in production or any environment where safety is a concern. Use at your own risk.

Fae is a local, private, cross-platform head butler: an orb on your screen backed by a tool-calling brain that runs entirely on your own hardware. She listens, remembers, executes, and improves herself overnight — and nothing leaves your machines.
Fae is not a hugely-capable chatbot. She is a hugely-personalised agent: a modest local model, a deep tool and skill system, a durable memory, and a nightly retraining loop that adapts her to you specifically.
Website: the-fae.com
fae-daemon (in crates/) serves the brain through mistral.rs (Metal/CPU), with a llama.cpp fallback for Vulkan-class hardware — the cross-platform path to Linux and Windows. On macOS the Swift MLX engine remains as fallback and training substrate. Models are swappable details; the butler is the product. you (voice / text)
│
┌──────────────▼───────────────┐
│ Orb — Rust UI shell │ the only product UI:
│ orb · transcript · approval │ breathes while thinking,
│ cards · settings panels │ glows while working
└──────────────┬───────────────┘
│ host bridge
┌──────────────▼───────────────────────────────┐
│ Fae app (Swift, macOS) │
│ push-to-talk capture (hold ⌥ / orb press) │
│ memory (SQLite ANN+FTS5) · scheduler · tools │
│ skills · nightly improvement loop · vault │
└────────┬──────────────────────────┬──────────┘
│ NDJSON / Unix socket │
┌────────▼────────────┐ ┌─────────▼─────────────┐
│ fae-daemon (Rust) │ │ x0x (PQC P2P net) │
│ head-butler brain │ │ ML-DSA-65 identity · │
│ (speech + tools in │ │ your other machines · │
│ one request) · TTS │ │ other agents │
│ mistral.rs primary │ └────────────────────────┘
│ llama.cpp fallback │
│ MLX fallback (mac) │
└─────────────────────┘
Voice in, judgment in the middle, tools out. The daemon owns inference behind a fail-closed control plane (fae-control-plane): capability scopes, per-command authorization, hashed session tokens, audited boundaries. Peer traffic passes a typed envelope gate (fae-envelope-gate) — no free-form peer text ever reaches the LLM, memory, or tools.
Prerequisites: Apple Silicon Mac, Xcode toolchain, just, Rust toolchain (for the orb shell and daemon).
git clone git@github.com:saorsa-labs/fae.git
cd fae
just --list # all recipes
just check # build + test (Swift app)
just check-ui-shell # validate the Rust orb shell
cd crates && just check && cd .. # daemon workspace: fmt + clippy -D warnings + tests
source ~/.secrets && just run-dev # DEV profile: orb host embedded, isolated config/memory
source ~/.secrets && just run-native # production launch
Both run-dev and run-native-with-ui-shell build and embed the Rust orb host into the app bundle. First run downloads models (~8 GB) — the orb shows progress throughout.
To route conversation turns through the Rust daemon brain, enable llm.useDaemonEngine in config. If the daemon is unavailable, Fae fails over to the in-process MLX engine. Which models back each layer is a swappable detail — see docs/guides/model-switching.md.
The brain is deliberately a pattern, not a model: a modest local
tool-calling LLM that hears your speech directly (no separate ASR pass),
reasons, and calls tools in one request — surrounded by the systems that
actually make Fae personal. Specific models are swappable deployment details,
documented in docs/guides/model-switching.md.
| Layer | What runs | Notes |
|---|---|---|
| Brain (primary) | Local audio-capable LLM via fae-daemon + mistral.rs | Speech in, tool calls out — one request; fail-closed models.lock (SHA-256) |
| Brain (portable) | llama.cpp adapter | Fallback for Vulkan-class hardware; the Linux/Windows path |
| Brain (macOS fallback) | MLX text model (Swift) | Also the LoRA training substrate |
| TTS | Kokoro-82M | Served by the Rust daemon (tts.synthesize); Swift MLX fallback |
| Vision | Small local VLMs (MLX) | Presence detection, screen context, on-demand analysis |
~/Library/Application Support/fae/fae.db.~/.fae-vault/ — survives app deletion.Skills are markdown-plus-scripts packages with signed manifests (SHA-256 checksums, schema-versioned). Three lanes:
x0x (../x0x, v0.23.1) is Saorsa Labs' post-quantum agent network. What Fae gets from it:
x0x://agent/… strings anyone can import in one step.This is how Fae becomes a conductor: your Mac, your Linux box, and your homelab become one Fae harness, and your Fae can collaborate with other people's agents under explicit, capability-scoped grants. See docs/architecture/conductor-positioning-and-scope-2026-06-05.md.
models.lock (SHA-256); every daemon command authorized per-capability and audited.| Topic | Where |
|---|---|
| Strategy + cleanup mandate | docs/architecture/great-cleanup-2026-06-11.md |
| Orb-first UI decision | docs/adr/009-rust-orb-ui-shell.md, docs/architecture/butler-ui-redesign-2026-06-05.md |
| Rust daemon (crates/) | crates/README.md, docs/architecture/headless-core-impl-plan-2026-06-01.md |
| Conductor / x0x integration | docs/architecture/conductor-positioning-and-scope-2026-06-05.md |
| Memory system | docs/guides/Memory.md |
| Model selection | docs/guides/model-switching.md |
| Voice-identity retirement | docs/architecture/voice-identity-teardown-plan-2026-06-11.md |
| Self-improvement loop | docs/guides/self-improvement-and-proactive-architecture.md |
| Release validation | docs/checklists/app-release-validation.md |
| ADRs (decision record) | docs/adr/ |
| Superseded docs | docs/archive/ |
| Changelog | docs/CHANGELOG.md |
| Platform | Status | Path |
|---|---|---|
| macOS (Apple Silicon) | Primary, shipping | Swift app + Rust orb shell + Rust daemon |
| Linux / Windows | In progress | fae-daemon + llama.cpp (Vulkan-class hardware); see docs/architecture/cross-platform-go-nogo-2026-06-11.md |
| iOS / iPadOS | Planned | Companion via x0x harness |
1,935 commits
Rust
43.8%
Swift
43.7%
Python
8.1%
C
1.9%
Shell
1.4%