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

@apify/kilocode-plugin

v0.1.0

Published

Apify for Kilo — run any of 20,000+ Apify Actors as a native Kilo Code agent tool.

Readme

Apify for Kilo

Works with Kilo npm

@apify/kilocode-plugin gives Kilo Code agents one native tool — apify — that can run any of Apify's 20,000+ web-scraping and automation Actors and bring the results back into the conversation. Scrape Google Maps, Instagram, Amazon, TikTok, search the web, crawl a site, or invoke any Actor by slug — without a tool-per-site explosion.

Community integration. "Apify for Kilo" is built and maintained by Apify and is not officially affiliated with Kilo.

Install

Add a single line to your kilo.jsonc:

{
  "plugin": [
    ["@apify/kilocode-plugin", { "token": "{env:APIFY_TOKEN}" }]
  ]
}

Then set your token (get one at console.apify.com/account/integrations):

export APIFY_TOKEN="apify_api_..."

Or install via the CLI, which patches your config for you:

kilo plugin @apify/kilocode-plugin

Token sources

The plugin resolves the token in this order:

  1. Kilo auth login — the plugin registers an "Apify API Token" auth method, so you can store the key through Kilo's native auth flow:

    kilo auth login --provider apify   # paste your apify_api_… token

    This alone is enough — login enables the tool on the next launch, with no config or env var needed.

  2. Config{ "token": "..." } (or { "apiKey": "..." }) in the kilo.jsonc plugin entry.

  3. EnvironmentAPIFY_API_KEY or APIFY_TOKEN.

If no token is found, the plugin registers no tool (the agent never sees a tool that would fail). After running kilo auth login, restart Kilo so the plugin re-reads the credential.

The apify tool

One tool, three actions. The agent composes them:

| Action | What it does | |------------|--------------| | discover | Search the Apify Store (query), or fetch an Actor's input schema + README (actorId). | | start | Launch an Actor run with a JSON input; returns run references immediately (non-blocking). | | collect | Poll the runs; return finished datasets, mark the rest pending, surface failures. |

Typical flow: discover (search) → discover (schema) → startcollect (repeat collect while allDone is false).

Example (what the agent does under the hood)

// 1. Learn the Actor's inputs
{ "action": "discover", "actorId": "compass~crawler-google-places" }

// 2. Launch a run (batch many targets into ONE run when possible)
{ "action": "start",
  "actorId": "compass~crawler-google-places",
  "input": { "searchStringsArray": ["coffee shop Prague"], "maxCrawledPlacesPerSearch": 3 },
  "label": "prague-coffee" }

// 3. Collect — repeat until allDone: true
{ "action": "collect",
  "runs": [{ "runId": "…", "actorId": "compass~crawler-google-places", "datasetId": "…", "label": "prague-coffee" }] }

Slugs use a tilde: username~actor-name (e.g. apify~google-search-scraper), never a slash.

Safety

  • Prompt-injection defense. Scraped data is wrapped in <<<EXTERNAL_UNTRUSTED_CONTENT>>> markers (with the boundary markers sanitized out of the body) so a host that respects them won't treat scraped text as instructions.
  • Result-size cap. Dataset output is truncated to 50,000 characters to protect the context window.
  • SSRF guard. baseUrl must start with https://api.apify.com.
  • Secret hygiene. Tokens are newline-stripped before use and never echoed in tool output.

Configuration

| Field | Purpose | |----------------|---------| | token / apiKey | Apify API token. Falls back to APIFY_API_KEY / APIFY_TOKEN. | | enabled | Force on/off. When unset, the plugin enables itself iff a token is present. | | baseUrl | Override the Apify API origin. Must start with https://api.apify.com. | | maxResults | Default result cap (forward-looking; currently informational). | | enabledTools | Subset of tools to register (only apify exists today). |

Development

npm install
npm run build       # tsc → dist/
npm run typecheck
npm test            # vitest, mocked apify-client

See CLAUDE.md for architecture notes and local end-to-end testing against a Kilo checkout.

License

Apache-2.0 © Apify