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

agent-why

v0.1.4

Published

Explain why an explicitly selected Codex skill did or did not reach model context.

Readme

agent-why

CI Release Node.js License: MIT

Forensics for coding agents.

You selected a Codex skill. It didn't behave like it loaded.

agent-why reads the persisted Codex session and shows where the explicit skill pipeline actually stopped:

$ agent-why skill review-pr

review-pr

Codex 0.153.4 · cli · paginated

REQUESTED   ✓
BOUND       ✗
INJECTED    ?
USED        ? not observable from ordinary rollout

RESULT      NOT_BOUND

Codex received the $skill mention as user text, but did not persist it as a structured Skill input.

Use it when a Codex skill appears to be ignored, behaves differently between sessions, or you need evidence from the affected session instead of inspecting what the current configuration says should happen.

A successful diagnosis can also show that discovery and binding were not the failure point:

$ agent-why skill review-pr

review-pr

Codex 0.154.0 · cli · paginated

REQUESTED   ✓
BOUND       ✓
INJECTED    ✓
USED        ? not observable from ordinary rollout

RESULT      INJECTED

The skill reached model-visible context. Skill discovery/binding was not the failure for this attempt.

agent-why is local-only and read-only. Its default reports are designed to be paste-safe for bug reports.

What it checks

$review-pr
    │
    ▼
REQUESTED   user selected or typed the skill
    │
    ▼
BOUND       Codex persisted a structured Skill input
    │
    ▼
INJECTED    typed selected-skill instructions reached model-visible context

agent-why deliberately stops there. It does not claim that the model actually followed the skill, because ordinary Codex rollout history does not reliably prove that today.

Install / run locally

Requires Node.js 22 or newer.

npm install
npm link
agent-why skill review-pr

By default it searches top-level rollouts under CODEX_HOME or ~/.codex newest-first and analyzes the most recent session that contains an explicit attempt for that skill.

agent-why skill review-pr               # find the latest session that attempted this skill
agent-why skill review-pr --thread last # force the latest session even if it did not use the skill
agent-why skill review-pr --thread 01abc...
agent-why skill review-pr --file ~/.codex/sessions/.../rollout-....jsonl
agent-why skill review-pr --json

Results

NOT_BOUND means the $skill mention reached the persisted user message, but Codex did not persist a matching structured Skill input.

NOT_INJECTED means Codex bound the skill, the matching turn reached a persisted TurnComplete, and no matching typed or untyped skill fragment was observed in that complete window.

INJECTED means matching user input_text was persisted with the corresponding content kind skills.selected_skill_instructions. If behavior was still wrong, discovery/binding was not the failure point.

UNKNOWN means the persisted evidence cannot prove the next step. This includes legacy histories, incomplete observation windows, and matching <skill> text that was persisted without the selected-skill content kind. Untyped matching text is reported as weak evidence rather than treated as injection.

Privacy

The default text and --json reports are designed to be shareable in bug reports. They never print conversation text, skill contents, absolute skill paths, thread IDs, or turn IDs. File-system and selector errors are also phrased without echoing private paths or thread selectors.

agent-why is local-only and read-only:

  • no network requests,
  • no config changes,
  • no Codex process spawned,
  • no telemetry.

Scope of v0.1

Only explicit Codex skill invocation is in scope. There is no config sync, skill installation, auto-fix, MCP diagnosis, Claude support, GUI, or generic agent dashboard.

See docs/evidence-model.md for the exact evidence contract and ROADMAP.md for the current product direction.

Development

npm test
npm run smoke
npm run pack:check

The test suite covers NOT_BOUND, NOT_INJECTED, typed INJECTED, weak-fragment UNKNOWN, content-kind attribution, namespaced plugin skills, turn correlation, compaction/abort handling, malformed JSONL, redaction, automatic rollout discovery, and a 100k-line streaming fixture.

Status

This is an early v0.1 implementation. The parser has been validated against current Codex source contracts and public rollout shapes; real-world format variants should be reported with a redacted minimal fixture.