About this project
Fermix is a personal, self-hosted AI agent platform written in Elixir/OTP. It runs as a background daemon on your own machine and reaches you through the chat apps you already use. You bring your own model provider key—there is no Fermix cloud, and your config, history, and logs stay under `~/.fermix`.
**Key features:**
- **One runtime:** Everything is a single Elixir/OTP application in one BEAM VM—no HTTP bridges, external worker pools, or message brokers. Persistent agents, concurrent conversations, and in-process sub-agents all fall out of that design.
- **Reaches you anywhere:** Telegram, WhatsApp, Slack, Discord, Signal, and a local CLI all terminate in the same agent loop. A first-party iPhone companion (mobile channel) is groundwork, dormant behind a config flag until the app is released.
- **Bring your own model:** Seven providers—OpenAI, OpenAI Codex, Anthropic, SpaceXAI, OpenRouter, Mistral, and a keyless local Ollama—chosen as one primary with an automatic fallback chain. Sub-agents and scheduled jobs can be pinned to their own cheaper model.
- **Always on:** Scheduled jobs run digests, watchers, reminders, and checks—each isolated, bounded, stored durably, and delivered back through your channels. Work survives reboots.
- **Self-contained:** Ships as one self-extracting binary per platform and installs an OS service unit on first run.
**Quick start:**
```bash
brew install tezra-io/tap/fermix
fermix setup
```
`fermix setup` installs and starts the background service, then prints the setup URL and opens `http://127.0.0.1:4030/setup` in your browser to finish configuration. On a headless host it runs a terminal wizard instead (`--cli` forces it); `--no-service` configures without installing the service, and `--no-browser` prints the URL instead of opening one.
**Installation:**
- Homebrew (macOS, Linux): `brew install tezra-io/tap/fermix` (requires `cosign` for plugin verification)
- Build from source: Requires Elixir ≥ 1.17, Erlang/OTP 28, and Zig 0.15.2. Clone, `mix deps.get`, compile assets, package with Burrito, install binary, then `fermix setup`.
**Configuration:**
`fermix setup` is the single entry point for first-run configuration. It writes a typed snapshot to `~/.fermix/config.toml` and creates workspace roots (`skills`, `journals`, `realtime`, `traces`, `logs`, `auth.json`). Provider auth modes (API key vs. OAuth), channel setup, and scheduling are covered in the README.
Runtime precedence: compile-time defaults → persisted setup state → environment variable overrides.
Scheduled job delivery can target an explicit per-job target or a cron-specific default channel target in `config.toml`. Transcription of voice notes is pluggable (OpenAI, SpaceXAI, Deepgram).
**Environment variables:**
Credential variables are optional if you use `fermix setup` (which stores secrets in your OS keychain). For headless/container deployments, set `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `XAI_API_KEY`, `OPENROUTER_API_KEY`, `MISTRAL_API_KEY`, plus channel tokens (WhatsApp, Discord, Slack, Signal) and operational knobs like `FERMIX_HOME`, `FERMIX_TRACE_DIR`, `FERMIX_LOG_FILE`, `FERMIX_HTTP_BIND`, and Realtime voice settings.
**Usage:**
- Daemon control: `fermix service install`, `start`, `status`, `ask`, `logs`, `stop`, `restart`, `service uninstall`
- Local voice companion (FermixPet): optional native macOS app that talks to the daemon over a Unix socket; enable via setup page, check with `fermix voice status`
- Channels: Telegram (long-poll), WhatsApp (webhook), Slack (Events API), Discord (Gateway), Signal (`signal-cli`), CLI, and mobile (dormant)
- HTTP endpoints: `/health/live`, `/health/ready`, `/health`, `/setup`, WhatsApp/Slack webhooks
**CLI reference:** Includes `setup`, `auth login`, `run`, `service install/uninstall`, `start/stop/restart`, `status`, `health`, `voice status`, `pair`, `devices list/revoke`, `ask`/`chat`, `sandbox explain`, `grant path`, `revoke path`, `agents`, `capabilities`, `skills`, `plugins`, `memory`, `logs`, `upgrade`, `doctor`, `version`, `help`.
**Channel commands:** `/compact`, `/new`, `/clear`, `/help`, `/whoami`, `/background`, `/tasks`, `/stop`, `/ultra`, `/sandbox`, `/soul`—all work across channels through the shared dispatcher.
**Architecture:**
Umbrella project with four apps: `fermix_core` (agents, providers, tools, memory, setup, CLI, auth, tracing), `fermix_channels` (Telegram, WhatsApp, Slack, Discord, Signal, CLI), `fermix_web` (Phoenix: setup LiveView, health, webhook ingress), and `fermix_nif` (C NIF for process-group signal shim).
Data flow: channel adapter → Dispatcher → MainAgent → capability execution → provider → LLM → reply.
Built-in tools include `shell`, `file_read`, `file_write`, `file_edit`, `glob_search`, `content_search`, `git_read`, `git_write`, `web_fetch`, `web_search`, `place_search`, and `subagents`. Skills are separate, user-installable capabilities with their own instructions and allowed-tool boundaries.
Fermix is in alpha (pre-1.0) status, MIT-licensed, and requires Elixir ≥ 1.17 and Erlang/OTP ≥ 28.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.