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

workweave

v0.3.0

Published

CLI tool that weaves scattered developer signals into a focused, prioritized workday plan

Downloads

278

Readme

Workweave

Turn scattered developer signals into a focused, prioritized plan for your day.

npm version License: MIT Node.js

Workweave is a CLI tool that ingests activity from GitHub, Linear, and Slack, then synthesizes a time-boxed workday plan — either using deterministic prioritization rules or an AI model of your choice (local, Anthropic, or OpenAI).


How it works

GitHub ─┐
Linear ─┼──▶  ingest ──▶  normalize ──▶  correlate ──▶  prioritize ──▶  schedule ──▶  plan
Slack  ─┘                                                      ▲
                                                         (optional AI)
  1. Ingest — pull open PRs, assigned issues, mentions, and messages
  2. Normalize — map everything to a common Artifact model
  3. Correlate — link related items across sources
  4. Prioritize — score by urgency, importance, social pressure, staleness, and blocking factors
  5. Schedule — fit clusters into your available workday budget
  6. Display — rich terminal output or machine-readable JSON

Features

  • Three AI providers — local model (no key required), Anthropic Claude, or OpenAI
  • Rules mode — works fully offline, no API key needed
  • JSON output — pipe into scripts, dashboards, or other tools with --json
  • Interactive setup — guided workweave setup wizard configures everything
  • Connector detectionworkweave detect checks which sources are ready before you run
  • Configurable workday budget — schedule work to fit your actual available hours

Install

npm install -g workweave

That's it. The workweave command is now available globally.

From source (for contributors):

git clone https://github.com/emin93/workweave.git
cd workweave
npm install && npm run build && npm link

Quick start

1. Run the interactive setup wizard:

workweave setup

The wizard walks you through:

  • GitHub personal access token (repo scope)
  • AI provider — downloads a local model (~4 GB, runs on CPU) or configures an API key
  • Workday hours (default: 8 h)
  • Linear API key (optional)
  • Slack user token (optional)

All credentials are stored in a local .env file that is never committed.

2. Check that your connectors are ready:

workweave detect

3. Synthesize your day:

workweave synth

Commands

workweave setup

Interactive wizard to configure connectors and AI.

workweave setup

workweave detect

Check which connectors are configured and reachable.

workweave detect
  github   ✓  authenticated as emin93
  linear   ✓  workspace: Acme Corp
  slack    ✗  SLACK_USER_TOKEN not set

Pass --connectors github,linear,slack to check specific sources only.

workweave synth

Fetch signals and produce a workday plan.

# Synthesize your day (AI auto-detected)
workweave synth

# Force a specific provider
workweave synth --provider anthropic

# Adjust available time
workweave synth --workday-minutes 360

# Machine-readable output
workweave synth --json

# Limit to specific connectors
workweave synth --connectors github,linear

# Skip AI and use rules-based prioritization only
workweave synth --no-ai

AI provider

Run workweave setup to choose your AI provider. The choice is saved to your .env and used on every run.

| Provider | Model | Requires | |----------|-------|---------| | Anthropic | claude-haiku-4-5 | ANTHROPIC_API_KEY | | OpenAI | gpt-4o-mini | OPENAI_API_KEY | | Local | Qwen 2.5 1.5B (via node-llama-cpp) | ~1 GB one-time download, no key |

Override for a single run with --provider anthropic|openai|local.


Environment variables

| Variable | Description | |----------|-------------| | AI_PROVIDER | Active AI provider: anthropic | openai | local (set by workweave setup) | | GITHUB_TOKEN | GitHub personal access token (repo scope) | | LINEAR_API_KEY | Linear personal API key | | SLACK_USER_TOKEN | Slack user token (xoxp-…) | | ANTHROPIC_API_KEY | Anthropic API key | | ANTHROPIC_MODEL | Model override (default: claude-haiku-4-5) | | OPENAI_API_KEY | OpenAI API key | | OPENAI_MODEL | Model override (default: gpt-4o-mini) | | WORKDAY_MINUTES | Available minutes per day (default: 480) |

Variables can be set in a local .env file at the project root (created by workweave setup) or exported in your shell.


JSON output

Add --json to any command for machine-readable output. Progress logs are suppressed and only the result is written to stdout.

workweave synth --json | jq '.plan.blocks[].title'

synth output shape:

{
  "plan": {
    "blocks": [...],           // scheduled work blocks
    "synthesisMode": "ai",     // "ai" | "rules"
    "synthesisProvider": "local"
  },
  "meta": {
    "connectors": ["github"],
    "rawEvents": 42,           // raw events ingested
    "artifacts": 18,           // normalized artifacts
    "connectorErrors": []      // non-fatal errors
  }
}

detect output shape:

{
  "connectors": [
    { "id": "github", "ready": true, "detail": "authenticated as emin93" },
    { "id": "linear", "ready": false, "detail": "LINEAR_API_KEY not set" }
  ]
}

Project structure

src/
  cli.ts                  # CLI entry point, argument parsing
  setup.ts                # Interactive setup wizard
  display.ts              # Terminal rendering (plan, detect, spinner)
  env.ts                  # .env file loading and writing
  connectors/
    github.ts             # GitHub REST API connector
    linear.ts             # Linear GraphQL connector
    slack.ts              # Slack Web API connector
    registry.ts           # Connector registry + detect-all
  pipeline/
    ingest.ts             # Orchestrate connector fetching
    normalize.ts          # Map raw events → Artifact
    correlate.ts          # Link related artifacts across sources
    prioritize.ts         # Score and rank clusters
    schedule.ts           # Fit clusters into workday budget
    ai-synthesize.ts      # AI-powered clustering and titling
  ai/
    provider.ts           # LLMProvider interface + OpenAI/Anthropic/LlamaCpp impls
    local.ts              # Local model path helpers and download
  types/                  # Shared TypeScript models

Contributing

Contributions are welcome. Please open an issue to discuss significant changes before submitting a PR.

npm run build   # compile TypeScript
npm run lint    # ESLint

License

MIT