Security
Credentials, HTTPS, sign-in and network exposure of a PentAGI installation.
Change the defaults
A fresh installation creates the local administrator [email protected] with the password admin, which must be changed at first sign-in. If the password is lost, the installer's maintenance menu resets it as long as the account still uses the [email protected] address.
Set these values in .env before the first start; the installer generates the salt and the passwords for you. PostgreSQL and Neo4j take their credentials only when they create their data volumes, so changing them later breaks the connection:
| Variable | Purpose |
|---|---|
COOKIE_ | Signs session cookies and API tokens — set a random value |
PENTAGI_, PENTAGI_ | PostgreSQL credentials |
NEO4J_ | Neo4j password for the knowledge graphknowledge graphThe graph of hosts, services, vulnerabilities and the access between them that PentAGI builds during a test when this optional feature is enabled. It shows how findings connect.; NEO4J_ must stay neo4j |
PUBLIC_ | The URL users open, for example https:/ |
On a running installation, change a database password inside PostgreSQL or Neo4j first, then in .env.
HTTPS
PentAGI serves HTTPS on port 8443 with a self-signed certificate. To use your own, set SERVER_ and SERVER_ and mount the files in docker-compose.yml.
Users and sign-in
There is no sign-up form. Administrators manage local users through the Users API (/) from a signed-in browser session — an API token gets 403 there — and roles restrict what each user can see and change. Local users change their own email and password under Settings → Account.
With GitHub or Google sign-in configured, a login whose provider-verified email matches an existing account, local accounts included, signs into that account with its role; any other login gets a new account with the default user role. Every installation starts with the administrator [email protected], so move it to an address you control under Settings → Account before you enable sign-in, and enable it only where new accounts are acceptable, for example with a Google Workspace app limited to your domain.
GitHub and Google sign-in are available through OAuth. Register an app with the callback ${PUBLIC_ and add its credentials:
PUBLIC_URL=https://pentagi.example.com
OAUTH_GITHUB_CLIENT_ID=your_github_client_id
OAUTH_GITHUB_CLIENT_SECRET=your_github_client_secretNetwork exposure
By default the PentAGI web interface listens on 127.0.0.1 only. To reach it from other machines:
PENTAGI_LISTEN_IP=0.0.0.0
PENTAGI_LISTEN_PORT=8443
PUBLIC_URL=https://192.168.1.100:8443
CORS_ORIGINS=https://localhost:8443,https://192.168.1.100:8443Use the real address in PUBLIC_ and CORS_, never 0.0.0.0. Recreate the containers with docker compose up -d --force-recreate and open port 8443 in the firewall.
Behind a reverse proxy, set TRUSTED_ to the proxy's address or CIDR, comma-separated. Otherwise every request seems to come from the proxy, and the sign-in limit per address — 30 failed attempts in five minutes, then a 15-minute lockout — is shared by all users.
Each flowflowOne run of PentAGI: a goal, the tasks created from your messages, and everything the agents did along the way.'s sandboxsandboxThe isolated Docker container in which agents run their tools. The interface shows it as Terminal. container also publishes two ports for out-of-band callbacks, such as reverse shells. They come from the 2000 ports that start at DOCKER_ (default 28000) and are bound to DOCKER_, the address the agentsagentAn AI agent of PentAGI: a model with its own prompt, settings and tools that does one kind of work in a flow, such as testing, writing code or searching the web. also give targets to call back to.
By default DOCKER_ is 0.0.0.0: the ports listen on every interface of the Docker host, and the agents look up their public address themselves. Set it to a specific address only if the host owns that address and the targets can reach it; behind NAT, keep the default. Ports that Docker publishes bypass ufw and firewalld rules on the host, so restrict the range with a firewall in front of the host, such as a cloud security group, or with rules in Docker's DOCKER-USER chain.
PROXY_ routes the backend's calls to model providers, the embedding provider, search APIs and the update check through a proxy, which helps isolate the installation from external networks. Self-hosted endpoints such as Ollama, vLLM or SearXNG go through it too, as there is no NO_ exception, so the proxy must be able to reach them. The flows' sandbox containers, where the agents run their commands, the scraper, which opens web pages for the browser tooltoolWhat an agent acts through: a built-in capability such as the terminal, the isolated browser or web search, or a program in the sandbox such as nmap, metasploit or sqlmap., and the Graphiti service do not use it, so restrict their outbound traffic at the network level. Sign-in with GitHub or Google and calls to a Langfuse or OpenTelemetry endpoint outside the bundled stacks do not use it either, and the Docker daemon pulls images with its own proxy settings.
Update check
Within two minutes of starting and then every three hours, the server asks update.pentagi.com whether a newer build is available. The request carries the installation ID, the license key if one is set, the version and platform, and a summary of the installation: the configured provider and sign-in types, a few feature switches, counts of users, flows, taskstaskOne request in a flow: its first message, or a later message that does not answer an agent's question. PentAGI splits each task into subtasks., containers, prompts, API tokens and tool callstool callA request from the model to run one of the agent's tools, such as a terminal command or a web search., and token and cost totals per provider type — no names, addresses, prompts or flow content. UPDATE_ turns it off. Each time the installer starts and after each action it runs, such as Apply Changes, Update, Start or Stop, it sends the installed images and the state of each stack, plus the same summary while PentAGI is running; UPDATE_ does not affect it.
The pentagi container runs as root because it manages containers through the Docker socket. For stronger isolation, run the tools on a separate worker node.
Last updated on