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

highli

v0.1.0

Published

AI powered CLI that writes your self-performance review using real data from GitHub, Slack, Linear, Jira, and more

Readme

highli

AI powered CLI tool that helps you write self-performance reviews by pulling real data from your work tools and iterating with you in a chat interface.

TL;DR

npm install && npm run build && npm link      # install
cp .env.example .env                          # add your API keys
highli setup                                  # connect your data sources
highli brag --all                              # generate a brag doc to see what you've done
highli brag --amend                            # update your last brag doc with new data
highli report-on --timeframe "Q1 2026"        # generate a report about a direct report
highli review --timeframe "last 6 months"     # start your self-review with that context

How it works

  1. Launch highli with a timeframe
  2. Paste your review questions (or screenshot the review form)
  3. highli connects to your data sources (GitHub, Slack, Linear, Notion) and pulls your contributions
  4. It drafts answers using real evidence, asks for context it can't find, and iterates with you
  5. Export your final review to a file or clipboard

Quick start

# Install dependencies
npm install

# Copy .env and add your API keys
cp .env.example .env

# Run the setup wizard to configure data sources
npm run dev -- setup

# Start a review session
npm run dev -- review --timeframe "last 6 months"

Configuration

AI Provider

Set in .env:

AI_PROVIDER=anthropic          # or "openai"
AI_MODEL=claude-sonnet-4-20250514  # or "gpt-4o"
ANTHROPIC_API_KEY=sk-ant-...

Data Sources

All optional — highli works with whatever you connect:

| Source | Env Var | What it pulls | |--------|---------|---------------| | GitHub | GITHUB_TOKEN | PRs authored, code reviews given, commit activity | | Slack | SLACK_TOKEN | Messages, channel activity, thread participation | | Linear | LINEAR_API_KEY | Completed issues, project contributions | | Notion | NOTION_TOKEN | Pages created/edited, document content | | Jira | JIRA_TOKEN | Issues completed, sprint contributions, epics owned | | Confluence | CONFLUENCE_TOKEN | Pages authored, documentation contributions | | GitLab | GITLAB_TOKEN | MRs merged, code reviews, pipeline activity | | Bitbucket | BITBUCKET_TOKEN | PRs, commits, repository contributions | | Asana | ASANA_TOKEN | Tasks completed, projects contributed to | | Google Docs | GOOGLE_TOKEN | Docs created/edited, comments, collaboration | | PagerDuty | PAGERDUTY_TOKEN | On-call shifts, incidents responded to | | Datadog | DATADOG_API_KEY | Dashboards created, monitors configured |

Note: All sources above are implemented. Some require additional env vars beyond the token — see .env.example for full details (e.g., Jira/Confluence need _EMAIL and _BASE_URL, Bitbucket needs _USERNAME and _WORKSPACE).

GitHub note: If you don't set GITHUB_TOKEN, highli will automatically use your gh CLI session (if authenticated). This is useful when your org blocks personal access tokens.

Persistent config

Settings like your GitHub username, default repos, and Slack user ID are stored in ~/.highli/config.json.

Usage

Commands

highli setup

Interactive wizard to configure data sources and access methods. Run this first.

highli setup

highli review

Start an interactive performance review session. Paste your review questions or send a screenshot, and highli gathers data, drafts answers, and iterates with you.

highli review --timeframe "last 6 months"
highli review --from 2025-10-01 --to 2026-03-31
highli review --timeframe "Q1 2026" --screenshot ~/review-form.png

| Flag | Description | |------|-------------| | --from <date> | Review period start (YYYY-MM-DD) | | --to <date> | Review period end (YYYY-MM-DD) | | --timeframe <range> | Natural language: "Q1 2026", "last 6 months", "H2 2025" | | --screenshot <path> | Start with a screenshot of your review form | | --verbose | Debug logging |

Chat commands (while in a review session):

| Command | Description | |---------|-------------| | /screenshot <path> | Send a screenshot of your review form | | /export | Save the draft to ~/.highli/reviews/ and copy to clipboard | | /quit | Exit |

highli report

Generate an insights report — work patterns, productivity trends, and Claude Code usage analysis.

highli report --timeframe "Q1 2026"
highli report --from 2025-10-01 --to 2026-03-31

| Flag | Description | |------|-------------| | --from <date> | Report period start (YYYY-MM-DD) | | --to <date> | Report period end (YYYY-MM-DD) | | --timeframe <range> | Natural language timeframe (defaults to last 6 months) |

highli brag

Generate a brag document — a comprehensive record of accomplishments, impact, and evidence for performance reviews and promotion cases.

highli brag --timeframe "last 6 months"
highli brag --from 2025-10-01 --to 2026-03-31

Use --amend to incrementally update your last brag doc with new data since it was generated, rather than starting from scratch:

highli brag --amend

| Flag | Description | |------|-------------| | --from <date> | Period start (YYYY-MM-DD) | | --to <date> | Period end (YYYY-MM-DD) | | --timeframe <range> | Natural language timeframe (defaults to last 6 months) | | --amend | Update the last brag doc with new data since it was generated |

highli report-on

Generate a report about a direct report's work — accomplishments, impact, and evidence for performance reviews and 1:1s. Resolves the person's identity across all connected sources (GitHub, Linear, Slack, Notion) given their name and email.

# Interactive — prompts for name and email
highli report-on --timeframe "Q1 2026"

# With flags — skips prompts
highli report-on --name "Jane Doe" --email "[email protected]" --timeframe "last 3 months"

| Flag | Description | |------|-------------| | --name <name> | Direct report's full name | | --email <email> | Direct report's email address | | --from <date> | Period start (YYYY-MM-DD) | | --to <date> | Period end (YYYY-MM-DD) | | --timeframe <range> | Natural language timeframe (defaults to last 6 months) |

Adding a data source

highli uses a plugin registry — adding a new source (e.g., Jira) requires one file and one import line.

1. Create src/sources/jira.ts

import { tool } from "ai";
import { z } from "zod";
import { defineSource } from "./registry.js";
import { formatSourceResult } from "./types.js";

// Your API functions...

export default defineSource({
  name: "Jira",
  envKey: "JIRA_TOKEN",
  description: "Issues, sprints, and project boards",
  tools: {
    jira_get_issues: tool({
      description: "Get Jira issues assigned to the user in a date range",
      parameters: z.object({
        since: z.string().describe("Start date YYYY-MM-DD"),
        until: z.string().describe("End date YYYY-MM-DD"),
      }),
      execute: async (params) => {
        // Call Jira API, return formatted result
      },
    }),
  },
});

2. Register it in src/sources/registry.ts

import jira from "./jira.js";
const allSources: Source[] = [github, linear, slack, notion, jira];

3. Add the env var to .env.example

JIRA_TOKEN=

That's it. The tools, system prompt, and UI all auto-discover from the registry.

Development

npm run dev          # Run with tsx (fast)
npm run build        # Build with tsup
npm run typecheck    # Type check
npm run start        # Run built version

Global install

npm run build && npm link
highli setup
highli review --timeframe "last 6 months"

Stack