首页龙虾技能列表 › 飞书日历 — 日程管理

飞书日历 — 日程管理

v1.0.0

飞书日历管理,包括创建日程、查询闲忙、会议室预订等功能。

1· 6,700·134 当前·148 累计·💬 2
by @autogame-17·MIT-0
下载技能包
License
MIT-0
最后更新
2026/4/8
安全扫描
VirusTotal
可疑
查看报告
OpenClaw
可疑
medium confidence
该技能的指令、要求和行为与飞书日历助手一致,它使用mcporter CLI调用MCP日历和联系人服务;没有请求或描述的内容看起来与该目的不成比例。
评估建议
此技能对于使用mcporter CLI管理飞书日历是连贯的,但在安装/使用之前采取这些预防措施:- 仅从受信任来源安装mcporter(验证npm包及其维护者),并自己运行安装,而不是运行您不理解的任意安装命令。- 该技能要求您粘贴飞书MCP服务的Streamable HTTP URL;将这些URL视为潜在敏感(它们允许mcporter客户端调用您组织的MCP端点),仅在您信任端点和操作员时提供它们。- 因为技能依赖外部CLI(mcporter),请审查mcporter关于本地存储内容(配置、令牌)及其网络行为的文档。- 注意小的不一致:package.json将mcporter列为依赖项,即使技能没有自动安装;这可能是打包遗漏,不是恶意的,但在授予生产账户访问权限之前验证。如果您想要更严格的审查,请提供mcporter包来源(或其代码),以便可以检查其网络/存储行为——如果它显示意外的外泄或广泛的本地凭证访问,该信息将改变评估。...
详细分析 ▾
用途与能力
Name/description match the code: the repository contains multiple scripts to list/search/create/sync Feishu calendar events and to create shared calendars. Requiring FEISHU_APP_ID and FEISHU_APP_SECRET is consistent with that purpose. However the published registry metadata claims no required env vars while the code and SKILL.md clearly require FEISHU credentials (and one script references OPENCLAW_MASTER_ID). That mismatch is an incoherence the maintainer should fix.
指令范围
SKILL.md instructs running the provided node scripts and documents FEISHU_APP_ID/FEISHU_APP_SECRET in .env, which is consistent. But the code goes beyond passive reads: it creates and deletes calendar events (see cleanup.js and setup_routine.js), creates shared calendars and adds ACL members (setup_shared.js), and writes to local files (memory/calendar_events.json and HEARTBEAT.md in sync.js). search_cal.js references OPENCLAW_MASTER_ID but SKILL.md doesn't document it. Also several files call ../common/time-helper.js which is not present in the manifest (runtime breakage risk). These behaviors are within calendar-management scope, but they are high-impact actions (deleting events, making calendars public, adding members, scheduling recurring 'maintenance' events) and should be explicitly disclosed and gated.
安装机制
There is no explicit install spec (instruction-only), which is low risk for automatic installs. The package.json and package-lock.json declare standard npm deps (@larksuiteoapi/node-sdk, dotenv). No downloads from arbitrary URLs are present. Users will need to run npm install to satisfy dependencies; that's expected but should be done from a trusted environment.
凭证需求
The code requires FEISHU_APP_ID and FEISHU_APP_SECRET (documented in SKILL.md) but the skill registry lists no required env vars — a mismatch. Additionally search_cal.js reads OPENCLAW_MASTER_ID which SKILL.md and registry do not mention. Requesting Feishu app credentials is appropriate for calendar management, but missing/undocumented env vars and the ability to act on calendars (delete events, add members, create public recurring events) elevate risk and should be documented and constrained.
持久化与权限
always:false (normal). The skill does persist and modify local files (memory/calendar_events.json, HEARTBEAT.md) and creates/deletes events on Feishu. Those actions are expected for a syncing/calendar-management tool, but they are privileged (they modify calendars and repo files). There is no evidence the skill modifies other skills or system-wide configuration, but the destructive operations (DELETE events) and creation of ACL entries are high-impact and require explicit confirmation from the user.
安全有层次,运行前请审查代码。

License

MIT-0

可自由使用、修改和再分发,无需署名。

