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

@abra-evolve/cli

v0.1.0

Published

Abra Evolve CLI - Connect to your AI agent backend

Readme

Abra Evolve CLI

A lightweight CLI tool to interact with the Abra Evolve AI agent backend.

Installation

Global Installation (Recommended)

npm install -g @abra-evolve/cli

Local Development

cd cli
npm install
npm run build
npm link  # Creates global symlink for testing

Usage

# Check backend status
abra status

# Chat with the agent
abra chat "Hello, how are you?"

# Get help
abra --help
abra chat --help

Configuration

Create a .env file in your home directory or project:

ABRA_API_URL=http://localhost:8000
ABRA_API_KEY=your-api-key  # Optional

Or set environment variables:

export ABRA_API_URL=https://your-backend.com

Adding New Commands

Adding a new command is dead simple - just 3 steps:

Step 1: Create your command file

Create src/commands/yourcommand.ts:

import { Command } from "commander";
import chalk from "chalk";
import { apiClient } from "../api/client";
import { handleError } from "../utils/error-handler";
import type { YourResponse } from "../types";

export const yourCommand = new Command("yourcommand")
  .description("What your command does")
  .argument("<input>", "What the user should provide")
  .option("-f, --flag", "Optional flag")
  .action(async (input: string, options): Promise<void> => {
    try {
      console.log(chalk.blue("🚀 Doing something cool..."));
      const response = await apiClient.post<YourResponse>("/your-endpoint", {
        input,
      });
      console.log(chalk.green("✅ Done!"), response.data);
    } catch (error) {
      handleError(error);
    }
  });

Step 2: Register it

Add one line to src/commands/index.ts:

import { yourCommand } from "./yourcommand";

export function registerCommands(program: Command): void {
  program.addCommand(chatCommand);
  program.addCommand(statusCommand);
  program.addCommand(yourCommand); // ← Add this line
}

Step 3: Rebuild

npm run build
abra yourcommand "test"

That's it! Your new command is now available.

Development

# Watch mode (rebuilds on file changes)
npm run dev

# Build
npm run build

# Test locally
npm link
abra status

Project Structure

cli/
├── bin/
│   └── abra.js              # Executable shim (3 lines)
├── src/                     # 100% TypeScript source
│   ├── cli.ts               # CLI entry point
│   ├── index.ts             # Public exports
│   ├── commands/            # ONE FILE = ONE COMMAND
│   │   ├── index.ts         # ← Register commands here (1 line each)
│   │   ├── chat.ts          # ← Command: abra chat
│   │   ├── status.ts        # ← Command: abra status
│   │   └── help.ts          # ← Command: abra help
│   ├── api/
│   │   └── client.ts        # Axios client with auth & error handling
│   ├── types/
│   │   └── index.ts         # Shared TypeScript types
│   └── utils/
│       └── error-handler.ts # Centralized error handling
├── dist/                    # Compiled output (auto-generated)
├── package.json
├── tsconfig.json
└── README.md

Organization Principle

ONE FILE = ONE COMMAND

Every command lives in its own file in src/commands/:

  • chat.tsabra chat
  • status.tsabra status
  • help.tsabra help
  • yourcommand.tsabra yourcommand

Then register it in src/commands/index.ts with one line:

program.addCommand(yourCommand);

That's it! No magic, everything is explicit.

Publishing

# Update version in package.json
npm version patch  # or minor, major

# Build and publish
npm run build
npm publish --access public