colonelpanic8/dotfiles/paseo-plugin

Claude Code and agent skill by colonelpanic8/dotfiles

Trust tier 2
  • community
  • ext:[{"type":"hook","description":"Pre/post lifecycle hooks"}]
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Build and manage trusted local Paseo plugins. Use when the user asks to create, edit, install, reload, enable, disable, remove, or troubleshoot a Paseo plugin; add lifecycle hooks; transform agent configuration, environment, MCP servers, or workspace creation; automate permissions or turn follow-ups; add a screen, sidebar header or footer item, or workspace panel; add Command Center items or slash commands; add composer pills or attachment sources; transform, render, or append agent timeline it…

Install

npx vskill@latest install colonelpanic8/dotfiles/paseo-plugin

Semi-extensibleMentions customization, but needs skill-specific knowledge. Read the extensible skills standard

SKILL.md

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.

In the Paseo repository, use public-docs/plugins/reference.md for the checkout's API, including unreleased changes. Use docs/plugins.md for maintainer guidance. Complete contracts belong in the public docs; this skill indexes the references and examples.

What a plugin can contribute

Pick the contribution that matches the request. Each row names the registration, when it fits, and where the full contract lives. Most plugins combine several: a slash command that calls an RPC, which appends a timeline row, which a renderer draws.

ContributionRegistrationUse it whenReference
Screen and sidebar itemaddScreen + addSidebarHeaderItem/addSidebarFooterItemA full screen of plugin UI, or sidebar header or footer rows that open a screen or popoverreference.md → Screens and sidebar items
Workspace paneladdWorkspacePanelUI that lives as a tab beside agents, terminals, files, and diffs; locations: ["explorer"] for the Explorerreference.md → Workspace panels
Command Center itemaddCommandCenterItemA global, workspace, or agent action reachable from ⌘Kreference.md → Command Center items
Client slash commandaddSlashCommandA /command args in the composer that runs plugin code instead of prompting the agentreference.md → Slash commands
Composer pilladdComposerPillA per-agent button in the composer track bar next to Tasks and Subagentsreference.md → Composer pills
Timeline transformeraddTimelineTransformer + addTimelineRendererReplace, explode, or hide a built-in timeline item, including while it streamsreference.md → Timeline items; plugin-examples/timeline-items, plugin-examples/inline-thinking
Timeline rowpaseo.agents.ref(id).timeline.append(...)Push a plugin-owned row into an agent timeline from a server handler and update it laterreference.md → Append a timeline row from the daemon
Attachment sourceclient.addAttachmentSource + server.handleLet the user attach a searchable external resource, such as an issue, to a promptreference.md → Add a composer attachment source; plugin-examples/linear
ThemeaddThemeA light or dark palette under Settings → Appearancereference.md → Contribute a theme; plugin-examples/catppuccin
Plugin RPCdefineRpc + server.handle + useRpcDaemon-side work that is not a normal Paseo operation: vendor APIs, credentials, local filesreference.md → Add plugin-specific backend behavior
Lifecycle eventsserver.onObserve agent/workspace lifecycle, inspect ended turns, and answer permission requestsLifecycle hooks
Creation and launch hooksserver.beforeChange agent config, provider options, MCP servers, environment, or workspace isolation before the operationBefore hooks
Paseo SDKusePaseo() / handler { paseo }Normal Paseo operations: workspaces, agents, providers, configreference.md → Use the Paseo SDK
Lifecycle taskExample
Log all eleven hookslifecycle-logger
Follow-ups, permissions, environment, provider switching, worktreeslifecycle-actions
Inject MCP servers and change Codex sandbox/approval optionsagent-configuration

Create the project

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

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

The generated project contains:

text
my-plugin/
paseo-plugin.json
OVERVIEW.md
package.json
tsconfig.json
index.client.tsx
index.server.ts
client/greeting.tsx
server/greeting.ts
shared/greeting.ts

The manifest supplies the default install ID and supported Paseo versions:

json
{ "id": "my-plugin", "requirements": { "paseo": ">=0.8.0" } }

Keep requirements.paseo correct whenever creating or editing a plugin. init uses >= followed by the CLI version. Raise the minimum when adopting newer APIs; add an upper bound when a later Paseo release is incompatible. Use npm semver ranges and explicitly include beta versions when targeting betas. Missing requirements mean <0.8.0; complete the 0.8 entry migration before adding >=0.8.0. Verify compatibility with both the daemon and the app running client contributions. See requirements.

Each runtime has its own optional entry. A plugin must have at least one. Both entries accept .ts or .tsx; use .tsx when an entry imports components.

PathRuntime
index.client.tsx and client/App
index.server.ts and server/Daemon subprocess
shared/Both

Do not put any other code modules in the plugin root.

A client import of server/, a server import of client/, and every node: import reachable from client code is a compile error. A relative import to another code file in the plugin root is also a compile error; move it into client/, server/, or shared/. Shared modules contain Zod contracts and plain values; they do not import Node or React Native runtime APIs.

Default-export one contribution function from each entry and return cleanup:

tsx
// index.client.tsx
import type { PluginClientContext } from "@getpaseo/plugin/client";
export default function contribute(client: PluginClientContext) {
// Register components and client callbacks here.
return () => {};
}
ts
// index.server.ts
import type { PluginServerContext } from "@getpaseo/plugin/server";
export default function contribute(server: PluginServerContext) {
// Register daemon-side RPC handlers here.
return () => {};
}

Cleanup can be async. Use it for timers, watchers, sockets, subscriptions, and other resources created by plugin code. Every client add* method returns an idempotent remover. Paseo calls the entry cleanup first, removes registrations that remain, 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.

tsx
import {
type PluginClientContext,
type PluginWorkspacePanelProps,
useWorkspace,
} from "@getpaseo/plugin/client";
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(client: PluginClientContext) {
client.addWorkspacePanel({
id: "overview",
title: "Workspace overview",
icon: "PanelsTopLeft",
context: "workspace",
Component: Overview,
});
client.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), openScreen({ screenId, params? }), and contextual openPanel(id) capabilities.

Add a screen and a sidebar item

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

7-day trend score
0

Not refreshed yet.

Extension points

  • hookPre/post lifecycle hooks

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/colonelpanic8/dotfiles/paseo-plugin/badge)](https://verified-skill.com/skills/colonelpanic8/dotfiles/paseo-plugin)

Something wrong with this skill or its page? Tell us.