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

@hellix-ai/cubes

v0.3.0

Published

The Cubes command line: your Cubes sessions in your own terminal (attach, a split view of all of them, image paste, clipboard, tab status and notifications), and Claude Code conversations moved between your computer and Cubes (import, export).

Readme

cubes

The Cubes command line. Work in your Cubes sessions from your own terminal (Warp, iTerm2, Ghostty, Terminal.app, anything) with your own font, colors and keyboard shortcuts: attach to one, or keep all of them in a split view, with image paste, your clipboard, and a tab that tells you when a session needs you. And move Claude Code conversations between your computer and Cubes: import one into a new session, or export a session's conversation to continue it here with claude --resume.

npm install -g @hellix-ai/cubes      # needs Node.js 22.4+

cubes login --host cubes.hellix.ai   # prints a code; approve it in the browser
cubes ls                             # sessions, under a heading per group (--mine, --live)
cubes attach                         # pick a running one
cubes attach 7ff4                    # or name one: an id prefix, or part of its title
cubes import                         # continue one of your local Claude Code conversations in Cubes
cubes export 7ff4                    # bring a session's conversation here (then claude --resume)

No install: npx @hellix-ai/cubes attach <session>. Later, cubes upgrade updates it in place.

The split view

Run cubes on its own for everything at once: your sessions on the left, one of them open on the right. It runs inside its own tmux (install it with brew install tmux or apt install tmux; a tmux you already use is never touched), so close the terminal and run cubes again to land right back where you were.

  • The list is grouped like the web's Sessions page, with a session's spawned sessions nested under it and a coloured dot for its state: working, idle, needs you, starting, ended.
  • Above the session, a header says which one it is: name · group · runner · state.
  • Browsing: ⏎ (or a click) shows a session on the right and leaves you in the list, so ↑ ↓ and ⏎ again show the next one.
  • F1 switches between the list and the session, from either side. It is the one single key Claude Code does not use (in a session every other key, Ctrl-] included, goes to Claude). On a MacBook the top row sends it with fn held, unless Use F1, F2, etc. keys as standard function keys is on. From the list, ⏎ on the session already showing (or Tab) goes in too, and a click on either side moves you there.
  • Other keys: l live only · m mine only · / find · ← → fold a session's children · q quits (sessions keep running).

While attached

Every key goes to the session, exactly as if Claude Code were running locally, except:

| key | does | | --- | --- | | Ctrl-] | detach. The session keeps running. | | Ctrl-V | paste the image on your clipboard: it is uploaded to the session and its path typed in (macOS, and Linux with wl-paste or xclip). With no image on the clipboard, Ctrl-V goes through unchanged. |

Copying. Drag over text in a session and it is copied the moment you let go - the session's tmux does the selecting (so there is no selection left for Cmd+C), and the CLI puts the text on your clipboard. Claude Code's own copy (the c on its login URL) lands there too. On Linux this needs wl-copy, xclip or xsel.

One keyboard per session. Attaching takes the keyboard from any browser tab open on the same session (that tab becomes read-only, with a Take over button) and fits the session to your window. If someone takes it back, the terminal says so and goes read-only; detach and attach again to reclaim it. cubes attach --view watches without taking it.

Your tab shows the session. The terminal tab is titled after the session, with its state in front, the way Claude Code does it locally (minus the animation): ● while it works, ✳ when idle, ✋ when it is waiting for you. The moment it starts waiting, the terminal also gets a bell (most terminals mark the tab or bounce the dock) and a desktop notification with Claude's question (iTerm2, Ghostty, WezTerm, kitty and others). In Warp, the same events Warp's own Claude Code plugin sends drive its tab status and notifications instead. Muted sessions stay quiet. Your own title comes back when you detach. --no-status turns all of it off.

A stopped or hibernated session is resumed before attaching (--no-resume to refuse), with the spinning Cubes mark on screen until it is up. If the connection drops, nothing reconnects behind your back: you are told why (the connection dropped, the session's machine stopped answering, too many viewers) and r reconnects when you choose to.

Scrollback lives in the session's tmux: scroll with the mouse wheel or trackpad (tmux copy-mode), not your terminal's own scrollback.

Moving a conversation between your computer and Cubes

cubes import starts a Cubes session that continues a Claude Code conversation from this computer.

cubes import                 # pick one of your recent conversations (this directory's first)
cubes import 0f3c1d52        # or name it: its id, the start of it, or the path to its .jsonl

It asks which org (if you are in more than one), then everything the web's New session dialog asks: title, group, repositories, a cube to start from, agents, model, runner, Remote Control and extra claude arguments, with the same defaults and the same rules (a group pre-selects its repositories, an agent that declares a model decides it). The repository your conversation's checkout points at is pre-selected. Then it uploads the conversation, starts the session continuing it, and offers to attach.

Any question can be answered up front, so it also works in a script:

cubes import 0f3c1d52 --yes --title "importer, continued" --repo acme/api --runner k3s --no-rc

--title, --group, --repo (repeatable), --cube and --input name=value (repeatable), --agent (repeatable), --model (or default), --runner, --rc / --no-rc, --cli-args="...", plus --package ID, --mcp-config FILE and --hooks FILE, which the dialog does not offer. --yes takes the default for anything not given.

cubes export copies a session's conversation onto this computer, where claude --resume finds it.

cd ~/code/api
cubes export 7ff4            # then: claude --resume <id>, as printed
cubes export 7ff4 --dir ~/code/api

It is filed under ~/.claude/projects (or $CLAUDE_CONFIG_DIR) for the directory you run it in, or --dir. Exporting again brings your copy up to date; if you have continued it locally since, it is not replaced unless you pass --force. A stopped session on a cluster runner keeps its conversation on its own machine, so it is resumed first (you are asked).

Only the conversation travels, in both directions. An imported session checks its repositories out fresh on its runner, and an export does not bring the session's files: push them from the session and pull them here.

Commands

cubes                                  # the split view
cubes login [--host URL] [--org ALIAS] [--no-browser]
cubes logout
cubes whoami
cubes org [ALIAS]
cubes ls [--mine] [--live] [--all] [--json]
cubes attach [SESSION] [--view] [--no-resume] [--no-status]
cubes import [CONVERSATION] [--yes] [--attach | --no-attach] [form flags]
cubes export [SESSION] [--dir DIR] [--force]
cubes upgrade [--check]

cubes ls lists sessions the way the web's Sessions page does: a section per package, then per group (A-Z), then Ungrouped, live ones first in each. --mine keeps the ones you started, --live the ones running now; they combine. --all adds sessions other sessions spawned; --json prints the rows.

--org ALIAS works on any command. If you belong to several organizations, cubes org lists them and cubes org <alias> changes the default.

Sign-in

cubes login uses the OAuth device flow against your Cubes install's own sign-in: the CLI never sees your password. The login is stored in ~/.config/cubes/config.json (mode 0600) and lasts until you cubes logout, which revokes it, or until it goes unused for 30 days.

For scripts and CI, skip the stored login: set CUBES_HOST, CUBES_TOKEN (an access token) and optionally CUBES_ORG.