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

opencode-context-guard

v0.1.3

Published

OpenCode plugin that enforces context management — STATE.md injection, planning artifacts, git awareness, and obligation tracking

Readme

opencode-context-guard

Your AI agent forgets everything between sessions. This plugin fixes that.

The Problem

You spend 45 minutes with an AI agent debugging a race condition. You lock decisions, discover root causes, build a plan. Then the session ends — compaction fires, you close the terminal, context overflows. The next session starts completely blind.

You write instructions in AGENTS.md: "maintain STATE.md", "read planning artifacts before working", "checkpoint before ending." The agent reads these once at the start. Twenty turns later, it's deep in code and has forgotten every instruction. STATE.md goes stale. Planning artifacts go unread. Context that should persist across sessions is lost.

This isn't a model problem. It's a delivery problem. Instructions in a text file are read once and forgotten. There's no ongoing reminder, no compliance check, and no tools to make context management easy.

How It Works

The plugin moves context management from text instructions to runtime enforcement. Instead of telling the agent to remember — it makes forgetting impossible.

Every turn, the agent sees your project state.

## Context Guard
Project: opencode-media-guard
focus: Implementing Layer 2 hard enforcement
phase: implementing
blockers: WeakMap cache produces 0 hits
next: Fix token cache, npm publish v0.2.0
handoff: Execute step 4 — custom tools
State updated: 12 minutes ago
Decisions: 8 locked, 2 rejected
Task: 260410-opencode-media-guard — goal.md ✓, anchor.md ✓, plan.md ✓, summary.md ✗
Git: main, 2 uncommitted, 1 ahead. Last: "add git conventions" (89 min ago)
Session: 23 min, 14 tool calls, 5 files modified
Obligations: STATE.md needs checkpoint (files changed since last update)

This is injected into the system prompt on every API call — primary agent and subagents. The agent doesn't need to remember to check the project state. It's already there.

Subagents get context for free. When the primary agent delegates to Research, Implement, or Review, those subagents automatically see the project state. No more "forgot to pass context in the delegation prompt."

Saving state is one tool call, not a writing exercise. Instead of asking the agent to compose a well-written STATE.md summary (which it often does poorly), the agent fills in 6 fields:

focus: what we're working on
phase: planning | implementing | testing | reviewing | shipping
blockers: what's stuck
next: what to do next
handoff: who should continue and where
task: path to planning artifacts

No prose. No summarization. No risk of a bad summary poisoning the next session.

The plugin tracks what you'd forget to ask about. Uncommitted files, stale state, unpushed commits — surfaced as obligations the agent sees every turn. Not as nagging reminders, but as facts the agent incorporates into its decisions.

Sessions that end without a checkpoint aren't lost. When a session goes idle or gets compacted, the plugin auto-appends a log entry: what happened, how many tool calls, what files changed. The next session sees: "Last session ended without an explicit checkpoint" — a signal to verify before building on stale state.

Why Not Just AGENTS.md?

AGENTS.md is the right place for philosophy — how to think about problems, when to escalate, how to collaborate. It's the wrong place for mechanics.

| | AGENTS.md | Context Guard | |---|---|---| | When the agent sees it | Once, at session start | Every turn, every agent | | Enforcement | Honor system | Injected into system prompt — can't be skipped | | State awareness | "Remember to read STATE.md" | STATE.md content is already visible | | Subagent context | "Pass context in delegation" | Automatic — every subagent sees project state | | Checkpoint reminders | "Update STATE.md before ending" | Obligation: "files changed since last update" | | Git awareness | Agent runs git status manually | Branch, uncommitted files, ahead/behind — every turn | | Cross-session continuity | "Read artifacts when resuming" | Artifacts status shown, warnings for stale state |

The plugin doesn't replace AGENTS.md. It takes the 50 lines of mechanical reminders that agents forget and enforces them at runtime. AGENTS.md keeps the 260 lines of workflow guidance, collaboration principles, and architectural philosophy that can't be automated.

What It Provides

System prompt injection — Project state visible every turn. Focus, phase, blockers, next steps, git status, obligations. ~200 tokens.

Three tools:

  • context_checkpoint — Update project state. 6 structured fields, no prose.
  • context_load — Summarize all planning artifacts for a task in one call.
  • context_discover — Append a finding or decision to STATE.md's log or decisions section.

Session lifecycle management:

  • Pre-compaction: injects full project state into the compaction prompt so it survives summarization.
  • On idle: auto-logs session end with tool count and file changes.
  • On resume: warns if last session ended without an explicit checkpoint.

Git awareness — Branch, uncommitted files, commits ahead of remote, last commit message. Updated every 30 seconds. The agent stops running git status manually.

Obligation tracking — "STATE.md needs checkpoint", "3 uncommitted files", "2 commits not pushed." Facts, not nagging.

STATE.md Format

The plugin introduces a structured STATE.md with three sections:

# State

## Current
focus: Building context-guard plugin
phase: planning
task: ~/.config/opencode/plans/260411-context-guard-plugin/
blockers: none
next: Switch to /execute, build steps 1-3
handoff: Execute should read all 3 artifacts. Start with step 1.

## Decisions
- Pure JS only, no native deps [2026-04-11]
- Default budget 20 images [2026-04-11]
- [REJECTED] js-tiktoken — WASM dep, replaced with custom BPE [2026-04-11]

## Log
- [2026-04-11 14:00] Plan complete with 9 build steps
- [2026-04-11 13:30] Anchor established — hook behavior verified
- [auto] [2026-04-11 14:23] Session ended, 14 tool calls, 5 files modified

Current — 6 key-value fields. Overwritten on each checkpoint. Injected into system prompt every turn.

Decisions — Append-only. Locked decisions and rejected approaches. Never rewritten, never lost.

Log — Append-only. Milestones from the agent, auto-entries from the plugin. Not injected — available for deep context when needed.

Install

// ~/.config/opencode/opencode.jsonc
{
  "plugin": ["opencode-context-guard"]
}

Restart OpenCode. No configuration needed — works immediately with sensible defaults.

Performance

The plugin adds <1ms to typical turns (one fs.stat call to check if STATE.md changed). Git status refreshes every 30 seconds (~70ms, invisible alongside 2-5 second API calls). System prompt injection is ~200 tokens — negligible overhead.

License

MIT