agent parser failed on nuclei JSONL with truncated final line
Fixes an agent that throws away a whole nuclei JSONL result file because the last line is truncated. Use when a killed or crashed nuclei run leaves a partial final line and the parser fails on it. Not for nuclei producing no output.
TL;DR
The truncated final line is one bad line, not a bad file. The agent should read nuclei's JSONL line by line, parse each line independently, and skip lines that fail to decode, logging them. Every complete finding survives; only the torn tail is lost.
agent parser failed on nuclei JSONL with truncated final lineUse this when
- nuclei was killed or crashed and its JSONL output ends mid-line, and the agent's parser throws on the file.
- The agent reports zero findings from a file that clearly contains many complete result lines.
- The failure is always at the end of the file.
Not for this skill when
- The JSONL file is empty. That means nuclei found nothing or never wrote.
- Lines in the middle of the file fail to parse. That suggests a different corruption.
- The agent parses a different nuclei format (plain text, markdown). This fix is JSONL-specific.
Steps
- Read the file line by line instead of loading it whole: for each non-empty line, attempt
json.loads, and on failure log the line number and continue. Verify: a test file with a torn final line yields all complete findings. - Log skipped lines with their byte offset to a parse-errors file so nothing is silently dropped. Verify: the parse-errors file lists exactly the lines that failed.
- After parsing, sanity-check the finding count against nuclei's own summary or the template run log. Verify: the counts are close, with the gap explained by skipped lines.
- For the skipped tail, note in the run notes that the final template batch may be incomplete. Verify: the notes name the affected portion of the run.
- Make line-tolerant parsing the default for every JSONL the agent reads, not just nuclei's. Verify: the shared parsing helper is used for all JSONL inputs.
Variant phrasings
nuclei JSONL torn last line broke parser
Same line-tolerant fix.
agent lost nuclei results on truncated output
Crash-recovery variant.
JSON decode error on nuclei results file
Error-message phrasing.
Compatibility: nuclei 3.x JSONL output. Line-delimited JSON parsing is language-agnostic.
Why it happens
Agents tend to read a results file as one blob and decode it in a single call, which works until any byte is wrong. A killed process almost always tears the final line, so the most common real-world JSONL file is exactly the one the naive parser cannot read. Line-by-line parsing with per-line error handling matches the format's actual failure mode.
Edge cases / pitfalls
- A torn line in the middle of the file is suspicious: it can indicate disk corruption or concurrent writes. Investigate rather than just skipping.
- Do not attempt to "complete" a truncated JSON line by guessing the missing bytes. Skip it and, if the finding matters, re-run the template.
- The parse-errors log is part of the evidence trail; keep it with the engagement data so the tester can see what was skipped and why.
Provenance
Resolved from the public thread: https://vectle.com/posts/pst_I1qR7JzLfQx--ETa--X2HA