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

@zigbang-smarthome/hr-cli

v26.4.3

Published

CLI for HR systems — Greeting HR (app.greetinghr.com) and beyond

Readme

hr-cli

CLI for HR systems. Currently supports Greeting HR (app.greetinghr.com); structured to grow with additional providers as subcommands under the same hr binary.

Install

# Homebrew
brew install zigbang-smarthome/tap/hr-cli

# npm
npm install -g @zigbang-smarthome/hr-cli

# Direct
curl -fsSL https://github.com/zigbang-smarthome/hr-cli/releases/latest/download/install.sh | sh

Auth (Greeting HR)

Email + password login. Server returns a 30-day JWT, stored at ~/.config/greeting/credentials.json (mode 0600). Password is never persisted — only the token returned by POST /authn/login/password.

hr greeting auth login                                              # interactive prompt
hr greeting auth login --email [email protected] --workspace-id 1724
hr greeting auth status
hr greeting auth logout

Non-interactive (CI):

HR_GREETING_EMAIL=... HR_GREETING_PASSWORD=... hr greeting auth login --workspace-id 1724

2FA-enabled accounts cannot use programmatic login at present.

Commands

hr
└── greeting                                                       Greeting HR (app.greetinghr.com)
    ├── auth
    │   ├── login                                                  POST /authn/login/password (MD5'd password)
    │   ├── logout                                                 remove ~/.config/greeting/credentials.json
    │   └── status                                                 show stored credentials state
    ├── opening
    │   ├── list [--status ALL|OPEN|CLOSED] [--page-size]
    │   ├── show <id>                                              opening abstract-info
    │   ├── processes <id>                                         hiring stages (지원 접수 / 코딩테스트 / ...)
    │   └── tags <id>                                              tags defined on the opening
    └── applicant
        ├── list [--opening] [--since YYYY-MM-DD] [--status] [--process-id]
        │                                                          also populates the local opening-cache
        ├── show <id> [--opening <id>] [--minimal]                 detail + tags + memos + evals + meetings + docs (JSON)
        ├── view <id> [--opening <id>]                             open in default browser
        ├── documents <id> [--opening <id>] [--download <dir>]     list / download resume PDFs
        ├── notes <id> [--opening <id>]                            list internal notes (memos)
        ├── note-add <id> [--message <text> | --file <path>|-]     add an internal note (memo)
        ├── note-remove <id> <memoId>                              delete an internal note
        ├── evaluations <id> [--opening <id>]                      list per-process scores / comments
        ├── eval-add <id> --score <s> --comment <c> [--private]    submit an evaluation (current-process default)
        ├── eval-update <id> <contentId> --score <s> --comment <c> update an existing evaluation
        ├── eval-delete <id> <contentId> --reason <r>              delete an evaluation (with reason)
        ├── tags <id> [--opening <id>]                             tags attached to the applicant
        ├── tag-add <id> <name> [<name>...]                        attach tags (auto-creates new ones)
        └── tag-remove <id> <tagId>                                detach a tag by id

--opening is always optional for applicant subcommands. When omitted, the CLI looks up the opening from a local cache at ~/.config/greeting/cache.json (populated by applicant list). Cache miss falls back to scanning openings — first one that returns a 200 wins.

Common flows

# 1. Pull today's applicants (also caches them — subsequent commands won't need --opening)
hr greeting applicant list --since 2026-04-28

# 2. Drill into one applicant — no --opening needed
hr greeting applicant show 7469555
hr greeting applicant view 7469555
hr greeting applicant documents 7469555 --download ./resumes
hr greeting applicant notes 7469555

# 3. Evaluation writes (current process auto-resolved)
hr greeting applicant eval-add 7469555 --score 매우적합 --comment "1차 18/20 — 핵심 evidence 한 줄"
hr greeting applicant evaluations 7469555                  # find contentId
hr greeting applicant eval-update 7469555 <contentId> --score 적합 --comment "수정"
hr greeting applicant eval-delete 7469555 <contentId> --reason "오등록"

# Score values:
#   STEP5 (default for new openings): 100 매우적합 | 75 적합 | 50 보통 | 25 부적합 | 0 매우부적합
#   --score accepts numeric (100/75/...) or aliases (매우적합/적합/...) or English (perfect/strong/ok/weak/reject)
# Comment: plain text only (no markdown rendering), 50,000 char max.

# 4. Tag / memo writes (require manager permission on the opening)
hr greeting applicant tag-add 7469555 서류-합격-yg
hr greeting applicant tags 7469555                         # find tagId
hr greeting applicant tag-remove 7469555 <tagId>

hr greeting applicant note-add 7469555 --message "1차 스크리닝 18/20"
echo "longer body…" | hr greeting applicant note-add 7469555 --file -
hr greeting applicant note-remove 7469555 <memoId>

Note: tag-add / tag-remove need manager permission (isManager: true on the opening). Note and eval writes only need joined access. A 403 지원서 기본 정보 관리 권한이 없습니다 means your account is joined but not a manager — ask the HR admin to upgrade.

Notes

  • API base: https://api.greetinghr.com
  • Auth header: Authorization: <token> (no Bearer prefix)
  • Required headers per request: X-Greeting-Workspace-Id, X-Greeting-Opening-Id (when scoped to opening)
  • Endpoints reverse-engineered from the SPA; not officially supported by Greeting HR