AI Frontier Post
Tutorials

Run an autonomous AI pentest in your own lab: a hands-on guide to ARTEX

Penetration testing is expensive, scarce, and — for most teams — something that happens once a year, if that. A new open-source project asks a provocative question: what if an AI could carry a pentest from reconnaissance to report on its own? ARTEX Global Edition is exactly that — an autonomous, LLM-driven penetration-testing system (around 1,560 GitHub stars in its first two weeks) that breaks a goal into tasks, runs real tools, and accumulates findings into a graph. This guide deploys it with Docker Compose, clears the first-run setup, aims it at a deliberately vulnerable target in your own lab, and shows you the defender-side material it ships with — with the legal lines drawn in permanent marker.

TL;DR: ARTEX Global Edition is an open-source, AGPL-3.0 system that lets LLM agents autonomously run a penetration test: a planner breaks the goal into tasks, workers execute real tools like nmap, and findings accumulate into an asset graph. It deploys with one docker compose up -d, needs an LLM API key, and must only be aimed at targets you own — deliberately vulnerable lab apps like OWASP Juice Shop are the right playground.
  • What: ARTEX Global Edition — an autonomous penetration-testing system driven by LLM multi-agents (Go backend, Next.js frontend, PostgreSQL store).
  • Who: jiwoochris/artex-global — a localized fork of the Chinese upstream Autumn-27/ARTEX (AGPL-3.0); the upstream repository was unreachable as of October 2026.
  • Traction: created October 3, 2026; around 1,560 GitHub stars within its first two weeks (checked October 16, 2026).
  • Deploy: one Docker Compose stack; UI at http://localhost:8787; image ghcr.io/jiwoochris/artex-global; first run requires a setup token from the startup log.
  • Brain: needs an LLM — ANTHROPIC_API_KEY or OPENAI_API_KEY (env or UI); default model claude-opus-4-8; three worker agents per task by default.
  • Legal line: only targets you own or have explicit written authorization for; unauthorized scanning or intrusion is a crime.
Authorized use only. ARTEX is an autonomous offensive tool — it can carry an attack from reconnaissance to exfiltration with little human involvement. Run it only against systems you own or have explicit written authorization for: deliberately vulnerable targets such as OWASP Juice Shop or DVWA, in a locally isolated environment. Unauthorized scanning, probing, or intrusion is a crime on its own. This guide is written from the defender’s point of view: understand the attack so you can detect and block it.

What you’ll need

  • A machine with Docker and Docker Compose installed — that’s the only hard requirement. PostgreSQL comes up with the stack.
  • An LLM API key — Anthropic or OpenAI. The README is explicit: exploration requires an LLM; you can set the key in .env or later in the UI.
  • A browser, and about 20 minutes.

What you are deploying: a single Go binary (with the Next.js frontend embedded) plus PostgreSQL, from the image ghcr.io/jiwoochris/artex-global. The image bundles common tools — ripgrep, curl, vim, npm, nmap — and the ./skills and ./data directories are bind-mounted so they survive container recreation.

Step 1: Clone and configure

Grab the repository and copy the example environment file. The one variable you must set is POSTGRES_PASSWORD; the LLM key is optional here (you can add it in the UI later).

git clone https://github.com/jiwoochris/artex-global.git
cd artex-global
cp .env.example .env          # set POSTGRES_PASSWORD; ANTHROPIC_API_KEY is optional
# Edit .env with your editor: POSTGRES_PASSWORD=

Pin a release instead of floating on latest with ARTEX_TAG in .env if you want reproducible runs.

Step 2: Bring up the stack

docker compose up -d          # brings up the artex image + postgres together
# → open http://localhost:8787

Both the frontend and the API live on the same backend port, :8787, and by default it binds 127.0.0.1 only — loopback, not your LAN. That’s a deliberate first-run protection (more in Step 3). If you ever need it reachable from other machines, pass -addr :8787 or set ARTEX_BIND=0.0.0.0 — but finish the initial setup first.

Dark terminal window showing network scan output
The bundled image ships with real tools — nmap, ripgrep, curl — that the worker agents execute during a run. Illustration: AI Frontier Post.

Step 3: Clear the first-run setup

The first time you visit http://localhost:8787, you land on /setup, which asks you to create the single admin account (ARTEX). To stop whoever reaches an uninitialized instance first from claiming it, the page also demands a setup token that the server printed once at startup:

docker compose logs artex | grep -F '[auth]'
# copy the Setup token, paste it at /setup, set your admin password

For unattended deployments you can pin it with ARTEX_SETUP_TOKEN or set the password directly with ARTEX_ADMIN_PASSWORD (8+ characters). Changing the password invalidates every existing session within seconds — the token signing key is bound to the password hash.

Step 4: Put a deliberately vulnerable target in your own lab

ARTEX may only ever be aimed at systems you own. The right playground is a deliberately vulnerable app, run locally. OWASP Juice Shop fits — it’s the example the README itself names, alongside DVWA:

docker run -d --name juice-shop -p 3000:3000 bkimminich/juice-shop
# → your target: http://localhost:3000 (your machine, your container)

