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

@slope-dev/slope

v1.13.1

Published

SLOPE — Sprint Lifecycle & Operational Performance Engine. Golf-metaphor sprint scoring for engineering teams.

Readme

SLOPE

Sprint Lifecycle & Operational Performance Engine

A framework for measuring and improving sprint execution quality. Replace subjective retrospectives with objective, quantifiable metrics. Works with Claude Code, Cursor, and OpenCode.

Quick Start

# Install globally (makes `slope` available everywhere)
npm install -g @slope-dev/slope

# Or install locally in your project and use npx
npm install @slope-dev/slope
npx slope init

# Initialize in your project (auto-detects your AI tool)
slope init

# Or specify your platform
slope init --claude-code
slope init --cursor
slope init --opencode

# View your handicap card
slope card

# Get a pre-sprint briefing
slope briefing

# Generate an HTML performance report
slope report --html

Note: If installed locally (without -g), prefix commands with npx — e.g., npx slope card.

What is SLOPE?

SLOPE maps sprint execution to a scoring metaphor. Every sprint has a par (expected ticket count), every ticket is a shot with an approach complexity and outcome. Over time, your handicap reveals patterns: Do you over-engineer? Under-scope? Pick the wrong approach?

SLOPE provides:

  • Scorecards — structured sprint retros with quantified outcomes
  • Handicap tracking — rolling performance windows (last 5, 10, all-time)
  • Dispersion analysis — miss pattern detection and systemic issue identification
  • Training recommendations — data-driven improvement suggestions
  • Agent guidance hooks — real-time hints for AI coding agents
  • HTML reports — self-contained visual performance dashboards
  • Multi-platform support — Claude Code, Cursor, OpenCode

Metaphors

SLOPE ships with 6 built-in metaphors. The scoring math is identical — only the terminology changes.

| Metaphor | Sprint | Ticket | Perfect | Par | Miss | |----------|--------|--------|---------|-----|------| | Golf (default) | Sprint | Shot | Hole-in-One | Par | Missed Long/Short/Left/Right | | Tennis | Set | Point | Ace | Deuce | Wide/Net/Long/Out | | Baseball | Inning | At-Bat | Home Run | Single | Foul/Strike/Pop/Ground | | Gaming | Level | Quest | S-Rank | B-Rank | Over-leveled/Under-leveled/Wrong Path/Side-tracked | | D&D | Quest | Encounter | Natural 20 | DC Met | Fumble/Misfire/Detour/Distraction | | Matrix | Simulation | Anomaly | The One | Stable | Overclocked/Underclocked/Drift/Noise |

Configure in .slope/config.json:

{ "metaphor": "gaming" }

Or per-command: slope review --metaphor=tennis

Package

Published as a single package: @slope-dev/slope

Includes the core scoring engine, SQLite store, CLI (30 commands), and MCP server.

CLI Commands

Scoring & Analysis

| Command | Description | |---------|-------------| | slope card | Display handicap card with rolling windows | | slope validate [path] | Validate scorecard(s) | | slope review [path] [--plain] [--metaphor=id] | Format sprint review as markdown | | slope review recommend | Recommend review types for current sprint | | slope review findings add\|list\|clear | Track implementation review findings | | slope review amend [--sprint=N] | Apply review findings as hazards and recalculate score | | slope report --html [--output=path] [--metaphor=id] | Generate HTML performance report | | slope tournament --id=<id> --sprints=N..M | Build tournament review from sprint range | | slope auto-card --sprint=N [--ci=path] | Generate scorecard from git + CI signals |

Planning & Guidance

| Command | Description | |---------|-------------| | slope briefing [--sprint=N] [--categories=...] [--keywords=...] | Pre-sprint briefing | | slope plan --complexity=<level> | Club recommendation + training plan | | slope classify --scope=... --modified=... --tests=pass | Classify a shot from execution trace | | slope next | Show next sprint number | | slope roadmap validate\|review\|status\|show | Strategic planning tools |

Sessions & Claims

| Command | Description | |---------|-------------| | slope session start\|end\|heartbeat\|list | Manage live sessions | | slope claim --target=<t> [--scope=area] [--force] | Claim a ticket or area | | slope release --id=<id> | Release a claim | | slope status [--sprint=N] | Show sprint course status + conflicts |

Agent Hooks

