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

@pandi-coding-agent/pandi-container

v0.2.8

Published

Extensión de Pi para administrar sandboxes de Apple `container` (micro-VMs Linux): un comando /container y una herramienta container_sandbox invocable por el modelo (status/list/create/run/stop/remove).

Readme

@pandi-coding-agent/pandi-container

Ejecutá comandos Linux en una micro-VM aislada en lugar de hacerlo directo sobre tu Mac. Esta extensión envuelve Apple container para que una sesión de Pi pueda crear sandboxes Linux desechables o persistentes: útil para comandos no confiables, herramientas puntuales o cualquier cosa que no quieras tocar en el filesystem del host. Las dos superficies comparten el mismo spawn con argv solamente (nunca un string de shell), así que las referencias de imagen, los nombres de máquina y los comandos no pueden inyectar shell: /container (interactivo, humano) y container_sandbox (acciones explícitas, invocable por el modelo, sin borrados sorpresivos).

Inicio rápido

/container create alpine:latest dev --size small   # máquina Linux pequeña: 2 CPU / 1G
/container run dev -- uname -a                      # ejecuta un comando dentro de ella
/container remove dev                               # limpiá cuando termines

Instalación

Desde npm:

pi install npm:@pandi-coding-agent/pandi-container

Desde este repositorio:

pi install ./extensions/pandi-container             # global (tu usuario)
pi install -l ./extensions/pandi-container          # local al proyecto
pi --no-extensions -e ./extensions/pandi-container   # prueba puntual, sin cargar nada más

Comandos

| Comando | Qué hace | | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | | /container | Sin argumentos abre un selector interactivo de acciones (si no hay TUI, cae a status). | | /container status | Muestra el resumen del subsistema y las máquinas. | | /container list | Lista las máquinas de contenedor. | | /container create <image> [name] [--size <tier>] | Crea una máquina (p. ej. alpine:latest dev --size small). | | /container run <machine> -- <cmd...> | Ejecuta un comando dentro de una máquina, p. ej. /container run dev -- uname -a. | | /container stop [name] | Detiene una máquina (la default si se omite). | | /container remove <name> | Elimina una máquina; pide confirmación en la TUI antes. | | container_sandbox | Tool para el modelo: mismas acciones (status, list, create, run, stop, remove) — ver abajo. |

Cómo funciona

La tool container_sandbox recibe una acción (action) más:

| Parámetro | Significado | | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | | name | Nombre de la máquina (create/stop/remove, o destino de run). | | image | Imagen OCI (create, o run efímero), por ejemplo alpine:latest. | | command | Array argv para run, por ejemplo ["uname", "-a"]. | | machine | Máquina existente donde ejecutar (si no, se usa un contenedor efímero vía image). | | tier | Preset de tamaño con nombre para create o run efímero — ver Niveles de tamaño. | | workdir | Solo para run: directorio de trabajo dentro del contenedor. | | cpus, memory | Para create, o para run efímero (image, no machine): los valores explícitos pisan tier. Se ignoran cuando run apunta a una machine existente. | | homeMount (ro|rw|none), setDefault | Solo para create. | | force | Requerido para remove. |

Devuelve un resumen en texto más details estructurados (la lista de máquinas parseada, el nombre creado, el destino/exit code del run, etc.).

Máquina persistente vs. contenedor efímero

| Usá... | Cuándo | Parámetros de run | | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- | | una máquina persistente | la sandbox debe sobrevivir entre comandos; refleja tu home/cwd de macOS dentro de Linux (editás en macOS, ejecutás en Linux) | machine (creada antes con create) | | un contenedor efímero | un comando de una sola vez; equivalente a container run --rm, se elimina automáticamente al terminar (solo en la tool — /container run apunta a una máquina) | image |

// ejecuta dentro de una máquina persistente existente
{ "action": "run", "machine": "dev", "command": ["uname", "-sr"] }

// ejecuta en un contenedor efímero nuevo (se elimina al terminar)
{ "action": "run", "image": "alpine:latest", "command": ["echo", "hello"] }

Niveles de tamaño

Apple container v1.0.0 define machine create --memory por defecto en la mitad de la RAM del host (por ejemplo, ~18G en una máquina de 36GB) y deja sin documentar el valor por defecto de --cpus (container machine create --help); los valores por defecto de run efímero para -c/-m tampoco están documentados. La mitad de la RAM del host es mucho para una sandbox, así que la extensión trae presets con nombre:

| Nivel | CPUs | Memoria | Válido para | | -------- | ---- | ------- | ------------------------ | | micro | 1 | 256M | solo run efímero | | tiny | 2 | 512M | solo run efímero | | small | 2 | 1G | create + run efímero | | medium | 4 | 2G | create + run efímero | | large | 8 | 4G | create + run efímero |

La escalera arranca en micro con 256M y duplica la memoria en cada nivel. La stack de virtualización de Apple impone un mínimo duro de 200 MiB por VM (minimum memory amount allowed is 200 MiB); se verificó un npm i -g @earendil-works/pi-coding-agent real y pi --version dentro de una VM de 200M con ~114MB de RSS, así que 256M alcanza cómodo para cargas chicas de Node/CLI.

  • Opt-in: sin tier y sin cpus/memory explícitos, no se emite ninguna flag y la CLI conserva sus defaults (igual que antes de los niveles).
  • Precedencia: cpus/memory explícitos pisan al tier, campo por campo.
  • Alcance: los niveles aplican a create (máquina) y a run efímero por imagen solamente. No aplican a run dentro de una máquina existente: sus recursos quedan fijados al crearla con la CLI upstream.
  • Dos pisos distintos de la CLI (ambos medidos en v1.0.0): run efímero baja hasta 200 MiB, pero machine create exige al menos 1G (error real: invalid memory value '256mb'. Must be greater than 1gb). La extensión rechaza micro/tiny para create con un error acotado antes de lanzar nada.
// tool: crea una máquina pequeña
{ "action": "create", "image": "alpine:latest", "name": "dev", "tier": "small" }

// tool: run efímero con nivel (emite --cpus 2 --memory 1G)
{ "action": "run", "image": "alpine:latest", "tier": "small", "command": ["uname", "-a"] }

Equivalente en comando: /container create alpine:latest dev --size small (alias --tier).

Limitaciones y notas de seguridad

  • Apple container requiere macOS en Apple Silicon (arm64); macOS 26 está recomendado. En un host no compatible, la extensión devuelve un solo mensaje acotado en vez de fallar de forma opaca.
  • Antes de usarla hay que preparar la CLI (brew install container), un kernel configurado (container system kernel set --recommended) y un subsistema iniciado (container system start).
  • La tool nunca borra por defecto: remove solo avanza cuando se pasa force: true de forma explícita. El comando /container remove confirma primero en la TUI.
  • Los comandos que corren dentro de la VM se pasan como array argv: no hay interpolación de shell en el host.
  • Cada llamada a la CLI de Apple container tiene un timeout de 120s. Se puede sobreescribir con PI_CONTAINER_TIMEOUT_MS para pulls lentos o comandos largos dentro del sandbox.

Relacionado

Para instalar todo el paquete de extensiones y skills, instalá en su lugar la raíz del repositorio.