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

@everme/opencode

v0.7.10

Published

EverMe long-term memory for OpenCode and Kilo Code: profile and recall injection and automatic turn capture, as an in-process plugin.

Readme

@everme/opencode

EverMe long-term memory for OpenCode and Kilo Code CLI, as an in-process plugin.

Kilo Code CLI is an OpenCode fork. Its plugin API and config schema are the same, so one bundle serves both hosts.

What it does

| Host hook | What the plugin does | |---|---| | experimental.chat.system.transform | Adds the durable Profile block to the system prompt. The plugin fetches the profile once per session. | | chat.message | Fetches recall for the user's text and adds it to the message as a synthetic text part with <everme_recall>. | | event: session.idle (or session.status idle) | Reads the session through the host's SDK client and uploads the turns that are not uploaded yet. |

The plugin skips child sessions, which the host creates for subagents.

Install

evercli plugin install opencode    # or: evercli plugin install kilocode

The install does these steps:

  • It stages this bundle at <config-dir>/everme/.
  • It writes credentials to <config-dir>/everme.env with mode 0600.
  • It adds this element to the plugin array of the host's global config: ["<config-dir>/everme", {"envFile": "<config-dir>/everme.env", "platform": "opencode"}]
  • It keeps the read-only mcp.everme-memory entry, so the model can also call mem_search and mem_context as tools.

<config-dir> is ~/.config/opencode for OpenCode and ~/.config/kilo for Kilo Code. The config file is opencode.json or kilo.json.

Restart the host after install. The host loads plugins only at startup.

How a turn is read

When the session becomes idle, the plugin calls client.session.messages({ path: { id } }) and maps the result:

  • User text parts become the user message. Synthetic and ignored parts are skipped, so our own recall part is never uploaded.
  • Assistant text parts become assistant messages, in source order.
  • A tool part becomes an assistant tool call (callID, tool, state.input) and a tool result (state.output, or state.error for a failed call).
  • Reasoning, step, file, patch and compaction parts are skipped.

The plugin waits while the newest assistant message has no time.completed or a tool call is still pending or running.

A per-session checkpoint stores the native ids that were uploaded, so a repeated idle uploads nothing. The first time the plugin sees a session, it uploads only the newest turn and records the earlier history as the excluded baseline. A rejected upload is not committed, so the next idle retries it. An upload that only timed out is committed, because the gateway stores the messages before it answers.

Configuration

The plugin reads credentials from the file in this order:

  1. EVERME_ENV_FILE_PATH.
  2. The envFile option of the plugin config entry.
  3. ~/.config/opencode/everme.env.

EVERME_STATE_DIR moves the checkpoint directory. The plugin never writes the token into process.env, because the host passes that environment to every tool and shell command.

Without credentials the plugin does nothing.

Uninstall

evercli plugin uninstall opencode   # or kilocode

To uninstall manually, do these steps:

  1. In the host's config file, remove the plugin element whose path is <config-dir>/everme and the mcp["everme-memory"] entry.
  2. Run rm -rf <config-dir>/everme <config-dir>/everme.env.
  3. Restart the host.

Tests

npm test --workspace @everme/opencode

License

Apache-2.0