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

@instantlyeasy/claudeware

v0.1.0-beta.1

Published

Zero-latency middleware for Claude Code - Query collection, analysis, and optimization

Downloads

1

Readme

Claudeware

Zero-latency middleware for Claude Code that enables query collection, analysis, and optimization through a plugin-based architecture.

npm version License: MIT

Features

  • Zero-Latency Passthrough: CLI output is never delayed by processing
  • Plugin System: Extensible middleware architecture
  • Query Collection: Automatic storage and categorization of all queries
  • SDK Integration: Works with both CLI and TypeScript SDK
  • Token Optimization: Identifies opportunities to save tokens
  • Error Isolation: Plugin failures don't affect Claude Code operation
  • Hot Reloading: Add/remove plugins without restart (coming soon)

Installation

Prerequisites

  • Node.js 18+
  • Claude Code CLI installed and authenticated
  • TypeScript (for development)

Install from npm

npm install -g @instantlyeasy/claudeware

Install from source

git clone https://github.com/instantlyeasy/claudeware.git
cd claudeware
npm install
npm run build
npm link

Quick Start

CLI Usage

Simply prefix your Claude Code commands with claudeware:

# Instead of:
claude-code "What is 2 + 2?"

# Use:
claudeware "What is 2 + 2?"

All Claude Code functionality remains unchanged, but your queries are now being collected and analyzed in the background.

SDK Usage

import { createWrappedSDK } from '@instantlyeasy/claudeware';

// Create wrapped SDK instance  
const wrappedClaude = createWrappedSDK({
  pluginDirectory: '~/.claude-code/plugins',
  databasePath: './queries.db'
});

// Use exactly like the Claude Code SDK
const result = await wrappedClaude()
  .withModel('sonnet')
  .query('Hello Claude')
  .asText();

// Get metrics from plugins
const metrics = await wrappedClaude.getMetrics();
console.log('Tokens used:', metrics.sessionMetrics.totalTokens);

See the SDK integration examples for comprehensive usage patterns.

Architecture

The wrapper uses a decoupled architecture to ensure zero latency:

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│   Claude Code   │────▶│ Process Manager │────▶│ Stream Handler  │
│      CLI        │     │                 │     │                 │
└─────────────────┘     └─────────────────┘     └───────┬─────────┘
                                                         │
                                    ┌────────────────────┴───────┐
                                    │                            │
                              Direct Pipe                  JSON Parser
                              (Zero Latency)              (Processing)
                                    │                            │
                                    ▼                            ▼
                              Terminal Output              Event Bus
                                                               │
                                                         ┌─────┴─────┐
                                                         ▼           ▼
                                                      Plugins    Database

Key Components

  1. Process Manager: Manages Claude Code child process lifecycle
  2. Stream Handler: Implements zero-latency passthrough with parallel processing
  3. Event Bus: Distributes events to plugins with error isolation
  4. Plugin Loader: Discovers and manages plugins with dependency resolution
  5. Database Layer: SQLite storage with batching and analytics

Configuration

Environment Variables

# Wrapper configuration
CLAUDE_WRAPPER_MODE=production          # production | development
CLAUDE_WRAPPER_PLUGINS_DIR=~/.claude-code/plugins
CLAUDE_WRAPPER_DB_PATH=./claude-queries.db
CLAUDE_WRAPPER_LOG_LEVEL=info          # debug | info | warn | error

# Plugin configuration
CLAUDE_WRAPPER_PLUGIN_TIMEOUT=5000      # Plugin execution timeout (ms)
CLAUDE_WRAPPER_PLUGIN_RETRIES=3         # Retry attempts for failed plugins

Configuration File

Create ~/.claude-code/wrapper.config.json:

{
  "wrapper": {
    "timeout": 30000,
    "bufferSize": 65536,
    "gracefulShutdownTimeout": 5000
  },
  "plugins": {
    "directory": "~/.claude-code/plugins",
    "timeout": 5000,
    "retryAttempts": 3,
    "enabledPlugins": ["query-collector", "rate-limiter"],
    "disabledPlugins": []
  },
  "database": {
    "type": "sqlite",
    "path": "~/.claude-code/queries.db",
    "batchSize": 100,
    "flushInterval": 1000,
    "walMode": true
  },
  "monitoring": {
    "enabled": true,
    "metricsPort": 9090,
    "logLevel": "info"
  }
}

Plugin System

The claudeware wrapper includes a powerful plugin system for extending functionality.

Built-in Plugins

Query Collector Plugin

Automatically categorizes and analyzes all queries:

{
  "name": "query-collector",
  "version": "1.0.0",
  "capabilities": ["query-analysis", "optimization-suggestions"]
}

Features:

  • Categorizes queries (code, debug, explain, refactor, test)
  • Calculates complexity (low, medium, high)
  • Suggests model optimizations
  • Tracks token usage

Creating Custom Plugins

See Plugin API Documentation for detailed information.

Quick example:

