Skip to main content

A universal, AI-powered CLI chatbot with a beautiful terminal interface, multi-provider LLM support, and an extensible plugin architecture.

Project description

Anythink

Think anything. Ask anything.

CI PyPI Python License: MIT

Anythink is a universal, AI-powered CLI chatbot with a beautiful terminal interface, multi-provider LLM support, and an extensible plugin architecture. Built in Python 3.11+. Installable from PyPI.


Features

  • Multi-provider — Groq, Google Gemini, OpenAI, Anthropic, Mistral, Cohere, Ollama, LM Studio, llama.cpp
  • Rich terminal UI — real-time token streaming, markdown rendering, 4 color themes
  • Model aliases — give your models friendly personal names (google2, groqfast)
  • Session management — auto-save conversations, resume sessions, search history
  • File & image input — attach source files and images to any message
  • Agentic web search — DuckDuckGo (free) or SerpAPI, auto-injects results as context
  • Plugin architecture — extend providers, search backends, and slash commands via PyPI packages
  • Full CLI — manage keys, models, and plugins without entering a chat session

Installation

pip install anythink

Install with a specific provider's SDK:

pip install anythink[groq]       # Groq
pip install anythink[gemini]     # Google Gemini
pip install anythink[openai]     # OpenAI
pip install anythink[anthropic]  # Anthropic
pip install anythink[mistral]    # Mistral
pip install anythink[cohere]     # Cohere
pip install anythink[search]     # DuckDuckGo web search
pip install anythink[all]        # Everything

Quick Start

# First run — set up a provider and model alias
anythink keys add groq
anythink model add          # interactive: alias=mygroq, model=llama3-8b-8192, ctx=8192
anythink                    # start chatting

# Or with a different provider
anythink keys add openai
anythink model add          # alias=gpt4o, provider=openai, model=gpt-4o, ctx=128000
anythink

CLI Reference

Chat

anythink                    # Start interactive chat session
anythink --version          # Show version

Key Management

anythink keys list                  # List configured providers
anythink keys add <provider>        # Add API key (masked prompt)
anythink keys show <provider>       # Show masked key
anythink keys update <provider>     # Replace existing key
anythink keys delete <provider>     # Delete key (--yes to skip confirm)
anythink keys test <provider>       # Validate key with a live API call

Model Aliases

anythink model list                 # Show all aliases in a table
anythink model add                  # Interactive alias creation
anythink model remove <alias>       # Remove alias (--yes to skip confirm)

Plugins

anythink plugins list               # List installed plugins
anythink plugins info <pkg>         # Show plugin details
anythink plugins install <pkg>      # pip install + register
anythink plugins remove <pkg>       # pip uninstall

Slash Commands

Available inside any chat session:

Command Description
/help Show all available commands
/clear Clear conversation history
/history Show recent messages
/tokens Show context window usage
/model Show active provider and model
/persona <name> Activate a saved persona
/persona clear Remove active persona
/session save [name] Save current session
/session load <id> Load a saved session
/session list List saved sessions
/session delete <id> Delete a session
/session rename <id> <name> Rename a session
/file <path> Attach a text file to the next message
/image <path> Attach an image (multimodal models)
/files List pending attachments
/search on Enable auto web search for all messages
/search off Disable auto web search
/search <query> Run a one-off web search
/plugins List installed plugins
/plugins info <name> Show plugin details
/plugins install <pkg> Install a plugin
/plugins remove <pkg> Remove a plugin
/exit or /quit End the session

Configuration

Anythink stores all data under the XDG Base Directory hierarchy:

File / Directory Default Location
Main config ~/.config/anythink/config.yaml
Model aliases ~/.config/anythink/models.yaml
Personas ~/.config/anythink/personas.yaml
Sessions ~/.local/share/anythink/sessions/
Logs ~/.local/state/anythink/logs/

Key config.yaml options:

default_model_alias: mygroq
active_theme: midnight          # midnight | aurora | ember | arctic
web_search_enabled: false
search_provider: duckduckgo     # duckduckgo | serpapi
session_autosave: true

Adding Plugins

Plugins are standard PyPI packages that register entry points in the anythink.* namespace:

# pyproject.toml of your plugin
[project.entry-points."anythink.providers"]
myprovider = "anythink_myprovider:MyProvider"

[project.entry-points."anythink.slash_commands"]
mycommands = "anythink_myprovider.commands:register_commands"

Anythink discovers them automatically on next startup. No core code changes needed.


Development

git clone https://github.com/dhineshtheprogrammer/anythink_ai
cd anythink_ai
pip install -e ".[dev]"

# Lint
ruff check src/
black --check src/ tests/

# Type check
mypy src/anythink

# Tests (80% coverage enforced)
PYTHON_KEYRING_BACKEND=keyrings.alt.file.PlaintextKeyring pytest tests/ -v

# Security scan
bandit -r src/anythink -c pyproject.toml

# Build
python -m build

See CONTRIBUTING.md for contribution guidelines.


License

MIT — see LICENSE for details.

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

anythink-0.1.0.tar.gz (84.7 kB view details)

Uploaded Source

Built Distribution

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

anythink-0.1.0-py3-none-any.whl (54.5 kB view details)

Uploaded Python 3

File details

Details for the file anythink-0.1.0.tar.gz.

File metadata

  • Download URL: anythink-0.1.0.tar.gz
  • Upload date:
  • Size: 84.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for anythink-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b36ead98869d86108f3a0c57266b3034433f5448e44bace38c1f4761c3f9a31d
MD5 fe98e9f6a696cdfcd8fcaa128a36176c
BLAKE2b-256 b9c78486b176c2dae7fc8b86566b0e8940fef29dcfa56773f37a7bfb819c01b3

See more details on using hashes here.

File details

Details for the file anythink-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: anythink-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 54.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for anythink-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c4eb5e2e8b100f550d578bfeb2a102823bd866244e5181f079ee181a9bc6f59d
MD5 e2f4b1364075b6b88f606751c502a0e1
BLAKE2b-256 ede0319bb55ae8cf34629b20b96ea7dc66ec404b1d46cb8e723aaacf0ae59383

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