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

@clawnify/agents

v0.1.1

Published

Typed server-side client for the Clawnify agents API.

Readme

@clawnify/agents

Server-side client for Clawnify's agent API. The app owns its business data and run results; the selected agent owns execution and its native scheduler.

import { createAgents } from "@clawnify/agents";

const agents = createAgents(env);
const { servers, page } = await agents.list({ limit: 25 });
// Populate a dropdown from servers; follow page.has_more for further pages.

await agents.dispatch({
  server_id: selectedServerId,
  instruction: "Read the saved search from the app, find matching prospects, and save evidence. Do not send outreach.",
  payload: { search_id: savedSearch.id },
  idempotency_key: savedRun.id,
});

// Call only after the user enables recurring work. Persist the creation key
// BEFORE sending, and persist the returned server/schedule IDs in the app.
const { schedule } = await agents.schedules.create(selectedServerId, {
  name: "Daily prospect signals",
  trigger: { kind: "cron", expr: "0 9 * * 1-5", tz: "Europe/Amsterdam" },
  text: "Read the saved search from the app, collect evidence, and save results. Do not send outreach.",
}, { idempotencyKey: savedSearch.scheduleCreationKey });

await agents.schedules.pause(selectedServerId, schedule.id);
await agents.schedules.resume(selectedServerId, schedule.id);
await agents.schedules.update(selectedServerId, schedule.id, { name: "Renamed scan" });
await agents.schedules.run(selectedServerId, schedule.id, { idempotencyKey: savedRun.id });
const { runs } = await agents.schedules.runs(selectedServerId, schedule.id);
await agents.schedules.delete(selectedServerId, schedule.id);

Configuration and authority

CLAWNIFY_TOKEN is required. Clawnify injects it into deployed apps. Never expose it in browser code. An OAuth bearer also works, with optional CLAWNIFY_ORG_ID to select the active organization. CLAWNIFY_API_URL overrides the HTTPS origin, not a route; localhost HTTP is supported for development.

The existing service token is organization-scoped and shared by its apps. This package does not provide app-to-app credential isolation. Schedule operations only expose schedules created through this API, not manually created native schedules. The existing agent Schedule page remains available for native administration.

Agent selection means a server's main agent; sub-agent selection is not supported. Agent secrets, browser sessions, and native WebSocket details stay behind the platform API.

Schedules and retries

  • Triggers: five-field cron, intervals in whole minutes (every_ms), or a future ISO timestamp with timezone (at). Hermes only supports its server's configured timezone; unsupported combinations return an error.
  • App-created schedules use isolated sessions and silent notification delivery. Silent is not a tool restriction: the app's instruction/skill must define allowed actions, access rules, evidence handling, and work limits.
  • Native schedules need an updated hook advertising schedules.receipts. Older hooks return agent_schedule_upgrade_required before dispatch. This package does not upgrade an agent or install app skills automatically.
  • Create and run require a persisted idempotencyKey, scoped to organization, server, and operation. Reusing a key with different input returns a conflict. Completed calls replay their original response, not current schedule state. Use schedules.get() to refresh current state.
  • No automatic retries. Catch ClawnifyAgentsError and inspect code, status, outcomeUnknown, and optional retryAfterSeconds.
  • If outcomeUnknown is true, reuse the same key to check for a recorded completion. Never generate a replacement key automatically: native create is not idempotent, and the agent may already have accepted the work. If the outcome stays unknown, inspect the native Schedule page before recovery. Pending receipts do not expire or redispatch themselves.
  • One-off dispatch() uses the existing 24-hour dedupe window, not the stronger schedule receipt mechanism. Concurrent identical dispatches may both run.

List methods return { page: { limit, offset, has_more } }, defaulting to 25 items, with a maximum of 100. Schedule listing reflects native state; the receipt store records identity and request outcomes, not another clock.

Apps must provide their own consent, saved-search instructions, result storage, and lifecycle handling (including disabling/removing schedules before switching agents or uninstalling). Manifest-declared schedules and skill synchronization are not implemented by this client.