agent/skills/vicinae/SKILL.md
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.
npx skillsauth add knoopx/pi vicinaeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Extensions for the Vicinae launcher using TypeScript and React. Two command types: view commands display React UI, no-view commands execute actions without UI.
Recommended: use Vicinae's built-in "Create Extension" command.
Manual setup:
mkdir my-extension && cd my-extension
npm init -y
npm install @vicinae/api typescript @types/react @types/node
mkdir src && touch src/command.tsx
{
"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" }
}
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>
);
}
All actions must have an icon prop.
import { showToast } from "@vicinae/api";
export default async function QuickAction() {
await showToast({ title: "Done!" });
}
npm run build # Production build
npx tsc --noEmit # Type check
# Run dev server in tmux (creates session only if it doesn't exist)
tmux has -t vicinae-dev || tmux new-session -d -s vicinae-dev 'bunx vici develop'
tmux capture-pane -t vicinae-dev -p -S - # Read logs
Navigate between views with useNavigation:
const { push, pop } = useNavigation();
<Action icon={Icon.Eye} title="View" onAction={() => push(<DetailView />)} />;
Define preferences in the manifest and access with getPreferenceValues().
See references/ for advanced UX patterns, full API reference, and keyboard shortcuts.
tools
Inform the user what is happening — skip passive lookups
development
Renders markdown to self-contained HTML with a custom dark stylesheet and opens in browser. Use when previewing markdown documents, generating styled HTML from README or report files.
testing
Programmatic hunk selection for Jujutsu — split, commit, or squash specific hunks without interactive prompts. Use when making partial commits or selective squashes.
content-media
Manage version control with Jujutsu (jj) — no staging area, immediate changes, smart rebasing. Use when navigating history, squashing, or pushing to Git remotes.