Agent skill
vicinae
Builds Vicinae launcher extensions with TypeScript and React, defines commands, and creates List/Form/Detail views. Use when creating new extensions and implementing view/no-view commands.
Install this agent skill to your Project
npx add-skill https://github.com/knoopx/pi/tree/main/agent/skills/vicinae
SKILL.md
Vicinae Extensions
Extensions for Vicinae launcher using TypeScript and React.
Contents
- Core Concepts
- Quick Start
- Project Structure
- Command Types
- Development Workflow
- Advanced: UX Patterns
- Advanced: API Reference
- Advanced: Keyboard Shortcuts
Core Concepts
| Concept | Description |
|---|---|
| Extension | Package adding commands to the launcher |
| View Command | Displays React UI (mode: "view") |
| No-View Command | Executes action without UI (mode: "no-view") |
| Manifest | package.json with extension metadata |
Quick Start
Recommended: Use Vicinae's built-in "Create Extension" command.
Manual:
mkdir my-extension && cd my-extension
npm init -y
npm install @vicinae/api typescript @types/react @types/node
mkdir src && touch src/command.tsx
Project Structure
my-extension/
├── package.json # Manifest with commands
├── tsconfig.json
├── src/
│ ├── command.tsx # View commands
│ └── action.ts # No-view commands
└── assets/ # Icons
Manifest (package.json)
{
"name": "my-extension",
"title": "My Extension",
"version": "1.0.0",
"commands": [
{
"name": "my-command",
"title": "My Command",
"description": "What this command does",
"mode": "view"
}
],
"dependencies": {
"@vicinae/api": "^0.8.2"
}
}
Command Types
View Command (src/command.tsx)
import { List, ActionPanel, Action, Icon } from "@vicinae/api";
export default function MyCommand() {
return (
<List searchBarPlaceholder="Search items...">
<List.Item
title="Item"
icon={Icon.Document}
actions={
<ActionPanel>
<Action
icon={Icon.Eye}
title="View"
onAction={() => console.log("viewed")}
/>
</ActionPanel>
}
/>
</List>
);
}
Important: All actions must have an icon prop.
No-View Command (src/action.ts)
import { showToast } from "@vicinae/api";
export default async function QuickAction() {
await showToast({ title: "Done!" });
}
Development Workflow
npm run build # Production build
npx tsc --noEmit # Type check
# Run Vicinae dev server in tmux
# Creates the session only if it does not exist
tmux has -t vicinae-dev || tmux new-session -d -s vicinae-dev 'bunx vici develop'
# Read logs
tmux capture-pane -t vicinae-dev -p -S -
Common APIs
import {
// UI Components
List,
Detail,
Form,
Grid,
ActionPanel,
Action,
Icon,
Color,
// Utilities
showToast,
Toast,
Clipboard,
open,
closeMainWindow,
getPreferenceValues,
useNavigation,
} from "@vicinae/api";
Keyboard Shortcuts
Common shortcuts: Ctrl+R (refresh), Ctrl+N (new), Ctrl+E (edit), Shift+Delete (delete).
See Keyboard Shortcuts for full reference and implementation examples.
Navigation
function ListView() {
const { push, pop } = useNavigation();
return (
<List.Item
title="Go to Detail"
icon={Icon.Document}
actions={
<ActionPanel>
<Action
icon={Icon.Eye}
title="View"
onAction={() => push(<DetailView />)}
/>
</ActionPanel>
}
/>
);
}
Preferences
Define in manifest:
{
"preferences": [
{
"name": "apiKey",
"title": "API Key",
"type": "password",
"required": true
}
]
}
Access in code:
const { apiKey } = getPreferenceValues();
Related Skills
- typescript: Type safety for extensions
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
conventional-commits
Writes and reviews Conventional Commits commit messages (v1.0.0) to support semantic versioning and automated changelogs. Use when drafting git commit messages, PR titles, release notes, or when enforcing a conventional commit format (type(scope): subject, BREAKING CHANGE, footers, revert).
nix-flakes
Creates reproducible builds, manages flake inputs, defines devShells, and builds packages with flake.nix. Use when initializing Nix projects, locking dependencies, or running nix build/develop commands.
skill-authoring
Writes effective pi skills with proper structure, concise content, and progressive disclosure. Use when creating new skills, improving existing skills, or reviewing skill quality.
gtkx
Build GTK4 desktop applications with GTKX React framework. Use when creating React components that render as native GTK widgets, working with GTK4/Libadwaita UI, handling signals, virtual lists, menus, or building Linux desktop UIs.
nu-shell
Processes structured data through pipelines, filters tables, transforms JSON/CSV/YAML, and defines custom commands. Use when scripting with typed parameters or working with tabular data.
nix
Runs packages temporarily, creates isolated shell environments, and evaluates Nix expressions. Use when executing tools without installing, debugging derivations, or working with nixpkgs.
Didn't find tool you were looking for?