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 🙏

© 2025 – Pkg Stats / Ryan Hefner

@fuzzland/tintin

v0.1.4

Published

Tintin daemon and CLI

Downloads

286

Readme

Tintin

Tintin is your girlfriend and engineer. It allows you to control Codex and other coding agents (WIP) via Telegram or Slack.

Setup

  • Make sure npm and Codex is available, and Codex has been logged in (either via API from environment or ChatGPT UI).

  • Run npm i -g @fuzzland/tintin.

  • Create config.toml by copying example config:

    • Set your projects. For example:
      [[projects]]
      id = "tintin"
      name = "tintin"
      path = "/home/ubuntu/tintin"
    • Optionally set [bot].github_repos_dir to control where tintin new clones git repositories. Use github:<owner>/<repo> when adding GitHub sources.
    • Create a Slack bot and channel or create a Telegram bot and a group
    • Set [telegram] and/or [slack] secrets (supports env:VAR).
    • Optional: set [security].* allowlists to allow only certain users to use the bot in defined set of group chats.
  • Run tintin start.

Useful commands

  • Add a project: tintin new "my project" <path-or-git-url> [id] (use github:<owner>/<repo> for GitHub shorthand; supports --github-dir and --github-token)
  • Tail logs: tintin log
  • Stop: tintin stop
  • Status: tintin status

Playwright MCP

Tintin can run the Playwright MCP sidecar so Codex can drive a real browser.

  • Configure [playwright_mcp] in config.toml (see config.example.toml). Defaults start npx -y @playwright/mcp@latest with Chrome, shared user data dir, and an auto-picked port > 10000.
  • A single shared profile (user_data_dir) is used across sessions; set executable_path if Chrome is not on PATH.
  • Codex sessions are automatically pointed at the running Playwright MCP server; every Playwright MCP tool call triggers a screenshot saved under the configured output_dir and posted to the chat.

Chat flows

  • Telegram: mention the bot or send /codex → choose project → prompt → session is created (topics preferred; reply-thread fallback).
  • Slack: mention the bot → pick project (select) → modal for prompt (and custom path if needed) → session thread is created.
  • List sessions:
    • Telegram: /sessions (or /codex sessions, or @bot sessions; add page 2 for older sessions, active to filter)
    • Slack: mention the bot with “sessions” (e.g. @bot sessions; add page 2 or active)
  • Messages posted into a session while Codex is still running are queued and automatically resumed when the current run exits.