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

almanac-md

v0.4.0

Published

Keep repository documentation indexed in AGENTS.md

Readme

Almanac

A deterministic documentation index for coding agents. Almanac keeps AGENTS.md current without hand-maintaining it.

Install

pnpm add -D almanac-md

Quick start

Initialize Almanac and install its optional pre-commit hook:

pnpm exec almanac init --hooks

init adds managed markers to AGENTS.md, builds the first documentation index, and creates configured compatibility links. Links default to CLAUDE.md -> AGENTS.md and GEMINI.md -> AGENTS.md. Existing files are never replaced.

Use --no-hooks when you do not want the Git hook:

pnpm exec almanac init --no-hooks

Configuration

Almanac reads almanac.yaml, almanac.yml, or almanac.json from the repository root. Every field is optional.

include:
  - docs/**/*.md
links: [claude, gemini]
targets:
  - AGENTS.md

Set links to one provider preset, mix presets with custom sibling filenames, or use links: [] to disable compatibility links.

Commands

| Command | Purpose | | ----------------------- | ------------------------------------------------------------------- | | almanac sync | Update indexes and recursive compatibility links, then stage them. | | almanac index | Update and stage indexes without creating compatibility links. | | almanac link | Recursively create and stage agent compatibility links. | | almanac check | Fail when a managed index or compatibility link is out of date. | | almanac init | Add markers and compatibility links, then optionally install hooks. | | almanac hooks install | Add Almanac to the repository's effective pre-commit hook. | | almanac hooks remove | Remove Almanac's section while preserving the rest of the hook. | | almanac hooks status | Report whether the current Almanac hook is installed. | | almanac diff | Classify index changes as generated or human-authored. |

SDK

Embed Almanac in a Node.js tool with your own configuration:

import { createAlmanac } from 'almanac-md/sdk'
import type { AlmanacConfigInput } from 'almanac-md/sdk'

const config: AlmanacConfigInput = {
  include: ['docs/**/*.md'],
  links: [],
  targets: ['AGENTS.md'],
}

const almanac = createAlmanac({ cwd: repoPath, config })
await almanac.initialize()
const changes = await almanac.sync()

config is required; {} uses Almanac's defaults. The SDK validates it but never reads Almanac config files. cwd defaults to the current directory and discovers the containing Git repository. Node.js 26+ and Git are required.

Methods return plain values and reject with Errors on failure; client creation throws for invalid config or a missing repository. No Result wrapper, CLI output, or process exit handling is required.

| Method | Behavior | | ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | | check() | Return { path, changed } entries for indexes and links without writing. Drift is data, not an exception. | | index(options?) | Update configured index regions without creating links. | | sync(options?) | Update configured index regions and compatibility links. | | link(options?) | Create configured compatibility links next to Git-visible AGENTS.md files. | | initialize(options?) | Create missing targets/markers, then sync. | | diff(base, head) | Return generated versus human-authored change classifications. | | hooks.install(), hooks.remove(), hooks.status() | Explicitly manage or inspect the repository hook. |

Writes do not stage changes unless you pass { stage: true }. initialize() does not install hooks unless you pass { hooks: true }. The CLI keeps its existing staging behavior.

Content outside configured markers is preserved. Conflicting aliases and symlink targets are rejected. Writes are atomic per target, not transactional across files; concurrent edits are not protected. Coordinate access to the repository in your host tool. Installed hooks invoke the CLI and therefore use repository Almanac config, not your in-memory SDK config.

Documentation

License

MIT