一键导入
vicinae
Build Vicinae launcher extensions with TypeScript and React. Use when creating extension commands, List/Form/Detail views, or no-view actions.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Build Vicinae launcher extensions with TypeScript and React. Use when creating extension commands, List/Form/Detail views, or no-view actions.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
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.
Inform the user what is happening — skip passive lookups
Manage version control with Jujutsu (jj) — no staging area, immediate changes, smart rebasing. Use when navigating history, squashing, or pushing to Git remotes.
Programmatic hunk selection for Jujutsu — split, commit, or squash specific hunks without interactive prompts. Use when making partial commits or selective squashes.
Gather facts from the web using evidence-first approach with mandatory citations. Use when researching topics, answering factual questions, or any task requiring web-sourced evidence.
Model minimum-move problems as BFS over a state space. Use when solving bucket pouring puzzles, sliding tiles, or any problem asking for the shortest sequence of moves to reach a goal.
| name | vicinae |
| topic | Vicinae Extensions |
| description | Build Vicinae launcher extensions with TypeScript and React. Use when creating extension commands, List/Form/Detail views, or no-view actions. |
| token_cost | 200 |
| keywords | ["vicinae","launcher","extension","command","view","form"] |
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.