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

monkeyscode-sdk

v1.0.2

Published

MonkeysCode SDK — programmatic agent control for TypeScript/Node.js

Readme

monkeyscode-sdk

Run the MonkeysCode coding agent from TypeScript or JavaScript. query() starts an installed mc and gives you its events: the same tools, permission rules, hooks and MCP servers as mc -p.

npm install monkeyscode-sdk        # Node 18+, ESM and CommonJS
npm install -g monkeyscode-cli     # the mc it drives, 1.0.0 or newer
import { query } from 'monkeyscode-sdk/subprocess';

const q = query({
  prompt: 'Fix the failing test',
  options: {
    cwd: '/path/to/repo',
    allowedTools: ['read_file', 'edit_file(src/**)', 'run_command(npm test:*)'],
    maxCostUsd: 1,
  },
});
for await (const e of q) {
  if (e.type === 'assistant') {
    for (const b of e.message.content) if (b.type === 'text') process.stdout.write(b.text);
  }
}
const r = await q.result;
console.log(r.subtype, r.cost_usd, await q.exitCode);

Auth: MONKEYSCODE_API_KEY, or the login saved by mc auth login.

Using Auto mode

Auto mode lets MonkeysCode pick the model for each step: Capuchin by default, a frontier model only when the task needs it. Pass model: 'auto-mode' (or 'monkeyscode-auto'), or 'auto-max' for Max quality. The plain 'auto' still means your default model, not Auto mode. Auto needs a Pro plan or above (Max: Pro+); on other plans the run ends with exit_code 4 and a plan_required card on the result.

import { query, requireSuccess, isRouteEvent, PlanRequiredError } from 'monkeyscode-sdk/subprocess';

async function run(model: string) {
  const q = query({ prompt: 'Fix the failing test', options: { cwd: '/path/to/repo', model } });
  for await (const e of q) {
    if (isRouteEvent(e)) console.log(`step ran on ${e.routed} (${e.reason})`);
  }
  return requireSuccess(await q.result);
}

try {
  await run('auto-mode');
} catch (e) {
  if (!(e instanceof PlanRequiredError)) throw e;
  console.log(e.message, e.upgradeUrl);
  if (e.fallbackModel) await run(e.fallbackModel); // e.g. capuchin-reason
}

PlanRequiredError extends McProcessError, so existing catch code still works. system/route events are informational: the routed model can change from step to step.

To run the agent inside your own Node process instead, without installing mc, use monkeyscode-agent. It has the same query().

Docs

The MonkeysCode class (run(), stream()), ciRun and Session call a hosted endpoint that isn't live yet, so they fail with an HTTP error. Use query().

License

MIT