An advanced, highly customizable terminal-based chat application for interacting with LLMs
Project description
Kollabor
An advanced, highly customizable terminal-based chat application for interacting with Large Language Models (LLMs). Built with a powerful plugin system and comprehensive hook architecture for complete customization.
Install: pip install kollabor
Run: kollab
Features
- Event-Driven Architecture: Everything has hooks - every action triggers customizable hooks that plugins can attach to
- Advanced Plugin System: Dynamic plugin discovery and loading with comprehensive SDK
- Rich Terminal UI: Beautiful terminal rendering with status areas, visual effects, and modal overlays
- Conversation Management: Persistent conversation history with full logging support
- Model Context Protocol (MCP): Built-in support for MCP integration
- Tool Execution: Function calling and tool execution capabilities
- Pipe Mode: Non-interactive mode for scripting and automation
- Extensible Configuration: Flexible configuration system with plugin integration
- Async/Await Throughout: Modern Python async patterns for responsive performance
Installation
From PyPI
pip install kollabor
From Source
git clone https://github.com/malmazan/kollabor-cli.git
cd kollabor-cli
pip install -e .
Development Installation
pip install -e ".[dev]"
Quick Start
Interactive Mode
Simply run the CLI to start an interactive chat session:
kollab
Pipe Mode
Process a single query and exit:
# Direct query
kollab "What is the capital of France?"
# From stdin
echo "Explain quantum computing" | kollab -p
# From file
cat document.txt | kollab -p
# With custom timeout
kollab --timeout 5min "Complex analysis task"
Configuration
On first run, Kollabor creates a .kollabor directory in your current working directory:
.kollabor/
├── config.json # User configuration
├── logs/ # Application logs
└── state.db # Persistent state
Configuration Options
The configuration system uses dot notation:
core.llm.*- LLM service settingsterminal.*- Terminal rendering optionsapplication.*- Application metadata
Architecture
Kollabor follows a modular, event-driven architecture:
Core Components
- Application Core (
core/application.py): Main orchestrator - Event System (
core/events/): Central event bus with hook system - LLM Services (
core/llm/): API communication, conversation management, tool execution - I/O System (
core/io/): Terminal rendering, input handling, visual effects - Plugin System (
core/plugins/): Dynamic plugin discovery and loading - Configuration (
core/config/): Flexible configuration management - Storage (
core/storage/): State management and persistence
Plugin Development
Create custom plugins by inheriting from base plugin classes:
from core.plugins import BasePlugin
from core.events import EventType
class MyPlugin(BasePlugin):
def register_hooks(self):
"""Register plugin hooks."""
self.event_bus.register_hook(
EventType.PRE_USER_INPUT,
self.on_user_input,
priority=HookPriority.NORMAL
)
async def on_user_input(self, context):
"""Process user input before it's sent to the LLM."""
# Your custom logic here
return context
def get_status_line(self):
"""Provide status information for the status bar."""
return "MyPlugin: Active"
Hook System
The comprehensive hook system allows plugins to intercept and modify behavior at every stage:
pre_user_input- Before processing user inputpre_api_request- Before API calls to LLMpost_api_response- After receiving LLM responsespre_message_display- Before displaying messagespost_message_display- After displaying messages- And many more...
Project Structure
kollabor/
├── core/ # Core application modules
│ ├── application.py # Main orchestrator
│ ├── config/ # Configuration management
│ ├── events/ # Event bus and hooks
│ ├── io/ # Terminal I/O
│ ├── llm/ # LLM services
│ ├── plugins/ # Plugin system
│ └── storage/ # State management
├── plugins/ # Plugin implementations
├── docs/ # Documentation
├── tests/ # Test suite
└── main.py # Application entry point
Development
Running Tests
# All tests
python tests/run_tests.py
# Specific test file
python -m unittest tests.test_llm_plugin
# Individual test case
python -m unittest tests.test_llm_plugin.TestLLMPlugin.test_thinking_tags_removal
Code Quality
# Format code
python -m black core/ plugins/ tests/ main.py
# Type checking
python -m mypy core/ plugins/
# Linting
python -m flake8 core/ plugins/ tests/ main.py --max-line-length=88
# Clean up cache files and build artifacts
python scripts/clean.py
Requirements
- Python 3.12 or higher
- aiohttp 3.8.0 or higher
License
MIT License - see LICENSE file for details
Contributing
Contributions are welcome! Please see the documentation for development guidelines.
Links
Acknowledgments
Built with modern Python async/await patterns and designed for extensibility and customization.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kollabor-0.4.4.tar.gz.
File metadata
- Download URL: kollabor-0.4.4.tar.gz
- Upload date:
- Size: 806.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ffba19b094d6651ebc928582030f3adcc980bb36ec224219994dcfc7804be20
|
|
| MD5 |
fd9d650e2a50cd1d8ce70ffcef9bf0db
|
|
| BLAKE2b-256 |
93c857fd2f8fb7734e9e93fece9e5680227bf143a7c336f5264b2a8b30d8e017
|
File details
Details for the file kollabor-0.4.4-py3-none-any.whl.
File metadata
- Download URL: kollabor-0.4.4-py3-none-any.whl
- Upload date:
- Size: 336.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ee6f9191431ef026369be164702013931b3b7a4191d829cee884a0fe404d4b2
|
|
| MD5 |
20d3e3ebce53698158ae780faea5dc6b
|
|
| BLAKE2b-256 |
51a09f56073ebdf8abec30c9c015b42d95dcf56988fb3206710a49a64f9b219a
|