Connect local coding agents to mobile chat.
Scan once from Feishu/Lark or WeChat, then drive Codex, Claude Code, Gemini CLI, Cursor Agent, or OpenCode on your Mac from your phone.
Download · Quick start · Supported agents · Troubleshooting · License
Kite is a macOS menu bar app that bridges phone-based chat channels to local coding-agent CLIs. It runs as a single Go process: desktop UI, QR login, message receiving, agent execution, and local state persistence all live inside the app. No public IP, reverse proxy, tunneling service, or hosted backend is required.
Remote coding-agent connections can be fragile, and bot/channel setup can feel heavier than the work you actually want to delegate. Kite keeps the control plane local: pick a project directory, choose an agent, scan a QR code, and send tasks from your phone.
- Chat channels: Feishu/Lark PersonalAgent and personal WeChat. WeChat here means a personal account, not WeCom/Enterprise WeChat.
- Local agents: Codex CLI, Claude Code, Gemini CLI, Cursor CLI/Agent, and OpenCode.
- QR setup: Create a connection in the desktop app, scan with the matching mobile app, and Kite starts the receiver automatically.
- Session resume: Kite stores the active agent session per chat so follow-up messages continue the same context when the underlying CLI supports it.
- Mobile commands: Use
/help,/status,/new,/list,/switch,/cwd,/model,/reasoning,/mode, and more directly from chat. - Local-first security boundary: By default, only the user who completed setup can drive the local agent. Credentials are stored locally in
~/.kite/store.json.
Feishu/Lark or WeChat on your phone
|
v
Kite macOS app ----> local coding-agent CLI
| |
+---- text/card reply <---+
Feishu/Lark uses the official long-connection SDK and rich interactive cards. WeChat uses personal-account QR authorization and long polling; replies are plain text so the flow stays lightweight on mobile.
- macOS
- At least one supported and logged-in agent CLI:
codex,claude,gemini,cursor-agent, oropencode - A project directory, preferably a git repository
- Feishu/Lark or WeChat logged in on your phone
git clone https://github.com/yibo365/kite.git
cd kite
npm --prefix cmd/kite-wails/frontend run build
go run ./cmd/kite-wails./scripts/package_macos.sh
open build/package/Kite.appThe packaging flow lives in scripts/package_macos.sh. It builds the CLI, Wails app, app bundle, and DMG using local ad-hoc signing.
- Open Kite.
- Click Add channel.
- Choose a chat channel: Feishu or WeChat.
- Choose an agent: Codex, Claude Code, Gemini CLI, Cursor Agent, or OpenCode.
- Select the working directory.
- Click Scan to connect, then approve the QR login on your phone.
Once the connection is online, send a normal message in the bound chat. Kite will run the selected local agent in the selected working directory and send the result back to the chat.
| Agent | CLI used by Kite | Session resume | Main Kite controls |
|---|---|---|---|
| Codex CLI | codex exec / codex resume |
Yes | /model, /reasoning, /mode, /web, /provider |
| Claude Code | claude |
Yes | /model, /reasoning, /mode |
| Gemini CLI | gemini --prompt --output-format stream-json |
Yes | /model, /mode |
| Cursor Agent | cursor-agent -p --output-format stream-json |
Yes | /model, /mode |
| OpenCode | opencode run --format json |
Yes | /model, /reasoning, /mode |
Kite forwards one chat turn to the selected CLI. Authentication, provider routing, MCP servers, model availability, and detailed permission policies still belong to the underlying agent CLI.
/help Open the command panel
/status Show chat, cwd, session, mode, and runtime status
/whoami Show the bound chat/user identity
/new [name] Start a fresh agent session on the next prompt
/list List sessions for the current chat
/current Show the active session
/switch <n|id|name> Switch session by number, id, or name
/delete <n|id|name> Delete a saved session mapping
/name <name> Rename the current or next session
/cwd [path] Show or change working directory
/mode [...] Change permission/automation mode for the current agent
/model [name] Show or change model
/reasoning [level] Show or change reasoning effort when supported
/web [on|off] Codex web search toggle
/tools [on|off] Show or hide tool output
/shell <command> Run a shell command in the current cwd
/show <path> Show a file or directory
/diff [path] Show git diff
/commands ... Manage custom commands
/alias ... Manage command aliases
/config ... View or edit chat configuration
Feishu/Lark supports interactive card buttons. WeChat currently uses plain text commands and plain text replies.
Kite stores local state at:
~/.kite/store.json
This file contains channel credentials, connection records, working directories, and chat-to-agent-session mappings. Full conversation history remains owned by the selected agent CLI.
Optional Feishu/Lark environment variables:
KITE_FEISHU_APP_ID=cli_xxx
KITE_FEISHU_APP_SECRET=xxx
KITE_FEISHU_OWNER_OPEN_ID=ou_xxxThe local packaging script uses ad-hoc signing. It does not use Apple Developer ID signing or notarization. For personal use or small trusted tests, this is fine, but a DMG downloaded from GitHub or a browser may show "cannot verify developer" or "damaged and cannot be opened".
If that happens:
- Drag
Kite.appinto/Applications. - Control-click
Kite.appin Finder, choose Open, then confirm Open again. - If macOS still blocks it, open System Settings -> Privacy & Security, find the Kite warning, and choose Open Anyway.
- If the quarantine flag is stuck, run:
xattr -dr com.apple.quarantine /Applications/Kite.appFor a downloaded DMG, you can clear quarantine before opening it:
xattr -dr com.apple.quarantine ~/Downloads/Kite.dmgOnly do this for builds you trust. For public distribution, use Apple Developer ID signing, notarization, and DMG stapling.
Run tests and build the frontend:
go test ./...
npm --prefix cmd/kite-wails/frontend run build
go build ./cmd/kite-wailsUseful project links:
- Desktop entry:
cmd/kite-wails - Frontend source:
cmd/kite-wails/frontend/src - Agent bridge:
internal/bridge - CLI agent adapters:
internal/agent - Generic CLI runner:
internal/cliagent - Packaging script:
scripts/package_macos.sh - Original planning notes:
docs
- Agent CLI not found: make sure the command works in a terminal, for example
codex,claude,gemini,cursor-agent, oropencode, then restart Kite. - Feishu/Lark or WeChat receiver is offline: disable and re-enable the connection, or restart Kite.
- QR code expired: create the connection again to generate a new QR code.
- WeChat scanned but did not connect: finish the confirmation step on the phone. Scanning alone does not return a token.
- Wrong working directory: open the connection detail page, choose Edit, and update the directory. Kite will start a new agent session after the directory changes.
- macOS blocks the app: see macOS Gatekeeper.
~/.kite/store.jsoncontains credentials. Do not commit it to git.- Kite runs local agent CLIs on your machine. Treat the bound chat user as someone who can operate the selected project directory.
- Use high-permission modes such as
/mode yoloand commands such as/shellcarefully.
Kite is released under the MIT License. Some files may retain their own upstream notices if they reuse third-party open-source material.
