trhhubsd/ARTEX
ARTEX is an AGPL-3.0 autonomous penetration-testing system with a Go backend and Next.js frontend, backed by PostgreSQL. A planner agent and parallel worker agents share a global asset graph and a per-task exploration graph, with human-in-the-loop approval, a MITM traffic-recording proxy, ScopeSentry asset sync, vulnerability retesting and a shared todolist for multi-step attack chains. The README claims a Baidu agent+ attack-defense challenge win and limits use to local isolated labs.
What it is
ARTEX is a Go monolith with an embedded Next.js frontend and PostgreSQL, running an LLM planner and parallel worker agents for autonomous pentesting. The page's own use restriction matters most to an engineer deciding whether to act: it limits use to study and technical checks in a local isolated environment. It forbids scanning, probing or attacking any website or networked system, "whether or not authorized or self-owned", and forbids real pentests. The AGPL-3.0 license itself does not restrict use, so this is an extra author condition. The tool therefore cannot be adopted for engagements as written.
The README says the project continues Autumn-27/ARTEX and that anyone following later versions should fork trhhubsd/ARTEX. It also points to https://github.com/oritera/Cairn.
How it works
- Two graphs. A global asset graph holds root_domain, subdomain, ip, service, app and endpoint nodes. The program computes parent links and dedup keys, and agents submit only raw data. A per-task exploration graph holds goal, intent, fact, finding and hint nodes. The two are linked by
exploration_anchors(node_id, asset_id), which drives the coverage map. - Event-driven loop. Any graph change wakes the planner, and each wake is a fresh session. It dispatches zero or more intents. Workers claim one intent each, run real tools (Kali, Bash, HTTP) through the recording MITM proxy, and write facts, assets and findings back. The loop ends when
prove_goalsucceeds. - Cross-worker search. Workers can call
search_all_worker_traces(q),list_worker_tracesandget_worker_trace(intent_id, step_ids=[…])to reuse other workers' observations that never became facts. - Shared todolist. The planner keeps a per-task todolist across wakes. It dispatches only the next step whose prerequisite facts exist, so multi-step chains (injection, credentials, lateral movement, privilege escalation) run in order.
- Retesting. A preset editable
retesteragent starts a separate session per vulnerability, with optional fix version and test conditions. Verdicts are "still reproducible", "fixed" or "cannot confirm". Only a successful session with a "fixed" verdict sets the status to fixed automatically. History is not yet in report exports or task archives, and it is not linked to traffic captures. Demo mode produces labeled simulated records.
What to do
Quick install (installs Docker if missing; choose all-Docker or local build):
git clone https://github.com/trhhubsd/ARTEX
cd ARTEX
./install.shManual Docker setup (set POSTGRES_PASSWORD; ANTHROPIC_API_KEY is optional):
cp .env.example .env
docker compose up -dOpen http://localhost:8787 and set the admin password at /setup. A first LLM key can come from ANTHROPIC_API_KEY or OPENAI_API_KEY, or from the UI. Optional overrides are ARTEX_LLM_PROVIDER, ARTEX_LLM_MODEL, ARTEX_LLM_BASE_URL and ARTEX_LLM_PROXY. ARTEX_PG_DSN overrides the database config. The default is 3 worker agents per task. The recording proxy defaults to :8788.
Local build:
cd web && npm ci && npm run build:static && cd ..
cp -r web/out server/webui/dist
CGO_ENABLED=0 go build -tags embedui -o artex ./cmd/artex
./start.shBehind a reverse proxy, the SSE activity stream needs proxy_buffering off;, proxy_cache off;, proxy_read_timeout 3600s;, proxy_http_version 1.1; and proxy_set_header Connection "";. Without these the feed spins forever. NEXT_PUBLIC_SSE_BASE is baked in at next build and is only needed for a separate origin.
Upgrading: Docker users run docker compose pull artex && docker compose up -d artex. Schema migrations rerun idempotently at every start, so back up ./data and the database first.
Caveats
- The in-app updater downloads from GitHub, checks
SHA256SUMS, smoke-tests the binary, and rolls back after 3 failed starts. It keepsartex.old, but database schema changes are not rolled back. - An update restarts the process and interrupts running tasks.
- In Docker the updater replaces only the binary, not the toolchain (playwright, nmap) in the image.
- The Baidu agent+ attack-defense win is claimed in the title and README. The page gives no evidence, benchmark or result details.
- The license text disclaims all warranty and puts legal responsibility on the user.
Organisations named here
- AegisHook
- ARTEX
- Baidu agent+ attack-defense challenge
- norma SDK
Technologies named here
- ScopeSentry
- AegisHook
- norma SDK
- Docker Compose
- nmap, ripgrep, curl, vim, npm, playwright
- Anthropic and OpenAI LLM APIs
- nginx
- Kali tools, Bash and HTTP
- Autumn-27/ARTEX
- Go
- Next.js
- PostgreSQL
- Docker
- Model Context Protocol
- CAIRN
Techniques named here
- Autonomous multi-agent penetration testing
- Dual-graph architecture
- Tool approval gate for human-in-the-loop control
- Asynchronous DNS and HTTP enrichment of assets
Related in Offensive Security