
AI-powered offensive security testing using autonomous agents, directly in your terminal.
AI-powered penetration testing using autonomous agents — directly in your terminal. Run blackbox and whitebox pentests that explore, reason, and surface real vulnerabilities.
Want to run from the cloud or integrate it with your CI/CD? See Pensar Console.
/pentest before merging a PR — catch vulnerabilities as naturally as running tests/operator mode for manual investigation, exploit chaining, and validationOpen the Apex TUI:
pensar
Run pentests without the TUI for scripting, CI, or evalgate integration:
# Basic pentest
pensar pentest --target https://example.com
# With extended thinking and task-driven mode
pensar pentest --target https://example.com --extended-thinking --task-driven
# Whitebox (with source code access)
pensar pentest --target https://example.com --cwd ./my-app
# Targeted pentest with specific objectives
pensar targeted-pentest --target https://example.com --objective "Test authentication bypass"
Apex routes diagnostic/operational logging through a centralized structured logger
(src/core/logger). It writes one-line JSON to stderr when output is not a TTY — keeping
it separate from the program's stdout and easy to ship to a log pipeline (e.g. CloudWatch) —
and pretty, colorized output in an interactive terminal. User-facing CLI/TUI output stays on
stdout.
Set the level (most → least verbose: debug < info < warn < error, default info):
pensar pentest --target https://example.com --log-level debug # or --verbose / --quiet
PENSAR_LOG_LEVEL=debug pensar ... # via environment
PENSAR_DEBUG=1 pensar ... # back-compat alias for debug
Resolution order: CLI flag → PENSAR_LOG_LEVEL → PENSAR_DEBUG → default info.
PENSAR_LOG_FORMAT=json|pretty forces the output format. When Apex runs as a managed agent,
PENSAR_LOG_LEVEL is supplied by the host environment.
Stream step-level agent traces to Weights & Biases Weave for analysis and fine-tuning:
export WANDB_API_KEY=your-key
export WANDB_ENTITY=your-entity
# WANDB_PROJECT defaults to "apex-traces"
pensar pentest --target https://example.com
Traces include reasoning steps, tool calls, token usage, and state checkpoints. When credentials are not set, tracing is silently disabled.
Apex emits OpenTelemetry spans for agent runs, LLM calls, and tool executions through @opentelemetry/api. Spans are no-ops unless your process registers an OpenTelemetry SDK as the global tracer provider; Apex ships no SDK.
Register an SDK before importing Apex code:
@sentry/node ≥ 9.27 and add Sentry.vercelAIIntegration() to your Sentry.init integrations.@opentelemetry/sdk-node with an OTLP exporter.Spans follow OTel GenAI semantic conventions. Only span shape (model, token counts, latency, tool names) is captured by default; set AI_TRACE_RECORD_PAYLOADS=true to also record prompts, tool I/O, and outputs.
For best performance, run Apex in the included Kali Linux container with preconfigured pentest tools:
cd container
cp env.example .env # add your API keys
docker compose up --build -d
docker compose exec kali-apex bash
Inside the container, run:
pensar
This repository contains tools for authorized security testing only. Before use, please read and agree to the Responsible Use Disclosure.
| Method | Command |
|---|
| Quick Install (macOS/Linux) | curl -fsSL https://pensarai.com/install.sh | bash |
| Homebrew | brew tap pensarai/tap && brew install apex |
| npm | npm install -g @pensar/apex |
| Windows (PowerShell) | irm https://www.pensarai.com/apex.ps1 | iex |
| Flag | Command | Description |
|---|
--target <url> | pentest, targeted-pentest | Target URL (required) |
--cwd <path> | pentest | Source code path for whitebox mode |
--mode <mode> | pentest | exfil for pivoting and flag extraction |
--model <model> | pentest, targeted-pentest | AI model (default: auto-selected) |
--extended-thinking | pentest | Enable extended thinking for supported models |
--task-driven | pentest | Enable task-driven architecture (experimental) |
--prompt <text|@file> | pentest | Custom guidance for the agent |
--threat-model <text|@file> | pentest | Threat model to guide testing |
--objective <text> | targeted-pentest | Testing objective (repeatable) |