— offensive-security assistant in your terminal
An AI offensive-security assistant that runs in your terminal. Pairs any LLM (via AWS Bedrock or OpenRouter) with ten built-in tools and a split-pane TUI, then works autonomously through pentests, red-team exercises, and infra audits. You set the guardrails, it does the grinding.
what it is
seval is a chat assistant in your terminal that can actually do things. Ask it to investigate a target and it runs commands, reads files, searches the web, and chains tools together — all while you watch in real time. It’s the same shape as a coding agent, but purpose-built for offensive security rather than a general-purpose coder bent toward it.
It gives the model ten real tools — shell, read, write, edit, grep, glob, ls, web_fetch, web_search, and save_memory — and lets it invoke them autonomously in multi-turn loops. Point it at a pentest engagement, red-team exercise, or your own infra audit and it handles the grinding: enumeration, vulnerability discovery, exploit development, reporting. Bring your own LLM through AWS Bedrock or OpenRouter; Claude, GPT, Llama, Gemini, Mistral, and DeepSeek families all work, and you can switch models mid-session with /model. The interface is a split-pane TUI — conversation on one side, live tool activity on the other, with a status bar tracking model, token usage, and session.
you set the guardrails
Autonomy is a dial, not a switch. Four approval modes decide what the agent can do without asking:
- plan — read-only recon, no tools executed.
- default — auto-approves reads, asks before writes or shell.
- auto-edit — auto-approves reads and file edits, asks for shell.
- yolo — full autonomy, everything auto-approved.
sub-agents and scanning
The agent can spawn specialised sub-agents with spawn_agent — security-analyzer, code-reviewer, and recon-agent ship built in — that run in parallel with isolated context and filtered tool sets, then report their findings back. There’s also a rules-driven scanner with static and runtime rule packs for auditing cloud infrastructure.
it remembers
Every conversation is persisted to a local SQLite database, so you can resume, export, or import sessions across machines. The agent saves important findings with save_memory, scoped to the project directory and reloaded into future sessions. When a conversation nears the model’s context limit, seval automatically compresses older messages to free up room.
graph TD YOU["you (operator)"] TUI["seval TUI<br/>split-pane · ratatui"] APPROVAL["approval gate<br/>plan · default · auto-edit · yolo"] AGENT["agent loop<br/>(rig-core)"] LLM["LLM<br/>AWS Bedrock / OpenRouter"] TOOLS["10 built-in tools:<br/>shell · read · write · edit<br/>grep · glob · ls<br/>web_fetch · web_search · save_memory"] SUB["sub-agents<br/>security-analyzer · code-reviewer · recon-agent"] SCAN["scanner<br/>static + runtime rule packs"] DB["SQLite<br/>sessions + project memories"] YOU --> TUI TUI --> AGENT AGENT -->|chat| LLM LLM -->|tool calls| AGENT AGENT --> APPROVAL APPROVAL -->|approved| TOOLS AGENT -->|spawn_agent| SUB AGENT --> SCAN TOOLS -->|output| AGENT AGENT --> DB AGENT -->|render| TUI
╭─ seval ─────────────────────────────────────────────────────╮
│ > enumerate anything ssh-able on 10.0.4.0/24, log candidates │
╰───────────────────────────────────────────────────────────────╯
[14:02:11] thinking…
[14:02:13] tool: shell ⏵ approve? [y/N]
$ nmap -p22 --open -T4 10.0.4.0/24
[14:02:14] y
[14:02:47] └─ 8 hosts up · 3 with :22 open
[14:02:47] tool: shell (auto)
$ nmap -sV -p22 10.0.4.{12,17,33}
[14:03:09] └─ OpenSSH_8.9p1 · OpenSSH_9.6p1 · Dropbear_2022.83
[14:03:11] tool: save_memory
└─ "dropbear on .33 — embedded target, revisit"
[14:03:12] done. 3 candidates written to notes.