运行时依赖

无特殊依赖

版本

latestv1.0.02026/2/14

初始版本,支持飞书日历操作

● 可疑

安装命令 点击复制

官方npx clawhub@latest install feishu-calendar
镜像加速npx clawhub@latest install feishu-calendar --registry https://cn.clawhub-mirror.com

技能文档

Manage Feishu (Lark) Calendars. Use this skill to list calendars, check schedules, and sync events.

Usage

列表 Calendars

Check available calendars and their IDs.
node skills/feishu-calendar/list_test.js

搜索 日历

Find a calendar by name/summary.
node skills/feishu-calendar/search_cal.js

Check Master's 日历

Specific check for the Master's calendar status.
node skills/feishu-calendar/check_master.js

同步 Routine

Run the calendar synchronization routine (syncs events to local state/memory).
node skills/feishu-calendar/sync_routine.js

Setup

Requires FEISHU_APP_ID and FEISHU_APP_SECRET in .env.

Standard Protocol: Task Marking

Trigger: 用户 says "Mark task" 或 "Remind me 到...". Action:
  • Analyze: Extract 日期/时间 (e.g., "Feb 4th" -> YYYY-MM-04).
  • Execute: Run 创建.js 带有 --attendees 设置 到 requester's ID.
  • 格式:
   node skills/feishu-calendar/create.js --summary "Task: " --desc "<Context>" --start "<ISO>" --end "<ISO+1h>" --attendees "<User_ID>"
   </code></pre><h3>Setup Shared 日历</h3>
Create a shared calendar for a project and add members.
<pre><code>node skills/feishu-calendar/setup_shared.js --name "Project Name" --desc "Description" --members "ou_1,ou_2" --role "writer"
</code></pre>
</p></div><div id="doc-en" class="skill-content lang-en" style="display:none"><p>Manage Feishu (Lark) Calendars. Use this skill to list calendars, check schedules, and sync events.</p><h2>Usage</h2><h3>List Calendars</h3>
Check available calendars and their IDs.
<pre><code>node skills/feishu-calendar/list_test.js
</code></pre><h3>Search Calendar</h3>
Find a calendar by name/summary.
<pre><code>node skills/feishu-calendar/search_cal.js
</code></pre><h3>Check Master's Calendar</h3>
Specific check for the Master's calendar status.
<pre><code>node skills/feishu-calendar/check_master.js
</code></pre><h3>Sync Routine</h3>
Run the calendar synchronization routine (syncs events to local state/memory).
<pre><code>node skills/feishu-calendar/sync_routine.js
</code></pre><h2>Setup</h2>
Requires <code>FEISHU_APP_ID</code> and <code>FEISHU_APP_SECRET</code> in <code>.env</code>.</p><h2>Standard Protocol: Task Marking</h2>
<strong>Trigger</strong>: User says "Mark this task" or "Remind me to...".
<strong>Action</strong>:
<ul><li><strong>Analyze</strong>: Extract date/time (e.g., "Feb 4th" -> YYYY-MM-04).</li>
<li><strong>Execute</strong>: Run <code>create.js</code> with <code>--attendees</code> set to the requester's ID.</li>
<li><strong>Format</strong>:</li>
   </ul><pre><code>   node skills/feishu-calendar/create.js --summary "Task: <Title>" --desc "<Context>" --start "<ISO>" --end "<ISO+1h>" --attendees "<User_ID>"
   </code></pre><h3>Setup Shared Calendar</h3>
