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

openclaw-joaxclaw-fs

v0.11.2

Published

OpenClaw gateway plugin: exposes JoaxClaw teams (~/.openclaw/teams) and processes (~/.openclaw/processes) over the gateway as teams.* / processes.* RPC methods, plus engines.* host-side local-LLM probing, memory.* host-side skill management, host.metrics

Readme

openclaw-joaxclaw-fs

Gateway plugin that exposes JoaxClaw's host-side teams, processes, and local LLM engine checks over the WebSocket so they work on a remote gateway (and so agent-authored teams/processes are reachable from the app).

They live as files in the gateway host's state dir:

<stateDir>/teams/<id>.team.json       TeamBlueprint (source of truth)
<stateDir>/teams/<id>.md              compiled ProcessDef
<stateDir>/teams/<id>.revisions.json  revision snapshots
<stateDir>/processes/<id>.md          process definition
<stateDir>/processes/.runs/<id>.json  persisted run state

The desktop app normally reads these via local Electron file IPC, which only reaches the host when the gateway is local. This plugin registers teams.* / processes.* gateway RPC methods that read/write those directories on the host.

Methods

| Method | Scope | Params | Returns | |---|---|---|---| | teams.list | read | — | { teams: [{ id, blueprint, md, revisions }] } | | teams.get | read | { id } | { id, blueprint, md, revisions } | | teams.set | write | { id, blueprint?, md?, revisions? } | { ok, id } | | teams.run | write | { id, task, autorun? } | { ok, id, nonce } | | teams.delete | write | { id } | { ok, id } | | processes.list | read | — | { defs: [{ id, md }], runs: [{ id, run }] } | | processes.get | read | { id } | { id, md } | | processes.set | write | { id, md } | { ok, id } | | processes.delete | write | { id } | { ok, id } | | processes.runs.set | write | { id, run } | { ok, id } | | engines.probe | read | { url, timeoutMs? } | { ok, status } | | engines.fetch | read | { url, timeoutMs? } | { ok, status, body } | | engines.pull | write | { baseUrl, model } | { pullId } (Ollama; streamed, overall %) | | engines.pullStatus | read | { pullId } | { status, completed, total, done, error?, model } | | engines.delete | write | { baseUrl, model } | { ok, status } (Ollama) | | engines.show | read | { baseUrl, model } | { ok, status, body } (Ollama /api/show) | | engines.keepAlive | write | { baseUrl, model, keepAlive } | { ok, status } (load <0 / unload 0) | | memory.status | read | — | { ok, feature: 'memory-skills' } (presence probe) | | memory.skill.set | write | { slug, markdown } | { ok, slug } (writes skills/<slug>/SKILL.md) | | memory.skill.remove | write | { slug } | { ok, slug } | | memory.list | read | { providerId, config } | { items: [{ id, title, subtitle? }] } (host-side browse) | | memory.read | read | { providerId, config, id } | { content } | | memory.graph | read | { providerId, config } | { graph: { nodes, edges } } (Obsidian backlink graph) | | host.metrics | read | — | { ok, cpu, ramUsed, ramTotal, gpu: [{ model, utilizationGpu, memUsed, memTotal, temperatureGpu }] } (gateway host CPU %/RAM bytes/GPU MB) | | jobs.list | read | — | { jobs: [{ id, command, running, done, exitCode, percent, startedAt, elapsedMs }] } (background script jobs) | | jobs.get | read | { jobId } | { id, command, running, done, exitCode, error, percent, elapsedMs, output, outputTruncated } (live tail) | | jobs.stop | write | { jobId } | { ok } (SIGTERM the job) |

Agent tools script_start / script_status / script_stop let the model launch a long-running script in the background (returns a jobId), poll it, or stop it — so the turn doesn't block and JoaxClaw can show a live progress card. jobs.* are the app-side readers for that card.

Artifacts are passed through verbatim as strings (or null when missing); the app owns (de)serialization. Ids are validated to stay inside the state directories. memory.skill.* lets the Memory tab manage a memory connection's agent skill on a remote gateway host (the local ~/.openclaw is the wrong machine there); memory.list /memory.read browse a server-local store's content. A credential in config may be an env:VAR reference, resolved from the host's environment so the secret stays out of the config and the skill file.

teams.run lets an agent launch a saved team against a concrete task. It's thin by design: it only records the request as <id>.runrequest.json (with a one-shot nonce); the JoaxClaw app polls for it, builds the launch prompt, optionally auto-launches when autorun is set, and clears the request. The app owns prompt compilation and the live run monitor, so the plugin never starts a run itself.

engines.probe / engines.fetch GET a local LLM engine's health/model URL from the gateway host — that's how the app checks liveness and lists models for engines on the host's loopback/LAN (unreachable from a remote client). The requested URL is guarded to local-engine hosts only (loopback, *.local, private IPv4); anything else is rejected, so these can't be used as a general request proxy. engines.fetch caps the returned body at 1 MiB; the app parses it (Ollama /api/tags, OpenAI /models).

Install

From npm (recommended — works on any gateway host with internet). --force makes this same command upgrade an existing install:

openclaw plugins install --force openclaw-joaxclaw-fs
openclaw plugins enable joaxclaw-fs
openclaw plugins inspect joaxclaw-fs   # verify it registered (exits non-zero if not)
openclaw gateway restart

Local gateway (dev — symlink so edits reload):

openclaw plugins install --link ./plugins/joaxclaw-fs
openclaw gateway restart

Remote gateway, no shell access: JoaxClaw's Install via agent flow (on the remote Teams or Processes screen) installs this on the host for you (it embeds the plugin files in a chat message, so it works even air-gapped). The app uses these methods automatically when the plugin is present.

Publishing

CI publishes this package to npm automatically when its package.json version changes on main (.github/workflows/publish-plugin.yml). Bump the version, update this README / the app's CHANGELOG, and push — the workflow is a no-op for any version already on npm. Requires an NPM_TOKEN repository secret with publish rights.