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

@reduck-ai/cli

v2.1.74

Published

CLI for Reduck — run scripts against your browser, via the Reduck MCP.

Readme

Reduck CLI

npm

Reduck CLI is a command-line tool that connects your browser to Reduck and lets you discover, run, and chain saved browser automation scripts — all from your terminal.

Get started

  1. Authenticate:

    npx @reduck-ai/cli@latest login
  2. Run a script:

    npx @reduck-ai/cli@latest run --script linkedin.com/get_profile_info username=dhuynh95

Authentication

npx @reduck-ai/cli@latest login runs an OAuth2 PKCE flow against the authorization server the MCP advertises, requesting a token scoped to the MCP. Credentials are stored in ~/.config/reduck/config.json (mode 0600) and refreshed automatically; logout clears them.

You can also authenticate with an API key by setting REDUCK_API_KEY.

Reference

The commands, as --help prints them.

All commands

Usage: npx @reduck-ai/cli@latest [options] [command]

Run Reduck scripts against your browser, via the Reduck MCP.

Options:
  -V, --version               output the version number
  -h, --help                  display help for command

Commands:
  login                       Authenticate against the Reduck MCP (OAuth2
                              PKCE).
  logout                      Revoke and remove saved credentials for the
                              active MCP target.
  list|ls [options] [handle]  List scripts. Without a handle, searches across
                              your own, your projects, and the official
                              catalogue. With a handle, scopes to that owner.
  read [options] <script>     Read a saved script's contract (loggedIn +
                              input/output JSON Schemas) via the MCP's
                              read_script — the arg names to pass to `run`.
  skill [name]                Print Reduck skill docs to stdout. Public — no
                              login required.
  whoami                      Show which Reduck account the CLI is
                              authenticated as.
  run [options]               Run one or more saved scripts via the MCP's
                              run_script — on your browser, via the paired
                              extension. Repeat --script to run several at
                              once, each on its own browser.
  help [command]              display help for command

Some commands are experimental and hidden from this list. Set REDUCK_EXPERIMENTAL=1 to show them.

list

Usage: npx @reduck-ai/cli@latest list|ls [options] [handle]

List scripts. Without a handle, searches across your own, your projects, and
the official catalogue. With a handle, scopes to that owner.

Arguments:
  handle                     Optional owner scope: "@user" (with @) for a user,
                             or a project handle (without @) — e.g. "reduck"
                             for the official catalogue. Omit for a cross-owner
                             search.

Options:
  -q, --query <q>            Search across name, slug, host, description and
                             the input/output schemas. Ranks by relevance.
  --host <host>              Filter by host (e.g. linkedin.com).
  --visibility <visibility>  Visibility filter: "public" or "private". Omit to
                             show both. (choices: "public", "private")
  --archived <filter>        Archive filter: "exclude" (default) hides
                             archived, "only" shows archived exclusively,
                             "include" shows both. (choices: "exclude",
                             "include", "only", default: "exclude")
  -h, --help                 display help for command

Examples:
  $ npx @reduck-ai/cli@latest list
  $ npx @reduck-ai/cli@latest list -q linkedin
  $ npx @reduck-ai/cli@latest list official
  $ npx @reduck-ai/cli@latest list @myhandle -q scrape
  $ npx @reduck-ai/cli@latest list myproject --host linkedin.com

read

Usage: npx @reduck-ai/cli@latest read [options] <script>

Read a saved script's contract (loggedIn + input/output JSON Schemas) via the
MCP's read_script — the arg names to pass to `run`.

Arguments:
  script             Script address as printed by `list`:
                     [<handle>/]<host>/<slug>. Bare host/slug = your own; a
                     handle prefix (@user or a project like reduck for the
                     official catalogue) = that owner's public script.

Options:
  --code             Also print the raw script body (the contract —
                     description, loggedIn, input/output schemas — is always
                     shown).
  --version-id <id>  Read a specific version instead of the current one (from
                     list_script_versions).
  -h, --help         display help for command

