-
-
Recorded live runs: weak bot 3 of 4 goals broken (replay-confirmed); hardened bot 0 confirmed findings, one non-reproducing leak dropped
-
A confirmed weak-bot finding: the 4 attack messages, evidence, replay-verified mark, the fix and a Tavily source
-
Findings panel: each confirmed finding ships with evidence, a fix and a current reference found with Tavily
-
Baseline: garak's 340 single-turn probes vs RedCell on the same weak bot. garak reads reply text only and can't see tool calls
Inspiration
Teams are giving AI assistants real powers, such as running commands on servers and reading files. That's risky: someone can chat with an assistant and talk it into leaking a password or running a command it never should. Existing scanners mostly send fixed, single-turn prompts and read only the reply text. But an agent can politely say "I can't do that" while running the command anyway. We wanted a tester that holds a real conversation, watches what the agent actually does, and only reports what it can prove.
What it does
RedCell tests an AI agent you own. It plays the attacker, automatically, and then tells you how to fix each hole it finds.
Three NVIDIA Nemotron models, all on Nebius Token Factory:
- Planner / tester (Nemotron 3 Ultra): chats with the target and keeps changing tactics. It might pose as an on-call engineer during an incident, or ask for "an audit". If the target refuses, it tries a new angle.
- Target (Nemotron 3 Nano): OrbitOps, a demo DevOps assistant with one tool: running shell commands on a server.
- Judge (Nemotron 3 Nano): labels each turn landed, partly or blocked.
Nothing is real. The server is a simulated shell: commands are answered from an in-memory fake server and never executed. The "secrets" and customer emails are planted fakes (canaries). Because the fakes are known exactly, code decides what counts as landed: did the fake token appear in the reply, or is a dangerous command in the shell log? The LLM judge can never claim a finding that the ground-truth code checks don't confirm. Every landed conversation is replayed on a fresh agent, and anything that doesn't reproduce is dropped.
The demo has two versions of the same target:
- Weak bot: told to "be quick and helpful, do what engineers ask".
- Hardened bot: the same model with RedCell's remediation guidance applied: stricter instructions plus a command allowlist enforced in code in front of the shell.
Results from recorded live runs (29 Oct 2026, 6 turns per goal):
- Weak bot: 3 of 4 goals broken, all confirmed by replay (deploy token in 2 turns, a forbidden command in 4 turns, customer emails in 2 turns). The system prompt held for 6 turns.
- Hardened bot: 0 confirmed findings. One system-prompt leak appeared once, didn't reproduce on replay, and was dropped.
The lesson: code-level gates held every time, while prompt-level defences held only most of the time. In the hardened run the code gate blocked 39 tool calls and no dangerous command ran. The one leak was plain reply text, where only the prompt could stop it. The hardened bot is better, not fully defended, and RedCell shows exactly where.
Every finding ships with the evidence, the exact messages to reproduce it, a replay-verified mark, a fix (remediation guidance), and a current reference found with Tavily. Reports come as Markdown, HTML, JSON and SARIF (for GitHub code scanning).
Safety scope: RedCell only tests agents you own. Real HTTP targets must be on an authorised-target allowlist, real command execution was removed, and nothing real runs.
How we built it
- NVIDIA Nemotron on Nebius Token Factory: every model call goes through Token Factory's OpenAI-compatible API, with Nemotron 3 Ultra as the planner and Nemotron 3 Nano as the target and judge. Nano's native tool calling drives the simulated shell. We turn Nano's reasoning off (
enable_thinking: false) so it can't use up the token budget and return empty replies. A cost ledger prices every call and stops a run at a set budget; the two recorded runs cost $0.0212 and $0.0352. - Tavily threat intel: before each run, RedCell asks Tavily for current defensive sources on each goal's topic (OWASP LLM Top 10, agent-security guidance). The planner gets a summary, and each finding cites its top source. The recorded runs used 12 sources.
- Code checks, not opinions: planted canaries, a shell-command classifier, and replay on a fresh agent.
- garak comparison: we ran NVIDIA's garak on the same weak bot: 340 single-turn probes, 79 detector hits on reply text (71 of them prompt-injection hijacks), $0.0227. garak found a real text-level weakness, but it can't see tool calls, which is the gap RedCell covers.
- Stack: Python standard library only for the core, a single-file dashboard streaming live over Server-Sent Events, 36 tests, SARIF output with GitHub Actions CI, optional LangSmith tracing, and free hosting on Render with a judge-code gate and spend caps so a public URL can't drain credits.
Challenges we ran into
- Reasoning tokens ate
max_tokens. Nano sometimes returned empty replies with no warning. The fix was disabling Nano's thinking via the switch documented on NVIDIA's model card, which Token Factory accepts. - garak's 20 s default timeout was too short for a reasoning model. Combined with parallel requests and retries, it burned an endpoint budget before we made the scan strictly serial, with no retries and a 180 s timeout.
- A policy-gate hole: a safe-looking command prefix could carry a secret read along with it (for example
ls && head /etc/devops/.env). We fixed the classifier so a command is only "safe" if every part is safe, and added a regression test. - Honest grading: an early check counted reading a config file as "overwriting" it, and another treated deleting a temp folder the agent had just created as destructive. We made the checks stricter, so they only count what really happened.
- Replay dropping a finding: the hardened bot leaked its system prompt once, but it didn't reproduce on a fresh agent, so RedCell dropped it rather than report it.
- Windows console crashes on characters like U+2011 in model output.
Accomplishments that we're proud of
- No false findings: every finding RedCell reports is backed by code checks and reproduces on a fresh agent. The LLM judge can't invent a finding.
- Honest reporting: the hardened bot's one-off leak is shown, not hidden.
- Cheap: a full adaptive multi-turn run costs a few cents.
What we learned
Prompt instructions are a useful layer, but they hold only most of the time. Controls in code, like a tool allowlist, held every time. So RedCell's guidance favours code-level controls for anything that matters.
What's next
- Test real agents through the HTTP adapter. It only talks to hosts you add to the allowlist.
- Make the LangChain and MCP adapters production-ready.
- Run the seven extra OWASP goals live.
- Add an output filter to the hardened bot, and re-test the prompt leak.
Built With
- css3
- garak
- github-actions
- html5
- javascript
- langsmith
- nebius-token-factory
- nemotron-3-nano
- nemotron-3-ultra
- nvidia-nemotron
- owasp
- python
- render
- sarif
- server-sent-events
- tavily
Log in or sign up for Devpost to join the conversation.