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

subagent

v1.1.1

Published

TypeScript SDK for building agents that delegate to subagents. Powered by specialized Morph models for code editing, codebase search, and context compaction.

Readme

⚠️ PRIVATE BETA — NOT FOR PRODUCTION USE

This package is in untested private beta. APIs will change without notice. Do not use in production.

subagent

The third primitive in agent programming. System prompts define who an agent is. Tools define what it can do. Subagents define how it delegates.

npm install subagent

Quick start

import { createAgent } from "subagent"

const agent = await createAgent({
  model: "anthropic:claude-sonnet-4-6",
  subagents: [
    { name: "researcher", description: "Search and analyze code", permissions: "read-only" },
    { name: "editor", description: "Make code changes", budget: { maxTokens: 100000 } },
  ],
  warpGrep: true,
  fastApply: true,
  compact: true,
})

await agent.prompt("Find and fix the memory leak in the worker pool")
await agent.waitForIdle()

What it does

createAgent() returns a fully configured agent with built-in tools (ls, read_file, write_file, edit_file, glob, grep, execute, write_todos) and optional capabilities:

Subagent delegation — Each subagent gets its own context window. The parent delegates, subagents process in isolation and return compressed results. Parallel execution, error isolation, budget enforcement, permission scoping ("full" | "read-only" | "no-execute" | allowedTools), and structured output via TypeBox schemas.

WarpGrep — Semantic codebase search via specialized model. No embeddings, no indexing. Plans a strategy, executes up to 24 parallel tool calls across 4 turns. warpGrep: true

FastApply — Code editing at 10,500 tok/s. The agent writes partial edits with // ... existing code ... markers, Morph expands them into complete files. fastApply: true

Remote executionSSHBackend runs every tool call on a remote machine via SFTP + SSH exec. Auto-reconnects with exponential backoff.

Agent teams — Long-lived teammates with inbox messaging and shared task boards. Dependency tracking across tasks. The parent acts as team lead.

Model Router — Classifies each prompt and routes easy tasks to cheaper models. modelRouter: true

Context compaction — Compresses older messages so agents run indefinitely without context overflow. compact: true

Subagents

A subagent consumes more context than it returns. It reads 50 files, analyzes patterns, and returns 3 findings. The parent never sees the noise.

import { Type } from "@sinclair/typebox"

const agent = await createAgent({
  model: "anthropic:claude-sonnet-4-6",
  subagents: [
    {
      name: "analyzer",
      description: "Find security issues",
      permissions: "read-only",
      outputSchema: Type.Object({
        issues: Type.Array(Type.Object({
          file: Type.String(),
          line: Type.Number(),
          severity: Type.Union([Type.Literal("low"), Type.Literal("medium"), Type.Literal("high")]),
          message: Type.String(),
        })),
      }),
    },
  ],
})

The subagent calls an output tool with data matching the schema. The parent gets typed JSON, not freeform text.

Remote execution

Point the agent at a remote machine. Every tool call runs there.

import { createAgent, SSHBackend } from "subagent"

const agent = await createAgent({
  model: "anthropic:claude-sonnet-4-6",
  backend: new SSHBackend({
    host: "dev-server",
    username: "deploy",
    privateKeyPath: "~/.ssh/id_ed25519",
    cwd: "/app",
  }),
  warpGrep: true,
  fastApply: true,
})

| Backend | Use case | |---------|----------| | LocalShellBackend | Local filesystem + shell (default) | | SSHBackend | Remote machines via SSH/SFTP | | FilesystemBackend | File operations only, no shell |

Implement Backend or SandboxBackend for custom targets (containers, cloud APIs, etc).

Teams

For longer projects, subagents are ephemeral. Teams are persistent agents that coordinate through inboxes.

import { createAgent, SSHBackend } from "subagent"

const agent = await createAgent({
  model: "anthropic:claude-sonnet-4-6",
  team: {
    name: "full-stack",
    teammates: [
      {
        name: "backend",
        description: "Build API endpoints and migrations",
        backend: new SSHBackend({ host: "api-server", username: "deploy", cwd: "/app/api" }),
      },
      {
        name: "frontend",
        description: "Build React components and pages",
      },
      {
        name: "qa",
        description: "Run integration tests",
        permissions: "read-only",
      },
    ],
  },
})

await agent.prompt("Add user settings page with email preferences backed by a new API endpoint")
await agent.waitForIdle()

Each teammate runs as a long-lived agent with its own context window and backend. They coordinate through inbox messages and shared task boards with dependency tracking.

Work subagents (DOCX, PDF)

Specialized subagents for document manipulation.

import { DocxAgent } from "subagent/work/docx"

const docx = new DocxAgent({ apiKey: process.env.MORPH_API_KEY })
const result = await docx.chat("Add a confidentiality clause to section 3", { documentId })

DOCX support includes track changes, comments, and full OOXML manipulation. PDF support covers form field reading and filling.

createAgent options

| Option | Type | Description | |--------|------|-------------| | model | string | Model shorthand, e.g. "anthropic:claude-sonnet-4-6" | | systemPrompt | string | Appended to the base prompt | | subagents | SubAgentConfig[] | Specialist definitions for delegation | | tools | AgentTool[] | Custom tools alongside built-ins | | backend | Backend | File/shell backend (default: LocalShellBackend) | | team | TeamConfig | Spawn teammates with inbox messaging | | memory | string[] | Context files loaded into system prompt | | skills | string[] | Skill markdown files loaded into system prompt | | warpGrep | boolean \| config | Semantic codebase search | | fastApply | boolean \| config | Smart code editing at 10,500 tok/s | | modelRouter | boolean \| config | Route prompts to cheaper models | | compact | boolean \| config | Compress old messages to prevent overflow | | githubSearch | boolean | Search public GitHub repos | | thinkingLevel | "off" \| "light" \| "full" | Reasoning depth | | name | string | Agent name (used in logs and team communication) | | debug | boolean | Debug logging |

Environment variables

ANTHROPIC_API_KEY=    # or OPENAI_API_KEY, GOOGLE_API_KEY
MORPH_API_KEY=        # for WarpGrep, FastApply, Model Router, Compact

Docs · GitHub · MIT