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

contextanalyzer

v0.2.1

Published

Analyze OpenCode session context usage and tool call performance with terminal histograms.

Readme

Install

npx contextanalyzer

Or install globally:

npm i -g contextanalyzer

Install skill for AI agents

npx -y skills add remorses/contextanalyzer

This installs the contextanalyzer skill for AI coding agents. Load it when debugging OpenCode sessions to find which tools spent the most tokens or time.

How it works

contextanalyzer connects to a local OpenCode server, reads your session history, and renders terminal histograms showing exactly where context tokens and wall-clock time are spent.

┌──────────────────────────────────────────────────────────────────────────┐
│                                                                          │
│   opencode serve                    contextanalyzer                      │
│   ┌───────────────┐                ┌──────────────────┐                  │
│   │ Sessions DB   │ ──── HTTP ──▶  │ Fetch messages   │                  │
│   │ Messages      │                │ Analyze parts    │                  │
│   │ Tool parts    │                │ Render histograms│                  │
│   └───────────────┘                └──────────────────┘                  │
│                                            │                             │
│                                            ▼                             │
│                                    Terminal output:                      │
│                                    - Context breakdown                   │
│                                    - Tool usage by size                  │
│                                    - Tool calls by duration              │
│                                    - Individual biggest calls            │
│                                    - Individual slowest calls            │
│                                                                          │
└──────────────────────────────────────────────────────────────────────────┘

The CLI spawns opencode serve automatically on a random port, fetches the session data, and kills it when done. No setup needed beyond having opencode installed.

Usage

Interactive mode (pick a session from a list):

contextanalyzer

Analyze a specific session:

contextanalyzer ses_abc123def456

Point to a different project directory:

contextanalyzer --cwd /path/to/project

JSON output (pipe to jq, save to file):

contextanalyzer ses_abc123 --json | jq '.toolsByDuration[:3]'

Show per-step token table:

contextanalyzer ses_abc123 --steps

Example output

Session overview

Shows model, message counts, real token usage from the API, cost, and cache stats.

Session Overview
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Session              ses_1e36dd4e2ffeFb3I7nov1HFh04
  Model                claude-opus-4-6
  Messages             24 user, 306 assistant
  Duration             1133.3m
  Steps                297
  Total Cost           $31.38
  Prompt Tokens        214.3K (214.2K cached, 1 uncached)
  Output Tokens        2
  Cache Write          115
  Total Tokens         214.3K

Context breakdown

Where do your input tokens come from? Tool outputs usually dominate. Token estimates here are based on character length (~4 chars per token).

Context Breakdown (estimated tokens from chars)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Tool outputs       ███████████████████████████████████ 76.7K    59.4%
  Tool inputs        ███████████████                     33.4K    25.8%
  Assistant text     ████                                9.1K     7.0%
  System message     ████                                9.0K     7.0%
  User text                                              483      0.4%
  Reasoning                                              408      0.3%
  Total                                                  129.1K

Tool usage by type

Which categories of tool calls consume the most context? Bash calls are sub-categorized by command (parsed with just-bash).

Tool Context Usage (output + input tokens)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  read               ███████████████████████████████████ 28.2K    25.6%  (50 calls)
  edit               ████████████████████████▌           19.7K    17.9%  (45 calls)
  websearch          ██████████████████                  14.4K    13.1%  (3 calls)
  bash (git)         ██████████▌                         8.4K     7.6%   (35 calls)
  bash (pnpm)        ████████▌                           6.8K     6.2%   (31 calls)
  task               ███████▌                            6.0K     5.4%   (5 calls)
  bash (tuistory)    ██████▌                             5.3K     4.8%   (46 calls)
  grep               █████                               4.2K     3.8%   (17 calls)

Biggest individual calls

Which specific tool invocations used the most context? Labels show the command, file path, URL, or description so you know exactly what happened.

Biggest Individual Tool Calls
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  websearch: pnpm onlyBuiltDependencies postinstall blocked global …  ████████████████████ 5.8K  19.2%
  websearch: pnpm dlx pnpm install global postinstall scripts disab…  ████████████████     4.7K  15.4%
  websearch: bunx bun install global postinstall lifecycle scripts … █████████████         3.9K  12.7%
  read: .../cli/src/opencode.ts                                       ███████████          3.3K  10.7%
  bash: git diff -- ':!pnpm-lock.yaml'                                ██████████           2.9K  9.5%

Slowest individual calls

Which tool calls took the most wall-clock time?

Slowest Individual Tool Calls
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  task: Oracle re-review after fixes                    ████████████████████ 6.1m   32.5%
  task: Oracle review pinned opencode                   █████████████████▌   5.4m   28.9%
  task: Oracle review bundled opencode                  ████████████████▌    5.1m   27.1%
  task: Explore opencode binary resolution              ██▌                  45.5s  4.0%
  googlesearch: does bunx or bun install -g disable…    █▌                   31.9s  2.8%

Use cases

Optimize tools to reduce context usage

Tool outputs are usually 60-70% of total context. A single curl or webfetch call can burn 50K+ chars. Use contextanalyzer to find which tools are the biggest offenders, then:

  • Replace large file reads with targeted grep or partial reads
  • Avoid fetching full web pages when you only need a section
  • Reduce bash output verbosity by filtering or piping through head/tail
  • Split large skill files so only relevant content is loaded

Optimize tools to reduce session time

Subagent task calls and network operations dominate wall-clock time. Identify the slowest calls, then:

  • Parallelize independent tasks instead of running them sequentially
  • Cache results that don't change between runs
  • Use faster alternatives (e.g. grep instead of full file reads)

Understand cache efficiency

The per-step token table (with --steps) shows how cache hit rates evolve. Low cache rates mean the model re-reads content on every step. High rates (95-100%) mean prompt caching is working well.

Compare sessions

Run contextanalyzer with --json on multiple sessions and compare the outputs to track how prompt engineering or tool configuration changes affect token usage over time.

contextanalyzer ses_before --json > before.json
contextanalyzer ses_after --json > after.json
diff <(jq '.contextBreakdown' before.json) <(jq '.contextBreakdown' after.json)

Options

| Flag | Description | |---|---| | [sessionId] | Session ID to analyze (interactive picker if omitted) | | --cwd <path> | Working directory for opencode server | | --top <n> | Max items in grouped histograms (default: 15) | | --steps | Show per-step token breakdown table | | --json | Output raw analysis as JSON |

How context is measured

The session overview shows exact token counts from the OpenCode API. AssistantMessage.tokens is a context window snapshot at each turn (not incremental). contextanalyzer reads the last assistant message's snapshot to get the current context size. Total prompt tokens = input + cache.read + cache.write, where input represents only non-cached tokens.

Cost is the exception: it is incremental per-message, so it is summed across all assistant messages for the session total.

The context breakdown and tool histograms estimate token contribution by measuring character length of tool inputs and outputs (~4 chars per token). This is a rough approximation for comparing relative sizes, not an exact count.