Open-source · sandboxed by default · Alfred & Raycast alternative

Build once. Launch everywhere.

Kunkun is an open-source app launcher — and a portable platform: a command palette, a tool-using AI, local knowledge search, and an extension ecosystem where Raycast extensions compatibility out of the box.

macOS AvailableWindows In ProgressLinux In ProgressHarmonyOS Planned
clipboardK
  • Clipboard HistoryBrowse & paste anything you copiedCommand
  • Translate SelectionDeepL · selected textExtension
  • Color PickerPick a pixel · copy hex/rgbExtension
  • Kill ProcessSearch by name · CPU / memoryCommand
  • Search FilesNative SQLite metadata indexCommand
Kunkun↵ Open⌘K Actions

One app: a launcher, a tool-using AI, local knowledge search, and an extension store.

See it in action

A quick tour of Kunkun — the launcher, extensions, and the store.

One core · every surface

Not an Electron app — a portable core with an Electron shell

The same business logic, database, plugin runtime, and AI agent run unchanged across hosts. Electron is just today's desktop shell — the CLI, a headless server, and the browser console drive the very same core.

DesktopElectron shell
BrowserWeb console
ServerHeadless host
CLInpx host
portable core
@kunkunsh/core@kunkunsh/db@kunkunsh/agent@kunkunsh/ai@kunkunsh/plugin-runtime@kunkunsh/sdk@kunkunsh/headless
Sandboxed by default

Every extension declares what it can touch

Permissions are scoped in the manifest and enforced host-side across seven layers. On Deno, a network grant compiles to --allow-net=domain — process-level, not a promise. Users grant extra access at runtime.

Sandboxed by default Per-domain network on Deno Deny always beats allow
package.json
{  "kunkun": {    "identifier": "com.you.git-repos",    "permissions": [      "clipboard-read",      { "permission": "fs-read", "allow": ["$EXTENSION_SUPPORT/**"] },      { "permission": "network", "domains": ["*.github.com"] },      { "permission": "shell", "commands": [{ "program": "git" }] }    ]  }}
Permission model

“Git Repos” wants file access

Requested at runtime · you decide

fs-read$HOME/Documents/**

Reason: “Import the files you selected.”

Allow OnceAlways AllowDeny

Enforced host-side · revocable anytime in Settings.

Plugins × Services × MCP

Extensions that call each other — safely

An extension can expose typed service methods. Other extensions call them through the service broker, the AI agent picks them up as tools, and external MCP clients like Claude Desktop can mount them — every call permission-checked.

Video Processinganother extensionffmpeg.compress()
AI Agentservices become toolsplugin__ffmpeg__*
Claude · Cursor · Zedexternal MCP clientsHTTP · bearer token
Service Brokerpermission intersection
FFmpegservice providercompress()convert()
YouTube Toolsservice providertranscript()metadata()
Typed contracts shipped over npm Caller ∩ provider grants on every call Every method is an MCP tool

A low-permission extension can't escalate by calling a powerful service — the broker intersects the caller's and provider's grants on every dispatch.

A real composed workflow: YouTube Podcast

com.kunkun.youtube-podcast-generator
Fetch transcriptanother extension's serviceyoutube.transcript()
Summarizehost AI · model presetspreset: "flash" | "power"
Synthesize speechhost voice permissionvoice:synthesize
Queue & playKunkun's media playermedia.generateSpeech()

One extension, four capabilities it never had to build — each behind its own declared permission. Trigger it from the launcher, or from the button Kunkun injects right on the youtube.com player.

AI, built in

A local AI that actually does things

The agent doesn't just chat — it calls real tools: your files and shell, any MCP server, installed plugin services, and even other coding agents over ACP. Every plugin service is automatically an agent tool. Bring your own keys and compare models side by side.

  • Tool-using agent. File, shell, network + MCP + plugin + ACP tools in one loop
  • Two-way MCP. Connect to MCP servers — or expose your toolset to Claude, Cursor & Zed
  • Runs anywhere. Same agent loop over HTTP/SSE, or as a Telegram bot
Built-in tools
read_filewrite_fileedit_filerun_commandgrepfind_pathfetch
MCP servers
mcp__{server}__*
Plugin services
plugin__{id}__*
Delegate to coding agents (ACP)
opencodeclaude-code
Compare models · one prompt
claude-opus-4-8 Use this
gpt-5
gemini-2.5-pro
Bring your own keys:OpenAIAnthropicGoogleOllama
For developers

Six ways to build an extension

Every command declares one runtime mode — from a fully custom UI window down to a headless background service — so you pick the minimum sandbox you need. It's just an npm package with a kunkun manifest, the SDK is Raycast-compatible, and existing Raycast extensions install straight from the store.

One codebase → npx CLI · Web app · Kunkun plugin

A transport-free core plus thin adapters ship the same engine three ways. Real submodules — kkterminal and space-lens — prove it.

Quickstart

Your first command in minutes

Every extension is an npm package with a kunkun manifest. Pick a command mode, write a component, build, and load — no host boilerplate.

  1. 1Add the SDK to any npm package.
  2. 2Export a component using @kunkunsh/sdk/ui primitives.
  3. 3Bundle to a self-contained dist/ with the Bun build plugin.
  4. 4Load it in Settings → Developer, or publish to the store.
Read the full guide
src/App.tsx
import { useState } from "react";import { Button, Div, H2, P } from "@kunkunsh/sdk/ui";import { Clipboard, showToast, Toast } from "@kunkunsh/sdk";export default function App() {  const [text, setText] = useState("");  return (    <Div className="p-6">      <H2>My Extension</H2>      <Button        title="Read Clipboard"        variant="primary"        onClick={async () => {          const t = await Clipboard.readText();          setText(t);          await showToast({ title: t, style: Toast.Style.Success });        }}      />      {text && <P>{text}</P>}    </Div>  );}
Build with AI

Let your AI agent build it

Install the Kunkun skill into Claude Code, Cursor, or any coding agent. It walks your assistant through choosing an extension type, scaffolding the project, and wiring the manifest — reading these docs on demand via llms.txt.

AI development guide

Install the skill

npx skills install kunkunsh/kunkun

…or paste this into any agent

Build a Kunkun extension by following the guide athttps://docs.kunkun.sh/instruction.md

Ready to build your first extension?

Start with a five-minute quickstart, or explore the architecture that makes Kunkun portable across desktop and server hosts.

Prefer to ask? Hit the Ask AI button — it searches the whole documentation.