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

openutter

v0.1.7

Published

Install and run the OpenUtter OpenClaw skill

Downloads

137

Readme

OpenUtter

OpenUtter is a headless Google Meet bot for OpenClaw. It can join meetings, capture live captions into a transcript, and take on-demand screenshots.

GitHub: https://github.com/sumansid/openutter

Install

npx openutter

This installs the OpenUtter skill into:

~/.openclaw/skills/openutter

For example, on a Linux host running OpenClaw as the openclaw user, that path would usually be:

/home/openclaw/.openclaw/skills/openutter/

By default, OpenUtter installs into that shared OpenClaw skills directory no matter which folder you run npx openutter from.

If you want to install into a specific location instead, use --target-dir:

npx openutter --target-dir ./skills/openutter

That is useful if you want a repo-local/workspace-local install instead of the default shared install under ~/.openclaw/skills/openutter.

During install, OpenUtter also tries to:

  • install Chromium via Playwright
  • verify Chromium can actually launch
  • auto-install Linux runtime dependencies when supported and running as root

If Linux system dependencies are missing and OpenUtter cannot install them automatically, it prints the exact command to run.

If you ever want to install Chromium manually, you can still run:

npx playwright-core install chromium

At that point, OpenUtter is ready for guest joins. Google account auth is optional and only needed if you want to join with --auth instead of waiting in the guest lobby.

Commands

npx openutter join <meet-url> --anon --bot-name "OpenUtter Bot"
npx openutter join <meet-url> --auth
npx openutter join <meet-url> --auth --headed
npx openutter auth
npx openutter transcript
npx openutter transcript --last 20
npx openutter screenshot

What It Does

  1. Joins a Google Meet call as a guest or authenticated user.
  2. Enables Google Meet live captions.
  3. Captures captions in real time via DOM observation.
  4. Writes a deduplicated transcript to disk.
  5. Supports on-demand screenshots.

Authenticate Once (Optional)

Authentication is optional.

By default, OpenUtter can join as a guest with:

npx openutter join <meet-url> --anon --bot-name "Your Bot Name"

Guest mode works, and OpenUtter retries the join flow up to 3 times when Meet blocks or drops the request. But authentication is the best way to make sure the bot gets admitted reliably, because it joins as your signed-in Google account with --auth instead of waiting in the guest lobby for host approval.

To save a Google session for authenticated joins:

npx openutter auth

This opens a browser window. Sign in to Google, then press Enter in the terminal. Your session is saved to:

~/.openutter/auth.json

After that, you can join with:

npx openutter join <meet-url> --auth

Join a Meeting

Guest mode:

npx openutter join https://meet.google.com/abc-defg-hij --anon --bot-name "My Bot"

Authenticated mode:

npx openutter join https://meet.google.com/abc-defg-hij --auth

Headed mode for debugging:

npx openutter join https://meet.google.com/abc-defg-hij --auth --headed

This opens the Chromium window instead of running fully headless, which is useful if you need to debug login, admission, or caption issues.

Common options:

  • --headed shows the browser for debugging
  • --duration 30m auto-leaves after a duration
  • --channel <channel> sends status updates through OpenClaw
  • --target <id> sets the target chat for those updates
  • --verbose prints live caption activity

Transcript

Read the latest transcript:

npx openutter transcript

Read only the latest lines:

npx openutter transcript --last 20

Transcripts are saved under:

~/.openclaw/workspace/openutter/transcripts/<meeting-id>.txt

OpenUtter uses the Google Meet meeting ID as the transcript filename. For example, joining https://meet.google.com/abc-defg-hij saves captions to:

~/.openclaw/workspace/openutter/transcripts/abc-defg-hij.txt

Example format:

[14:30:05] Alice: Hey everyone, let's get started
[14:30:12] Bob: Sounds good, I have the updates ready
[14:30:25] Alice: Great, go ahead

Screenshot

Request an on-demand screenshot from a running meeting:

npx openutter screenshot

Files

  • ~/.openutter/auth.json saved Google session
  • ~/.openutter/auth-meta.json saved login metadata
  • ~/.openutter/chrome-profile/ persistent Chromium profile
  • ~/.openclaw/workspace/openutter/transcripts/ transcript output
  • ~/.openclaw/workspace/openutter/on-demand-screenshot.png screenshot output
  • ~/.openclaw/workspace/openutter/debug-join-failed.png join failure screenshot
  • ~/.openclaw/workspace/openutter/debug-admit-failed.png admit failure screenshot

Troubleshooting

  • If Chromium is missing, run npx playwright-core install chromium.
  • If guest join is stuck, ask the host to admit your bot by name.
  • If captions are empty, retry with --headed --verbose to verify captions were enabled.
  • If your Google session expires, run npx openutter auth again.

Release

This repo can publish directly to npm from GitHub Actions.

  1. Bump package.json to the new version.
  2. Commit and push to main.
  3. Create and push a matching tag like v0.1.1.
  4. GitHub Actions publishes that exact version to npm.

The workflow validates that the git tag matches package.json.