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

@luckydraw/cumulus

v0.26.4

Published

RLM-based CLI chat wrapper for Claude with external history context management

Readme

Cumulus

A CLI chat wrapper for Claude that implements the Recursive Language Model (RLM) pattern for unlimited conversation context.

The Problem

Standard LLM chat interfaces accumulate conversation history in the context window. As conversations grow:

  • Context rot: Model performance degrades as context fills up
  • Compaction: Old messages get summarized or dropped, losing detail
  • Token limits: Eventually you hit the wall, no matter how large the window

The Solution

Cumulus treats conversation history as an external environment that Claude queries programmatically, rather than stuffing it all into context.

Traditional:  [msg1][msg2][msg3]...[msg847] → context rot, compaction, limits

Cumulus:      [fresh context] + tools to query [external history]
                     ↓
              Claude retrieves what it needs, when it needs it

Each message is a fresh Claude invocation. Claude uses MCP tools to retrieve relevant context from the complete conversation history stored in local files.

How It Works

┌─────────────────────────────────────────────────────────────┐
│  $ cumulus my-project                                       │
│  > Help me refactor the auth module we discussed yesterday  │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                         Cumulus                              │
│  1. Append user message to history                          │
│  2. Spawn fresh: claude --print --mcp-config history.json   │
│  3. Claude uses search_history("auth module") tool          │
│  4. Claude retrieves relevant messages from history         │
│  5. Claude responds with full context awareness             │
│  6. Append response to history                              │
│  7. Next message: completely fresh context                  │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│  ~/.cumulus/threads/my-project.jsonl                        │
│  ────────────────────────────────────────                   │
│  Full conversation history, never truncated                 │
│  Claude queries via MCP tools as needed                     │
└─────────────────────────────────────────────────────────────┘

Key Features

  • Unlimited history: Conversations can span thousands of messages without degradation
  • Full Claude Code power: All tools work (Bash, Edit, Read, etc.) - cumulus just manages context
  • Persistent threads: Pick up any conversation where you left off
  • Selective retrieval: Claude decides what context it needs, reducing noise
  • Cost efficient: Only retrieve relevant context, not everything

Installation

npm install -g cumulus-cli

Usage

# Start or continue a conversation thread
cumulus my-project

# List all threads
cumulus --list

# Delete a thread
cumulus --delete old-project

MCP Tools Available to Claude

When you chat through Cumulus, Claude has access to:

| Tool | Description | | ------------------- | ---------------------------------------------------- | | search_history | Find messages by keyword, semantic, or hybrid search | | read_messages | Read a specific range of messages | | peek_recent | See the last few messages | | get_history_stats | Get count and token estimate | | sub_query | Ask focused questions about history snippets | | get_summary | Get auto-generated summaries of conversation history |

Architecture

src/
├── lib/
│   └── history.ts      # JSONL storage for conversation history
├── mcp/
│   ├── server.ts       # MCP server exposing history tools
│   └── index.ts        # MCP entry point
└── cli/
    └── cumulus.ts      # Main CLI, chat loop, Claude invocation

Background

This project implements ideas from the paper "Recursive Language Models" which demonstrates that treating long prompts as external environment objects—rather than feeding them directly into the context window—dramatically improves performance on long-context tasks while maintaining reasonable costs.

Key insight: LLMs can programmatically examine, decompose, and query their context rather than processing it all at once. This enables effective reasoning over contexts 2+ orders of magnitude beyond the model's context window.

Development

# Install dependencies
npm install

# Build
npm run build

# Run tests
npm test

# Lint
npm run lint

Roadmap

Phase 1 (MVP)

  • [x] Project setup with TypeScript/ESLint
  • [x] HistoryStore for JSONL persistence
  • [x] MCP server with history tools
  • [x] CLI wrapper with pure RLM chat loop
  • [x] Basic test suite

Phase 2 (Enhancements)

  • [x] Semantic search with embeddings
  • [x] Periodic summarization for very long histories

License

MIT