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

@vibe-validate/cli

v0.19.6

Published

Command-line interface for vibe-validate validation framework

Readme

@vibe-validate/cli

Command-line interface for vibe-validate validation framework

npm version License: MIT

The @vibe-validate/cli package provides a command-line interface for running validations with git tree hash-based caching, designed specifically for AI-assisted development workflows.

Features

  • 🛡️ Automatic work protection - Invisible safety net for all uncommitted changes
  • 🚀 Git tree hash-based caching - 312x faster validation on unchanged code
  • 🤖 Agent-friendly output - Minimal token waste, structured error reporting
  • ⚡ Parallel phase execution - Run validation steps concurrently
  • 🔄 Pre-commit workflow - Automatic branch sync checking + validation
  • 📊 State management - Track validation history and cache status
  • 🎯 TypeScript-first - Full type safety with runtime validation

Installation

Recommended: Install via the umbrella package:

npm install -D vibe-validate

Or use directly via npx:

npx vibe-validate validate

Note: This package is also available as @vibe-validate/cli, but we recommend using the umbrella package vibe-validate for simpler installation.

Upgrading

After upgrading vibe-validate to a new version, run the doctor command to check for configuration issues and deprecated files:

npx vibe-validate doctor

This will detect deprecated state files, outdated .gitignore entries, and provide actionable migration steps.

Quick Start

  1. Create configuration file:
npx vibe-validate init --template typescript-nodejs

This creates vibe-validate.config.yaml with sensible defaults.

  1. Run validation:
npx vibe-validate validate
  1. Check validation state:
npx vibe-validate state

Available Commands

validate

Run validation workflow with caching.

npx vibe-validate validate [options]

Options:

  • --force - Bypass cache and force re-validation
  • --no-cache - Disable caching for this run
  • -v, --verbose - Show detailed progress and output
  • --config <path> - Path to config file (default: vibe-validate.config.yaml)

Examples:

# Normal validation (uses cache, minimal output)
npx vibe-validate validate

# Force re-validation (bypass cache)
npx vibe-validate validate --force

# Verbose output (detailed progress indicators)
npx vibe-validate validate --verbose

# Custom config file
npx vibe-validate validate --config ./custom-config.yaml

Exit Codes:

  • 0 - Validation passed
  • 1 - Validation failed
  • 2 - Configuration or runtime error

state

Display validation state and cache status.

npx vibe-validate state [options]

Options:

  • -v, --verbose - Show full error output without truncation

Examples:

# Minimal YAML output (agent-friendly)
npx vibe-validate state

# Verbose output (includes explanatory text)
npx vibe-validate state --verbose

Output includes:

  • Last validation result (passed/failed)
  • Git tree hash
  • Timestamp
  • Failed step details (if any)
  • Suggested next steps

config

Display resolved configuration.

npx vibe-validate config [options]

Options:

  • -v, --verbose - Show detailed configuration with explanations
  • --config <path> - Path to config file

Examples:

# Show configuration (minimal YAML)
npx vibe-validate config

# Verbose output (includes explanatory text)
npx vibe-validate config --verbose

Use cases:

  • Verify configuration is loaded correctly
  • Debug configuration behavior
  • Inspect settings

pre-commit

Run pre-commit workflow (branch sync + validation).

npx vibe-validate pre-commit

Workflow:

  1. Check if branch is behind origin/main
  2. If behind → Exit with instructions to merge
  3. If up-to-date → Run validation (with caching)
  4. If validation passes → Allow commit
  5. If validation fails → Block commit with error details

Recommended setup (.husky/pre-commit):

#!/bin/sh
npx vibe-validate pre-commit

sync-check

Check if current branch is behind the configured remote and main branch.

npx vibe-validate sync-check [options]

Options:

  • --main-branch <branch> - Main branch name (overrides config, default: main)
  • --remote-origin <remote> - Remote origin name (overrides config, default: origin)
  • --yaml - Suppress human-friendly output, output YAML only

Exit Codes:

  • 0 - Up to date or no remote
  • 1 - Behind remote (needs merge)
  • 2 - Error condition

Examples:

# Check against configured remote/branch (from config file)
npx vibe-validate sync-check

# Check against upstream/main (forked repos)
npx vibe-validate sync-check --remote-origin upstream

# Check against upstream/develop
npx vibe-validate sync-check --main-branch develop --remote-origin upstream

Configuration:

Set defaults in vibe-validate.config.yaml:

