Skip to main content

Free, private, async CLI AI tool with multi-provider failover

Project description

aicli-maxmux

A free, private, terminal-native AI CLI with multi-provider failover, persistent memory, web search, vision support, and autonomous agent mode.

No vendor lock-in. No single point of failure. All keys stored encrypted locally.

Features

Feature Command
Multi-provider failover (Groq → OpenRouter → Gemini → Mistral → Ollama) aicli ask "..."
Persistent encrypted conversation memory (SQLite + Fernet) aicli chat --session myproject
Web search with current results aicli ask --web "latest news"
Vision / image analysis aicli ask --image screenshot.png "what error?"
Shell command generation + execution aicli ask --shell "find large files"
Autonomous multi-step agent aicli agent "set up a Python project"
Semantic RAG over chat history aicli chat --context
Session export (Markdown / JSON) aicli export mysession > out.md
Full terminal UI with themes, clipboard, range select aicli tui
Interactive session graph viewer aicli graph
Run generated code in Python / Bash / Node / Ruby aicli ask --code --run --language bash "..."
Plugin system — drop .py files to extend aicli aicli plugin list
Encrypted key storage, no shell exports aicli config set TAVILY_API_KEY tvly-xxxx
Tor / proxy support aicli config set AICLI_PROXY socks5://127.0.0.1:9050

Install

pip install aicli-maxmux

Quick Start

# Set at least one API key
aicli config set-key groq        # fastest — free at console.groq.com
aicli config set-key openrouter  # vision support — free at openrouter.ai

# Ask something
aicli ask "explain async/await in Python"

# Web search (current results)
aicli config set TAVILY_API_KEY tvly-xxxx   # free at app.tavily.com
aicli ask --web "latest Python version"

# Vision
aicli ask --image screenshot.png "what does this error mean?"

# Persistent session
aicli chat --session myproject

# Agent mode
aicli agent "create a Flask API with tests"

Provider Setup

Provider Get Key Env Var Notes
Groq https://console.groq.com/keys GROQ_API_KEY Fastest, free
OpenRouter https://openrouter.ai/keys OPENROUTER_API_KEY Vision, free tier
Gemini https://aistudio.google.com/app/apikey GEMINI_API_KEY Vision, free tier
Mistral https://console.mistral.ai/api-keys MISTRAL_API_KEY Fallback
Ollama (local) Run ollama serve locally
Tavily https://app.tavily.com TAVILY_API_KEY Web search, 1000/mo free

Store keys securely (OS keychain, no shell exports needed):

aicli config set GROQ_API_KEY gsk-xxxx
aicli config set OPENROUTER_API_KEY sk-or-xxxx

Architecture

aicli-maxmux uses a 3-layer CMA (Contextual Memory Architecture):

🔥 Hot Layer   — in-memory context for current session
🌡️ Warm Layer  — SQLite + Fernet encrypted persistent history
❄️ Cold Layer  — ChromaDB vector embeddings for semantic RAG

Provider failover chain: Groq → OpenRouter → Gemini → Mistral → Ollama
Adaptive cooldowns: 429 → 5min, 401/403 → 1hr, 5xx → 10-15s

All Commands

aicli ask "prompt"                    # single shot
aicli ask --shell "prompt"            # generate + execute shell commands
aicli ask --code "prompt"             # code only output
aicli ask --image file.png "prompt"   # vision (OpenRouter/Gemini)
aicli ask --web "prompt"              # web search + answer
aicli ask --web-debug "prompt"        # debug web backends (clean output)
aicli ask --web-debug --web-verbose   # debug web backends (full output)
aicli ask --context "prompt"          # inject semantic context from history
aicli ask --code --run "prompt"       # generate + run code (Python default)
aicli ask --code --run --language bash "prompt"   # run as bash
aicli ask --code --run --language node "prompt"   # run as node.js
aicli ask --code --run --timeout 60 "prompt"      # custom timeout (seconds)

aicli chat --session NAME             # persistent conversation
aicli repl                            # interactive REPL
aicli agent "task"                    # autonomous multi-step execution
aicli agent --dry-run "task"          # show plan without executing

aicli export SESSION > out.md         # export to markdown
aicli export SESSION --format json    # export to JSON

aicli config set KEY VALUE            # store any key encrypted
aicli config get KEY                  # read stored key (masked)
aicli config set-key PROVIDER         # interactive key entry
aicli config show                     # show all config + env vars
aicli config keys                     # show which providers have keys

aicli provider status                 # show provider availability
aicli provider test groq              # test a specific provider
aicli session list                    # list all sessions
aicli session show NAME               # show session messages
aicli session delete NAME             # delete a session
aicli index PATH                      # index files for RAG

aicli graph                           # session graph viewer (browser)
aicli graph --port 8080               # custom port
aicli graph --no-browser              # no auto-open

aicli plugin list                     # list installed plugins
aicli plugin run NAME ARG             # run a plugin
aicli plugin install URL              # install plugin from URL
aicli plugin doc NAME                 # show plugin details
aicli plugin errors                   # show load errors

./start.sh                            # open TUI + graph together

Terminal UI (TUI)

aicli tui                        # open TUI
aicli tui --session myproject    # open specific session
aicli tui --no-history           # open without loading past messages

TUI Keyboard Shortcuts

Key Action
F1 Help overlay
F2 Range select (click start → click end → Ctrl+Y)
F3 Cycle theme (Tokyo Night / Dracula / Gruvbox / Nord / Solarized)
F4 Export session to timestamped .md + .json
F5 Import latest exported session JSON into current session
F6 Sync all data to exports folder
F7 Open graph viewer in browser
Ctrl+N New session
Ctrl+D Delete session (or bulk)
Ctrl+K Pin / unpin session
Ctrl+B Toggle bulk select mode
Ctrl+E Export to markdown (single or bulk)
Ctrl+J Backup all sessions to JSON
Ctrl+I Import from most recent backup
Ctrl+W Toggle web search
Ctrl+X Toggle RAG context
Ctrl+S Summarize current session
Ctrl+Y Copy message to clipboard
Ctrl+R Copy typed range (e.g. type 3-7 then Ctrl+R)
Ctrl+O Open exports folder
Ctrl+9 Settings (export path + hotkey remapping)
Ctrl+Q Quit
Esc Clear range select

Requires: pip install textual

Session Graph

aicli graph                  # start graph server + open browser
aicli graph --port 8080      # custom port
aicli graph --no-browser     # headless use

An interactive D3 force-directed graph that auto-loads all your exported sessions as nodes. Create links between sessions, add notes, and explore connections.

Browser shortcuts: L link mode · R reload · Esc cancel · double-click to edit · hover link + click to delete

Sessions exported via F4 in the TUI appear automatically on next reload.

Quick Launch

Open TUI and graph side by side in one command:

./start.sh

Auto-detects your terminal emulator (kitty, alacritty, gnome-terminal, xterm).

Web Search

--web uses a 6-backend chain — no API key required for the free tier:

  1. Tavily — AI-optimised, most accurate (set TAVILY_API_KEY for best results)
  2. SearXNG — public instances, rotated (skipped automatically over Tor)
  3. DuckDuckGo — Instant Answer JSON API
  4. DuckDuckGo lite — HTML scrape with cookie jar
  5. Bing — scrape with rotating User-Agent
  6. Mojeek — independent engine, scrape-friendly fallback

Tor/proxy support works out of the box — Tavily is used as the primary backend over SOCKS5.

Privacy & Security

  • All conversation history encrypted with Fernet (AES-128-CBC)
  • Keys derived from machine fingerprint (hostname + username) — no master password needed
  • API keys stored in OS keychain (libsecret / keychain) and encrypted Fernet file as fallback
  • No telemetry, no cloud sync, no ads
  • Tor/proxy support: aicli config set AICLI_PROXY socks5://127.0.0.1:9050

Requirements

  • Python 3.10+
  • Optional: pip install textual for TUI (aicli tui)
  • Optional: pip install pysocks for Tor/SOCKS5 support
  • Optional: sudo apt install xclip for TUI clipboard on Linux (Ctrl+Y)

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aicli_maxmux-1.4.0.tar.gz (12.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aicli_maxmux-1.4.0-py3-none-any.whl (102.1 kB view details)

Uploaded Python 3

File details

Details for the file aicli_maxmux-1.4.0.tar.gz.

File metadata

  • Download URL: aicli_maxmux-1.4.0.tar.gz
  • Upload date:
  • Size: 12.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for aicli_maxmux-1.4.0.tar.gz
Algorithm Hash digest
SHA256 e7162a33b44410b8e7003b18d54bef636f8d31722984a79788f4f804c8b81688
MD5 0f7d445985daff7998ec29c08304d0a2
BLAKE2b-256 61ec4f73bb55b18a7eb196d31ed705d7eaedbb2daf78fc99bdd1a534245d3da9

See more details on using hashes here.

File details

Details for the file aicli_maxmux-1.4.0-py3-none-any.whl.

File metadata

  • Download URL: aicli_maxmux-1.4.0-py3-none-any.whl
  • Upload date:
  • Size: 102.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for aicli_maxmux-1.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e72bd84662b8445719885ff5ce6a28911292a00acb842c3438bf74ec752f9638
MD5 5b6848e4e5ea9c5fcbdfc969b5bd6bd0
BLAKE2b-256 2f8bb623f6f7d5fe85d1185ebf6c7d3b0fbc16177dd83e02454e315ffb7aa994

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page