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

@entelligentsia/chessai

v0.2.1

Published

Play chess against Claude Code. Installs a /chess skill: a Node server + clickable board with a legal-move engine, where Claude plays black.

Downloads

287

Readme

chessai

Play chess against Claude Code. You play white on a clickable browser board; a background Claude agent plays black, replying to each move with a comment and its reasoning.

 you (white) ──HTTP──▶  node server.cjs  ◀──HTTP──  black-player Agent
                        (state + FEN +              (Claude, spawned by the
   browser board          REST + web UI;             /chess skill: poll → decide
   (click to move)        no intelligence)           → POST, looping)

Architecture

Two pieces, clean split of responsibility:

  • chessai (Rust binary)install only. It embeds the skill files and writes them to ~/.claude/skills/chess. It's purely a distribution vehicle so you can install the skill without the plugin marketplace. It contains no game logic.
  • The chess skill (Node) — the whole game:
    • tools/server.cjs — dependency-free Node HTTP server: board state, FEN, castling/en-passant/promotion, REST API, serves the web UI. No chess intelligence — pure plumbing.
    • tools/board.html — the clickable board.
    • SKILL.md — orchestration: start the server, open the board, and spawn one background Claude agent that plays black. That agent is the only place moves are chosen; its context persists and prompt-caches across moves, so there's no per-move cold-start cost.

Requires Node.js on PATH (the server and tools are Node). The Rust binary only writes files.

Install

Any one of (each puts chessai on PATH, then runs chessai install):

npx @entelligentsia/chessai install            # npm — builds the tiny Rust installer on first run
cargo install chessai          # cargo  (then: chessai install)
curl -fsSL https://raw.githubusercontent.com/devasur/claude-chess/main/install.sh | sh

chessai install writes:

~/.claude/skills/chess/
  SKILL.md
  tools/server.cjs
  tools/board.html
  tools/chess-api.cjs

Play

Inside Claude Code:

/chess

The skill starts the Node server, opens the board in your browser, and spawns the black-player agent. Click a piece then its destination; Claude replies within a couple of seconds. Commentary appears in the move-list panel.

Run the board without Claude

node ~/.claude/skills/chess/tools/server.cjs --port 4577 --open

REST API (server.cjs)

| Method | Path | Notes | |--------|---------------|---------------------------------------------------------------| | GET | / | clickable web board | | GET | /api/health | { ok, version } | | GET | /api/state | full: { fen, turn, status, move_count, last_move, history }| | GET | /api/turn | compact (used by the agent): no growing history | | POST | /api/move | { from, to, san?, promotion?, comment?, reasoning?, by? } | | POST | /api/reset | reset to the starting position | | POST | /api/status | { status } — end the game |

Notes

  • The board model is intentionally permissive (it does not enforce full legality) — move selection is delegated to Claude.
  • Why the agent polls /api/turn not /api/state: /state carries the entire move history, which grows every turn; /turn is a small flat payload, so the long-lived agent's context stays cheap.

License

MIT