npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@intentic/fileq

v1.337.0

Published

fileq, agent-native file reading: any binary workspace file (docx, xlsx, pptx, pdf, images, audio, archives) as clean budgeted markdown, cached by content so a repeat read is instant

Downloads

2,908

Readme

fileq

A CLI that shows an agent the contents of binary workspace files (Office documents, PDFs, images, audio, archives) as budgeted markdown, cached by content, and checks and draws the documents an agent makes.

flowchart LR
    agent["Agent<br/>fileq read"] --> fileq(["fileq"])
    maker["Agent<br/>fileq check · render"] --> fileq
    daemon["Daemon<br/>derive"] --> fileq
    git["git diff · show<br/>textconv"] --> fileq
    fileq --> derivers["Derivers<br/>docx · pdf · xlsx · image …"]
    fileq --> sidecars["Sidecars<br/>.intentic/local/cache/derived"]
    fileq --> tools["LibreOffice · pdftoppm<br/>.intentic/local/cache/rendered"]
  • An agent cannot cat a docx or the text layer of a PDF. fileq <file> prints a capsule line (title, format, token cost, derived or fresh), then the markdown clipped to --budget tokens, and names the file that holds the whole text.
  • Renderings are cached by content: keyed by the source's sha256 and the deriver's version stamp, never its path, so a repeat read of unchanged content is instant, whether it is the same file, a copy or a move of it, or a file outside the workspace. The entries live under .intentic/local/cache/derived/.by-hash/, or with no workspace under by-hash/ in $FILEQ_HOME, else $XDG_CACHE_HOME/fileq, else ~/.cache/fileq. A cache that cannot be written costs the speed-up, never the read.
  • A workspace file also gets a sidecar at .intentic/local/cache/derived/<path>.md, fresh while its sha256 and the stamp both match. Text is neutralized at write time, because a sidecar or a cache entry is later read as a plain file.
  • The daemon renders one file when asked with fileq derive --json <path> (_sandbox/sandbox/src/derived/), and imports ./formats and ./sidecar so both sides agree on what is derivable.
  • In the sandbox image, git diff and git show on a document print its text through fileq read --plain, wired by fileq git-attributes.
  • fileq check <file> lints a docx, pptx, xlsx or pdf an agent produced and names each problem where a reader meets it (slide 3 · "Title 1", 'Q3 plan'!C4, page 7, paragraph 12 · "…"). An error is a fact read off the structure (a missing image, a cell showing #REF!, a link to a bookmark that is not there, a blank page, Office's own "Click to add title" left as text) and makes it exit 1; a warning is a judgement call or an estimate (text overflowing its box, from average glyph widths). Some rules are adapted from SurfSense's artifact verification (Apache-2.0); NOTICE names them.
  • fileq render <file> draws pages or slides to PNG under .intentic/local/cache/rendered/<path>/ (or --out) and prints their paths for an image reader. Office formats go through LibreOffice to PDF first, keeping hidden slides so slide N is image N; pdftoppm or mutool draws the PDF. A render is keyed by the document's hash, so an unchanged file answers from the last one. A missing tool exits 2 with what installs it.
  • Its skill (src/skill.ts) tells an agent to check and look at every document it makes, with short authoring rules adapted from SurfSense's document skills (src/skill-authoring.ts).
  • Out of scope: plain text files (read them directly), web pages (webq), OCR and transcription.

Usage

fileq report.docx                    # capsule + markdown up to 4000 tokens, whole text saved
fileq read deck.pptx --budget 8000   # a bigger slice on stdout
fileq check deck.pptx                # problems by slide and drawing; exit 1 on an error
fileq render deck.pptx --pages 1-3   # slide-1.png … slide-3.png, one path per line

2026-09-29: rendering shells out to LibreOffice and poppler instead of bundling a renderer. pdf.js draws only onto a canvas fileq does not carry, and an office layout faithful enough to judge overflow is LibreOffice itself. No published sandbox image carries them: they are the opt-in office pack (_sandbox/sandbox/image-packs/office.Dockerfile, ~335 MB), so there fileq render names the missing tool and prints environment propose office --pack, which asks the owner for it.

Key files

Commands

pnpm --filter @intentic/fileq test