The Problem
Teams building AI‑driven agents need a self‑hosted runtime that can orchestrate LLM calls, manage plugins, and expose a UI without pulling in external SaaS. Maintaining such a stack locally is error‑prone: dozens of plugins, a mixed Vue/React front‑end, and a Node backend that talks to databases, files, and external APIs.
What This Does
The AGNT repo delivers a full‑stack “AI Agent Operating System”.
- The backend (
backend/) is a Node/Express service that loads plugins frombackend/plugins/. Core services live underbackend/src/– e.g.backend/src/services/ai/LlmService.js(LLM orchestration) andbackend/src/tools/library/BaseAction.js(common action base). - The frontend (
frontend/) is a Vue 3 SPA compiled intofrontend/index.html. UI components such asfrontend/src/views/Terminal/CenterPanel/screens/Agents/Agents.vuerender agents, workflows, and plugin marketplaces. - Plugins are plain Node modules (
backend/plugins/dev/*) each exposing a manifest (manifest.json) and entry point (e.g.backend/plugins/dev/ethereum-price-checker/index.js). The marketplace bundles pre‑built.agntfiles underbackend/plugins/marketplace-default/.
How It Is Wired
Execution starts in backend/server.js (line 269 → deferredInit). The server:
- Calls
deferredInit → bootstrapBuiltinSkills→ creates plugin directories (fs.mkdir). - Registers routes from
backend/src/routes/Middleware.js(29 inbound modules). - Instantiates
BaseAction(backend/src/tools/library/BaseAction.js), the most‑connected hub (48 importers, instability 0.02). - Plugin loading walks
backend/plugins/build-all-plugins.js, which usesPluginManager(backend/src/plugins/PluginManager.js) – part of a circular import withbackend/src/models/database/index.jsandbackend/src/models/WebhookModel.js. Breaking this cycle would reduce build‑time coupling. - When a plugin like Ethereum‑price‑checker runs, its
executefunction (entrybackend/plugins/dev/ethereum-price-checker/index.js:14) callsgetValidAccessToken→axios.get(network). The shortest outbound path isexecute → getValidAccessToken → axios.get.
The internal call graph shows a few high‑fan‑out functions: fetch (268 callers), getItem (173), dispatch (122). These are defined in utility libraries and are called from many places, so changes ripple widely.
Large files (backend/src/models/database/index.js, backend/src/services/ai/providerConfigs.js, backend/src/services/auth/AuthManager.js) exceed 900 lines, making them hard to review.
The front‑end’s Vue components (Agents.vue, Connectors.vue) contain deep nesting (indentation depth 6) and high branching density (≈ 0.33 branches per line), which hampers readability.
How To Use It
# Clone (preserve the exact URL)
git clone https://github.com/moses-y/agnt.git
cd agnt
# Install Node deps (lockfile present)
npm ci # respects package-lock.json
# Prepare environment – copy the example and fill secrets
cp backend/.env.example backend/.env
# edit backend/.env with real JWT_SECRET, SESSION_SECRET, etc.
# Run the server locally
npm run dev # defined in backend/package.json (starts backend/server.js)
# Build and run the UI (Vue)
cd frontend
npm ci
npm run serve # serves index.html on localhost:8080
# Or spin up the full stack with Docker (Dockerfile provided)
docker build -t agnt:latest -f Dockerfile .
docker run -p 3000:3000 -p 8080:8080 --env-file backend/.env agnt:latest
If Docker is preferred, the Makefile offers make docker-build and make docker-run targets (verify in the file). No test step is present in the CI workflow; add npm test after installing dev dependencies.
Real‑World Use
A SaaS provider can embed AGNT to let customers run custom data‑extraction agents on‑premises. A CI pipeline would docker build, mount a customer‑specific .env, and expose the UI at /agents. The provider can ship new plugins as .agnt files placed in backend/plugins/marketplace-default/ without touching core code.
Code Health & Issues
Measured static findings (258 total)
- Import cycles (12 modules) – e.g.
backend/src/models/database/index.js↔PluginManager.js. - Oversized files (9 > 900 LOC) –
BaseAction.js,AuthManager.js. - Hub modules (10) –
BaseAction.js,AuthManager.jshave > 40 dependents. - High branching density (21 files) –
Middleware.js,LlmService.js. - Deep nesting (7 files) –
Agents.vue,Connectors.vue. - Duplicated code blocks (≈ 16 k lines across 410 files) – Discord/Dropbox API helpers.
Code‑Health audit
- Critical – Rotate and remove committed credentials in
backend/.env. - High – Untrack
.env(already in.gitignore); pin GitHub Actions to commit SHAs; remove the.envfrom history and replace with an example; add a test step to CI. - Medium – Enable Dependabot/Renovate; use
npm ciin CI; pin Docker base image by digest; add a dependency‑vulnerability scan gate; install a pre‑commit secret scanner.
No license violations, but the repository ships a custom license file; verify compatibility for downstream use.
The Bottom Line
AGNT provides a complete, extensible AI‑agent runtime with a ready‑made UI and plugin ecosystem, but the codebase suffers from large, tightly coupled modules, committed secrets, and incomplete CI testing. It is suitable for teams that need a self‑hosted platform and are prepared to invest in refactoring, secret management, and CI hardening.