Model or dataset
Guru322/GURU-Ai avatar
Guru322/GURU-Ai

GURU-Ai: a WhatsApp bot you run yourself

SIMPLE YET COMPLICATED 🚩

1,167 stars8,290 forksJavaScriptNOASSERTION

At a glance

What is it?
GURU-Ai is a self-hosted WhatsApp bot built on a Baileys fork, with a pairing-code login and a plugin command system. It is aimed at people who want a personal or group assistant rather than a hosted service, and its documentation is thinner than its feature list suggests.
Who is it for?
Adopt GURU-Ai if you want a self-hosted WhatsApp bot you can extend with files in plugins/, you are comfortable reading index.js and handler.js because the README stops at four commands, and you have a MongoDB URI and a spare phone number for pairing. Do not adopt it if you need a supported product, a documented plugin API, or a bot that survives an unplanned restart without re-pairing.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 153 days ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What GURU-Ai actually is, and who it is for

GURU-Ai is a Node.js application that connects to WhatsApp as a linked device and responds to text commands in chats. The package manifest describes it as "Advanced WhatsApp Ai" and lists keywords such as whatsapp, multi-device, MD and baileys-md, which places it in the family of bots built on the Baileys WhatsApp Web library. The repository topics include ai, automation, chatgpt, openai, qrcode and termux, so the intended audience is fairly broad: someone running a small bot on a phone through Termux, or on a VPS, who wants a command menu rather than a hosted dashboard.

The shape of the project is a single long-running process. index.js is the entry point, server.js serves a small web interface, handler.js routes incoming messages, and plugins/ holds the individual commands. config.js carries values such as bot name, pack name, author, owners list and sticker watermark. That layout is the whole architecture: there is no separate worker, no queue, and no admin API beyond the web page on port 5000.

Who is this for? A person who wants a WhatsApp account to answer with a menu, run utility commands, and be extended by dropping files into a folder. It is not aimed at teams that need role-based access, audit logs, or a support contract.

Pairing by code instead of scanning a QR

Most Baileys-based bots print a QR code that you scan from WhatsApp's Linked Devices screen. GURU-Ai does that differently. The README says that after starting, the bot prints a pairing code, and that you enter it through WhatsApp > Linked Devices > Link a Device > Link with phone number. The web server on port 5000 shows the same pairing code and the connection status, so you can read it from a browser instead of a terminal, which matters when the process runs somewhere you cannot easily see stdout.

The environment variable that drives this is PHONE_NUMBER, described in .env.example as "Your WhatsApp phone number with country code (e.g., 919876543210)". That number is what the pairing code is issued against. If it is wrong or missing, the pairing step has nothing to bind to. The README does not document what happens when a pairing code expires, nor how to force a fresh one, so plan on restarting the process if a code goes stale.

Session state is the other half of this mechanism. MONGODB_URI is required in the configuration block, and the dependency list includes mongodb, which suggests credentials are persisted rather than kept only on disk. The README does not describe the collection layout or a way to revoke a single session, so the practical answer is that a lost session means re-pairing.

Installing GURU-Ai and sending your first command

The README gives a three-line install. Clone the repository, enter the directory, install dependencies:

bash
git clone https://github.com/Guru322/GURU-Ai.git
cd GURU-Ai
npm install

Be aware that package.json declares baileys-pro as "github:nstar-y/bail", a GitHub dependency rather than a registry package. npm install therefore needs network access to GitHub and will resolve whatever that repository's default branch contains at install time. A registry mirror alone will not be enough.

The README then says to create a .env file in the project root or set the environment variables it lists: MONGODB_URI, PHONE_NUMBER, BOTNAME and OWNERS. Note that OWNERS is written as a semicolon-separated list inside quotes, not JSON and not comma-separated. The .env.example file adds PORT with a default of 5000.

Start the process with the script defined in package.json:

bash
npm start

The README also notes that node index.js works. Open http://localhost:5000 to see the pairing code and connection status. Enter the code in WhatsApp under Linked Devices > Link a Device > Link with phone number. Once connected, commands use a dot prefix by default, and the README lists these four:

bash
.ping      # Check bot response time
.menu      # Display command menu and help
.list      # List all available commands
.alive     # Show bot status

If .ping returns a reply, the socket, the handler and the plugin loader are all working. If it does not, the README offers no troubleshooting path, so the next stop is the process log.

Where GURU-Ai stops being the right tool

The README documents four commands. The repository ships a plugins/ directory and a lib/ directory, and .help and .list are said to enumerate everything available, which means the real command surface lives in code rather than in documentation. If you need to know what a command does before enabling it in a group, you are reading source.

The licence field is the second constraint. The repository's LICENSE file and the package.json disagree: package.json states "Apache License 2.0", while the repository metadata reports NOASSERTION, meaning GitHub could not map the licence file to a known identifier. Those two signals pointing in different directions is something to resolve before you redistribute the code or bundle it into a product.

