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

recon-oss

v1.0.0

Published

Reconnaissance for open source contributors.

Readme

recon-oss

Reconnaissance for open source contributors.

Monitors a GitHub repo's merged PRs and open issues, uses a local LLM to generate a daily digest, and personalizes it based on what you're trying to contribute — and remembers your feedback over time.

Built because manually reading 10-20 merged PRs a day to figure out what to work on next is exhausting.

Work in progress. Currently a working script. CLI with proper setup wizard coming soon.


The idea

When you're trying to contribute to an active OSS project, you have two problems:

  1. The repo moves fast — PRs merge daily across multiple subsystems
  2. You don't know which open issues the team actually cares about right now

recon-oss solves this by running a daily pipeline that fetches what merged, correlates it with open issues, and asks an LLM to surface contribution opportunities — personalized to your specific goal (e.g. "I want hard backend auth bugs, not frontend work").

It also remembers your feedback. If you reply "focus on issue #442 from now on", the next digest reflects that.


What's working right now

  • Fetches merged PRs from the last 24h via GitHub API
  • On first run, bootstraps up to 500 issues and 100 PRs into a local SQLite database
  • Every subsequent run does a delta sync — only fetches what changed since last time
  • Builds a prompt combining three memory layers and calls a local Ollama model
  • Prints the digest to terminal and saves it to data/summary.txt
  • Accepts feedback after each run — stored in data/chat.json and injected into the next prompt
  • Telegram delivery is wired up but optional

Architecture

The pipeline runs in five stages:

GitHub API (delta only after first run)
        ↓
   SQLite sync (repo.db)
        ↓
   Prompt assembly
   [ motive.json + chat.json + SQL queries ]
        ↓
   Local LLM (Ollama)
        ↓
   Delivery (terminal / Telegram)
        ↓
   User feedback → stored in chat.json → used in next run

Three memory layers:

| Memory | File | What it stores | |--------|------|----------------| | Motive | data/motive.json | Your contribution goals, subsystems to focus on, what to avoid | | Repo state | data/repo.db | All issues and merged PRs, incrementally updated | | Chat history | data/chat.json | Past digests and your replies — feeds into next run's prompt |


File structure

recon-oss/
├── run.ts               # entry point — runs the full pipeline
├── config.ts            # all settings live here (repo, LLM, limits)
├── tsconfig.json        # TypeScript compiler config
├── core/
│   ├── sync.ts          # GitHub API fetcher — bootstrap + delta sync
│   ├── context.ts       # builds the LLM prompt from all three memories
│   └── llm.ts           # Ollama / Anthropic API call
├── memory/
│   ├── db.ts            # SQLite read/write for issues and PRs
│   ├── chat.ts          # chat history read/write
│   └── motive.ts        # loads and formats user motive
├── delivery/
│   ├── index.ts         # routes to the right delivery channel
│   ├── cli.ts           # terminal output + feedback prompt
│   └── telegram.ts      # Telegram bot send + reply capture
└── data/                # gitignored — local state lives here
    ├── repo.db
    ├── motive.json
    ├── chat.json
    └── summary.txt

Running it (current, manual setup)

Requirements: Node.js 18+, Ollama running locally with a model pulled.

git clone https://github.com/x15sr71/recon-oss
cd recon-oss
npm install

Edit config.ts and fill in:

  • github.token — personal access token with public_repo scope
  • repo.owner and repo.name — the repo you want to monitor
  • llm.model — whichever Ollama model you have (tested with qwen3:14b)
  • motive — your actual contribution goals
ollama serve   # if not already running
npm run build
npm start

First run bootstraps the database (takes a minute). Every run after that is fast — only syncs what changed.


What's coming

  • [ ] recon-oss init — interactive CLI setup wizard, no manual config editing
  • [ ] npm install -g recon-oss — proper global install
  • [ ] Cron setup built into the CLI
  • [x] Anthropic / Claude as LLM option (set LLM_PROVIDER=anthropic)
  • [ ] Better prompt tuning — current model sometimes ignores user directives
  • [ ] Homebrew tap

Contributing

Open to contributions, especially on:

  • Prompt improvements — making the LLM follow user feedback more strictly
  • Additional delivery channels (Discord, Slack, email)
  • LLM provider adapters (the interface is already modular in core/llm.ts)
  • Testing with repos other than Infisical

If you're using it to track a different repo and hit issues, open an issue with the repo name and what broke.


Why local LLM by default

No API keys needed, no per-run cost, runs offline. The architecture supports cloud LLMs and that's coming — but Ollama first means anyone can run it immediately without a credit card.