diff --git a/src/lib_vt.zig b/src/lib_vt.zig
index 251faa0a4..426660621 100644
--- a/src/lib_vt.zig
+++ b/src/lib_vt.zig
@@ -59,6 +59,8 @@ pub const Style = terminal.Style;
pub const Terminal = terminal.Terminal;
pub const Stream = terminal.Stream;
pub const StreamAction = terminal.StreamAction;
+pub const ReadonlyStream = terminal.ReadonlyStream;
+pub const ReadonlyHandler = terminal.ReadonlyHandler;
pub const Cursor = Screen.Cursor;
pub const CursorStyle = Screen.CursorStyle;
pub const CursorStyleReq = terminal.CursorStyle;
diff --git a/test/fuzz-libghostty/.gitattributes b/test/fuzz-libghostty/.gitattributes
index de57ad9a7..50dce46fd 100644
--- a/test/fuzz-libghostty/.gitattributes
+++ b/test/fuzz-libghostty/.gitattributes
@@ -1,6 +1,9 @@
# Hand-written seed corpus: binary files, track as-is
corpus/initial/** binary
+corpus/vt-stream-initial/** binary
# Generated/minimized corpora: binary, mark as generated
corpus/vt-parser-cmin/** binary linguist-generated=true
corpus/vt-parser-min/** binary linguist-generated=true
+corpus/vt-stream-cmin/** binary linguist-generated=true
+corpus/vt-stream-min/** binary linguist-generated=true
diff --git a/test/fuzz-libghostty/AGENTS.md b/test/fuzz-libghostty/AGENTS.md
index 042173a75..daafdb887 100644
--- a/test/fuzz-libghostty/AGENTS.md
+++ b/test/fuzz-libghostty/AGENTS.md
@@ -1,14 +1,14 @@
# AFL++ Fuzzer for Libghostty
-- `ghostty-fuzz` is a binary built with `afl-cc`
-- Build `ghostty-fuzz` with `zig build`
+- Fuzz targets: `fuzz-vt-parser` and `fuzz-vt-stream`
+- Build all targets with `zig build`
- After running `afl-cmin`/`afl-tmin`, run `corpus/sanitize-filenames.sh`
before committing to replace colons with underscores (colons are invalid
on Windows NTFS).
## Important: stdin-based input
-The instrumented binary (`afl.c` harness) reads fuzz input from **stdin**,
+The instrumented binaries (`afl.c` harness) read fuzz input from **stdin**,
not from a file argument. This affects how you invoke AFL++ tools:
- **`afl-fuzz`**: Uses shared-memory fuzzing automatically; `@@` works
@@ -16,7 +16,7 @@ not from a file argument. This affects how you invoke AFL++ tools:
- **`afl-showmap`**: Must pipe input via stdin, **not** `@@`:
```sh
- cat testcase | afl-showmap -o map.txt -- zig-out/bin/ghostty-fuzz
+ cat testcase | afl-showmap -o map.txt -- zig-out/bin/fuzz-vt-stream
```
- **`afl-cmin`**: Do **not** use `@@`. Requires `AFL_NO_FORKSRV=1` with
@@ -24,14 +24,14 @@ not from a file argument. This affects how you invoke AFL++ tools:
```sh
AFL_NO_FORKSRV=1 /opt/homebrew/Cellar/afl++/4.35c/libexec/afl-cmin.bash \
- -i afl-out/default/queue -o corpus/vt-parser-cmin \
- -- zig-out/bin/ghostty-fuzz
+ -i afl-out/fuzz-vt-stream/default/queue -o corpus/vt-stream-cmin \
+ -- zig-out/bin/fuzz-vt-stream
```
- **`afl-tmin`**: Also requires `AFL_NO_FORKSRV=1`, no `@@`:
```sh
- AFL_NO_FORKSRV=1 afl-tmin -i -o