Skills Agentes

Paseo Plugin

Construye y gestiona plugins locales de confianza para Paseo: crear, editar, instalar, recargar, activar, desactivar, quitar o depurar un plugin, añadir superficies nativas o de barra lateral, o añadir RPC y attachments del composer.

Estrellas
15.7k

en todo el repo

Actividad
63

0–100, la ruta de este skill

Actualizado
hace 12 días

último commit aquí

Commits
5

últimos 90 días

Contexto
3.9k tok

70 tok en reposo

Paquete
1 archivo

15 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add getpaseo/paseo --skill paseo-plugin --agent claude-code

Se instala solo en este repositorio.

Qué hace

  • Construye y mantiene plugins locales de Paseo, que son código de confianza y sin sandbox instalado por daemon.
  • Arranca el proyecto con `paseo plugin init`, un manifiesto `paseo-plugin.json` y una función de contribución por defecto que devuelve limpieza.
  • Añade paneles de workspace, superficies de barra lateral y items de Command Center con primitivas de React Native, coloreando el texto desde `theme.colors`.
  • Separa las APIs: el SDK de Paseo (`usePaseo`) para operaciones normales y RPC de plugin con contrato Zod (`defineRpc`, `plugin.handle`) para lógica de backend.
  • Comprueba el switch global `pluginsEnabled` antes de instalar, y siempre `npm run typecheck` + `paseo plugin install/reload/ls/logs` para verificar el estado `running`.