| Command | Description | |---------|-------------| | slope hook add\|remove\|list\|show | Manage lifecycle hooks | | slope hook add --level=full | Install all guidance hooks | | slope guard list\|enable\|disable | Manage guard activation | | slope guard <name> | Run a guard handler (stdin/stdout) |

Setup

| Command | Description | |---------|-------------| | slope init | Create .slope/ directory with config | | slope init --claude-code | Install Claude Code rules, hooks, MCP config | | slope init --cursor | Install Cursor rules + MCP config | | slope init --opencode | Install OpenCode AGENTS.md + plugin | | slope init --all | Install for all detected platforms | | slope extract --file=<path> | Extract events into SLOPE store | | slope distill [--auto] | Promote event patterns to common issues |

Platform Setup

Claude Code

slope init --claude-code

Installs:

  • .claude/rules/ — Sprint checklist, commit discipline, review loop
  • .claude/hooks/ — Guard dispatcher for real-time guidance
  • .mcp.json — SLOPE MCP server config
  • CLAUDE.md — Project context

Cursor

slope init --cursor

Installs:

  • .cursor/rules/ — SLOPE methodology rules
  • .cursor/mcp.json — MCP server config

OpenCode

slope init --opencode

Installs:

  • AGENTS.md — SLOPE methodology (OpenCode reads this format)
  • .opencode/plugins/slope-plugin.ts — Event capture plugin

Agent Guidance Hooks

SLOPE can guide AI agents in real-time via hook integration. 15 guards provide contextual hints:

| Guard | Trigger | What it does | |-------|---------|-------------| | explore | Before search/read | Suggests checking codebase index first | | hazard | Before file edit | Warns about known issues in the area | | commit-nudge | After file edit | Nudges commit/push after prolonged editing | | scope-drift | Before file edit | Warns when editing outside claimed scope | | compaction | Before context compact | Saves checkpoint to store | | stop-check | Before session end | Blocks if uncommitted/unpushed work exists | | next-action | Before session end | Suggests next actions based on sprint state | | subagent-gate | Before task spawn | Enforces model and turn limits on subagents | | push-nudge | After tool use | Nudges push after prolonged period without pushing | | workflow-gate | Before tool use | Enforces sprint workflow compliance | | review-tier | Before tool use | Suggests review tier based on sprint complexity | | version-check | Before tool use | Warns when SLOPE version is outdated | | stale-flows | Before file edit | Warns when editing files in stale flow definitions | | pr-review | After tool use | Suggests PR review actions | | transcript | After tool use | Captures session transcript data |

Install all guards:

slope hook add --level=full

Guards are non-blocking hints (except stop-check) — they inject context, never deny actions.

Configuration

After slope init, configure .slope/config.json:

{
  "scorecardDir": "docs/retros",
  "scorecardPattern": "sprint-*.json",
  "minSprint": 1,
  "metaphor": "golf",
  "commonIssuesPath": ".slope/common-issues.json",
  "sessionsPath": ".slope/sessions.json",
  "roadmapPath": "docs/backlog/roadmap.json",
  "guidance": {
    "disabled": [],
    "commitInterval": 15,
    "pushInterval": 30
  }
}

Core API

import {
  buildScorecard,
  validateScorecard,
  computeHandicapCard,
  computeDispersion,
  formatSprintReview,
  recommendClub,
  classifyShot,
  generateTrainingPlan,
  buildReportData,
  generateHtmlReport,
  getMetaphor,
  loadScorecards,
  recommendReviews,
  findingToHazard,
  amendScorecardWithFindings,
} from '@slope-dev/slope';

// Build a scorecard
const card = buildScorecard({
  sprint_number: 1,
  theme: 'My First Sprint',
  par: 3,
  slope: 0,
  date: '2026-02-22',
  shots: [
    { ticket_key: 'S1-1', title: 'Setup', club: 'short_iron', result: 'green', hazards: [] },
    { ticket_key: 'S1-2', title: 'Feature', club: 'short_iron', result: 'in_the_hole', hazards: [] },
    { ticket_key: 'S1-3', title: 'Tests', club: 'wedge', result: 'green', hazards: [] },
  ],
});

// Generate HTML report with gaming metaphor
const data = buildReportData([card]);
const gaming = getMetaphor('gaming');
const html = generateHtmlReport(data, gaming);

License

MIT