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

@ars-infinita-notion/system-skills

v1.3.10

Published

The System (Player Edition) skills, built for the OpenAI Codex CLI and the Antigravity CLI (agy). Ships prebuilt — install with `npx @ars-infinita-notion/system-skills install-codex`. Claude Code users should install the native plugin from the marketplace

Readme

@ars-infinita-notion/system-skills

Cross-agent build of The System — Player Edition skills.

The canonical skills live in plugins/the-system-player/ as a Claude Code plugin. This package re-emits them for two other CLIs:

  • OpenAI Codex CLI (codex) — as user skills in $CODEX_HOME/skills/<name>/SKILL.md
  • Antigravity CLI (agy, Gemini-based) — as a plugin in ~/.gemini/config/plugins/the-system-player/

Claude Code users should keep using the native plugin (/plugin install the-system-player@ars-infinita-notion). This package exists only for the other two CLIs; nothing here is needed for Claude.

Zero dependencies, Node stdlib only, Node >= 18.

Before you install — two prerequisites

  • A paid AI agent subscription. The System is an agent doing real work for you every day, so it needs a plan that allows that. This is agent-agnostic — whichever CLI you install these skills into, expect to need a tier that permits sustained daily agent work. It is the one thing you have to pay for.
  • Confirm your agent can run routines — scheduled, recurring, unattended tasks. A paid plan does not guarantee this capability, so check it explicitly rather than discovering it later: it is what delivers your morning briefing without you asking. If your agent can't run them, The System still works — you drive it yourself, saying "run my daily briefing" each weekday morning instead of it arriving on its own.

Notion's free plan is all you need. Nothing here requires a paid Notion plan, and anything that turns out to is a bug worth reporting.

Install

npx @ars-infinita-notion/system-skills install-codex   # -> $CODEX_HOME/skills
npx @ars-infinita-notion/system-skills install-agy     # -> ~/.gemini/config/plugins

The published package ships dist/ prebuilt, so there is no clone and no build step — that is the whole install. Both commands accept --dry-run, which prints every path they would touch and writes nothing.

install-codex will not overwrite skills you wrote yourself. It installs 27 skills into the shared $CODEX_HOME/skills/ folder under ordinary names (status, log, report, browse, doctor, patch, …). If any of those names is already taken by a directory this installer did not create, it stops before writing anything and prints the paths. Re-run with --force to proceed: that moves your directories aside — renamed into $CODEX_HOME/.ars-infinita-backup/<timestamp>/, outside the folder Codex scans — and tells you where they went. Nothing is ever deleted. The install is recorded in $CODEX_HOME/.ars-infinita-install.json, which is how a later run knows which directories are its own.

Versions up to and including 1.3.5 did not do this — they replaced same-named directories silently. If you installed before v1.3.6, that is worth checking. Antigravity installs were never affected; that path writes only to its own namespaced plugin directory (and, by the same token, replaces any edits you made inside it on update).

The version tracks the plugin version, because this package carries a real copy of the skills rather than just the tooling that builds them: @ars-infinita-notion/[email protected] contains the v1.3.2 skills. release-metadata-check fails the build if the two numbers ever diverge, so the npm channel cannot silently ship different content from the marketplace channel.

Claude Code is deliberately not a target. It installs from the marketplace, and adding an npm path would mean two ways to get the same skills onto one machine, free to disagree. cli.mjs prints the marketplace command instead.

What the build does

builder.mjs reads every plugins/the-system-player/skills/<name>/SKILL.md, keeps the name/description frontmatter (both target CLIs use the same two fields), stamps the shared boot card into each skill (see below), regenerates the repo-root .claude-plugin/marketplace.json from plugin.json, and rewrites Claude-harness-specific idioms per target:

| Source (Claude) | codex | agy | | --- | --- | --- | | CLAUDE.md | AGENTS.md | AGENTS.md | | "Claude Code" | "OpenAI Codex CLI" | "Antigravity CLI (agy)" | | claude-in-chrome | "your own logged-in browser" | same | | ToolSearch | "the available tool list" | same | | "reads as Claude" | "reads as an AI assistant" | same |

Claude Rating (1-5) is protected and never rewritten — it is a literal Notion property name in the Competency Matrix, not a harness reference. The builder fails the build if any other Claude/Anthropic token survives.

Output lands in dist/ (gitignored) plus dist/manifest.json, which drives the installers and the tests. The one tracked file the build writes is .claude-plugin/marketplace.json — generated from plugin.json so the plugin's version and description exist in exactly one place. Rebuild and commit it whenever plugin.json changes.

The boot card is stamped, not stored

The repo tracks one boot-card.md, at plugins/the-system-player/references/. Claude skills read that exact file (${CLAUDE_SKILL_DIR}/../../references/boot-card.md) — the whole plugin tree is materialised on install, so a plugin-root path resolves.

codex and agy can't do that: both install skills as standalone folders with no shared parent, so there is no plugin root to point at. For those two targets only, the build stamps a per-skill copy into dist/ and rewrites the reference to the local references/boot-card.md. Those copies are build output — never hand-edit one, and never commit one. test/checks.mjs fails if any stamped copy differs from the single source by a byte, or if a second authored copy appears anywhere in the plugin tree.

Installing from a clone (contributors)

Players should use the npx commands above — this section is for working on the package itself, where you want your local edits installed rather than the published build.