Úsalo cuando

  • Crear, editar, instalar, recargar, activar, desactivar, quitar o depurar un plugin de Paseo.
  • Añadir una superficie nativa o un item de barra lateral, o usar Paseo desde el código del plugin.
  • Añadir RPC de plugin o aportar attachments para el composer.

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • Crea un plugin de Paseo con un panel de workspace que muestre el nombre
    • Añade un item de barra lateral a mi plugin
    • Mi plugin no llega a running, ayúdame a depurarlo
    • Añade un RPC de backend que llame a la API de issues
    • Recarga el plugin tras estos cambios de código

    SKILL.md

    En inglés

    Paseo plugins

    Build or manage the requested plugin directly. Use the current public docs to catch contract changes, but keep working from this skill if the network is unavailable.

    User's request: $ARGUMENTS

    Check current documentation

    Fetch https://paseo.sh/llms.txt first. Select and fetch the current plugin Markdown pages from that index before changing a plugin:

    Use the deployed docs when they disagree with this skill. Do not send the user away to read them instead of completing the work.

    When working in the Paseo repository, also read docs/plugins.md and the relevant example under plugin-examples/.

    Create the project

    Use an absolute path on the daemon machine. init writes files but does not install packages.

    paseo plugin init /absolute/path/to/my-plugin
    cd /absolute/path/to/my-plugin
    npm install
    

    The generated project contains:

    my-plugin/
      paseo-plugin.json
      index.tsx
      paseo-plugin.d.ts
      package.json
      tsconfig.json
    

    The manifest supplies the default install ID:

    { "id": "my-plugin" }
    

    Default-export one contribution function. It must return cleanup, even when there is nothing to clean:

    import type { PluginContext } from "@getpaseo/plugin";
    
    export default function contribute(plugin: PluginContext) {
      // Register contributions here.
      return () => {};
    }
    

    Cleanup can be async. Use it for timers, watchers, sockets, and other resources created by plugin code. Paseo removes registrations, unmounts surfaces, rejects pending RPCs, closes the plugin session, and stops the subprocess when the plugin stops.

    Add a workspace panel

    Workspace panels live beside agents, terminals, files, and diffs. Plugins run on desktop and mobile, and Paseo has multiple themes. Every Text must take its color from theme.colors. Use layout.compact for padding and stacking. Unstyled text is black and fails in dark themes.

    import { type PluginContext, type PluginWorkspacePanelProps, useWorkspace } from "@getpaseo/plugin";
    import { useMemo } from "react";
    import { Text, View } from "react-native";
    
    function Overview({ theme, layout, workspaceId }: PluginWorkspacePanelProps) {
      const name = useWorkspace(workspaceId, (workspace) => workspace.name);
      const styles = useMemo(
        () => ({
          screen: {
            flex: 1,
            padding: layout.compact ? 16 : 24,
            gap: layout.compact ? 8 : 12,
            backgroundColor: theme.colors.surface0,
          },
          title: { color: theme.colors.foreground, fontSize: layout.compact ? 20 : 24 },
        }),
        [theme, layout.compact],
      );
      return (
        <View style={styles.screen}>
          <Text style={styles.title}>{name}</Text>
        </View>
      );
    }
    
    export default function contribute(plugin: PluginContext) {
      plugin.addWorkspacePanel({
        id: "overview",
        title: "Workspace overview",
        icon: "PanelsTopLeft",
        context: "workspace",
        Component: Overview,
      });
      plugin.addCommandCenterItem({
        id: "open-overview",
        title: "Open workspace overview",
        icon: "PanelsTopLeft",
        context: "workspace",
        onSelect({ openPanel }) {
          openPanel("overview");
        },
      });
      return () => {};
    }
    

    Use useWorkspace(id, selector) and useAgent(id, selector). Selectors are required and their results use shallow equality. Never select the whole snapshot or add an RPC to discover the active workspace or agent. Command callbacks receive the selected host's paseo, typed rpc(contract, input), openSurface(id), and contextual openPanel(id) capabilities.

    Add a sidebar surface

    Plugin surfaces use React Native primitives and work across desktop, browser, iOS, and Android. Register the surface before its sidebar item. Color text from theme.colors and pad from layout.compact.

    import type { PluginContext, PluginSurfaceProps } from "@getpaseo/plugin";
    import React, { useMemo, useState } from "react";
    import { Pressable, Text, View } from "react-native";
    
    function Counter({ theme, layout }: PluginSurfaceProps) {
      const [count, setCount] = useState(0);
      const styles = useMemo(
        () => ({
          screen: {
            flex: 1,
            padding: layout.compact ? 16 : 24,
            gap: 16,
            backgroundColor: theme.colors.surface0,
          },
          count: { color: theme.colors.foreground, fontSize: layout.compact ? 36 : 48 },
          button: { padding: 14, borderRadius: 10, backgroundColor: theme.colors.accent },
          buttonText: { color: theme.colors.accentForeground, textAlign: "center" as const },
        }),
        [theme, layout.compact],
      );
      return (
        <View style={styles.screen}>
          <Text style={styles.count}>{count}</Text>
          <Pressable
            accessibilityRole="button"
            accessibilityLabel={`Increment counter, currently ${count}`}
            onPress={() => setCount((value) => value + 1)}
            style={styles.button}
          >
            <Text style={styles.buttonText}>Count me in</Text>
          </Pressable>
        </View>
      );
    }
    
    export default function contribute(plugin: PluginContext) {
      plugin.addSurface("main", Counter);
      plugin.addSidebarItem({
        id: "main",
        title: "Counter",
        icon: "ListPlus",
        surface: "main",
      });
      return () => {};
    }
    

    Icons are Lucide icon names. theme is a typed PluginTheme on every surface and panel. Primary text uses theme.colors.foreground; labels use theme.colors.foregroundMuted; the root view uses theme.colors.surface0. layout.compact is true on mobile and narrow windows. Paseo owns the route, header, host picker, close action, error boundary, and per-installation query client.

    Client code may import react, react-native, @tanstack/react-query, zod, @getpaseo/plugin, and @getpaseo/plugin/server. Install dependencies locally for typechecking; Paseo supplies these runtime modules.

    Module Use it for
    @getpaseo/plugin hooks and UI types
    @getpaseo/plugin/server defineRpc, defineAttachmentSource, handler types

    Choose the correct API

    Use the existing Paseo SDK for normal Paseo operations. Use plugin RPC only for plugin-specific backend behavior.

    Call Paseo from a surface

    usePaseo() borrows the selected host's current connection. Never create another client inside a surface.

    import { usePaseo } from "@getpaseo/plugin";
    
    function PullRequestAction() {
      const paseo = usePaseo();
    
      async function createReviewWorkspace() {
        const workspace = await paseo.workspaces.create({
          title: "Review PR 42",
          source: {
            kind: "worktree",
            cwd: "/absolute/path/to/repository",
            action: "checkout",
            checkoutSource: { kind: "change_request", forge: "github", number: 42 },
          },
        });
        await workspace.agents.create({
          config: { provider: "codex/gpt-5.5" },
          prompt: "Review PR #42.",
        });
      }
    
      // Wire createReviewWorkspace to a Pressable.
      return null;
    }
    

    The API covers workspaces, agents, providers, and daemon config. It omits connection lifecycle because Paseo owns the connection. Consult the current SDK reference for method details.

    Add daemon-side behavior

    Define one Zod contract, register its subprocess handler, and call it with useRpc():

    import type { PluginContext } from "@getpaseo/plugin";
    import { useRpc } from "@getpaseo/plugin";
    import { defineRpc } from "@getpaseo/plugin/server";
    import { z } from "zod";
    
    const greeting = defineRpc({
      name: "greeting.create",
      input: z.object({ name: z.string() }),
      output: z.object({ message: z.string() }),
    });
    
    function Greeting() {
      const createGreeting = useRpc(greeting);
      // Use createGreeting({ name: "Ada" }) in a query, mutation, or event.
      return null;
    }
    
    export default function contribute(plugin: PluginContext) {
      plugin.handle(greeting, async ({ name }, { paseo }) => {
        const { config } = await paseo.config.get();
        return { message: `${name}: plugins are ${config.pluginsEnabled ? "on" : "off"}` };
      });
      plugin.addSurface("main", Greeting);
      return () => {};
    }
    

    Inputs and outputs are validated on both sides. Backend handlers receive the same PaseoApi as { paseo }; their IPC-backed daemon session lives exactly as long as the subprocess. Backend code can use Node APIs and installed dependencies. Keep credentials, filesystem access, shell commands, and vendor API calls in the handler rather than the client surface.

    Use TanStack Query for async request state, caching, and mutations.

    Debug daemon-side behavior

    Backend contributions can use normal Node logging. console.log() writes to the plugin's stdout; console.error() writes to stderr. Paseo captures both streams without interfering with plugin IPC.

    Inspect recent output after install, reload, an RPC failure, or a subprocess crash:

    paseo plugin logs my-plugin
    paseo plugin logs my-plugin --json
    paseo plugin logs my-plugin --host <url>
    

    The same tail is available from Settings → Plugins → Logs. It includes initialization, handler, cleanup, and final crash output. Reload, disable, and process failure retain the tail. Removing the plugin clears it; restarting the daemon clears the in-memory tail. Structured copies also go to the daemon log. Never log credentials or other secrets.

    Add a composer attachment source

    Define a search RPC and register a declarative source:

    import type { PluginContext } from "@getpaseo/plugin";
    import { defineAttachmentSource, defineRpc } from "@getpaseo/plugin/server";
    import { z } from "zod";
    
    const searchIssues = defineRpc({
      name: "issues.search",
      input: z.object({ query: z.string() }),
      output: z.object({
        items: z.array(
          z.object({
            id: z.string(),
            identifier: z.string(),
            title: z.string(),
            subtitle: z.string().optional(),
            url: z.string().url(),
            text: z.string(),
            resourceType: z.string(),
          }),
        ),
      }),
    });
    
    const issues = defineAttachmentSource({
      id: "issues",
      title: "Acme issue",
      icon: "CircleDot",
      pickerTitle: "Attach Acme issue",
      searchPlaceholder: "Search by identifier or title",
      search: searchIssues,
    });
    
    export default function contribute(plugin: PluginContext) {
      plugin.handle(searchIssues, ({ query }) => searchAcmeIssues(query));
      plugin.addAttachmentSource(issues);
      return () => {};
    }
    

    Return complete text snapshots. Paseo owns the composer menu, picker, pills, drafts, and submission. Credentials and vendor calls stay in the daemon handler.

    Hosts and trust

    Plugins are installed per daemon and are trusted, unsandboxed code. Backend code can access files, processes, credentials, and network services on the daemon machine. Client contributions run inside the Paseo app. Do not install a plugin the user has not authorized or source code you have not inspected.

    Check the global switch before installing

    Identify the target daemon and inspect its root pluginsEnabled value in config.json. For the local daemon, paseo daemon status --json reports its home; the file is <home>/config.json. Treat a missing field as false. Do not infer the global value from a plugin's disabled status, because an individual plugin can also be disabled.

    If pluginsEnabled is already true, continue without asking the user to enable it.

    If it is false or absent, stop and ask the user for explicit permission before editing or enabling anything. Include this warning in the request:

    Plugins are trusted, unsandboxed code. Backend plugin code can access your daemon machine, including files, processes, credentials, and network services. Client plugin code runs inside the Paseo app. May I enable plugins on this daemon?

    Do not continue unless the user agrees. After permission:

    1. Preserve the rest of config.json and set the root pluginsEnabled field to true.
    2. Run paseo reload --json against that daemon.
    3. Require pluginsEnabled in appliedPaths, or accept an empty appliedPaths only after re-reading the file and confirming the live plugin catalog is enabled.
    4. Run paseo plugin ls and verify the intended plugin reaches running after installation.

    If the user asks to disable the global switch, set pluginsEnabled to false, run paseo reload --json, and verify configured plugins report disabled.

    Do not edit a local config when the target is a remote daemon. Perform the edit on the daemon machine, or ask the user to use Settings → Plugins → Enable plugins. paseo reload --host <url> reloads the remote daemon's own file but does not edit it.

    When the same sidebar contribution exists on several connected hosts, Paseo shows it once with a host picker. The selected host owns the bundle, SDK calls, RPCs, and query cache. An offline selected host does not fall through to another host. Attachment sources stay scoped to the composer's host.

    Typecheck and manage

    Always typecheck before install or reload:

    npm run typecheck
    paseo plugin install /absolute/path/to/plugin
    paseo plugin install /absolute/path/to/plugin --id another-runtime-id
    paseo plugin ls
    paseo plugin reload my-plugin
    paseo plugin logs my-plugin
    paseo plugin disable my-plugin
    paseo plugin enable my-plugin
    paseo plugin remove my-plugin
    

    Use --host <url> when managing a daemon other than the CLI default. Plugin source edits require paseo plugin reload; config changes to the global switch require paseo reload. A failed plugin reload stays failed; inspect paseo plugin ls for the load error and paseo plugin logs <id> for subprocess output, fix the source, typecheck, and reload again. remove deletes configuration, never the source directory.

    Do not restart the daemon to load source changes. Restarting it can kill the agent performing the work.

    Verify the outcome

    After a change:

    1. Run npm run typecheck.
    2. Install or reload the exact runtime ID.
    3. Run paseo plugin ls and require running with no error.
    4. Confirm the contribution on the intended host. Open the Command Center with ⌘K (macOS) or Ctrl+K (Windows/Linux). For UI work, check a wide desktop window and a compact/mobile client, and switch theme to confirm text still uses foreground / foregroundMuted.
    5. Exercise the changed action or RPC, including its error state.

    Common failures:

    • Missing sidebar item: wrong host, plugin not running, invalid Lucide icon, or sidebar item points to a missing surface.
    • Unavailable client module: client bundles can use only the host-provided modules listed above.
    • RPC rejection: input or output failed its Zod schema, or the handler threw. Inspect paseo plugin logs <id> for handler output.
    • Plugin exits or reload fails: inspect paseo plugin ls for status and paseo plugin logs <id> for initialization, cleanup, or crash output.
    • Stale UI: source was edited without paseo plugin reload <id>.

    Reproducido de getpaseo/paseo bajo licencia NOASSERTION. Leer esta página en markdown.

    Archivos

    1 archivo en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Antes de instalar

    Necesita la CLI `paseo` contra el daemon destino, `npm install` en el proyecto del plugin y el switch global `pluginsEnabled` activado en su `config.json` (requiere permiso explícito del usuario).

    Necesita en el PATH:npm

    Detalles

    Creador
    getpaseo
    Licencia
    NOASSERTION
    Recursos incluidos
    Solo SKILL.md
    Repositorio
    getpaseo/paseo
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de getpaseo/paseo

    Este repo incluye 8 skills. Si instalas uno, normalmente ya tienes los demás.

    Paseo

    15.7k

    Referencia de Paseo para gestionar proyectos, workspaces, scripts de workspace, agentes, schedules y heartbeats. Paseo es un daemon remoto que administra agentes de código y terminales, controlable por MCP o por CLI.

    Costo de contexto al activarse
    2k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 15 días
    automatizacion

    Transfiere la tarea actual a otro agente con todo el contexto: decisiones, intentos fallidos y restricciones en un briefing autocontenido. Se activa con "handoff", "hand off" o "hand this to".

    Costo de contexto al activarse
    612 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 20 días
    automatizacion

    Forma un comité de dos agentes de alto razonamiento que dan un paso atrás, hacen análisis de causa raíz y producen un plan. Úsala cuando estés atascado, en bucle, con visión de túnel o ante un problema de planificación difícil.

    Costo de contexto al activarse
    496 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 20 días
    automatizacion

    Corta una release beta de Paseo. Se activa con "release beta", "cut a beta", "ship a beta", "beta release" o "/release-beta", y sigue el Beta flow y su checklist en `docs/release.md`.

    Costo de contexto al activarse
    78 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 23 días
    devops infraestructura

    Levanta un único agente como asesor para una segunda opinión sobre la tarea actual. Se activa con "advisor", "segunda opinión" o "qué piensa X", cuando quieres una mirada externa sin delegar el trabajo en sí.

    Costo de contexto al activarse
    761 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 20 días
    automatizacion

    Responde dudas sobre el producto y la app de Paseo: setup, configuración, conectividad, providers, workspaces, actualizaciones, logs y troubleshooting. Para operar agentes y workspaces por MCP o CLI, usa la skill paseo.

    Costo de contexto al activarse
    1.6k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 20 días
    herramientas desarrollo

    Skills relacionados

    Responde dudas sobre el producto y la app de Paseo: setup, configuración, conectividad, providers, workspaces, actualizaciones, logs y troubleshooting. Para operar agentes y workspaces por MCP o CLI, usa la skill paseo.

    Costo de contexto al activarse
    1.6k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 20 días
    herramientas desarrollo

    Paseo

    15.7k

    Referencia de Paseo para gestionar proyectos, workspaces, scripts de workspace, agentes, schedules y heartbeats. Paseo es un daemon remoto que administra agentes de código y terminales, controlable por MCP o por CLI.

    Costo de contexto al activarse
    2k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 15 días
    automatizacion

    Levanta un único agente como asesor para una segunda opinión sobre la tarea actual. Se activa con "advisor", "segunda opinión" o "qué piensa X", cuando quieres una mirada externa sin delegar el trabajo en sí.

    Costo de contexto al activarse
    761 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 20 días
    automatizacion