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

@susu-eng/tender

v0.7.3

Published

Interactive tender CLI launcher

Readme

tender

tender is an interactive CLI/TUI for managing autonomous OpenCode runs in GitHub Actions.

Tender keeps state in workflow files only. No sidecar metadata files.

Run

No install required:

pnpm dlx @susu-eng/tender@latest
# or: npx @susu-eng/tender@latest

Run subcommands the same way:

pnpm dlx @susu-eng/tender@latest ls
pnpm dlx @susu-eng/tender@latest run my-tender
# or: npx @susu-eng/tender@latest ls

Quick Start

  1. Ensure repo secrets are configured for your OpenCode provider.
  2. Run pnpm dlx @susu-eng/tender@latest (or npx @susu-eng/tender@latest).
  3. Choose Add tender.
  4. Enter a name.
  5. Pick agent and schedule.
  6. Commit and push the generated workflow under .github/workflows/.

Requirements

  • GitHub repository with Actions enabled.
  • OpenCode config in the repo (opencode.json and/or .opencode/) or defaults available to OpenCode.
  • GitHub CLI (gh) authenticated for local dispatches (tender run).
  • Provider API key secrets for OpenCode (for example OPENAI_API_KEY, ANTHROPIC_API_KEY) configured in your repository.

Authentication

Tender uses two auth flows.

1. Local auth (tender run)

  • tender run <name> shells out to gh workflow run ....
  • You must be logged into GitHub CLI for the target repo (gh auth login).

2. GitHub Actions auth (workflow execution)

Generated workflows do this in the Run OpenCode step:

  • Install OpenCode on the runner.
  • Pass provider credentials from repo secrets:
    • OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
    • ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
  • Set config paths when present:
    • OPENCODE_CONFIG=$GITHUB_WORKSPACE/opencode.json
    • OPENCODE_CONFIG_DIR=$GITHUB_WORKSPACE/.opencode

Generated workflows also set permissions: contents: write, which allows the job token to push commits back to main.

Commands

Use these as:

pnpm dlx @susu-eng/tender@latest <command>
# or: npx @susu-eng/tender@latest <command>
  • tender launches the interactive TUI.
  • tender init ensures .github/workflows exists.
  • tender add [--name <name>] --agent <agent> [--prompt "..."] [--cron "..."] [--manual true|false] [--push true|false] [--timeout-minutes <minutes>] [<name>] creates a tender non-interactively (for coding agents/automation).
  • tender update <name> [--name <new-name>] [--agent <agent>] [--prompt "..."] [--cron "..."] [--clear-cron] [--manual true|false] [--push true|false] [--timeout-minutes <minutes>] updates an existing tender non-interactively.
  • tender ls lists managed tenders.
  • tender run [--prompt "..."] <name> triggers a tender immediately via workflow_dispatch.
  • tender rm [--yes] <name> removes a managed tender.
  • tender --help lists commands.
  • tender help [command] (or tender <command> --help) shows command-specific usage.

Example non-interactive flow:

pnpm dlx @susu-eng/tender@latest add --name nightly --agent Build --cron "0 9 * * 1" --timeout-minutes 30
pnpm dlx @susu-eng/tender@latest update nightly --agent TendTests --push true --manual false --clear-cron --timeout-minutes 45

How It Works

  • Uses GitHub Actions workflow files as the source of truth.
  • Detects OpenCode agents via opencode agent list.
  • Generates workflows that run opencode run --agent ....
  • Supports on-demand and scheduled runs.
  • Uses plain-English trigger display in the CLI.
  • Pushes changes directly to main from workflow runs.
  • Uses shared concurrency group tender-main.

Contributing

Contributor/developer docs are in CONTRIBUTING.md.

Maintainer Release

make publish VERSION=0.2.0

What it does:

  • Runs check-fast and npm pack smoke checks.
  • Bumps package.json version.
  • Commits release: vX.Y.Z.
  • Tags vX.Y.Z locally.
  • Builds cross-platform binaries and uploads them to GitHub release vX.Y.Z.
  • Publishes @susu-eng/tender to npm.

Repository secret required for npm publishing:

  • NPM_TOKEN