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

studyany

v0.1.6

Published

An AI-assisted learning coach skill with durable spaced learning, study-time tracking, feedback, and artifact-based practice.

Readme

StudyAny

StudyAny is an AI-assisted learning skill for Claude and Codex. It turns a concrete learning goal into short lessons, active practice, evidence-based assessment, spaced review, and persistent local study records.

The workflow chooses the medium that best demonstrates the current objective: conversation for explanation and recall, a learner workspace artifact for external work, or a mixture of both. It does not treat reading a lesson as proof of mastery. Immediate correction is kept separate from long-term retention: the skill schedules delayed retrieval, expanding intervals, and changed-context checks before stable mastery.

StudyAny also gives evidence-based coaching feedback when a session is too long, progress is fragile or stalled, the work drifts from its goal, or the learner explicitly reports strain. It does not infer a psychological diagnosis from ordinary tone or a single answer. Feedback events are stored separately from learning evidence so a new chat can resume the latest adjustment without treating it as a permanent learner label.

The bundled analytics engine calculates local weekly time, frequency, pacing, review backlog, delayed retention, and separate evidence trends. It distinguishes an unconfigured target from a measured shortfall, and reports an informational above-plan signal separately from repeated-load overload risk.

Global Install

Install the published package from npm:

npm install -g studyany@latest --registry=https://registry.npmjs.org/

The postinstall step installs the skill at:

~/.claude/skills/studyany/
$CODEX_HOME/skills/studyany/

When CODEX_HOME is not set, the Codex target defaults to ~/.codex/skills/studyany/. Claude also receives the /learn command at ~/.claude/commands/learn.md.

The explicit equivalent is:

studyany install --scope global --client claude,codex

Restart Claude Code or Codex after installing so the client reloads its skill catalog.

Start A Session

In Claude Code, use natural language or the installed command:

/learn I want to reach a concrete learning goal. Start with a short diagnostic.

In Codex, use natural language or explicitly mention the skill:

Use the studyany skill. Start a study session for my current learning goal.

The skill records time through the bundled study clock when a shell is available. It will not claim a precise duration, completed work, or mastery without corresponding evidence.

Project Install

For one project, install the package without -g:

npm install --save-dev studyany

Project postinstall copies the skill to .claude/skills/studyany/ and .cursor/skills/studyany/, and installs .claude/commands/learn.md.

To select one client explicitly:

npx studyany install --scope project --client claude
npx studyany install --scope project --client cursor

Inspect targets without writing files:

studyany install --scope global --dry-run

If npm lifecycle scripts are disabled, install with --ignore-scripts and run the explicit installer afterward. Set STUDYANY_SKIP_INSTALL=1 to skip the automatic postinstall path.

Artifact-Based Practice

When the objective needs work outside the conversation, StudyAny identifies a workspace and gives the learner a concrete handoff:

Workspace: <where to work>
Artifact: <file, tool state, or external reference>
Learner action: <the exact task>
Review evidence: <what to return or what can be inspected>

It prefers existing learner material. When a starter is needed, it creates a minimal non-destructive file under the visible project-root directory studyany-artifacts/<goal>/ by default, or in the learner's chosen project path. It records the file's status, path, session, and review evidence in .study/artifacts.jsonl. Comments, instructions, labels, sample text, and other learner-readable content in generated artifacts use the learner's current language. Required code keywords, API names, commands, and interface fields remain exact. .study/ is metadata-only. The starter is scaffolding, not proof that the learner has mastered the objective.

Persistent Study State

StudyAny keeps current continuity separate from historical evidence:

.study/checkpoint.json   current stage, open loops, next action, and resume state
.study/sessions.jsonl    measured session history
.study/assessments.jsonl learning evidence
.study/reviews.jsonl     retrieval history and due dates
.study/decisions.jsonl   challenge decisions and route changes
.study/coaching_events.jsonl meaningful feedback and pacing adjustments
.study/dashboard.md      derived human-readable summary

At the start of a new conversation, the skill reads the checkpoint and latest records before teaching. When a shell is available, inspect the same state directly:

python .claude/skills/studyany/scripts/study_state.py --study-root .study status --json

If an existing workspace has no checkpoint, rebuild only the current pointer from its saved records:

python .claude/skills/studyany/scripts/study_state.py --study-root .study rebuild

The rebuild reports missing historical session logs as unknown. It never estimates past minutes from conversation length.

Computed Learning Analytics

Configure a commitment only when you want adherence alerts. Capacity is not a commitment:

{
  "available_minutes_per_week": 240,
  "target_minutes_per_week": 180,
  "target_sessions_per_week": 4,
  "target_study_days": ["Mon", "Tue", "Thu", "Sat"],
  "preferred_session_minutes": 45,
  "maximum_session_minutes": 75
}

The state command includes the derived projection:

python .claude/skills/studyany/scripts/study_analytics.py --study-root .study --json
python .claude/skills/studyany/scripts/study_state.py --study-root .study status --json

The projection reports overlong_session, behind_pace, above_plan, frequency_gap, review_backlog, delayed_decay, fragile_progress, stalled_progress, and overload_risk when observable thresholds are met. Missing targets and sparse evidence are reported as not_configured or insufficient_data, never as failure. Checks happen when the skill is invoked; StudyAny does not run a background notifier.

Challenge Handling

StudyAny treats disagreement as a verification signal, not as an instruction to agree. It classifies the issue as a fact, method, preference, assessment, or question; checks the relevant evidence; and records whether the current claim is supported, needs correction, has a valid alternative, is based on a bad question, or remains uncertain. A supported method stays the explicit default, while a valid correction is propagated to affected plan items.

The same claim has a bounded adjudication cycle. Repeating a rejection without new evidence does not make StudyAny alternate methods indefinitely. The claim is held or deferred, the evidence that would reopen it is stated, and the lesson returns to unaffected work. Decisions are kept in .study/decisions.jsonl and summarized in the checkpoint for the next chat.

Uninstall

Remove the current StudyAny installation for selected clients:

studyany uninstall --scope global --client claude,codex --dry-run
studyany uninstall --scope global --client claude,codex

For a project installation, use --scope project and the relevant client. Uninstall removes the selected studyany skill and the managed Claude learn.md command.

Publish

npm login
npm version patch
npm publish --access public --registry=https://registry.npmjs.org/

The package name is the unscoped studyany; publishing requires an npm account with permission for that package and the registry's current authentication requirements.

Study Clock

The skill calls the bundled Python script when a shell tool is available:

python .claude/skills/studyany/scripts/study_clock.py start --subject "example" --mode lesson --objective "Complete one practice task"
python .claude/skills/studyany/scripts/study_clock.py status
python .claude/skills/studyany/scripts/study_clock.py stop --status complete --next-action "Review the evidence"

On Windows, use py -3 if python is not on PATH. The script writes an open session to .study/active-session.json, then appends the measured session to .study/sessions.jsonl when stopped.