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

@reneza/ats-adapter-composite

v0.9.0

Published

Cross-source adapter for the Agentic Task System. Query GitHub + Notion + TickTick + any ATS backends as ONE fused corpus: a single `ats find` returns one RRF-ranked list across all of them, each result tagged with its backend. The thing a single-vendor M

Readme

@reneza/ats-adapter-composite

ats-adapter-composite is the cross-source adapter for the Agentic Task System (ATS). It queries several backends — GitHub, Notion, TickTick, Obsidian, and more — as one fused corpus, so a single ats find returns one RRF-ranked list across all of them, each result tagged with its backend.

ats find — one query fused across GitHub, Notion, and TickTick, ranked by RRF

You already have connectors. This is the semantic layer they're missing.

Your agent can already reach Notion, GitHub, and your task app — every vendor ships an official MCP connector now. That gives the agent access: read this page, create that issue, list those tasks. What it does not give you is retrieval.

A connector answers "fetch page X." It cannot answer "what do I know about the auth migration?" across three tools, ranked by relevance. That is a search problem, and connectors don't solve it — they hand the model an API and hope it queries the right thing.

ats-adapter-composite is the semantic layer over your connectors:

  • Ranked by meaning, not endpoints. Hybrid retrieval (keyword + dense + sparse) fused with Reciprocal Rank Fusion, so the first result is the relevant one — not whatever the model guessed to query.
  • One query, every source. GitHub issues, Notion pages, and your tasks come back in a single ranked list, deduped, each tagged with its backend. No connector does cross-source.
  • Provenance. Every hit says which retrieval branch found it and which backend it came from.
  • No vector database. Keyword + RRF works out of the box; dense search is optional (local Qdrant + Ollama), never a hosted vector store to maintain.

The connectors are the plumbing. This is the retrieval brain on top.

Setup

Install the composite plus whichever child adapters you want fused:

npm install -g @reneza/ats-cli @reneza/ats-mcp \
  @reneza/ats-adapter-composite \
  @reneza/ats-adapter-github @reneza/ats-adapter-notion @reneza/ats-adapter-ticktick

List the children in ~/.config/ats/composite.json:

{
  "adapters": [
    "@reneza/ats-adapter-github",
    "@reneza/ats-adapter-notion",
    "@reneza/ats-adapter-ticktick"
  ]
}

Each child reads its own existing config and auth (ATS_GITHUB_TOKEN, ATS_NOTION_TOKEN, the TickTick OAuth login). The composite adds none of its own — it just namespaces ids and routes. Then:

ats config use @reneza/ats-adapter-composite
ats doctor                                  # shows per-backend auth
ats find "auth token migration"             # one ranked list across all backends
claude mcp add ats -e ATS_ADAPTER=@reneza/ats-adapter-composite -- ats-mcp

Mapping

| ATS | Composite | | ---------- | --------------------------------------------------------------- | | Project | a child project, id namespaced <backend>:<projectId> (e.g. github:owner/repo, notion:db-1111) | | Task | a child record, re-stamped with source: <backend> | | find | bulkFetch() concatenates every child's corpus → Core runs hybrid + RRF over the union | | writes | routed to the child named by the project id's <backend>: prefix |

FAQ

I already have a Notion MCP server and a GitHub MCP server. Why this? Those are connectors — they give your agent access to one tool each. This is the retrieval layer: one query, ranked by meaning, fused across all of them, with provenance. Access is not search.

Does it need a vector database? No. Keyword + RRF works out of the box across every backend; dense retrieval is optional (local Qdrant + Ollama).

How does auth work across backends? Each child authenticates itself with its own token/OAuth. The composite aggregates status (ats doctor) but holds no credentials of its own.

Part of the Agentic Task System

The composite fuses these backends (install the ones you use):

Main repo: agentic-task-system.

Verify

node --test     # offline unit tests (fake child adapters)