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

@graphorin/proactive

v0.15.1

Published

Proactivity layer for the Graphorin framework: heartbeat runner (checklist-driven periodic agent beats with sentinel suppression, busy-deferral via Agent.isBusy(), active-hours windows and per-beat budget/model pinning) and a cron-leg task runner (fresh s

Readme

@graphorin/proactive

Proactivity layer for the Graphorin framework: the pieces that let a personal assistant act on a schedule instead of only answering.

  • Heartbeat (createHeartbeat) - a checklist-driven periodic agent beat. An empty checklist skips the beat before any model call; a busy agent defers it (Agent.isBusy() or an injected runGate); active-hours windows keep the bot quiet at night; the all-quiet sentinel reply (HEARTBEAT_OK) is suppressed instead of delivered. Each beat runs on a cheap isolated profile: fresh session, fail-closed model pin (pinnedProvider), per-beat run budget.
  • Cron-leg tasks (createProactiveCronTask) - "fresh session per fire" runners over durable @graphorin/triggers schedules with fail-closed model pinning and a deterministic no-recursive-scheduling guard.
  • Escalation ladder - outcomes are the typed notify | question | review | act union from @graphorin/core; act is reachable only through an explicit per-task grant plus an active memory ingest gate (fail-closed config check).
import { createHeartbeat } from '@graphorin/proactive';

const heartbeat = createHeartbeat({
  agent: heartbeatAgent, // a dedicated cheap agent (scaffold: 'minimal')
  scheduler,
  schedule: { every: 30 * 60 * 1000, jitterMs: 60_000 },
  checklist: async () => (await listDueReminders()).join('\n') || null,
  profile: { provider: cheapModel, budgetUsd: 0.05 },
  activeHours: { from: '08:00', to: '23:00', timezone: 'Europe/Kyiv' },
  onOutcome: async (o) => gateway.deliver({ identity: owner, text: o.text }),
});
await heartbeat.start();

Single-process by design: schedules ride @graphorin/triggers, whose SQLite store is single-process. See the proactivity guide page for the full picture: heartbeat vs cron-leg, the outcome ladder, act grants, budgets and active hours.


Project Graphorin · v0.15.1 · MIT License · © 2026 Oleksiy Stepurenko · https://github.com/o-stepper/graphorin