Create a shared calendar for a project and add members.
<pre><code>node skills/feishu-calendar/setup_shared.js --name "Project Name" --desc "Description" --members "ou_1,ou_2" --role "writer"
</code></pre>
</p></div></div>
<div style="text-align:center;padding:var(--spacing-4);font-size:12px;color:var(--color-gray-400)">数据来源:<a href="https://clawhub.ai/autogame-17/feishu-calendar" target="_blank" style="color:var(--color-gray-400)">ClawHub ↗</a> · 中文优化:龙虾技能库</div>
</section>
<section class="cta-card" aria-label="定制服务">
  <div style="display:flex;align-items:center;gap:16px;flex-wrap:wrap">
    <div style="flex:1;min-width:280px">
      <div style="font-size:var(--font-size-md);font-weight:700;color:var(--color-text);margin-bottom:6px"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="vertical-align:-0.125em"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/></svg> OpenClaw 技能定制 / 插件定制 / 私有工作流定制</div>
      <p style="font-size:var(--font-size-sm);color:var(--color-warning);margin-bottom:0;line-height:1.5"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="vertical-align:-0.125em"><path d="M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg> 免费技能或插件可能存在安全风险,如需更匹配、更安全的方案,建议联系付费定制</p>
    </div>
    <a href="/custom" class="btn-cta">了解定制服务</a>
  </div>
