AI Proxy Manager for macOS
A native macOS desktop application for managing AI agent presets and routing requests through a local proxy.
# 1. Download the latest release
# Visit https://github.com/hieuda/aether/releases
# 2. Install Aether.app to Applications folder
# 3. Launch Aether and start the proxy
# Click "Start Proxy" in the Dashboard
# 4. Configure your AI client to use the proxy
# Set proxy URL to: http://localhost:8317That's it! Your AI requests will now be routed through Aether's intelligent proxy.
Aether is a macOS desktop application that provides a graphical interface for managing AI agent presets and provider accounts. It bundles and manages a Go-based proxy sidecar (CLIProxyAPI) that routes AI requests based on configurable presets.
- π― Agent Preset Management β Create, edit, and organize AI agent configurations
- π Provider Account Management β Securely store API keys in macOS Keychain
- π Request Monitoring β Real-time view of proxied requests with detailed logs
- π Local Proxy Server β Bundled Go sidecar runs on port 8317 (configurable)
- π¨ Native macOS UI β Dark glassmorphism design with system tray integration
- π Hot Reload β Automatically detects external config changes
Aether is built with three layers:
- Frontend β SolidJS + Tailwind CSS v4
- Backend β Rust (Tauri v2) with native macOS integrations
- Sidecar β Go binary (CLIProxyAPI) managed as a child process
βββββββββββββββββββββββββββββββββββββββββββ
β SolidJS Frontend (UI) β
β Stores: proxy, preset, account, etc. β
βββββββββββββββββββ¬ββββββββββββββββββββββββ
β Tauri IPC
βββββββββββββββββββΌββββββββββββββββββββββββ
β Rust Backend (Tauri v2) β
β Commands, Config, Keychain, Watcher β
βββββββββββββββββββ¬ββββββββββββββββββββββββ
β stdin/stdout
βββββββββββββββββββΌββββββββββββββββββββββββ
β Go Sidecar (CLIProxyAPI) β
β Proxy Server on localhost:8317 β
βββββββββββββββββββββββββββββββββββββββββββ
For detailed architecture documentation with Mermaid diagrams, see ARCHITECTURE.md.
- macOS 13.0+ (Ventura or later)
- Node.js 18+ and pnpm
- Rust 1.77.2+ (for building from source)
- Xcode Command Line Tools
Download the latest .dmg from Releases and drag Aether to your Applications folder.
The app is not signed with an Apple Developer certificate yet. If macOS blocks the app:
xattr -cr /Applications/Aether.app# Clone the repository
git clone https://github.com/hieuda/aether.git
cd aether
# Install dependencies
pnpm install
# Download the bundled sidecar binary (REQUIRED)
./scripts/download-sidecar.sh
# Run in development mode
pnpm tauri dev
# Build for production
pnpm tauri buildImportant: The
download-sidecar.shscript must be run before any Rust build. The sidecar version is pinned in.cliproxyapi-version.
Aether reads and writes configuration files in ~/.config/aether/:
| File | Purpose |
|---|---|
proxy-config.yaml |
Generated proxy configuration for CLIProxyAPI |
settings.json |
Application settings (port, auto-start, etc.) |
It also reads AI model/provider data from:
~/.config/opencode/opencode.jsonβ Model and provider definitions~/.config/opencode/oh-my-opencode-slim.jsonβ Preset configurations
Note: Config path is
~/.config/aether/(not~/Library/Application Support/) because the Go sidecar's flag parser breaks on spaces in paths.
- Launch Aether from Applications or the menu bar icon
- Click Start Proxy in the Dashboard or Control Panel
- The proxy will start on port 8317 (default, configurable in Settings)
- Navigate to Presets page
- Click Create Preset
- Configure:
- Name and description
- Model selection (provider/model/variant)
- Temperature, max tokens, etc.
- Save
- Navigate to Accounts page
- Click Add Account
- Select provider (OpenAI, Anthropic, etc.)
- Enter API key (stored securely in macOS Keychain)
- Navigate to Monitor page
- View real-time request logs with:
- Timestamp, method, path
- Status code, duration
- Request/response bodies
aether/
βββ src/ # SolidJS frontend
β βββ pages/ # Route pages
β βββ components/ # Reusable components
β βββ stores/ # State management
β βββ styles/ # Tailwind CSS
βββ src-tauri/ # Rust backend
β βββ src/
β β βββ commands/ # Tauri commands
β β βββ config/ # Config management
β β βββ proxy/ # Sidecar lifecycle
β β βββ keychain/ # macOS Keychain integration
β βββ binaries/ # Sidecar binaries (downloaded)
βββ scripts/ # Build and utility scripts
βββ public/ # Static assets
| Task | Command |
|---|---|
| Dev (full app) | pnpm tauri dev |
| Dev (frontend only) | pnpm dev |
| Typecheck | tsc -b |
| Build | pnpm tauri build |
| Bump version | ./scripts/version-bump.sh <version> |
- Frontend: SolidJS 1.9, Tailwind CSS v4, SolidJS Router
- Backend: Rust (Tauri v2), Tokio async runtime
- Sidecar: Go (CLIProxyAPI)
- Build: Vite 6, TypeScript 6.0, esbuild
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- TypeScript/SolidJS: Use SolidJS primitives (
createSignal,createEffect), not React hooks - Rust: Follow Rust 2021 edition conventions, use
anyhow::Resultfor errors - CSS: Tailwind utility-first, custom tokens in
src/styles/app.css
This project is licensed under the MIT License - see the[LICENSE](LICENSE) file for details.
- CLIProxyAPI β Go-based AI proxy server
- Tauri β Rust-based desktop app framework
- SolidJS β Reactive JavaScript library
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Made with β€οΈ for the AI developer community