npx skills add ...
npx skills add run-llama/llamaparse-agent-skills --skill liteparse
Use this skill whenever a task involves a document file (PDF, DOCX, PPTX, XLSX, or image) and you need to read it or pull text, tables, or specific values out of it — to answer a question about its contents, look up a figure, or extract data. Provides fast, local, model-free extraction via the `lit` CLI with disciplined, low-cost search patterns.
npx skills add run-llama/llamaparse-agent-skills --skill liteparse
Extract text from documents locally with the lit CLI — a fast, model-free parser. This skill is
about using it cheaply: each lit parse re-runs full extraction, and every line you dump into
the conversation is paid for on every subsequent turn. The patterns below come from analyzing real
agent traces where the same PDF was parsed up to 9 times and single image reads cost
140k+ characters of context. Don't repeat those mistakes.
lit parse re-extracts the whole document every time you call it. Re-parsing per search is the #1
waste seen in traces. Parse a document exactly once, to a temp file, then run all your searches
against that file:
Then search the file with cheap shell tools — never re-run lit parse to search again.
Every Bash call is a full model round-trip (latency + re-read of context). The biggest waste after
parsing is a serial loop: grep → look → grep again → sed to read the window → grep again. In
traces this doubled the turn count versus just reading the doc. Two rules fix it:
1. Get context in the SAME command — don't grep then sed. Use grep -C so the surrounding
lines come back with the hit. This removes the follow-up sed turn for the common case:
Only fall back to sed -n 'A,Bp' when you already know the exact line and need a wider window
than -C gave you.
2. Batch independent lookups into ONE command. When a question needs several distinct facts (e.g. emissions and revenue), don't spend one turn per term. Probe them together with labels:
Then keep results small:
head and use -n for line numbers.search.py (below) — don't keep firing keyword variations one per turn.grep/sed on the saved file over the Read and Grep tools — fewer round-trips and
you control output size precisely.When two targeted greps haven't pinned the answer, stop greping — don't iterate keyword variants one turn at a time. Run the bundled BM25 ranker ONCE to surface the most relevant line-windows in a single command:
-k = number of matches, -e = lines of context around each (so the window comes back inline — no
follow-up sed turn). It returns ranked windows with line numbers. Use a rich natural-language query
(several synonyms in one string), not a single keyword. This replaces a long chain of speculative greps.
--no-ocr. It's much faster and the text is identical. Leaving OCR on wastes time.--no-ocr. If the value is missing or digits look wrong, read the
page visually (see below) rather than trusting OCR.Screenshots are the most expensive thing you can put in context: a single high-DPI page PNG ran ~140k characters in one trace, and agents often rendered the same page twice (default + hi-res).
Only screenshot when text/tables genuinely can't answer the question (dense multi-column tables, figures, charts). Then:
--target-pages "N" (note: it's --target-pages, NOT --pages).Parsing once to a file already covers this: keep the /tmp/doc.txt and reuse it across every
question instead of re-parsing.
Skip lit --version, ls -la, and lit … --help unless something actually failed. Go straight to
the parse. Core flags you need:
--format text|json · --no-ocr · --target-pages "1-5,10" · --dpi <n> (default 150) ·
--ocr-language <iso>. Use --format json only when you need bounding boxes/layout — it's much
larger; still search it, never load it whole.
PDFs work out of the box. If lit is missing: npm i -g @llamaindex/liteparse. Office docs need
LibreOffice; images need ImageMagick (both auto-converted to PDF).
grep -n -i -C4 "total assets" /tmp/doc.txt | head -40 # location AND its window, one turnfor q in "carbon intensity" "scope 1" "total revenue"; do \
echo "=== $q ==="; grep -n -i -C3 "$q" /tmp/doc.txt | head -25; done./.claude/skills/effective-liteparse/scripts/search.py /tmp/doc.txt -q "materiality assessment priority topics" -k 8 -e 5lit screenshot "/abs/path/doc.pdf" --target-pages "13" --dpi 150 -o /tmp/shots/ # then Read the PNG