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

ghosty-acp

v0.0.6

Published

Conecta tu editor a un agente ACP remoto. Puente entre entrada/salida estándar y WebSocket, sin dependencias.

Downloads

682

Readme

ghosty-acp

Connect your editor to an ACP agent running on another machine.

Editors launch a command and talk to it over standard input/output. A remote agent lives behind a WebSocket. This swaps the cable — nothing else. No translation, no state, no dependencies.

Not tied to any agent or vendor: if the other end speaks ACP over WebSocket, this works.

Install

Nothing to install — npx fetches it:

npx -y ghosty-acp wss://your-agent.example.com/acp

VS Code

Install the ACP Client extension, then in settings.json:

{
  "acp.agents": {
    "My agent": {
      "command": "npx",
      "args": ["-y", "ghosty-acp", "wss://your-agent.example.com/acp"],
      "env": { "GHOSTY_ACP_TOKEN": "…" }
    }
  }
}

Zed

settings.json:

{
  "agent_servers": {
    "My agent": {
      "type": "custom",
      "command": "npx",
      "args": ["-y", "ghosty-acp", "wss://your-agent.example.com/acp"],
      "env": { "GHOSTY_ACP_TOKEN": "…" }
    }
  }
}

The token is optional — omit it if the other end doesn't require one.

The working directory (cwd)

Your editor runs on your machine; the agent lives in a remote box, and they share no disk. Every ACP client sends the path of the project open on your machine in session/new — a path that does not exist over there. The agent rejects it (Invalid params: invalid directory path) and editors show it as "Failed to connect", which sends you off to check the URL and the token, the two things that were fine.

So the bridge rewrites that one field: cwd becomes /root, or whatever you set in GHOSTY_ACP_CWD. Nothing else in the message is touched.

"env": { "GHOSTY_ACP_TOKEN": "…", "GHOSTY_ACP_CWD": "/workspace" }

The agent edits what is in the box, not your working copy.

⚠️ Put the token in env, never in args

Any process on your machine can read another process's arguments with ps. The token is read from GHOSTY_ACP_TOKEN and appended to the URL inside the process.

Troubleshooting

Diagnostics go to stderr; stdout carries only the JSON-RPC stream, because anything else there breaks the editor.

| Message | Meaning | |---|---| | rechazado (1006) | Bad credential, or the server refused the connection | | la máquina estaba en reposo… | The agent was asleep; connecting wakes it | | conexión cerrada (…) | The other end closed; the bridge exits so the editor notices | | cwd … → … | The project path was remapped to one the agent can see |

Requires Node 22+. MIT.


ghosty-acp — en español

Conecta tu editor a un agente ACP que corre en otra máquina.

Los editores lanzan un comando y le hablan por entrada y salida estándar. Un agente remoto vive detrás de un WebSocket. Esto cambia el cable, y nada más: no traduce, no guarda nada, no tiene dependencias.

No es de ningún agente ni de ningún proveedor en particular: si el otro extremo habla ACP sobre WebSocket, sirve.

Instalación

Nada que instalar — npx lo descarga:

npx -y ghosty-acp wss://tu-agente.example.com/acp

VS Code

Instala la extensión ACP Client y en settings.json:

{
  "acp.agents": {
    "Mi agente": {
      "command": "npx",
      "args": ["-y", "ghosty-acp", "wss://tu-agente.example.com/acp"],
      "env": { "GHOSTY_ACP_TOKEN": "…" }
    }
  }
}

Zed

En settings.json:

{
  "agent_servers": {
    "Mi agente": {
      "type": "custom",
      "command": "npx",
      "args": ["-y", "ghosty-acp", "wss://tu-agente.example.com/acp"],
      "env": { "GHOSTY_ACP_TOKEN": "…" }
    }
  }
}

El token es opcional: si el otro extremo no pide credencial, omítelo.

El directorio de trabajo (cwd)

Tu editor corre en tu máquina y el agente vive en una caja remota: no comparten disco. Todo cliente ACP manda en session/new la ruta del proyecto abierto en tu máquina, una ruta que allá no existe. El agente la rechaza (Invalid params: invalid directory path) y los editores lo pintan como «Failed to connect», que manda a revisar la URL y el token —justo lo que sí estaba bien—.

Por eso el puente reescribe ese único campo: cwd pasa a ser /root, o lo que pongas en GHOSTY_ACP_CWD. Del resto del mensaje no toca nada.

"env": { "GHOSTY_ACP_TOKEN": "…", "GHOSTY_ACP_CWD": "/workspace" }

El agente edita lo que hay en la caja, no tu copia de trabajo.

⚠️ El token va en env, nunca en args

Los argumentos de un proceso los puede leer cualquier otro proceso de la máquina con un ps. Por eso se lee de GHOSTY_ACP_TOKEN y se añade a la URL ya dentro del proceso.

Cuando algo falla

Todo lo que el puente cuenta va a la salida de error; la salida estándar es sólo el flujo JSON-RPC, porque cualquier otra cosa ahí rompe al editor.

| Mensaje | Qué pasa | |---|---| | rechazado (1006) | La credencial no vale, o el servidor no aceptó la conexión | | la máquina estaba en reposo… | El agente estaba dormido; la conexión lo despierta | | conexión cerrada (…) | El otro extremo cerró; el puente sale para que el editor se entere | | cwd … → … | Se remapeó la ruta del proyecto a una que el agente sí ve |

Necesita Node 22 o superior. MIT.

Agent skills inside

The package ships the Ghosty Studio agent skills under skills/ (ghosty-agent, ghosty-acp, ghosty-docs, ghosty-recipe), in the Agent Skills format. Tools that load skills from installed dependencies (e.g. TanStack Intent) pick them up; anyone else can install them with npx skills add https://ghosty.studio or npx skills add blissito/ghosty-skills.