RXDSEC
REX0%
[ Project 001 ] Offensive-security agent · v0.2.5 · MIT

REX

An offensive-security agent that runs on your machine. It recons, finds the flaw, proves it, then writes the fix — and stops at every point where a mistake would cost you something.

42 tools 23 providers 0 telemetry Scroll
[ 01 ]

It breaks it, then it fixes it

Most agents stop at writing code. REX runs the loop an operator runs: fingerprint the target, trace the tainted path, build the payload, prove the finding in a real browser, patch it, and run the test that proves the patch holds.

01 / Offence

Recon to proof-of-concept

protocol_fingerprint identifies the stack. taint_analyze traces attacker-controlled input from source to dangerous sink and rates each path. payload encodes and chains the transform. honeypot_check tells you when the target is bait.

02 / Loop

Agentic, not conversational

Streaming responses, native tool calling, automatic context compaction when the window fills, and append-only JSONL session history under ~/.rex/sessions/.

03 / Writes

Edit, review, then approve

File writes are atomic and arrive as a diff you can edit before approving. Conflict detection catches a file that changed underneath, and every write drops a checkpoint you can roll back to.

04 / Secrets

Keys never leave the OS

API keys are encrypted with the platform credential store — DPAPI on Windows — rather than dropped in a dotfile. Environment variables still work as a fallback.

05 / Desktop

It can use the computer

Screenshot, click, type and send keystrokes, with native backends per OS — Win32/PowerShell, AppleScript/cliclick, xdotool/ydotool/AT-SPI2. Never auto-allowed: every action asks, every time.

06 / Browser

A browser it actually drives

A real browser view composited into the window: navigate, snapshot the accessibility tree, click by reference, type, evaluate JavaScript, screenshot. You watch it happen.

07 / Memory

Conventions survive restarts

A REX.md at the project root is read into every session, so what you explain once outlives the session, the restart and the model switch.

[ 02 ]

Three panes, no chrome to fight

Sessions on the left, the transcript in the middle, the detail pane on the right. Machine text is always mono, colour only ever carries state, and hierarchy comes from weight and spacing rather than boxes inside boxes.

Composer

@-mention any file

Type @ to pull a file straight into context. Paste an image and it goes in as an attachment.

Transcript

Highlight to ask

Select any text and a toolbar offers to explain it, quote it back, or start a follow-up from it.

Everywhere

Command palette

Ctrl K switches model, session, settings, or the browser pane.

[ 03 ]

42 tools, grouped by what they can cost you

Reads run freely. Writes show a diff. Anything that touches your machine, your screen or the network asks first — and the riskiest ask every single time, whatever rules you've set.

Files & search — free to run
readfiles into context
globmatch by pattern
grepbundled ripgrep
codebase_searchsemantic lookup
update_planvisible task list
ask_userask instead of guess
Writes — diff first, then approve
writeatomic create
editeditable diff
gitscoped subcommands
create_artifactbuild a document
update_artifactrevise it
memory_writepersist a fact
memory_readrecall it later
memory_deleteforget it
Execution — denylist checked before any rule
shellrun a command
check_processpoll a background job
send_inputfeed a running proc
kill_processstop it
skillrun a packaged workflow
Network — SSRF guard on every fetch
web_fetchread a page
web_searchsearch the web
http_requestany verb, any header
Browser — a real view you can watch
browser_startlaunch it
browser_navigatego somewhere
browser_snapshotread the a11y tree
browser_clickclick by ref
browser_typefill a field
browser_screenshotcapture it
browser_evalrun JS in page
browser_closeshut it down
Desktop control — never auto-allowed
desktop_screenshotsee the screen
desktop_clickclick a point
desktop_typetype text
desktop_keysend a shortcut
desktop_windowslist windows
desktop_focus_windowbring to front
desktop_ui_treeread UI automation
desktop_click_elementclick by name, not pixel
Security analysis — for work you're authorised to do
taint_analyzesource → sink tracing
payloadencode / chain
honeypot_checkis this a trap?
protocol_fingerprintidentify the stack
[ 04 ]

A denial you can't talk it out of

Every tool call walks the same ladder, top to bottom. The hard safety denylist sits above every rule you can write, so no setting, no "always allow", and no persuasive prompt gets underneath it.

01hard safety denylistnot overridable
02session rulesthis session only
03project rulesthis project
04global ruleseverywhere
05tool defaultsthe fallback
Mode

Safe

Everything asks. Nothing is remembered.

Mode

Default

Reads run. Writes and execution ask.

Mode

Auto

Fewest prompts. The denylist still holds.

Before you approve, the card shows the exact command, the exact path, and — if you click "always allow" — the precise rule that would be written. And approving is deliberately not a global shortcut: Y and N live on the focused card, so a stray keypress while reading can never run a command.

[ 05 ]

A monorepo you can read

Electron rather than Tauri — the fastest path to a real desktop app — with the agent core in the main process. No Rust sidecar, no IPC bridge between the loop and the tools it calls.

Layout
apps/desktop Electron: main/ (host), src/ (renderer) packages/ shared-types cross-package contracts agent-core loop, sessions, context model-adapters provider catalog + adapters tools all 42 tool executors permission-gate rule engine + denylist scripts build / dev / packaging
Design

The renderer holds nothing

The React renderer keeps no secrets and executes nothing. It sends intents over IPC and renders what streams back — so a compromised page has nothing worth stealing.

Packaged for three OSes

NSIS and portable builds for Windows, a hand-assembled .deb that builds even from a Windows host, a distro-agnostic tarball, and macOS targets wired up in package.json.