一键导入
nyx-lark
Lark/Feishu integration via NyxID proxy. Replaces lark-cli — call Lark OpenAPI directly through nyxid proxy request with automatic credential injection.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Lark/Feishu integration via NyxID proxy. Replaces lark-cli — call Lark OpenAPI directly through nyxid proxy request with automatic credential injection.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Aevatar scheduling & workflow automation: scheduled_agent_creator (cron/one-shot), the long-running task automation playbook, workflow creation semantics (Scope Workflow vs Ornn publish), agent_builder lifecycle, and scheduled-run credential lifetimes (5-minute broker token at fire) with a token_expired triage protocol.
Aevatar channel & delivery how-to: capability tools (code_execute, nyxid_proxy, GitHub PAT fallback, channel bots), token_expired/401 credential triage for capability tools, LLM route selection slash commands, channel_registrations (staged Lark provisioning), and agent_delivery_targets binding.
Configure and prove Aevatar codex_exec for one NyxID account, choosing either operator-managed OpenSandbox or a private NyxID node-backed SSH service. Use for managed allowlist/binding readiness, node registration, forced-command hardening, service binding, Codex authentication/workspace configuration, mandatory public-sample verification, or diagnosing managed sandbox and private SSH failures.
Mount and run harmless Aevatar workflows that prove codex_exec works through either the operator-managed OpenSandbox target or a private NyxID node-backed SSH target. Use after configuring managed access or a personal node, before real tasks, and when diagnosing identity, allowlist, binding, sandbox, service, principal, or Codex runner failures.
Decide — honestly — whether a thing the user wants to build on Aevatar is possible, what its prerequisites are, or why it cannot be done, BEFORE anyone starts building. Use this first whenever a user describes a goal rather than a concrete artifact — "can aevatar do X", "I want a bot that…", "build me something that posts to Twitter / reads my GitHub / replies on Telegram", "is it possible to…", "automate … every day", "let Lark Base trigger a workflow". It teaches the one hard premise (every third-party capability is brokered by NyxID), the two distinct surfaces (outbound connector vs inbound channel), external HTTP trigger options such as Lark Base automation, how to check what is actually connectable, the prerequisite for each capability class, what is host-gated (and so not self-serve), and what is genuinely impossible without new NyxID/Aevatar platform work — so you can negotiate scope and give the user a straight answer plus next steps instead of over-promising. It scopes; it does not build (hand off to
Entry point, panorama, and router for the entire Aevatar skill family — load this FIRST whenever someone wants to build, run, publish, schedule, externally trigger, or operate anything on Aevatar ("create an agent team", "make a workflow / member", "publish or bind a service", "register it with NyxID", "set up a recurring / cron run", "invoke my service", "let Lark Base trigger my workflow"), wants to know whether something is even possible ("can Aevatar do X?", "能不能用 aevatar 实现"), or just wants to know what Aevatar can do. It teaches the object model (scope → team → member[workflow|script|gagent] → service → schedule/external trigger), how to authenticate as a NyxID-bearer REST client, how to resolve your scope, and the two caller modes (client REST vs in-session server-side tools). It does not do the work itself — it routes you to the right companion skill (feasibility-advisor, workflow-authoring, team-builder, service-publisher, scheduler, plus diagnostics probes and the safety-net fallback), held together
| name | nyx-lark |
| description | Lark/Feishu integration via NyxID proxy. Replaces lark-cli — call Lark OpenAPI directly through nyxid proxy request with automatic credential injection. |
| version | 1.0.0 |
| metadata | {"category":"plain","tag":["nyxid","lark","feishu","messaging","calendar","drive"],"requires":{"bins":["nyxid"]}} |
This skill replaces all 20 lark-cli skills. Instead of lark-cli <service> +<shortcut>, use nyxid proxy request <slug> <path>. NyxID handles tenant token exchange (bot) and OAuth token injection (user) automatically.
Two NyxID services for Lark, matching lark-cli's --as bot / --as user:
| Service | Identity | Auth Method | Base URL | Path Convention |
|---|---|---|---|---|
api-lark-bot | Bot (tenant_access_token) | Token exchange | https://open.larksuite.com | Paths start with /open-apis/ |
api-lark | User (user_access_token) | OAuth | https://open.larksuite.com/open-apis | Paths start with / (no /open-apis/ prefix) |
Same API, different service — the base URL already contains the prefix for user.
The key difference: api-lark-bot base URL ends at the domain, so you must include /open-apis/ in every path. api-lark base URL already includes /open-apis, so paths start directly with the API version segment.
# Bot: list chats — note the /open-apis/ prefix
nyxid proxy request api-lark-bot /open-apis/im/v1/chats
# User: list chats — no /open-apis/ prefix needed
nyxid proxy request api-lark /im/v1/chats
# Bot: send message — POST with JSON body
nyxid proxy request api-lark-bot "/open-apis/im/v1/messages?receive_id_type=chat_id" \
-m POST -d '{"receive_id":"oc_xxx","msg_type":"text","content":"{\"text\":\"hello\"}"}'
# User: get primary calendar
nyxid proxy request api-lark /calendar/v4/calendars/primary
If you accidentally double the prefix (e.g., api-lark /open-apis/im/v1/chats), the downstream URL becomes /open-apis/open-apis/... and returns 404.
Which service to use for each Lark API domain:
| Domain | Service | Reason |
|---|---|---|
| IM — bot messages, list chats | api-lark-bot | Org-level, bot identity |
| IM — send as user | api-lark | Needs user_access_token |
| Calendar — agenda, events, free/busy | api-lark | Personal calendar data |
| Contact — user lookup, search | api-lark-bot | User OAuth scope hard to obtain |
| Drive — upload, download, list files | api-lark-bot | drive scope only on bot |
| Doc — create, read, write documents | api-lark | docx scope available on user |
| Wiki — spaces, nodes | api-lark-bot | wiki scope only on bot |
| Task — CRUD, subtasks, tasklists | api-lark-bot | task scope only on bot |
| Sheets — read, write, append | api-lark-bot | sheets scope on bot |
| Base (Bitable) — tables, records | api-lark-bot | bitable scope on bot |
| Mail — send, reply, drafts | api-lark | Personal mailbox |
| Approval — instances, tasks | api-lark-bot | Org-level |
| VC / Minutes — meetings, transcripts | api-lark-bot | Org-level |
See references/identity.md for complete scope mapping.
nyxid service add api-lark-bot
# Prompted for JSON credential:
# app_id: your Lark app ID (e.g., cli_a940e30bf3b89eea)
# app_secret: your Lark app secret
# Get these from: https://open.larksuite.com/app → your app → Credentials
nyxid service add api-lark --oauth --scope "\
contact:user.base:readonly,\
calendar:calendar.event:read,calendar:calendar.event:create,\
calendar:calendar.event:update,calendar:calendar.free_busy:read,\
calendar:calendar:read,\
docx:document,docx:document:readonly,docx:document:create,\
im:chat:read,im:message,im:message.send_as_user,\
im:message:readonly,im:message.group_msg:get_as_user,\
sheets:spreadsheet:readonly,\
approval:task:read,approval:instance:read,\
drive:drive:readonly,wiki:wiki:readonly,\
task:task:read,task:task:write,\
mail:mailbox:readonly,bitable:bitable:readonly"
# Bot: should return a JSON object with data.items[] containing chat_id, name, etc.
nyxid proxy request api-lark-bot /open-apis/im/v1/chats
# User: should return a JSON object with data.calendar_list[] containing calendar_id, summary, etc.
nyxid proxy request api-lark /calendar/v4/calendars
If either returns a scope error, see Section 5 (Scope Troubleshooting).
Top 10 most common operations, showing lark-cli vs NyxID equivalent.
# lark-cli
lark-cli im +messages-send --as bot --chat-id oc_xxx --msg-type text --data '{"text":"hello"}'
# nyx
nyxid proxy request api-lark-bot "/open-apis/im/v1/messages?receive_id_type=chat_id" \
-m POST -d '{"receive_id":"oc_xxx","msg_type":"text","content":"{\"text\":\"hello\"}"}'
# lark-cli
lark-cli im +chat-search --as bot
# nyx
nyxid proxy request api-lark-bot /open-apis/im/v1/chats
# lark-cli
lark-cli calendar +agenda --as user
# nyx (replace CALENDAR_ID and timestamps)
nyxid proxy request api-lark "/calendar/v4/calendars/CALENDAR_ID/events?\
start_time=START_UNIX&end_time=END_UNIX"
nyxid proxy request api-lark "/calendar/v4/calendars/CALENDAR_ID/events" \
-m POST -d '{"summary":"Meeting","start_time":{"timestamp":"1718280000"},"end_time":{"timestamp":"1718283600"}}'
# lark-cli
lark-cli contact +get-user --as bot --user-id ou_xxx
# nyx
nyxid proxy request api-lark-bot /open-apis/contact/v3/users/ou_xxx
nyxid proxy request api-lark-bot /open-apis/drive/v1/files
nyxid proxy request api-lark /docx/v1/documents \
-m POST -d '{"title":"New Doc","folder_token":"fldcniHf40Vcv1"}'
nyxid proxy request api-lark-bot /open-apis/task/v2/tasks \
-m POST -d '{"summary":"My task"}'
nyxid proxy request api-lark "/im/v1/messages/search?query=keyword" \
-m POST -d '{"query":"search term"}'
nyxid proxy request api-lark "/calendar/v4/freebusy/list" \
-m POST -d '{"time_min":"1718280000","time_max":"1718366400","user_id":{"user_id":"ou_xxx","id_type":"open_id"}}'
# Lark error includes helps[].url — open it to add the scope
open "https://open.larksuite.com/app/cli_a940e30bf3b89eea/auth?q=im:chat:readonly&op_from=openapi"
# Bot scopes take effect immediately after adding
# 1. Delete all old OAuth credentials (they share a refresh token)
nyxid external-key list # find Lark OAuth entries
nyxid external-key delete <id> # delete each one
# 2. Re-add with correct scopes
nyxid service add api-lark --oauth --scope "new,scopes,here"
contact:contact.base:readonly vs contact:user.base:readonly). Always check the Lark API docs for the correct scope variant.Most Lark list endpoints return paginated results. The pattern is consistent across all APIs:
# First page
nyxid proxy request api-lark-bot /open-apis/im/v1/chats
# Response includes: "page_token": "xxx", "has_more": true
# Next page
nyxid proxy request api-lark-bot "/open-apis/im/v1/chats?page_token=xxx&page_size=50"
Default page size is 20. Maximum is typically 50 or 100 depending on the endpoint. Check the specific API reference for limits.
| File | Description |
|---|---|
references/identity.md | Complete bot vs user routing + scope mapping |
references/im.md | Messages, chats, threads, reactions |
references/calendar.md | Events, free/busy, RSVP, suggestions |
references/contact.md | User lookup, org structure |
references/drive.md | Files, folders, comments, permissions |
references/doc.md | Document CRUD, media upload |
references/wiki.md | Knowledge base spaces, nodes |
references/task.md | Tasks, subtasks, tasklists |
references/sheets.md | Spreadsheet cells, rows, filters |
references/base.md | Bitable tables, fields, records, views |
references/mail.md | Email send, reply, drafts, folders |
references/approval.md | Approval instances, tasks |
references/vc.md | Meetings, minutes, transcripts |