git:
  mainBranch: main      # Default: 'main'
  remoteOrigin: origin  # Default: 'origin'

Common scenarios:

# Forked repository - sync with upstream
git:
  mainBranch: main
  remoteOrigin: upstream

# Legacy project - use master branch
git:
  mainBranch: master
  remoteOrigin: origin

cleanup

Clean up merged branches after PR merge.

npx vibe-validate cleanup

Workflow:

  1. Switch to main branch
  2. Pull latest changes from origin/main
  3. Identify merged branches
  4. Delete merged branches (with confirmation)
  5. Report summary

Safety features:

  • Only deletes confirmed-merged branches
  • Never deletes main, master, or develop
  • Provides confirmation before deletion

generate-workflow

Generate GitHub Actions workflow from vibe-validate configuration.

npx vibe-validate generate-workflow [options]

Options:

  • --node-versions <versions> - Node.js versions to test (comma-separated, default: "20,22")
  • --os <systems> - Operating systems to test (comma-separated, default: "ubuntu-latest")
  • --fail-fast - Fail fast in matrix strategy (default: false)
  • --coverage - Enable coverage reporting with Codecov
  • --dry-run - Show generated workflow without writing to file
  • --check - Check if workflow is in sync with config (exit 0 if in sync, 1 if not)

Examples:

# Generate workflow with defaults (Node 20,22 on ubuntu-latest)
npx vibe-validate generate-workflow

# Generate workflow with full matrix
npx vibe-validate generate-workflow \
  --node-versions "20,22,24" \
  --os "ubuntu-latest,macos-latest,windows-latest"

# Enable coverage reporting
npx vibe-validate generate-workflow --coverage

# Enable fail-fast (stop on first failure)
npx vibe-validate generate-workflow --fail-fast

# Preview without writing
npx vibe-validate generate-workflow --dry-run

# Check if workflow is in sync
npx vibe-validate generate-workflow --check

What it generates:

Creates .github/workflows/validate.yml with:

  • Matrix strategy for multi-OS and multi-Node.js testing
  • Automatic pnpm/npm detection
  • Validation state artifact upload on failure
  • Separate coverage job (if --coverage is enabled)
  • All-validation-passed gate job

Matrix mode (default when multiple versions/OSes):

strategy:
  fail-fast: false
  matrix:
    os: [ubuntu-latest, macos-latest, windows-latest]
    node: [20, 22, 24]

Non-matrix mode (single version/OS or --no-matrix):

  • Creates individual jobs per validation step
  • Preserves phase dependencies

Workflow sync checking:

Use --check in CI to ensure workflow stays in sync with config:

# .github/workflows/validate.yml
- name: Check workflow sync
  run: npx vibe-validate generate-workflow --check

Exit codes:

  • 0 - Workflow generated successfully or in sync
  • 1 - Workflow out of sync (when using --check)
  • 2 - Configuration or runtime error

doctor

Check repository health and best practices (run after upgrading vibe-validate).

npx vibe-validate doctor

Checks:

  • Pre-commit hook installed
  • Deprecated state file detection
  • Config file is valid
  • Git repository exists
  • On feature branch (not main)

Output:

  • ✅ Passing checks
  • ⚠️ Warnings with recommendations
  • ❌ Failing checks with fix instructions

Configuration

Create vibe-validate.config.yaml in your project root:

# JSON Schema for IDE autocomplete
$schema: https://unpkg.com/@vibe-validate/config/config.schema.json

git:
  mainBranch: main
  remoteOrigin: origin
  warnIfBehind: true

validation:
  phases:
    - name: Pre-Qualification
      parallel: true
      steps:
        - name: TypeScript
          command: pnpm typecheck
        - name: ESLint
          command: pnpm lint

    - name: Testing
      steps:
        - name: Unit Tests
          command: pnpm test

Or use a config template:

npx vibe-validate init --template typescript-nodejs

Available templates:

  • minimal - Bare-bones starting point
  • typescript-library - TypeScript library (no runtime)
  • typescript-nodejs - Node.js application with TypeScript
  • typescript-react - React application with TypeScript

All templates available at: https://github.com/jdutton/vibe-validate/tree/main/packages/cli/config-templates

Caching

vibe-validate uses git tree hash-based caching for deterministic, content-based validation:

How it works:

  1. Calculate git tree hash of current working tree (includes all changes)
  2. Check if hash matches cached state
  3. If match → Skip validation (instant, < 1s)
  4. If different → Run full validation (~60-90s)

