Modular AI Orchestration System
"Intelligence isn't magic. It's orchestration."
Noetik is a modular, extensible AI orchestration framework designed to bring together reasoning, memory, and tool-use into a single cohesive loop. It coordinates open-source LLMs, vector memory, shell tools, APIs, and user-defined functions to enable intelligent, autonomous action.
- Planner-powered orchestration: Use any LLM (local or remote) to decide what actions to take.
- Tool registry: Define modular tools in Python; auto-discover and invoke them via the planner.
- Memory integration: Chroma/Weaviate/JSON-based memory for stateful reasoning.
- Multi-turn agent loop: Reflect, act, and reason across multiple steps.
- Pluggable components: Swap planners, tools, memory, or executors with minimal friction.
- Client-server architecture: Core logic in API with multiple frontends (CLI, Web UI).
noetik/ # Root project directory
โโโ src/ # Source code root
โ โโโ noetik/ # Main package directory
โ โโโ api/ # Core API backend
โ โ โโโ __init__.py # Package initializer
โ โ โโโ app.py # FastAPI implementation and business logic
โ โ โโโ models.py # Pydantic models for API requests/responses
โ โ
โ โโโ client/ # Frontend clients
โ โ โโโ __init__.py # Package initializer
โ โ โโโ cli.py # Command-line interface client
โ โ โโโ webapp.py # Web UI client interface
โ โ
โ โโโ core/ # Core agent components
โ โ โโโ __init__.py # Package initializer
โ โ โโโ planner.py # Interface with LLMs for planning
โ โ โโโ schema.py # Tool call + planner schemas
โ โ โโโ tool_executor.py # Tool dispatch logic
โ โ
โ โโโ memory/ # Memory and storage capabilities
โ โ โโโ __init__.py # Package initializer
โ โ โโโ memory_store.py # Saving and retrieving agent turns
โ โ โโโ vector_memory.py # Embedding and vector DB interface
โ โ
โ โโโ tools/ # Tool definitions and implementations
โ โ โโโ __init__.py # Tool registry + decorators
โ โ โโโ [additional tool files] # Various tool implementations
โ โ
โ โโโ __init__.py # Package initializer for noetik
โ โโโ common.py # Common utilities (ANSI colors, etc.)
โ โโโ config.py # Centralized settings and environment vars
โ โโโ main.py # Entry point: CLI, API, or Web UI
โ
โโโ tests/ # Test suite
โ โโโ test_tool_executor.py # Tests for tool execution system
โ
โโโ .dockerignore # Files to ignore during Docker build
โโโ .env.template # Template for environment configuration
โโโ .gitignore # Git ignore patterns
โโโ docker-compose.yml # Docker Compose configuration
โโโ Dockerfile # Container definition
โโโ LICENSE # Project license
โโโ pyproject.toml # Python package configuration
โโโ README.md # This documentation
โโโ start.sh # Convenience script for Docker startup
- Docker Engine (20.10.0+)
- Docker Compose (2.0.0+)
- Python 3.11+
- pip package manager
- Required Python packages (installed via Poetry):
- LLM libraries (OpenAI, Anthropic)
- Vector database clients (ChromaDB)
- Web frameworks (FastAPI, Uvicorn)
- Utility libraries (Pydantic, HTTPX)
The Docker setup automatically configures the correct Python version and all dependencies in an isolated environment, which is why it's the recommended approach.
# Clone the repository
$ git clone https://github.com/ecelab-org/noetik.git
$ cd noetik
# Start the container (automatically builds and configures) and run in API mode (default)
$ ./start.sh
# Or run in CLI mode
$ ./start.sh --mode cli
# Or run in Web UI mode
$ ./start.sh --mode web
# For help with options
$ ./start.sh --helpThe start.sh script will:
- Check for Docker and Docker Compose
- Create a
.envfile from the template if needed - Build the container only when dependencies change (faster restarts)
- Start the container in the selected mode (api, cli, or web)
# Clone the repository
$ git clone https://github.com/ecelab-org/noetik.git
$ cd noetik
# Install using Poetry
$ pip install poetry
$ poetry install
# Run the application
$ poetry run python -m noetik.mainNoetik uses environment variables for configuration. Copy .env.template to .env and modify as needed:
cp .env.template .env
# Edit .env with your preferred settings and API keysKey variables include:
API_PORT: The port for the API backend (default: 8000)WEBUI_PORT: The port for the Web UI (default: 8080)PLANNER: Your LLM provider (openai, anthropic, tgi)*_API_KEY: API keys for various services
Noetik follows a client-server architecture, where the API serves as the backend and both CLI and Web UI are clients. All core functionality is implemented in the API, ensuring consistent behavior across interfaces.
Using Docker:
./start.sh --mode cliUsing Python directly:
python -m noetik.main --mode cliExample interaction:
๐ฎ Noetik shell - type 'exit' to quit.
๐ง You: Tell me about the weather
๐ค What location would you like weather information for?
๐ง You: New York
๐ค (fetching weather data...)
Using Docker:
./start.sh --mode webUsing Python directly:
python -m noetik.main --mode webThis starts a web interface accessible at http://localhost:8080 (or the port specified in your .env file).
Using Docker:
./start.sh --mode apiUsing Python directly:
python -m noetik.main --mode apiExample API requests:
Health check:
curl http://localhost:8000/healthCreate a session:
curl -X POST http://localhost:8000/sessionsSend a message:
curl -X POST http://localhost:8000/agent \
-H "Content-Type: application/json" \
-d '{"message": "What is the capital of France?", "session_id": "your-session-id"}'From the Greek noetikos (ฮฝฮฟฮทฯฮนฮบฯฯ), meaning "of the mind or intellect." Noetik is about reasoning. Not just answering questions, but understanding context, reflecting, and acting with memory and tools.
- Port already in use: Change the API_PORT or WEBUI_PORT values in your .env file
- Connection refused: Ensure the container is running properly with
docker ps - Environment variables not working: Check that your .env file is in the project root
- API not responding: When using CLI or Web UI, ensure the API has fully started
This project is licensed under the MIT License - see the LICENSE file for details.
- "Orchestrating intelligence, one decision at a time."
- "Plug in tools. Wire up models. Let Noetik think."
- "Cognitive infrastructure for autonomous AI agents."
Pull requests welcome! Especially for new tools, planner wrappers, and memory backends.
- Run
blackandruffbefore submitting. - Include docstrings and type hints.
- Add your tool to
tools/__init__.pywith@register_tool().
Built with clarity, curiosity, and composability. โจ