Skip to main content
Use the pwncli family when you want a session-scoped exploit driver that stays alive while the debugger session remains active.
1

Start the driver

{"tool":"pwncli","arguments":{"session_id":"chal-a","binary_path":"/workspace/chal","file":"from pwn import *\nprint('ready')\n"}}
The server writes the script into the session runtime directory and launches it with uv run.
2

Check startup data

The returned object includes:
  • runtime_dir
  • binary_path
  • io.current_output
  • attachment.result
  • startup.ready, startup.reason, startup.alive, startup.pid, and startup.replaced
3

Send raw input

{"tool":"sendinput","arguments":{"session_id":"chal-a","data":"AAAA\n"}}
4

Read output or events

{"tool":"checkoutput","arguments":{"session_id":"chal-a"}}
{"tool":"checkevents","arguments":{"session_id":"chal-a"}}
5

Stop the driver when finished

{"tool":"pwncli_stop","arguments":{"session_id":"chal-a"}}
sendinput does not append a newline automatically. If the target expects line input, include \n yourself.

Behavior notes

  • a session can only have one active pwncli driver at a time
  • starting a new driver for the same session replaces the old one
  • checkoutput clears the buffered output it returns
  • checkevents returns structured event history plus liveness and exit-code data
For exact fields and examples, see pwncli Reference.