SafetyCard Request a review

AGiXT

Self-hosted multi-user AI agent platform with extensions, chains, scheduled tasks, chat-bot integrations and a code-execution sandbox.

github.com/josh-xt/agixt · 2026-10-04 · 3a32024

Defense-in-depth score

2.1 / 10

AGiXT gives every new agent a shell, Python execution, arbitrary outbound HTTP, agent creation and recurring scheduled tasks, all enabled by default and with no human approval step. Code-execution isolation does not cover every execution path. A prompt injection can reach the user's connected-account tokens unattended. Path and SSRF validation on the file and URL tools is solid but easily sidestepped by the raw exec tools.

Safest setup

AGiXT keeps its file and URL tools inside the conversation workspace with solid address checks, records every command before it runs, and adds no third-party extensions by default. Every new agent also gets a shell, Python, outbound HTTP and agent creation with no approval step, so the safest setup trims each agent's commands and builds the boundaries around the deployment yourself.

SetupHowWhat it gives you
Narrowly scoped connected accountsConnect only the accounts this deployment needs, each with the narrowest scopes and repositories the provider offersEvery command receives these tokens, so the provider itself limits what any command can reach C1
A provider spending limitUse a model API key with a spending limit set at the providerA hard ceiling on model spend, which AGiXT does not set by default C10
Only the commands neededIn each agent's command settings, keep enabled only the Core Abilities commands its task uses, leaving terminal, Python, Custom API Endpoint, agent creation and scheduling off unless neededThe agent reaches a shell, outbound HTTP, new agents or recurring tasks only where you chose to give them C3
No extension hubKeep the default empty EXTENSIONS_HUB, or point it at a repository you control and reviewOnly code you have read is imported into the server process C7
Its own VMRun the whole compose deployment inside a dedicated VMThe root server container and the host Docker socket it holds reach only that VM, not your other systems C4
A private, egress-limited networkKeep the VM reachable only by your users, with outbound access limited to the model provider and the services you connectA narrow path for data to leave, whatever the agent reads C5
An off-box command logSubscribe a webhook to command events and store them outside the AGiXT deploymentA record of every command that the agent's own user can't delete C9

Approving with confidence

  • AGiXT has no approval prompt for commands, so the command list you enable for each agent is the review point; check it when you create an agent.

Handling data

  • Command arguments are written into the conversation unredacted, and connected-account tokens are stored unencrypted in the database; protect conversation history and database backups like the accounts themselves.
  • Scheduled tasks keep running after you stop a conversation; review an agent's scheduled tasks when you retire it.

Key gaps (3)

  1. Create AGiXT Agent lets the model enable AI-selected commands on a new agent and a delegation chain on itself, expanding its own reachable permissions. C1 · Identity & least privilege
  2. A hijacked agent can exfiltrate data (Custom API Endpoint, networked shell) and take irreversible actions with no human in the loop. C5 · Untrusted input blast radius
  3. Extensions Hub code, when configured, is cloned unpinned and imported in-process with all server credentials. C7 · Third-party extensions

Criteria

C1 Identity & least privilege

0.07 / 1.00

Agents act with the full authority of the user who owns them. Every command call receives all of the agent's stored settings plus every OAuth access token the user has connected, and the user's GitHub token is placed inside the code sandbox. There is no per-tool credential scoping. The built-in 'Create AGiXT Agent' command lets the model create a new agent, enable AI-chosen commands on it from every configured integration, and then enable a delegation command on itself, so the model can widen what it can reach. The default deployment also mounts the Docker socket into the root AGiXT container.

C2 Approval gates

0.00 / 1.00

There is no human approval step for any command. Once a command is enabled for the agent (and all Core Abilities are enabled by default), the model's tool calls run immediately: shell commands, Python execution, file deletion, arbitrary outbound HTTP requests, scheduling recurring tasks and creating new agents. The only 'approval' in the code is an optional LLM review of the final answer text, which does not gate actions. Actions such as deleting workspace files or POSTing to external APIs have no undo.

C3 Tool & action scoping

0.40 / 1.00

The file tools resolve paths with realpath, check containment in the conversation workspace and reject symlinks, and the URL tools have solid SSRF protection: private, loopback, link-local and cloud-metadata addresses are blocked, DNS is pinned, and redirects are rechecked or disabled. However, the default tool set also includes a raw shell, raw Python execution and a generic HTTP tool, which make those checks easy to sidestep. Every Core Abilities tool is enabled by default for every new agent, including write, exec and network tools.

C4 Code-execution isolation

0.25 / 1.00

Shell and Python commands are sent to the external 'safeexecute' package, which runs them in a Docker container. That package is not in this repository, and the repo's own comments say those sandbox containers run as root. The image is pulled as an unpinned ':latest' tag, and the user's GitHub token is passed in. Not every model-reachable execution path is confined.

C5 Untrusted input blast radius

0.00 / 1.00

Web pages, search results, downloaded files, uploaded documents and integration outputs enter the model's context as plain command output, with no provenance marking, no taint tracking and no rule that disables egress or writes once untrusted content has been read. The same session holds the user's connected accounts, a shell with network access, and a generic HTTP tool, so a successful prompt injection can both exfiltrate data and take irreversible actions without a human. AGiXT is multi-tenant, which raises the stakes further.

C6 Memory, context & configuration integrity

0.10 / 1.00

Agents keep a persistent vector memory (scoped by agent ID), and web-search and browsed content is written into it automatically and retrieved into later prompts. More importantly, the model can create persistent artifacts that later run with tools and with no review: recurring scheduled follow-ups, whose stored description is fed back as a prompt, new automation chains, and new agents. A one-time injection can therefore set up something that keeps running in the user's future sessions. No auto-loaded workspace instruction files were found.

C7 Third-party extensions

0.17 / 1.00

No third-party extensions are enabled by default: the Extensions Hub is empty unless an operator sets EXTENSIONS_HUB, and the model-facing 'Use MCP Server' command is broken at this commit (it calls MCPClient() without its required arguments). When a hub is configured, its repository is re-cloned from the latest default branch with no pin or hash check, and its Python files are imported straight into the server process with every credential that process holds. By default the CLI also auto-pulls the unpinned joshxt/agixt:main and safeexecute:latest images.

C8 Secrets & sensitive-data protection

0.33 / 1.00

There is some redaction. Uvicorn logs pass through a filter for sensitive data, agent settings flagged as sensitive are masked in API responses, and some command-logging paths redact keys. But OAuth access tokens are stored in a plain text database column, the main execution log path writes command arguments without redaction, and the user's GitHub token is placed in the sandbox environment, where any shell command can read it. Shipped deployment defaults for the datastores are not locked down. No telemetry SDK was found.

C9 Audit & traceability

0.50 / 1.00

Each command the agent runs is logged into the conversation, with its name and JSON arguments, before it executes, and webhook events are emitted when commands start, complete or fail. These records sit in the application database, outside the agent's workspace. They are free-form markdown messages, though, with no separate approver or delegation chain. The user (and therefore anything holding the user's token) can delete them through the conversation API, and nothing makes them tamper-evident.

C10 Limits & kill switch

0.25 / 1.00

The main agent loop explicitly has no limit on execution iterations: the code says the agent should take 'as many steps and as much time as needed'. The only caps are on non-executing turns (40 by default) and some per-call timeouts, such as 30 seconds on HTTP calls. Token billing is off by default, so there is no spend ceiling. A stop endpoint cancels the conversation's asyncio task, but synchronous sandbox calls and scheduled recurring tasks keep running.