Keep everything on loopback. Juice Shop on localhost:3000 and ARTEX on localhost:8787 are both invisible to the internet — which is exactly where this kind of tool belongs.

Step 5: Run an autonomous task

In the ARTEX UI, create a new task pointed at your lab target (http://localhost:3000). If you skipped the API key in .env, add it now in the LLM settings — remember the OpenAI pitfall the README warns about: OpenAI-family models cap response tokens at 16,384, while the OpenAI-compatible path defaults to a 32,768 output cap that makes every call fail with 400 (max_tokens is too large). Set that profile’s max_tokens to 16,384 or lower on the LLM settings page; Anthropic-family models (including the default claude-opus-4-8) allow 32,768 and don’t hit this.

Then watch the closed loop work. The architecture the README documents:

  • A planner breaks the goal into a shared to-do list across multiple rounds, keeping a stable attack chain.
  • Worker agents (three per task by default, adjustable under System settings) execute real tools against the target.
  • Everything discovered — assets and vulnerabilities — accumulates into a dual graph: an exploration graph plus an asset graph.
  • A reporter turns it into findings, summaries, and chat replies in your selected display language.

The live activity stream is same-origin SSE, so what you see in the browser is the agents’ actual progress. A Juice Shop run will surface its classic issues — the point isn’t the specific findings (they’re famous), it’s watching an autonomous loop discover them.

Step 6: Read the report — then study the defense material

The report language follows the display language you pick in Settings — English (default), Korean, Chinese, Spanish, or Japanese — while the agents’ internal reasoning prompts stay in the original language to preserve performance. Expect fidelity to track model capability: in the project’s own validation, a frontier model kept output in the selected language across all roles, while a cheaper small model let reports fall back.

This is where ARTEX earns its keep for defenders. The repository ships the attack mirrored into defense:

  • Defense & Detection Guide (docs/defense-en.md) — how autonomous AI attacks differ from classic scanners, the fingerprints they leave, hardening checklists, and incident-response notes.
  • Deployable rules (detections/) — Sigma rules (host/log/SIEM layer, convertible for Splunk and Elasticsearch with sigma convert) and Suricata rules for the network layer.
  • MITRE ATT&CK coverage layer (detections/attack/) — a Navigator JSON mapping each rule to the techniques it tags.
  • Machine-readable indicators (detections/indicators/) — artex_indicators.csv plus a ready-to-import MISP event, droppable into a SIEM lookup table.

Import the Sigma rules into your SIEM and the Suricata rules onto your sensor: you’ll be detecting the exact class of autonomous-agent traffic you just generated in your lab.

Digital shield protecting a server rack from attack arrows
The repo ships the defender’s half too: Sigma and Suricata rules, an ATT&CK Navigator layer, and MISP-ready indicators of compromise. Illustration: AI Frontier Post.

What you built

A self-contained autonomous pentest lab on one machine: ARTEX’s Go + Next.js stack in Docker with PostgreSQL, a single admin account behind a setup token, a deliberately vulnerable Juice Shop target on loopback, and an LLM-brained agent loop — planner, workers, reporter — that runs a real task end to end and reports in your language. Plus the part that outlives the demo: deployable detection rules for the exact agent behavior you just watched.

Honest limitations

  • Autonomous doesn’t mean reliable. It needs a capable frontier model; the project’s own validation shows cheaper small models degrade output quality and language fidelity. And every task is many LLM turns — the API bill is real.
  • It’s an offensive tool. The README itself reports that the upstream was implicated in personal-data breaches targeting Korean financial institutions in October 2026, with investigations ongoing. The legal line is absolute: authorized environments only.
  • Brand new. This global edition was created October 3, 2026; the upstream is Chinese-only and currently unreachable. Long-term maintenance, release cadence, and code review are all unproven.
  • Agents miss things. An autonomous loop can overlook vulnerabilities a human tester would catch, and its findings need human review. It doesn’t replace a real pentest — it’s a lab for understanding how AI-driven attacks behave.
  • Language fidelity is model-dependent. Reasoning stays in the original language; only user-facing output is forced into your selected language, and how well that holds depends on the model.

Frequently asked questions

Is it legal to run ARTEX?

Only against targets you own or have explicit written authorization for — deliberately vulnerable lab apps like OWASP Juice Shop or DVWA, in a locally isolated environment. The README is blunt: unauthorized scanning, probing, or intrusion is a crime on its own, and the upstream was reportedly implicated in personal-data breaches at Korean financial institutions in October 2026, with investigations ongoing.

What does ARTEX need to actually run?

Docker and Docker Compose — PostgreSQL comes up with the stack — plus an LLM API key from Anthropic or OpenAI (set in .env or in the UI). The default model is claude-opus-4-8, and each task spawns three worker agents by default. Watch the OpenAI token pitfall: set max_tokens to 16,384 or lower for OpenAI-family models.

Is the interface and output really in English?

Yes by default: the display language (English, Korean, Chinese, Spanish, or Japanese) is switchable in Settings and forces user-facing output into the selected language. The agents’ internal reasoning prompts stay in the original language to preserve performance, and how faithfully the output holds the selected language depends on the model’s capability.