Nous is a Windows-focused remote administration tool that lets you control one or more listener PCs from a single host machine using natural-language prompts. A desktop UI (Nous.exe) on the host talks to a Python backend and MySQL database, while lightweight listener agents receive commands and stream results back.
- Natural language control: Type a prompt, generate a command, and send it to remote machines.
- Multiple LLM backends: Switch between Gemini, Groq, or local Ollama by adjusting environment variables and backend provider selection.
- Secure listener registration: Remote machines register via hash codes and certificates (
cert.pem), so only approved listeners receive commands. - MySQL-backed state: IPs and hashes are stored in a MySQL database and refreshed on a countdown timer.
- Desktop UI (host): C# / .NET 9 with Avalonia (
Nous.sln,Nous.exe) - Python services:
- Flask + Flask-CORS API (
api_server.py) - LangChain + FAISS vector database (
backend.py,create_vector_db.py) - Utility scripts and logging (
explainer.py,Utils/Logger.py,Sanitizer.py)
- Flask + Flask-CORS API (
- LLM integrations:
- Google Gemini via
google-generativeai/langchain-google-genai - Groq via the
groqPython SDK - Local Ollama via the
ollamaPython client
- Google Gemini via
- Data & storage:
- MySQL (schema managed by
db_setup.sql,ip_hashtable) - YAML-based knowledge data in
data/(RAG sources)
- MySQL (schema managed by
- Remote listeners:
Listener_v2.1.0(standard)HYPER-Listener_v2.1.0(administrator build)
- Supported providers: Gemini, Groq, Ollama (local).
- Environment variables are defined in
.env(see.env.example). - To change provider, set the relevant API key(s) and update the backend provider selection in
backend.py.
Follow these steps in order to bring up the application end to end.
-
Git clone
git clone <repo-url>
-
Change directory
cd Nous -
Open Visual Studio
Make sure the .NET Desktop Development workload is installed before proceeding. -
Install Python requirements
pip install -r requirements.txt
-
Create the vector database (one time)
python create_vector_db.py
-
Run
dotnet restoredotnet restore
-
Create the
.envfile
Copy.env.exampleto.envand set every environment variable it lists. This is also where you choose your LLM provider (Gemini, Groq, or local Ollama). Provide the matching API key for Gemini or Groq; Ollama runs locally and needs no key. Update the backend’s provider selection to match your choice. -
Create the MySQL database
mysql -u <user> -p -e "CREATE DATABASE nous;"
-
Run the setup script through mysqlsh
From the project directory executemysqlsh --user <user> --host <host> --password --database <db> --sql -f db_setup.sql
Replace the placeholders and enter the password when prompted. This builds the table required by the app.
-
Extract
cert.pem
Grabcert.pemfromListener_v2.1.0orHYPER-Listener_v2.1.0 (administrator version)and place it in the project root. -
Build the Avalonia solution
In Visual Studio (or VS Code with the C# extension) selectNous.slnas the startup item and build the app. -
Prepare the listener PC
On the remote machine extractListener_v2.1.0orHYPER-Listener_v2.1.0 (administrator version)and install itsrequirements.txt:pip install -r requirements.txt
-
Verify connectivity
Ping from host to remote and remote to host. If packets fail, adjust inbound firewall rules or temporarily disable the firewall. -
Launch the host executable
On the host run:Nous\bin\Debug\net9.0\Nous.exe
-
Start the API server
In the UI click Start Server to bring up the Flask API used for database updates. -
Wait for the countdown
The countdown controls when listener hash entries refresh; they update once it hits zero. -
Configure the listener
On the remote PC open the listener in edit mode, enter the host IP plus port, and save. -
Register the listener
Start the listener so it calls the host API and registers its IP addresses in the host database. -
Control access and send commands
- In Access Gate on the host, enter the remote PC’s hash code (add multiple hashes if you manage several machines).
- Enter a prompt, click Generate to build the command, then Send. The remote PC executes the command and returns output to the Access Gate window.
Note: Follow these exact steps to ensure the application runs correctly from host to listener.