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

@lattices/cli

v0.4.7

Published

Agentic window manager for macOS — programmable workspace, smart layouts, managed tmux sessions, and a 35+-method agent API

Readme

lattices

The agentic window manager for macOS.

Tile windows with hotkeys, manage persistent tmux sessions, index screen text with OCR, and give AI agents a 35-method desktop API — all from a native menu bar app and CLI.

lattices.dev · Docs · Download

Install

Download the app

Grab the signed DMG from the latest release:

# Or direct download:
curl -LO https://github.com/arach/lattices/releases/latest/download/Lattices.dmg
open Lattices.dmg

Drag Lattices.app into Applications. On first launch, a setup wizard walks you through granting Accessibility, Screen Recording, and choosing your project directory.

Install the CLI

npm install -g @lattices/cli

The CLI and app work independently — use either or both.

Build from source

git clone https://github.com/arach/lattices.git
cd lattices

# Build the menu bar app (requires Swift 5.9+ / Xcode 15+)
cd app && swift build -c release && cd ..

# Install CLI dependencies
npm install

# Launch
node bin/lattices-app.js build   # bundle the .app
node bin/lattices-app.js         # launch it

To build a signed, notarized DMG for distribution:

# Requires a Developer ID certificate and notarytool keychain profile
./scripts/build-dmg.sh

# Update v<package.json version> and upload the DMG to GitHub Releases
./scripts/ship.sh

Quick start

# Launch the menu bar app
lattices app

# Open the command palette from anywhere
# Cmd+Shift+M

Persistent terminal sessions

Declare your dev environment in a .lattices.json: which panes, which commands, what layout. Lattices builds it, runs it, and keeps it alive. Close your laptop, reboot, come back a week later — your editor, dev server, and test runner are exactly where you left them.

cd my-project && lattices

No config? It reads your package.json and picks the right dev command automatically.

Configuration

Drop a .lattices.json in your project root:

{
  "ensure": true,
  "panes": [
    { "name": "claude", "cmd": "claude", "size": 60 },
    { "name": "server", "cmd": "pnpm dev" },
    { "name": "tests",  "cmd": "pnpm test --watch" }
  ]
}

Layouts

2 panes              3+ panes

┌──────────┬───────┐ ┌──────────┬───────┐
│  claude  │server │ │  claude  │server │
│  (60%)   │(40%)  │ │  (60%)   ├───────┤
└──────────┴───────┘ │          │tests  │
                     └──────────┴───────┘

Workspace layers

Group projects into switchable contexts. Cmd+Option+1 tiles your frontend and API side by side. Cmd+Option+2 for the mobile stack. Sessions stay alive across switches.

Tab groups

Bundle related repos as tabs in one session. Each tab gets its own pane layout from its .lattices.json.

lattices group vox         # Launch iOS, macOS, Web, API as tabs
lattices tab vox iOS       # Switch to the iOS tab

Window tiling and awareness

A native menu bar app tracks every window across all your monitors. Tile with hotkeys, organize into switchable layers, snap to grids.

It reads your windows too — extracting text from UI elements every 60 seconds and running Vision OCR on background windows every 2 hours. Everything is searchable.

lattices scan                  # View current screen text
lattices scan search "error"   # Search across all indexed text
lattices scan recent           # Browse scan history
lattices scan deep             # Trigger a Vision OCR scan now

Voice commands (beta)

Speak to control your workspace — tile windows, search, focus apps, and launch projects with natural language. Powered by Vox for transcription and local NLEmbedding for intent matching, with Claude fallback for ambiguous commands.

Trigger with Hyper+3 (configurable). Press Space to speak, Space to stop. The panel shows what was heard, the matched intent, extracted parameters, and execution results.

A programmable desktop

The menu bar app runs a daemon with 35 RPC methods and 5 real-time events over WebSocket. Anything you can do from the app, an agent or script can do over the API.

import { daemonCall } from '@lattices/cli/daemon-client'

// Search windows by content — title, app, session tags, OCR
const results = await daemonCall('windows.search', { query: 'myproject' })

// Launch and tile
await daemonCall('session.launch', { path: '/Users/you/dev/frontend' })
await daemonCall('window.tile', { session: 'frontend-a1b2c3', position: 'left' })

// Read the screen
await daemonCall('ocr.scan')
const errors = await daemonCall('ocr.search', { query: 'error OR failed' })

Or from the CLI:

lattices search myproject           # Find windows by content
lattices search myproject --deep    # Include terminal tab/process data
lattices place myproject left       # Search + focus + tile in one step

Claude Code skills, MCP servers, or your own scripts can drive your desktop the same way you do.

CLI

lattices                    Create or reattach to session
lattices init               Generate .lattices.json
lattices ls                 List active sessions
lattices kill [name]        Kill a session
lattices search <query>     Search windows by title, app, session, OCR
lattices search <q> --deep  Deep search: index + terminal inspection
lattices place <query> [pos]  Deep search + focus + tile
lattices focus <session>    Raise a session's window
lattices tile <position>    Tile frontmost window
lattices group [id]         Launch or attach a tab group
lattices tab <group> [tab]  Switch tab within a group
lattices scan               View current screen text
lattices scan search <q>    Search indexed text
lattices scan deep          Trigger Vision OCR now
lattices app                Launch the menu bar app
lattices help               Show help

Requirements

  • macOS 13.0+
  • Node.js 18+

Optional

  • tmux for persistent terminal sessions (brew install tmux)
  • Swift 5.9+ to build the menu bar app from source

Docs

Full documentation at lattices.dev/docs, including:

License

MIT