Examples:
  $ npx @reduck-ai/cli@latest read cfspro.impots.gouv.fr/list_avis_cfe
  $ npx @reduck-ai/cli@latest read reduck/linkedin.com/get_post --code

run

Usage: npx @reduck-ai/cli@latest run [options]

Run one or more saved scripts via the MCP's run_script — on your browser, via
the paired extension. Repeat --script to run several at once, each on its own
browser.

Options:
  --script <addr...>      A script to run: its address
                          ([<handle>/]<host>/<slug>) followed by its key=value
                          args, e.g. `--script linkedin.com/get_post url=…
                          max=5`. Bare addr = your own; a handle prefix (@user,
                          or a project like reduck for the official catalogue)
                          = that owner's public script. Arg values are coerced
                          to the script's type — plain `siret=913…` stays a
                          string, pass JSON for arrays/objects (`ids=[1,2]`).
                          Bind a file input with `file:<input>=<path>` (e.g.
                          `file:attachment=./banner.png`) — the file is
                          uploaded with the run, and the page gets it under the
                          input's name, so pass the script's own name argument
                          if it has one (send_email: attachmentName). Repeat
                          --script to run several at once, each on its own
                          browser (see --sequential to chain them instead).
                          (default: [])
  --sequential            Chain the --script list through ONE browser, in
                          order, instead of running them at once: each script
                          inherits the previous one's cookies, page and
                          navigation (not its result). Stops at the first
                          failure. Use it when a script needs the state another
                          leaves behind (log in, then act).
  --file <input=path...>  File input (repeatable): bind a declared file input
                          (a property in the script's input schema marked {
                          format: "file" }) to a local file, e.g. `--file
                          attachment=./banner.png`. The file is uploaded with
                          the run, up to 50 MB, so it works on your paired
                          browser and on a cloud browser alike. The page gets
                          it under the input's name, not the file's.
  --device <id>           Target a specific registered device (id from
                          `list_devices`) instead of auto-picking the paired
                          extension.
  --out <dir>             Directory to deliver downloaded files into, under
                          their real names (default: ~/Downloads).
  --version-id <id>       Run a specific version instead of the current one
                          (from list_script_versions). Only for single-script
                          runs.
  -h, --help              display help for command

Runs on your browser via the paired extension — the MCP auto-picks it,
or pass --device <id> (see list_devices) to choose. Prints the script's result as
JSON on stdout (pipe it to jq); the run's step trace is read separately, through the
MCP's read_run_trace({runId}).
Repeat --script to run several at once, each on its own browser — stdout is then a
JSON array, one result per script, in the order given, and one failing does not stop
the others. Add --sequential to chain them through one browser instead (in order,
stopping at the first failure — the rest then report that they never ran, so the array
still has one entry per script). Exit code 0 iff every script succeeded. Set
REDUCK_MCP_URL to target another MCP (staging, a local dev server) —
`npx @reduck-ai/cli@latest login` once per target.

Examples:
  $ npx @reduck-ai/cli@latest run --script linkedin.com/get_profile_info username=dhuynh95
  $ npx @reduck-ai/cli@latest run --script reduck/linkedin.com/get_post url=…   # official catalogue
  $ npx @reduck-ai/cli@latest run --script news.ycombinator.com/top --device 4f3c…   # a specific device
  $ npx @reduck-ai/cli@latest run --script reduck/mail.google.com/send_email [email protected] subject=Hi attachmentName=banner.png file:attachment=./banner.png   # file input
  $ npx @reduck-ai/cli@latest run --script site.com/a --script site.com/b   # both at once, a browser each
  $ npx @reduck-ai/cli@latest run --sequential --script site.com/login --script site.com/scrape max=5   # chain, one browser
  $ REDUCK_MCP_URL=http://localhost:7575 npx @reduck-ai/cli@latest run --script example.com/title

Experimental features

Features in early access are enabled per account. Their commands are hidden from --help unless REDUCK_EXPERIMENTAL=1 is set, and still work when invoked directly.

A command belonging to a feature your account is not enabled for returns 403. Request early access at https://form.reduck.ai or contact Reduck at [email protected]

Reporting bugs

Reach out on Discord.

License

MIT