Fawx is a local-first agentic engine. It runs on your machine, calls LLMs for reasoning, and executes tasks through a structured loop with built-in safety controls. One binary. Your data stays local. The agent works for you.
1,800+ tests. 34 crates. WASM skill plugins. macOS and iOS apps.
- Local-first — your data never leaves your machine (except to the LLM provider you choose)
- 50+ built-in tools — file editing, shell, git, memory, Python, web browsing, and more
- WASM skill plugins — extend capabilities with sandboxed WebAssembly modules
- Multiple frontends — TUI, HTTP API, macOS/iOS apps, Telegram
- Immutable safety kernel — capability gates, tripwires, and atomic ripcord rollback
- Multi-provider LLM support — Anthropic, OpenAI, OpenRouter, Fireworks, and local models
- Semantic memory — persistent key-value store with embeddings and decay
- Key Features
- Requirements
- Quick Start
- What It Does
- Architecture
- Built-in Tools
- WASM Skills
- LLM Providers
- Security
- Configuration
- Development
- Project Structure
- Roadmap
- Troubleshooting
- Contributing
- License
- Rust (stable) — install via rustup.rs
- macOS (Apple Silicon or Intel) or Linux
- An API key from at least one supported LLM provider
- wasm32-wasip1 target (optional, for building WASM skills) —
rustup target add wasm32-wasip1
# Check prerequisites
rustc --version && cargo --version # requires Rust stable
# Clone and build (first build takes ~2 minutes)
git clone https://github.com/fawxai/fawx.git
cd fawx && cargo build --release
# Configure (interactive wizard)
./target/release/fawx setup
# Run the server
./target/release/fawx serve
# In another terminal, start chatting
./target/release/fawx chat
# Stop the server when you're done
./target/release/fawx stop
# See all available commands
./target/release/fawx --helpTip: Add Fawx to your PATH so
fawxworks from anywhere:echo 'export PATH="$HOME/fawx/target/release:$PATH"' >> ~/.zshrc
Bring your own API key (Anthropic, OpenAI, OpenRouter, Fireworks, or local models). Fawx never sends data anywhere except the LLM provider you choose. You can also connect via the macOS/iOS app, the HTTP API, or Telegram.
cd fawx && git pull && cargo build --releaseYour configuration and data in ~/.fawx/ are preserved across updates.
Fawx runs an agentic loop: the agent reads your files, writes code, runs commands, searches memory, and calls external APIs. The kernel enforces safety boundaries so the agent operates within defined capabilities without per-action consent prompts.
You: "Find all TODO comments and summarize them"
Fawx: [search_text] Searching for TODO patterns...
[read_file] Reading context around matches...
[write_file] Writing summary to docs/todo-summary.md
Found 23 TODOs across 12 files. Summary written to docs/todo-summary.md.
Top areas: error handling (8), test coverage (6), documentation (5).
┌──────────────────────────────────────────────────┐
│ Shells │
│ TUI · HTTP API · macOS/iOS · Telegram │
├──────────────────────────────────────────────────┤
│ Agentic Loop │
│ perceive → plan → act → synthesize │
├──────────────┬───────────────┬────────────────────┤
│ Kernel │ Tools │ Loadable │
│ (safety) │ (50+ builtin) │ (WASM skills) │
│ │ │ │
│ cap gate │ file, shell │ web search, fetch │
│ tripwire │ memory, git │ weather, vision │
│ ripcord │ config, node │ tts, scheduler │
├──────────────┴───────────────┴────────────────────┤
│ LLM Providers · Memory · Embeddings │
│ Claude · OpenAI · OpenRouter · Fireworks │
│ Local (llama.cpp) │
└──────────────────────────────────────────────────┘
The kernel cannot be modified by the agent. It defines the boundaries:
- Capability Gate defines what the agent can and cannot do. Restricted actions get immediate structured denial. No modal prompts, no timeouts.
- Tripwire silently activates monitoring when the agent crosses soft boundaries within its capability space. The agent never knows.
- Ripcord atomically rolls back file and git operations from a tripwire point. Shell and API calls get audit-only treatment.
- Budget Control enforces token and iteration limits to prevent runaway loops.
WASM skills extend Fawx's capabilities. Each skill runs in a sandboxed WebAssembly environment with declared capabilities (network, storage). Skills are hot-reloadable and verified via Ed25519 signatures before loading.
- TUI for terminal users, with markdown rendering and streaming output
- HTTP API with SSE streaming for custom integrations
- macOS and iOS apps (native Swift)
- Telegram and webhook channels for remote access
| Category | Tools |
|---|---|
| Files | read_file, write_file, edit_file, list_directory, search_text |
| Shell | run_command, exec_background, exec_status, exec_kill |
| Memory | memory_write, memory_read, memory_list, memory_delete, memory_search |
| Git | git_status, git_diff, git_checkpoint, git_branch_create, git_branch_switch, git_branch_delete, git_merge, git_revert, git_push, github_pr_create |
| Transactions | begin_transaction, stage_file, commit_transaction, rollback_transaction |
| Scratchpad | scratchpad_add, scratchpad_update, scratchpad_remove, scratchpad_list |
| Journal | journal_write, journal_search, recall_session_context |
| Python | python_run, python_install, python_venvs |
| Scheduler | cron_add, cron_list, cron_get, cron_remove, cron_run, cron_history |
| Config | config_get, config_set, fawx_status, fawx_restart |
| Browser | web_fetch, web_search, web_screenshot |
| Agent | spawn_agent, subagent_status, decompose, self_info, kernel_manifest, update_session_memory, current_time, notify |
Skills are Rust crates compiled to WebAssembly. The recommended local-dev workflow is fawx skill build <project>: it builds the project for wasm32-wasip1, installs it into ~/.fawx/skills/, and signs it when a signing key is present.
Shared skill/host contracts live in fx-protocol, including structured failure classes and HTTP envelopes used when a WASM skill needs to return more than prose across the ABI boundary.
#[no_mangle]
pub extern "C" fn run() {
let input = get_input();
let response = http_request("GET", &url, "", "");
set_output(&result);
}# Recommended local-dev workflow
cargo generate fawxai/skill-template
cd my-skill
fawx skill build .Use the other paths when they match your input:
fawx skill build <project>is the canonical local-dev path for a custom skill project.skills/build.sh --installis the repo maintainer path for the built-inskills/collection.fawx skill install <path>is the artifact path for a prebuilt.wasmfile or skill directory.fawx keys generatecreates a local signing keypair and trusts the matching public key for local verification.fawx sign <skill>signs an already-installed skill when it still needs a signature.
If you generate or trust a key while the server is already running, restart it before expecting the loaded skill state to flip from invalid to valid.
# Prebuilt local artifact
cargo build --release --target wasm32-wasip1
fawx skill install ./target/wasm32-wasip1/release/my_skill.wasm
# Built-in repo skills collection
skills/build.sh --installAvailable skills: web search · web fetch · scheduler · weather · vision · TTS · STT · browser · canvas
| Provider | Auth | Streaming | Tool Use | Thinking |
|---|---|---|---|---|
| Anthropic Claude | API key, setup token | ✓ | ✓ | ✓ |
| OpenAI (GPT, Codex) | API key, OAuth PKCE | ✓ | ✓ | ✓ |
| OpenRouter | API key | ✓ | ✓ | — |
| Fireworks | API key | ✓ | ✓ | ✓ |
| Local (llama.cpp) | None | ✓ | ✓ | — |
Provider fallback with health tracking: if the primary provider fails, Fawx routes to the next healthy provider automatically.
Fawx takes a "boundaries, not checkpoints" approach. The kernel defines what the agent can do and enforces silently. No consent prompts by default.
Capability Gate: Tools operate within declared capability spaces. Restricted actions get immediate structured denial.
Credential Store: AES-256-GCM encryption at rest, per-operation unlock. Credentials are never held in memory longer than needed.
WASM Sandboxing: Skills run in isolated environments. Only declared capabilities are granted. The host API is the sole interface.
Tripwire and Ripcord: Invisible monitoring at soft boundaries, with atomic rollback for reversible operations. The agent operates naturally while the kernel watches.
All configuration lives in ~/.fawx/config.toml:
[llm]
default_provider = "anthropic"
[llm.anthropic]
model = "claude-sonnet-4-20250514"
[server]
host = "127.0.0.1"
port = 8400
data_dir = "~/.fawx/data" # conversations, memory, journals
[memory]
enabled = true
embeddings_enabled = true
[permissions]
mode = "capability" # or "prompt" for per-action approval
preset = "standard" # open, standard, restrictedRun fawx setup for an interactive configuration wizard.
# Run all tests
cargo test --workspace
# Run tests for a single crate
cargo test -p fx-kernel
# Run a specific test by name
cargo test -p fx-tools test_edit_file
# Lint (zero warnings enforced)
cargo clippy --workspace --tests -- -D warnings
# Format
cargo fmt --allSee CONTRIBUTING.md for the full development guide.
fawx/
├── engine/crates/ # Rust crates
│ ├── fx-kernel/ # Loop, capability gate, tripwire, ripcord
│ ├── fx-llm/ # Anthropic, OpenAI, local providers
│ ├── fx-tools/ # Built-in tool implementations
│ ├── fx-loadable/ # WASM skill runtime, hot-reload, signatures
│ ├── fx-memory/ # Key-value store with decay + embeddings
│ ├── fx-auth/ # Credential store, OAuth, setup wizard
│ ├── fx-session/ # Multi-session management
│ ├── fx-journal/ # Reflective memory
│ ├── fx-telemetry/ # Opt-in telemetry with consent persistence
│ ├── fx-api/ # HTTP API, SSE streaming, handlers
│ ├── fx-cli/ # Engine binary, headless mode
│ └── ... # ~24 more crates
├── skills/ # Built-in WASM skill sources
├── app/ # macOS and iOS native app (Swift)
├── docs/ # Architecture, specs, design decisions
└── scripts/ # Build and deployment
See docs/roadmap.html for the full roadmap. Current priorities:
- Open source launch with skill marketplace
- Attachments for images, files, and PDFs in the GUI
- OS-level enforcement via Landlock, seccomp, network namespaces
- Signal flywheel for earned autonomy through behavioral telemetry
| Problem | Fix |
|---|---|
Error: no API key configured |
Run fawx setup or set the key directly in ~/.fawx/config.toml under the provider section. |
Address already in use (port 8400) |
Another Fawx instance is running. Stop it with fawx stop or change the port in config. |
Skill loaded but status: invalid |
The skill is not signed. Run fawx keys generate then fawx sign <skill>, and restart the server. |
wasm32-wasip1 target not found |
Run rustup target add wasm32-wasip1 before building skills. |
| Config changes not taking effect | Restart the server with fawx restart or via the fawx_restart tool. |
Contributions are welcome! Please read CONTRIBUTING.md before submitting a pull request. Run the full test and lint suite before opening a PR:
cargo test --workspace
cargo clippy --workspace --tests -- -D warnings
cargo fmt --all -- --checkBusiness Source License 1.1. Self-hosting for personal and internal business use is always permitted. The license converts to Apache 2.0 on 2030-03-23.
Skills in the fawxai organization are Apache 2.0.