Performance:

  • First run: ~60-90s (depends on your validation steps)
  • Cached run: < 1s (312x faster!)
  • After code change: ~60-90s (full re-validation)

Cache invalidation:

  • Automatic when any file changes (via git tree hash)
  • Manual with --force flag
  • Disabled with --no-cache flag

Agent-Friendly Output

vibe-validate is optimized for AI agents like Claude Code with YAML-only structured output:

Benefits:

  • YAML everywhere: Single format that's both machine and human readable
  • Minimal token waste: 4-5 lines on failure vs 200+ with traditional tools
  • Structured errors: Complete details via vibe-validate state command
  • Clear next steps: Actionable commands in validation output
  • Auto-detection: Minimal output for agents, verbose for interactive terminals
  • Zero noise: No server logs, no verbose progress bars (unless --verbose)

Example failure output:

❌ Validation failed: Phase Pre-Qualification step TypeScript failed

Run 'npx vibe-validate state' for details

Then check state:

npx vibe-validate state

Output:

passed: false
timestamp: 2025-10-16T20:00:00.000Z
treeHash: abc123...
summary: "TypeScript type check failed"
failedStep: TypeScript
phases:
  - name: "Pre-Qualification"
    passed: false
    durationSecs: 2.5
    steps:
      - name: "TypeScript"
        command: "pnpm typecheck"
        exitCode: 1
        durationSecs: 2.5
        passed: false
        extraction:
          errors:
            - file: src/index.ts
              line: 10
              column: 5
              message: "error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'"
          summary: "1 type error"
          totalErrors: 1

Work Protection & Recovery

vibe-validate automatically protects your uncommitted work every time it calculates a git tree hash for caching.

How It Works

When you run validation commands, vibe-validate:

  1. Creates a temporary git index
  2. Stages all your files (tracked + untracked) in that temp index
  3. Runs git write-tree to create git objects for everything
  4. Cleans up the temp index (your real index is untouched)

Result: All your files are now in .git/objects/ as git blobs, even if they're unstaged or untracked.

Recovery Commands

# List validation history (shows tree hashes with timestamps)
vv history list

# Show files in a specific tree hash
git ls-tree <tree-hash>

# View a specific file from any validation point
git cat-file -p <tree-hash>:path/to/file.ts

# Recover a file
git cat-file -p <tree-hash>:src/deleted-work.ts > src/deleted-work.ts

# Recover entire directory
git checkout <tree-hash> -- src/

Use Cases

  • Accidental git restore: Recover unstaged changes after accidental revert
  • Bad refactoring: Revert to code state before risky changes
  • Editor crashes: Restore in-progress work from last validation
  • Experimental changes: Compare current code vs previous validation snapshots
  • Team debugging: Share exact code state via tree hash

When Protection Happens

Your work is automatically captured during:

  • vv validate - Full validation
  • vv pre-commit - Pre-commit workflow
  • vv run <command> - Individual command execution (cached)

See Work Protection Guide for detailed examples.

Integration with Pre-Commit Hooks

Recommended setup using husky:

  1. Install husky:
npm install -D husky
npx husky init
  1. Create .husky/pre-commit:
#!/bin/sh
npx vibe-validate pre-commit
  1. Test the hook:
git add .
git commit -m "test commit"

What happens:

  • ✅ Branch sync check runs first
  • ✅ Validation runs with caching
  • ✅ Commit allowed if validation passes
  • ❌ Commit blocked if validation fails

Troubleshooting

"Validation cache randomly invalidates"

Cause: Git tree hash non-determinism (should be fixed in v0.9.3+)

Solution: Upgrade to @vibe-validate/cli@^0.9.3

"Command injection error"

Cause: Security vulnerability in git branch operations (fixed in v0.9.3+)

Solution: Upgrade to @vibe-validate/cli@^0.9.3

"Module not found" errors

Cause: Packages not built after installation

Solution:

pnpm install
pnpm -r build

"Permission denied" on pre-commit hook

Cause: Hook script not executable

Solution:

chmod +x .husky/pre-commit

CLI Aliases

The CLI provides two aliases:

  • vibe-validate - Full command name
  • vv - Short alias for convenience

Examples:

vv validate
vv state
vv config

Environment Variables

  • NODE_ENV - Set to test to disable progress indicators
  • CI - Auto-detected, disables colors and interactive features

Links

License

MIT © Jeff Dutton