</section>
</article>
<script>
function switchLang(lang){
  document.querySelectorAll('.i18n').forEach(function(el){
    var v=el.getAttribute('data-'+lang);
    if(v)el.innerHTML=v;
  });
  document.querySelectorAll('.lang-cn').forEach(function(el){el.style.display=lang==='cn'?'block':'none'});
  document.querySelectorAll('.lang-en').forEach(function(el){el.style.display=lang==='en'?'block':'none'});
  document.querySelectorAll('.sk-lgb').forEach(function(b){b.classList.remove('sk-lga')});
  var btn=document.getElementById('lang-'+lang);if(btn)btn.classList.add('sk-lga');
}
</script>
<style>
.sk-hero{border:1px solid var(--color-border);border-radius:12px;padding:22px;background:var(--color-bg-card);margin-bottom:16px;box-shadow:0 4px 12px rgba(0,0,0,.08)}
.sk-hero-main{display:flex;gap:24px}.sk-hero-left{flex:1;min-width:0}.sk-hero-right{width:200px;flex-shrink:0;display:flex;flex-direction:column;gap:10px}
.sk-tr{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:4px}.sk-t{font-size:20px;font-weight:700;margin:0;line-height:1.3}
.sk-d{font-size:14px;color:var(--color-text-secondary);line-height:1.6;margin:8px 0 12px}
.sk-sr{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:13px;color:var(--color-text-secondary)}.sk-dot{color:var(--color-gray-400);opacity:.5}
.sk-au{font-size:13px;color:var(--color-text-muted);margin-top:4px}.sk-au a{color:var(--color-primary)}
.sk-lbox{font-size:13px;color:var(--color-text-secondary)}.sk-lbl2{font-size:11px;font-weight:600;color:var(--color-text-muted);margin-bottom:2px}
.sk-bdl{display:block;text-align:center;min-height:48px;line-height:20px;border-radius:12px;font-size:1.05rem;font-weight:600;padding:0.75rem 2rem;transition:background 0.2s}
.sk-bdl:hover{text-decoration:none;color:#fff;background:#333}
.btn--dark.sk-bdl{background:#1a1a1a;color:#fff;border:none}
.btn--dark.sk-bdl:hover{background:#333;color:#fff;transform:translateY(-1px);box-shadow:0 4px 12px rgba(0,0,0,0.15)}
.btn--dark.sk-bdl:active{transform:translateY(0);box-shadow:none}
[data-theme="dark"] .btn--dark.sk-bdl{background:#e0e0e0;color:#1a1a1a}
[data-theme="dark"] .btn--dark.sk-bdl:hover{background:#ccc;color:#1a1a1a;box-shadow:0 4px 12px rgba(255,255,255,0.08)}
[data-theme="dark"] .btn--dark.sk-bdl:active{background:#bbb;box-shadow:none}
.sk-sc{border:1px solid var(--color-border);border-radius:12px;padding:16px;margin-bottom:16px;background:var(--color-bg-card)}
.sk-sc--safe{border-left:4px solid #67C23A}
.sk-sc--suspicious{border-left:4px solid #E6A23C}
.sk-sc--dangerous{border-left:4px solid #F56C6C}
.sk-sch{font-size:15px;font-weight:700;margin-bottom:12px}
.sk-scr{display:flex;align-items:center;gap:12px;padding:8px 12px;background:var(--color-gray-100);border-radius:8px;margin-bottom:8px}
.sk-scw{font-size:13px;font-weight:600;min-width:120px}.sk-scs{font-size:13px;font-weight:700}.sk-scl{font-size:12px;color:var(--color-primary);margin-left:auto}
.sk-scsm{font-size:13px;color:var(--color-text-secondary);line-height:1.6;padding:8px 12px;background:var(--color-gray-100);border-radius:8px;margin-bottom:8px}
.sk-scd{margin-top:4px}.sk-scd summary{cursor:pointer;color:var(--color-primary);font-size:13px;font-weight:600;padding:4px 0}
.sk-dm{padding:8px 12px;background:var(--color-gray-100);border-radius:8px;font-size:13px;margin-bottom:4px}
.sk-adv{margin-top:8px;padding:12px;background:#FDF6EC;border:1px solid #FFEEBA;border-radius:8px}.sk-adv ol{margin:4px 0 0 16px;font-size:12px;color:var(--color-text-secondary);line-height:1.8}
.sk-ig{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;margin-bottom:16px}
.sk-ib{border:1px solid var(--color-border);border-radius:12px;padding:16px;background:var(--color-bg-card)}.sk-ib h3{font-size:14px;font-weight:700;margin:0 0 12px}
.sk-lic-desc{font-size:12px;color:var(--color-text-secondary);line-height:1.5;margin:8px 0 0}
.sk-ii{font-size:13px;margin-bottom:4px;display:flex;align-items:center;gap:8px}.sk-il{color:var(--color-text-muted);min-width:50px;flex-shrink:0;font-size:12px}
.sk-ii code{background:var(--color-gray-100);padding:1px 6px;border-radius:4px;font-size:12px}
.sk-cm{font-family:monospace;font-size:13px;padding:12px;background:var(--color-gray-100);border:1px solid var(--color-border);border-radius:8px;margin-bottom:8px;cursor:pointer;word-break:break-all;transition:border-color 300ms}
.sk-cm:hover{border-color:var(--color-primary)}.sk-cl{font-size:11px;font-weight:600;color:var(--color-text-muted);display:block;margin-bottom:2px}
.sk-cma{background:var(--color-primary-light);border-color:var(--color-primary);color:var(--color-primary)}
.sk-cnn{background:#FDF6EC;border:1px solid #FFEEBA;border-radius:12px;padding:16px;margin-bottom:16px}.sk-cnn h3{font-size:15px;margin:0 0 8px}.sk-cnn p{font-size:14px;line-height:1.6;margin:0}
.sk-lgb{padding:4px 14px;border-radius:9999px;border:1px solid var(--color-border);background:var(--color-bg-card);color:var(--color-text-secondary);cursor:pointer;font-size:13px;transition:all .15s}
.sk-lgb:hover{border-color:var(--color-primary);color:var(--color-primary)}
.sk-lgb:active{transform:scale(0.96)}
.sk-lga{background:#1a1a1a;color:#fff;border-color:#1a1a1a}
[data-theme="dark"] .sk-lga{background:#555;color:#fff;border-color:#555}
.skill-content h2{font-size:20px;margin:24px 0 12px;padding-bottom:8px;border-bottom:1px solid var(--color-border)}
.skill-content h3{font-size:17px;margin:20px 0 8px}.skill-content p{margin-bottom:12px;line-height:1.8}
.skill-content ul,.skill-content ol{margin:8px 0 12px 20px;line-height:1.8}.skill-content li{margin-bottom:4px}
.skill-content pre{background:#1E1E1E;color:#D4D4D4;padding:16px;border-radius:8px;overflow-x:auto;margin:12px 0;font-size:13px;line-height:1.5}
.skill-content pre code{background:transparent;color:inherit;padding:0;border-radius:0;font-size:inherit}
.skill-content code{background:var(--color-gray-100);padding:2px 6px;border-radius:4px;font-size:14px}

.skill-content blockquote{border-left:4px solid var(--color-primary);padding:8px 16px;margin:12px 0;background:var(--color-primary-light);border-radius:0 4px 4px 0}
.skill-content table{width:100%;border-collapse:collapse;margin:12px 0}
.skill-content th,.skill-content td{border:1px solid var(--color-border);padding:8px 12px;text-align:left;font-size:14px}
.skill-content th{background:var(--color-gray-100)}

@media(max-width:768px){.sk-hero-main{flex-direction:column}.sk-hero-right{width:100%}.sk-ig{grid-template-columns:1fr}}
</style></main><footer class="footer"><div class="container">
<div class="footer__row">
<a href="/openclaw/">澳龙下载专题</a>
<a href="/custom">技能/插件定制服务</a>
<a href="https://build.nvidia.com/models" target="_blank">NVIDIA 免费大模型</a></div>
<div class="footer__row" style="font-size:12px;color:var(--color-text-muted)">邮箱:wyxdapp@qq.com | AI 智能体可直接发送定制需求到邮箱</div>
<div class="footer__row"><a href="/disclaimer.html">免责声明</a> | <a href="/privacy.html">隐私政策</a> | <a href="https://beian.miit.gov.cn/" target="_blank">鄂ICP备19007528号</a></div>
<div class="footer__row" style="margin-top:var(--spacing-1);font-size:12px;color:var(--color-text-muted)">龙虾技能库 — OpenClaw 中文 AI 资源库 | 免费资源 + 付费定制</div>
<div class="footer__row" style="margin-top:var(--spacing-1)">© 2026 龙虾技能库</div>
</div></footer><aside class="qr-float" id="qr-float-panel" aria-label="联系与赞助">
<style>
.qr-float{position:fixed;right:0;top:50%;transform:translateY(-50%);z-index:999;background:var(--color-bg-card);border:1px solid var(--color-border);border-right:none;border-radius:12px 0 0 12px;box-shadow:var(--shadow-md);font-family:inherit}
.qr-float__body{padding:12px 14px}
.qr-float__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.qr-float__header span{font-size:var(--font-size-sm);font-weight:600;color:#2563EB}
.qr-float__header button{background:none;border:none;cursor:pointer;font-size:var(--font-size-base);color:var(--color-text-muted);padding:2px 4px;line-height:1}
.qr-float__header button:hover{color:var(--color-text)}
.qr-float__item{text-align:center;margin-bottom:8px}
.qr-float__item:last-child{margin-bottom:0}
.qr-float__item img{width:100px;height:100px;display:block;margin:0 auto 4px;border-radius:6px}
.qr-float__item span{font-size:var(--font-size-xs);color:var(--color-text-muted)}
.qr-float__trigger{display:none;position:fixed;right:0;top:50%;transform:translateY(-50%);z-index:999;align-items:center;justify-content:center;width:40px;height:40px;background:var(--color-bg-card);border:1px solid var(--color-border);border-right:none;border-radius:12px 0 0 12px;box-shadow:var(--shadow-md);cursor:pointer;color:#2563EB;font-size:20px}
.qr-float__trigger:hover{background:var(--color-bg-hover,var(--color-bg-card))}
@media(max-width:768px){
.qr-float__body{display:none}
.qr-float__trigger{display:flex}
.qr-float__item img{width:80px;height:80px}
}
</style>
<div class="qr-float__body" id="qr-float-body">
<div class="qr-float__header">
<span>联系 & 赞助</span>
<button onclick="document.getElementById('qr-float-body').style.display='none';document.getElementById('qr-float-trigger').style.display='flex'" aria-label="收起面板">✕</button>
</div>
<div class="qr-float__item"><img src="/image/erweima.png" alt="站长微信二维码" loading="lazy"><span>关注站长微信</span></div>
<div class="qr-float__item"><img src="/image/weixinpay.png" alt="微信赞助收款码" loading="lazy"><span>微信赞助</span></div>
<div class="qr-float__item"><img src="/image/alipay.png" alt="支付宝赞助收款码" loading="lazy"><span>支付宝赞助</span></div>
</div>
<button class="qr-float__trigger" id="qr-float-trigger" onclick="document.getElementById('qr-float-body').style.display='block';document.getElementById('qr-float-trigger').style.display='none'" aria-label="展开联系与赞助面板"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="vertical-align:-0.125em"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg></button>
</aside></body></html>