Agent Skills

feishu-binding

Feishu/Lark binding: device flow authorization, connect, disconnect, status check. Use when setting up or managing Feishu/Lark connection (e.g. connect Feishu, connect Lark, bind 飞书, check Feishu status, disconnect Lark).

Install

npx skills add https://github.com/starchild-ai-agent/official-skills --skill feishu-binding
SKILL.md

📱 Feishu/Lark Binding

Connect / disconnect the user's Feishu (飞书) or Lark account so the agent can chat via the Feishu/Lark app.

The feishu tool stays built-in. This SKILL.md is the reference doc.

See also

  • config/context/references/messaging-channels.md — how messages are routed across channels
  • skills/wechat-binding/SKILL.md — analogous WeChat flow
  • skills/tg-bot-binding/SKILL.md — analogous Telegram flow

Brand selection

Brand Region Domain
feishu China mainland (中国大陆) feishu.cn / accounts.feishu.cn
lark International larksuite.com / accounts.larksuite.com

Ask the user which brand they use. Default to feishu if unclear. Chinese-speaking users almost always use feishu.


Typical binding flow

connect(brand) → user scans QR / opens link → poll(device_code) → done
  1. Start device flow: feishu(action="connect", brand="feishu") — returns verification_uri, device_code, and a QR code image saved to workspace.
  2. Show BOTH options to the user:
    • QR code scan: Display the QR code image inline using the markdown_image from the result (e.g. ![Feishu QR Code](feishu_qrcode_xxx.png)). The user scans it with their Feishu/Lark app.
    • Direct link: Show the verification_url as a clickable link. The user opens it in their browser, logs in to Feishu/Lark, and confirms.
  3. Wait for the user to confirm. Don't auto-poll — let them say "done" / "confirmed" / "已确认" / "scanned" first.
  4. Poll for completion: feishu(action="poll", device_code=<from step 1>, brand=<same brand>).
    • status: "done" → binding complete, congratulate the user.
    • status: "pending" → ask the user if they've scanned the QR code or opened the link and confirmed.
    • status: "expired" → the device flow expired (typically 5 minutes). Start over with connect.
  5. Confirm to user: "Feishu/Lark connected! You can now chat with your agent on Feishu/Lark."

Actions

action required params purpose
status — Current Feishu/Lark app state. Use to check if already connected.
connect brand (optional, default "feishu") Start device flow. Returns verification URL + device_code.
poll device_code, brand Check if user has confirmed authorization. Returns status.
disconnect — Unbind Feishu/Lark app (destructive — confirm with user first).

Channel-aware QR / link display

User channel How to show
Web Include file_path (QR image) in your reply — frontend renders it inline. Also show the link.
Telegram send_to_telegram(file_path=<qr_path>, message_type="photo") + include the link in the caption
WeChat Show the link only (user can't scan a QR inside WeChat for Feishu)
Feishu (User is already on Feishu — they don't need to bind. Tell them it's already connected or check status.)

Key differences from WeChat / Telegram

Aspect Feishu/Lark WeChat Telegram
Auth method Device flow (URL) QR code scan Bot token
User action Open URL + confirm in app Scan QR + confirm Create bot via @BotFather
Credential None (device flow handles it) bot_token (from QR) bot_token (from BotFather)
Brand choice feishu / lark N/A N/A

Critical rules

  • Don't auto-poll after connect. Wait for user confirmation that they've opened the link and confirmed in Feishu/Lark. Auto-polling wastes API calls.
  • Device flow expires in ~5 minutes. If poll returns expired, tell the user and start a new connect.
  • disconnect is destructive — confirm with the user before calling it. It will stop the Feishu/Lark gateway instance.
  • Brand matters — feishu and lark use different API domains. Using the wrong brand will fail silently or redirect to the wrong login page.
  • One app per user — a user can only have one Feishu/Lark app at a time. If they want to switch brands, they must disconnect first, then connect with the new brand.

Troubleshooting

Symptom Likely cause Fix
connect returns error User already has an active app Call status first; if active, ask if they want to disconnect and rebind
poll returns expired User took too long to confirm Start a new connect
poll returns pending repeatedly User hasn't opened the URL yet Remind them to open the verification URL
User says "I can't find the link" URL was in a previous message Re-run connect to get a fresh URL

Related skills

entra-app-registrationmicrosoft606KGuides Microsoft Entra ID app registration, OAuth 2.0 authentication, and MSAL integration. USE FOR: create app registration, register Azure AD app, configure OAuth, set up authentication, add API permissions, generate service principal, MSAL example, console app auth, Entra ID setup, Azure AD authentication. DO NOT USE FOR: Key Vault secrets (use azure-keyvault-expiration-audit), general Azure resource security guidance.azure-messagingmicrosoft595KTroubleshoot and resolve issues with Azure Messaging SDKs for Event Hubs and Service Bus. Covers connection failures, authentication errors, message processing issues, and SDK configuration problems. WHEN: event hub SDK error, service bus SDK issue, messaging connection failure, AMQP error, event processor host issue, message lock lost, message lock expired, lock renewal, lock renewal batch, send timeout, receiver disconnected, SDK troubleshooting, azure messaging SDK, event hub consumer, servicentra-agent-idmicrosoft328KProvision Microsoft Entra Agent Identity Blueprints, BlueprintPrincipals, and per-instance Agent Identities via Microsoft Graph, and configure OAuth 2.0 token exchange (fmi_path, OBO, cross-tenant) including the Microsoft Entra SDK for AgentID sidecar. USE FOR: Agent Identity Blueprint, BlueprintPrincipal, agent OAuth, fmi_path token exchange, agent OBO, Workload Identity Federation for agents, polyglot agent auth, Microsoft.Identity.Web.AgentIdentities. DO NOT USE FOR: standard Entra app registsupabasesupabase298KUse when doing ANY task involving Supabase. Triggers: Supabase products (Database, Auth, Edge Functions, Realtime, Storage, Vectors, Cron, Queues); client libraries and SSR integrations (supabase-js, @supabase/ssr) in Next.js, React, SvelteKit, Astro, Remix; auth issues (login, logout, sessions, JWT, cookies, getSession, getUser, getClaims, RLS); Supabase CLI or MCP server; schema changes, migrations, declarative schemas, security audits, Postgres extensions (pg_graphql, pg_cron, pg_vector); deb

Search skills and MCP servers

Fuzzy search across 23,137 skills and servers