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

@harness-engineering/orchestrator

v0.2.3

Published

Orchestrator daemon for dispatching coding agents to issues

Readme

@harness-engineering/orchestrator

Orchestrator daemon for dispatching coding agents to issues. Polls an issue tracker for candidate tasks, manages ephemeral workspaces, runs agents to resolve issues, and updates the tracker with progress.

Architecture

┌──────────────────────────────────────────────────┐
│                 Issue Tracker                     │
│  RoadmapTrackerAdapter · Linear Extension        │
└──────────────────┬───────────────────────────────┘
                   ▼
┌──────────────────────────────────────────────────┐
│              Core State Machine                   │
│  Candidate Selection · Concurrency Control       │
│  Reconciliation · Retry Logic                    │
│  Event Sourcing (applyEvent → side effects)      │
└──────────────────┬───────────────────────────────┘
                   ▼
┌────────────────┐  ┌─────────────────┐
│  Agent Runner  │  │   Workspaces    │
│  Claude Backend│  │  WorkspaceManager│
│  Mock Backend  │  │  WorkspaceHooks │
└───────┬────────┘  └────────┬────────┘
        └────────┬───────────┘
                 ▼
┌──────────────────────────────────────────────────┐
│            Prompt Rendering (LiquidJS)           │
└──────────────────────────────────────────────────┘

Quick Start

import {
  Orchestrator,
  loadWorkflowConfig,
  WorkspaceManager,
  WorkspaceHooks,
  ClaudeBackend,
  PromptRenderer,
  RoadmapTrackerAdapter,
} from '@harness-engineering/orchestrator';

// Load workflow configuration
const config = loadWorkflowConfig('./workflow.yaml');

// Create and start the orchestrator
const orchestrator = new Orchestrator(config);
await orchestrator.start();

Core Concepts

Event-Sourced State Machine

The orchestrator uses an event-sourced architecture. All state transitions are modeled as events (OrchestratorEvent) that produce side effects (SideEffect):

import { applyEvent, createEmptyState } from '@harness-engineering/orchestrator';

const state = createEmptyState();
const { state: next, effects } = applyEvent(state, event);
// effects: DispatchEffect, StopEffect, ScheduleRetryEffect, etc.

Candidate Selection

Issues are ranked and filtered before dispatch:

import { sortCandidates, selectCandidates, isEligible } from '@harness-engineering/orchestrator';

const ranked = sortCandidates(issues);
const selected = selectCandidates(ranked, availableSlots);

Agent Backends

Two backends are available:

  • ClaudeBackend — Production backend using the Claude API
  • MockBackend — Test backend for deterministic behavior in tests

Workspace Management

Each agent run gets an ephemeral workspace with lifecycle hooks:

import { WorkspaceManager, WorkspaceHooks } from '@harness-engineering/orchestrator';

const manager = new WorkspaceManager(config);
const hooks = new WorkspaceHooks(config);

API

Orchestrator

The main class that ties everything together:

  • start() — Begin polling and dispatching
  • stop() — Gracefully shut down
  • Events: state_change, agent_event

Core Functions

| Export | Description | | --------------------- | ----------------------------------------------------------- | | applyEvent | Apply an event to state, returning new state + side effects | | createEmptyState | Create an initial empty orchestrator state | | sortCandidates | Rank issues by priority and eligibility | | selectCandidates | Select top candidates within concurrency limits | | isEligible | Check if an issue is eligible for dispatch | | getAvailableSlots | Get number of available agent slots | | canDispatch | Check if dispatch is possible given current state | | reconcile | Reconcile expected state against actual state | | calculateRetryDelay | Compute exponential backoff delay |

Tracker Adapters

| Export | Description | | ------------------------ | ---------------------------------------- | | RoadmapTrackerAdapter | Reads issues from docs/roadmap.md | | LinearTrackerExtension | Extends tracking with Linear integration |

Prompt Rendering

| Export | Description | | ---------------- | -------------------------------------------- | | PromptRenderer | Renders LiquidJS templates for agent prompts |

License

MIT