// my-plugin/index.ts
export default class MyPlugin implements Plugin {
  name = 'my-plugin';
  version = '1.0.0';
  manifest = {
    name: 'my-plugin',
    version: '1.0.0',
    dependencies: [],
    priority: 10,
    timeout: 5000,
    capabilities: ['custom-analysis']
  };

  async initialize(context: PluginContext) {
    context.logger.info('MyPlugin initialized');
  }

  async onEvent(event: QueryEvent, context: PluginContext) {
    if (event.type === 'query') {
      // Process query
      await context.dataStore.saveQuery({
        id: event.id,
        query: event.data.content,
        // ... additional processing
      });
    }
  }

  async shutdown() {
    // Cleanup
  }
}

Installing Plugins

  1. Create plugin directory:
mkdir -p ~/.claude-code/plugins/my-plugin
  1. Add manifest.json:
{
  "name": "my-plugin",
  "version": "1.0.0",
  "main": "./index.js",
  "dependencies": [],
  "priority": 10,
  "timeout": 5000,
  "capabilities": ["custom-analysis"]
}
  1. Add your plugin code
  2. Restart wrapper (or wait for hot reload)

SDK Integration

The wrapper provides seamless SDK integration:

import { createWrappedSDK } from 'claudeware';
import { claude } from '@instantlyeasy/claude-code-sdk-ts';

// Option 1: Use wrapped SDK factory
const wrappedSDK = createWrappedSDK({
  pluginDirectory: './plugins',
  enabledPlugins: ['query-collector', 'cache']
});

// Option 2: Manual integration with existing SDK
const client = claude()
  .withRetry({ maxAttempts: 3 })
  .build();

// Wrap with plugin support
const { query } = wrapSDK(client, {
  plugins: ['query-collector']
});

Query Analytics

Access collected query data:

import Database from 'better-sqlite3';

const db = new Database('~/.claude-code/queries.db');

// Get query statistics
const stats = db.prepare(`
  SELECT 
    COUNT(*) as total_queries,
    SUM(token_count) as total_tokens,
    AVG(latency_ms) as avg_latency
  FROM queries
  WHERE timestamp > datetime('now', '-7 days')
`).get();

// Get queries by category
const categories = db.prepare(`
  SELECT category, COUNT(*) as count
  FROM queries
  GROUP BY category
  ORDER BY count DESC
`).all();

// Find optimization opportunities
const expensiveSimpleQueries = db.prepare(`
  SELECT q.*, r.input_tokens + r.output_tokens as total_tokens
  FROM queries q
  JOIN responses r ON q.id = r.query_id
  WHERE q.complexity = 'low' 
    AND q.model LIKE '%opus%'
    AND total_tokens < 100
  ORDER BY total_tokens DESC
`).all();

Development

Building from Source

# Clone repository
git clone https://github.com/instantlyeasy/claudeware.git
cd claudeware

# Install dependencies
npm install

# Run tests
npm test

# Build
npm run build

# Run in development mode
npm run dev

Running Tests

# Run all tests
npm test

# Run specific component tests
npm test stream-handler
npm test plugin-loader

# Run with coverage
npm run test:coverage

# Run integration tests
npm run test:integration

Project Structure

claudeware/
├── src/
│   ├── core/               # Core components
│   │   ├── wrapper.ts      # Main wrapper orchestrator
│   │   ├── stream-handler.ts
│   │   ├── process-manager.ts
│   │   └── json-parser.ts
│   ├── plugins/            # Plugin system
│   │   ├── plugin-loader.ts
│   │   ├── event-bus.ts
│   │   └── builtin/        # Built-in plugins
│   ├── database/           # Data layer
│   │   ├── sqlite-adapter.ts
│   │   └── batch-queue.ts
│   ├── adapters/           # Integration adapters
│   │   └── sdk-adapter.ts
│   └── types/              # TypeScript types
├── tests/                  # Test suites
├── docs/                   # Documentation
└── examples/               # Usage examples

API Reference

Core APIs

createWrappedSDK(config: WrapperConfig)

Creates a wrapped SDK instance with plugin support.

const { query, getMetrics, shutdown } = createWrappedSDK({
  pluginDirectory: './plugins',
  databasePath: './queries.db',
  enabledPlugins: ['query-collector'],
  logLevel: 'info'
});

ClaudeWrapper

Main wrapper class for CLI integration.

const wrapper = new ClaudeWrapper(config);
await wrapper.start(args, stdin, stdout, stderr);

See API Documentation for complete reference.

Troubleshooting

Common Issues

  1. Wrapper not intercepting Claude Code

    • Ensure wrapper is installed globally
    • Check PATH environment variable
    • Verify installation with which claude-code
  2. Plugin not loading

    • Check plugin manifest.json
    • Verify plugin dependencies
    • Check logs for errors
  3. Database errors

    • Ensure write permissions
    • Check disk space
    • Verify SQLite installation

Debug Mode

Enable debug logging:

export CLAUDE_WRAPPER_LOG_LEVEL=debug
claude-code "test query"

Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

License

MIT License - see LICENSE for details.

Acknowledgments

Built with:


For more information: