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

@tsomaiatech/ductus

v1.0.4

Published

Agent-to-agent coordination orchestrator for autonomous task execution

Readme

Ductus

Agent-to-agent coordination orchestrator for autonomous task execution.

Ductus turns a high-level plan into actionable engineering tasks and executes them using AI agents—Architect decomposes the plan, Engineer implements each task, and Reviewer validates the work. Tasks are run sequentially; rejected implementations are retried with focused remediation until approved or max retries are reached.

Prerequisites

  • Node.js 18+
  • Cursor with the agent CLI available in your PATH
  • Git — the run flow requires a git repository (used to compute diffs for review)

Installation

npm install -g @tsomaiatech/ductus

Quick Start

  1. Eject prompts (syncs prompt templates into your project):

    ductus eject
  2. Write a plan — a markdown or text file describing what you want built (e.g. plan.md).

  3. Run:

    ductus run my-feature --plan plan.md

Commands

ductus eject [--overwrite]

Copies prompt templates from the package into .ductus/prompts/ in your project.

  • Without --overwrite: Only adds missing prompts; does not touch existing files.
  • With --overwrite: Replaces all prompts with the package defaults.

Run this once before your first ductus run, or when you want to pull updated prompts from the package.

ductus run <feature> --plan <path> [options]

Runs the full pipeline: plan → tasks → implement → review.

| Option | Description | |--------|-------------| | feature | Feature name (e.g. auth-flow). Used for the output folder .ductus/<feature>/. | | --plan <path> | Path to the plan file. | | --max-retries <n> | Max retries per task when the Reviewer rejects (default: 2). | | --no-ui / --plain | Disable the Ink terminal UI; use plain console output (for CI, pipes, or headless runs). |

UI modes

By default, ductus run uses an Ink-based terminal UI with:

  • Phase and task progress
  • Streaming agent output in an adaptive panel
  • Human-in-the-loop task approval

For CI, scripts, or piping output, use --no-ui or --plain to run in plain mode:

  • Phase changes and progress logged to stdout
  • Agent output streamed directly to stdout
  • No interactive prompts (tasks are auto-accepted; use with care)

How It Works

Plan (markdown) → Architect → Tasks (JSON)
                                    ↓
                    ┌───────────────┴───────────────┐
                    │  For each task:                │
                    │  1. Engineer implements       │
                    │  2. Reviewer checks diff     │
                    │  3. Approved? → next task     │
                    │     Rejected? → Remediation   │
                    │       Engineer retries        │
                    └───────────────────────────────┘
  1. Architect — Reads the plan and decomposes it into structured tasks (id, summary, description, requirements, constraints). Output is validated against a JSON schema.
  2. Implementation Engineer — Implements the task by editing files. Focuses on surrounding context, not the full codebase.
  3. Reviewer — Reviews the git diff against the task, runs relevant checks (tests, linter, etc.), and outputs approval or rejection with feedback.
  4. Remediation Engineer — When the Reviewer rejects, fixes only the reported issues using the rejection feedback and the previous diff.

Tasks and metadata are stored in .ductus/<feature>/tasks.json.

Customizing Prompts

After running ductus eject, prompts live in .ductus/prompts/:

.ductus/prompts/
├── architect/         # Plan → tasks decomposition
├── implementation-engineer/
├── remediation-engineer/
└── reviewer/

Edit the .mx files there to tailor behavior. They use Moxite for templating. To reset to package defaults, run ductus eject --overwrite.

UI behavior (Ink mode)

When running without --no-ui, the terminal UI adapts to window size:

| Terminal rows | Stream panel | |---------------|--------------| | ≥ 30 | Full scrollable (18 lines) | | 20–29 | Full scrollable (12 lines) | | 15–19 | Full scrollable (8 lines) | | 12–14 | Tail only (last 2–3 lines) | | < 12 | Hidden (stream shown as "Running...") |

On failure, the error view shows the message plus context (task ID, index, attempt) when available.

License

MIT