npm run install-codex   # build, then copy into $CODEX_HOME/skills (default ~/.codex/skills)
npm run install-agy     # build, validate with `agy plugin validate`, then copy into ~/.gemini/config/plugins

Both installers accept --dry-run and print every path they touch. Overrides: CODEX_HOME for codex, AGY_CONFIG_ROOT for agy.

--dry-run is read-only about your install target, not about this repo. Both npm run scripts build first, so npm run install-codex -- --dry-run still runs builder.mjs, which deletes and regenerates dist/. Nothing outside dist/ is touched and dist/ is gitignored, so the effect is confined to build output — but it is a mutation, and the flag's name suggests otherwise. To dry-run without rebuilding, skip npm and call the installer directly: node install-codex.mjs --dry-run (requires an existing dist/).

After installing, start a fresh session:

  • codex: codex, then ask for a command by name (e.g. "run /status")
  • agy: agy plugin list should show the-system-player; skills load on the next session

Build and test

npm run build   # node builder.mjs
npm run check   # node test/checks.mjs — structural, no network, always runs
npm test        # check, then node test/smoke.mjs

test/checks.mjs — the structural gate

Zero dependencies, no network, no CLIs; it runs anywhere and is expected to actually run (unlike the smoke test, which skips when a CLI is missing). Four named checks:

| Check | Catches | | --- | --- | | shared-reference-build-check | A second authored boot card appearing anywhere in the plugin tree; a skill that stopped referencing the shared one, or whose reference no longer resolves; any build-stamped copy drifting from the source; a built SKILL.md still carrying the Claude-only plugin-root path. | | release-metadata-check | marketplace.json not regenerated, or growing a duplicate version/description/author/license that plugin.json already owns; CHANGELOG.md's newest entry disagreeing with plugin.json (hard fail); feed.json disagreeing (WARN only — the feed legitimately leads mid-release-train); feed_version coming back. | | command-catalog-check | A skill with broken or mismatched frontmatter; feed.json's command list drifting from the actual skills/ directories; the hidden /handover route leaking into the published list. | | single-surface-lint | The duplicate write-paths cut in v1.3.1 creeping back: a Calendar Follow-up Due mirror, a Notion "Petition form" route, browser-gating language on the feed.json mirror. |

test/smoke.mjs — the real CLIs

test/smoke.mjs invokes the real CLIs non-interactively — no mocks:

codex exec --sandbox read-only --skip-git-repo-check --output-last-message <f> -   # prompt on stdin
agy --sandbox --print "<prompt>"

For each of the 3 smallest built skills (currently gather, touch, status) it feeds the whole built SKILL.md plus Smoke check: reply OK plus one sentence on what this skill does, then asserts the answer is non-empty, non-error, and mentions at least one domain term derived from the skill's own name and description.

Environment failures (CLI not on PATH, auth, quota, timeout) skip with a warning; they are never counted as passes. A run where nothing executed exits 2 (inconclusive), not 0.

Knobs: SMOKE_SKILL_LIMIT, SMOKE_TIMEOUT_MS, SMOKE_AGENT=codex|agy.

Evals are never committed

Prompts, raw CLI transcripts, and summaries are written to evals/<timestamp>/. That directory — along with dist/, test-output/ and *.eval.* — is in this package's .gitignore. Do not relocate eval artefacts outside those paths.

Format notes and assumptions

Verified empirically on this machine, not guessed:

  • codex ships its own skills at ~/.codex/skills/.system/<name>/SKILL.md with name + description YAML frontmatter and optional references/, scripts/, assets/ subdirs. User skills go in the same tree one level up, at $CODEX_HOME/skills/<name>/. Codex has no ~/.codex/prompts/ directory on this install; skills are the current mechanism.
  • agy documents its plugin layout in its own bundled skill (~/.gemini/antigravity-cli/builtin/skills/agy-customizations/docs/plugins.md): plugins/<name>/plugin.json (only name is required) with skills/<name>/SKILL.md inside. Global customisations are discovered under ~/.gemini/config/. agy plugin validate <path> confirms the built tree ("27 processed").
  • Only name and description are used in frontmatter — that is all the source skills carry, and it is exactly what both targets read.
  • The extra version/description fields written into the agy plugin.json are informational; agy only requires name.

Known issues

  • codex rejects a prompt beginning with ---. Passing the built SKILL.md as a positional argument fails with error: unexpected argument '---, because the arg parser reads the YAML frontmatter fence as a flag. The smoke test therefore pipes the prompt on stdin and passes - as the prompt argument. This only affects passing skill text as a CLI argument, not normal skill loading from $CODEX_HOME/skills.
  • agy boolean flags need to precede the prompt. agy --print "<prompt>" --sandbox works, but agy --print --sandbox "<prompt>" is the form the tests use; putting --sandbox immediately before the prompt string makes Go's flag parser swallow it.
  • No auth or quota failures were observed on this machine at the time of writing; both CLIs returned real answers for all 6 checks. If either starts failing for auth/quota, the smoke test reports SKIP ... environment failure — <exact CLI error> and does not fake a pass.

Publishing

Published from CI, never from a laptop. A merge to main that moves the version cuts the release tag and publishes in the same run; a hand-pushed v* tag does the same thing. Authentication is npm trusted publishing (OIDC) — there is deliberately no NPM_TOKEN anywhere, so there is no secret to scope, leak or rotate.

The gates cannot be skipped by editing the workflow: prepublishOnly runs builder.mjs, test/checks.mjs and tools/leak_check.py inside npm publish itself.