unix pipeline-aware llm prompt injection
Mods reads stdin and automatically prefixes it with a user-supplied prompt, enabling seamless piping of CLI output through LLM providers without explicit prompt templating. The system detects TTY vs non-TTY input via isInputTTY() checks to determine whether to use interactive or batch processing modes, allowing the same command to work in both interactive shells and scripted pipelines.
Unique: Implements dual-mode input handling (TTY vs non-TTY) via isInputTTY()/isOutputTTY() checks in main.go, allowing the same binary to function as both an interactive REPL and a batch pipeline component without mode flags — most LLM CLIs require explicit flags to switch modes
vs alternatives: Simpler than shell wrapper scripts around API calls because it natively understands Unix conventions; more composable than web-based LLM interfaces because it respects stdin/stdout/stderr semantics
multi-provider llm client abstraction with model resolution
Mods abstracts five LLM providers (OpenAI, Anthropic, Google, Cohere, Ollama) behind a unified streaming interface. The system resolves model identifiers to provider-specific clients via startCompletionCmd() in mods.go, which determines the correct provider based on Config.API and Config.Model, then initializes the appropriate client with streaming enabled. This allows users to switch providers via a single --api flag without code changes.
Unique: Implements provider resolution in startCompletionCmd() (mods.go 276-454) with a unified streaming interface that abstracts provider-specific client initialization, allowing Config.API to determine provider at runtime rather than compile-time — most LLM CLIs hardcode a single provider
vs alternatives: More flexible than LangChain's provider abstraction because it's CLI-first and doesn't require Python/JavaScript; lighter weight than Ollama's web UI because it's a single binary with no server overhead
adaptive terminal capability detection and output formatting
Mods detects terminal capabilities (color support, width, Unicode support) at runtime using termenv and lipgloss libraries, then adapts output formatting accordingly. The system checks for 256-color, truecolor, and monochrome support, and adjusts syntax highlighting, markdown rendering, and ANSI codes based on detected capabilities. This ensures output is readable on basic terminals (e.g., SSH sessions, CI/CD logs) while providing rich formatting on capable terminals.
Unique: Implements runtime terminal capability detection via termenv/lipgloss with adaptive output formatting based on detected color support (256-color, truecolor, monochrome) — most LLM CLIs either hardcode ANSI codes or provide no color support
vs alternatives: More robust than hardcoded ANSI codes because it adapts to terminal capabilities; more user-friendly than --no-color flags because detection is automatic
non-interactive batch processing with piped output
Mods detects non-TTY input/output (via isInputTTY() and isOutputTTY() checks) and automatically switches to batch processing mode, disabling interactive UI elements and streaming directly to stdout. This allows mods to be used in shell scripts, CI/CD pipelines, and data processing workflows where interactive features would interfere with output capture. The system preserves all LLM functionality while adapting presentation for non-interactive contexts.
Unique: Implements automatic TTY detection via isInputTTY()/isOutputTTY() to switch between interactive and batch modes without explicit flags, disabling UI elements in non-TTY contexts — most LLM CLIs require explicit flags to disable interactive features
vs alternatives: More seamless than flag-based mode switching because detection is automatic; more compatible with Unix pipelines because it respects TTY conventions
terminal capability detection and adaptive styling
Detects terminal capabilities (color support, width, height) at startup and adapts rendering accordingly. The system checks for TTY support, terminal color depth, and dimensions, then applies appropriate ANSI styling (colors, bold, underline) based on detected capabilities. If the terminal does not support colors, mods falls back to plain text rendering. Terminal width is used to wrap long lines appropriately.
Unique: Automatically detects terminal capabilities and adapts styling without user configuration, ensuring mods works correctly across diverse terminal environments
vs alternatives: More user-friendly than requiring manual color configuration and more robust than assuming all terminals support colors; automatic detection eliminates configuration burden
cache system for repeated requests and response reuse
Mods implements an internal cache system (referenced in DeepWiki as Cache System) that stores responses to identical requests, enabling response reuse without re-querying the LLM. The cache key is derived from the combined prompt, model, and sampling parameters. When a request matches a cached entry, the cached response is returned immediately without API calls, reducing latency and costs.
Unique: Implements in-memory response caching based on prompt and parameter hash, enabling response reuse for identical requests without API calls. The cache is transparent to users and requires no configuration.
vs alternatives: Reduces API costs and latency for repeated requests without user configuration; most LLM CLIs don't implement caching, requiring users to manually manage response reuse.
real-time streaming response rendering with terminal styling
Mods streams LLM responses token-by-token to the terminal using Bubble Tea (charmbracelet's TUI framework) and applies syntax highlighting, markdown formatting, and ANSI color codes based on detected terminal capabilities. The system uses Terminal Capabilities detection (via lipgloss and termenv) to determine color support (256-color, truecolor, or monochrome) and adapts output formatting accordingly, enabling rich formatting on capable terminals while remaining readable on basic ones.
Unique: Uses Bubble Tea's event-driven model combined with termenv for terminal capability detection to render streaming responses with adaptive styling — most LLM CLIs either buffer entire responses before rendering or use basic printf-style output without capability detection
vs alternatives: More responsive than web-based LLM interfaces because rendering happens locally without network round-trips; more sophisticated than curl-based API calls because it handles terminal capabilities and markdown formatting automatically
sqlite-backed conversation history with message persistence
Mods stores conversation history in a local SQLite database (located at ~/.local/share/mods/mods.db by default) with schema supporting messages, roles (user/assistant), timestamps, and metadata. The Conversation Management system (db.go) allows users to continue previous conversations via the --continue flag, which loads prior message context and appends new user input, enabling multi-turn interactions while maintaining full history for audit and replay purposes.
Unique: Implements conversation persistence via SQLite with automatic schema management in db.go, storing full message history with timestamps and roles, enabling --continue flag to load prior context without re-sending entire conversation to LLM — most LLM CLIs either discard history after each invocation or require manual context management
vs alternatives: More durable than in-memory conversation buffers because data survives process restarts; more lightweight than full chat applications because it uses embedded SQLite rather than external databases
+6 more capabilities