Operationally, this is a linked-device bot. WhatsApp can unlink a device, and nothing in the README describes reconnection handling, session recovery, or what the bot does when the socket drops. A bot that must stay online through network changes needs supervision you add yourself.

Finally, the deployment footprint is a single Node process plus MongoDB. That is cheap, but it also means no horizontal scaling story and no isolation between plugins. A plugin that throws can affect the same process that handles every other command.

GURU-Ai compared with a general bot framework

The closest alternative in approach is a general-purpose bot framework such as a Node.js chat framework where the transport is one adapter among several, and commands are registered through a documented plugin contract. The difference is where the abstraction sits. In a framework of that kind you write against the framework's API and the framework handles the WhatsApp connection. In GURU-Ai the connection is the application: index.js and handler.js own the Baileys socket, and plugins are modules loaded into that same process.

The practical consequence is portability. Code written for a transport-agnostic framework can be pointed at a different messenger by swapping an adapter. A GURU-Ai plugin assumes WhatsApp message shapes and the handler's conventions, so moving it elsewhere means rewriting the parts that touch the message object. The upside is the reverse: because there is no adapter layer, there is less to configure, and the pairing-code flow in server.js is a few dozen lines rather than a plugin.

If your goal is one WhatsApp bot you control, the direct approach is reasonable. If your goal is a bot that might need to live on two platforms in a year, the adapter model is the better bet.

Running GURU-Ai in Docker and what upgrades cost

The Dockerfile does not build from a Node base image. It starts from quay.io/gurusensei/gurubhay:latest, clones the repository into /root/guru, runs npm install --platform=linuxmusl, exposes port 5000, and starts with npm start:

dockerfile
FROM quay.io/gurusensei/gurubhay:latest

RUN git clone https://github.com/Guru322/GURU-Ai /root/guru

WORKDIR /root/guru/

RUN npm install --platform=linuxmusl

EXPOSE 5000

CMD ["npm", "start"]

Two things follow. The base image is a third-party image on quay.io, so the runtime environment is not something you control or audit from this repository. And because the clone happens at build time, the image is pinned to whatever main contained when you built it, not to a release tag.

Upgrade cost is therefore mostly manual. The most recent release listed is GuruBot (GURU-BOT V2.O) from 2023-09-27, which is far behind the current package version of 2.1.0, so releases are not the update channel. There is no documented migration path between versions. The last push to the repository was on 2026-04-15, and there is no stated support window. On the licence side, package.json says Apache License 2.0 while the repository metadata reports NOASSERTION; Apache 2.0 carries patent and attribution terms, but resolving which text actually applies is a question for whoever handles your legal review, not something this article can settle.

Editorial conclusion

Adopt GURU-Ai if you want a self-hosted WhatsApp bot you can extend with files in plugins/, you are comfortable reading index.js and handler.js because the README stops at four commands, and you have a MongoDB URI and a spare phone number for pairing. Do not adopt it if you need a supported product, a documented plugin API, or a bot that survives an unplanned restart without re-pairing. Before committing, check three things: that npm install resolves the baileys-pro dependency from its GitHub source, that your host allows a long-lived outbound socket to WhatsApp, and that the pairing flow in server.js works against your number. The repository's last push was on 2026-04-15, so treat it as a codebase you are taking over, not one you are subscribing to.

Frequently asked questions

What is GURU-Ai?

GURU-Ai is a self-hosted WhatsApp bot written in JavaScript, described in its package manifest as "Advanced WhatsApp Ai". It connects as a linked device, serves a pairing interface on port 5000, and responds to dot-prefixed commands such as .ping and .menu.

Is GURU-Ai free?

The source is public and package.json declares "Apache License 2.0", while the repository metadata reports NOASSERTION because GitHub could not map the licence file to a known identifier. There is no pricing information in the repository, but you supply your own MongoDB instance and a phone number.

How do I install GURU-Ai?

Clone the repository, run npm install, then create a .env file with MONGODB_URI and PHONE_NUMBER. Start it with npm start and open http://localhost:5000 for the pairing code.

Does GURU-Ai need MongoDB?

The README's configuration section lists MONGODB_URI as one of the environment variables to set, and mongodb appears in the dependency list. The README does not describe the schema or any option to run without it.

Which WhatsApp number does GURU-Ai use?

The PHONE_NUMBER variable, defined in .env.example as your WhatsApp phone number with country code, such as 919876543210. The pairing code is issued against that number, and you enter it in WhatsApp under Linked Devices > Link a Device > Link with phone number.

Official sources

  1. Guru322/GURU-Ai on GitHub
  2. Issues
  3. Project website
  4. README
  5. Releases
Community notes

Community notes