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

skilljournal

v1.0.0

Published

MCP server for discovering and resolving skills from Codex and Claude Code directories

Readme


Write the skills. The agent uses them. skilljournal learns from them.

A lightweight MCP server that gives Claude Code and Codex CLI persistent skill memory with learning journals — so agents don't repeat mistakes and get better every time a skill runs.

Why this exists

Agents are good at following instructions. They're bad at writing them.

The SkillsBench paper shows:

  • Curated skills improve performance by +16.2 percentage points
  • Self-generated skills hurt performance (-1.3pp)
  • Just 2-3 good skills per task is optimal
  • A smaller model + good skills > larger model without them
┌──────────────────────────────────────────┐
│  CURATED SKILL BOOST     ████████ +16.2pp│
│  SELF-GEN SKILL BOOST    ░          -1.3pp│
│  OPTIMAL SKILLS/TASK     ██           2-3│
│  SMALL+SKILLS > BIG      ████████     YES│
└──────────────────────────────────────────┘

The problem

Even when agents use skills:

  • They don't improve them over time
  • They repeat the same mistakes
  • Self-generated skills drift and degrade

The idea

skilljournal turns skills into learning systems:

  1. A skill runs
  2. The agent reflects on what worked / failed
  3. A journal entry is stored alongside the skill
  4. Next time the skill runs, the journal context is injected

The same mistake doesn't happen twice. Skills get better without manual curation.

What it does

  • Persistent per-skill journals
  • Automatic post-run reflection
  • Context injection on future runs
  • MCP server for Claude Code / Codex CLI
  • Works with both curated and self-generated skills

Setup

Claude Code

claude mcp add skilljournal -- npx skilljournal

Codex CLI

codex mcp add skilljournal -- npx skilljournal

That's it. Or install globally first with npm install -g skilljournal and replace npx skilljournal with just skilljournal.

git clone https://github.com/w1ll14m64n/skilljournal.git
cd skilljournal && npm install

# Claude Code
claude mcp add skilljournal -- node /absolute/path/to/skilljournal/server.mjs

# Codex CLI
codex mcp add skilljournal -- node /absolute/path/to/skilljournal/server.mjs

Tools

  • list_skills — finds skills across ~/.codex/skills/, <project>/.codex/skills/, ~/.claude/commands/, and <project>/.claude/commands/
  • resolve_triggered_skills — matches a task to relevant skills using token scoring, returns the skill content + any journal entries as prompt-ready text
  • record_skill_learning — writes a learning entry to .journal/<slug>.md so it gets picked up next time

Skill discovery

Scans four places:

| Directory | Scope | |-----------|-------| | ~/.codex/skills/<slug>/SKILL.md | User | | <project>/.codex/skills/<slug>/SKILL.md | Project | | ~/.claude/commands/<slug>.md | User | | <project>/.claude/commands/<slug>.md | Project |

Project skills override user skills when slugs collide.

Skills are markdown files. Optional YAML frontmatter for name and trigger phrases:

---
name: "Deploy to Production"
triggers: ["deploy", "release", "ship it"]
---

1. Run tests first
2. ...

Journals

Learnings live in <project>/.journal/<slug>.md. Structured, timestamped, git-friendly:

## 2026-04-09 - Deployment timeout on large assets
Learning: Asset compilation exceeds the default 120s timeout when bundle > 50MB

Action: Added --timeout 300 flag to deploy command
Context: Discovered during Q2 release with new image assets

When resolve_triggered_skills fires for a deploy task, this entry rides along. The agent sees it before hitting the same wall.

How matching works

Token-based scoring. Exact slug match is the strongest signal, then trigger phrases, then vocabulary overlap. Only skills above zero get returned — no context window pollution.

Structure

server.mjs        # MCP entry point
src/
  skills.js       # Discovery and resolution
  journal.js      # Read/append journal entries
  matcher.js      # Token-based skill matching
  utils.js        # Frontmatter parsing, helpers

Reading

License

MIT