Skip to content
Report library
Purpose / Other

Lark Okr Skill Security Audit

What the author says it does (original text)

飞书 OKR:管理目标与关键结果。查看和编辑 OKR 周期、目标、关键结果、对齐关系、量化指标和进展记录。当用户需要查看或创建 OKR、管理目标和关键结果、查看对齐关系时使用。不负责:待办任务管理(lark-task)、日程/会议安排(lark-calendar)、绩效评估

Independent security check

Do not install or run it yet

This check is incomplete. Only available results are shown below.

Files checked
26
Risks found
4
Could it run dangerous commands?Looks for programs run straight after downloading, remote control of your computer, and hidden commands.No risks found
Could it expose your files or keys?Looks for uploads of files containing passwords or keys, and keys written directly in the code.Risks found: 1
Medium risk

Bot identity may broaden access to other people's OKRs

Source references: 6
What we found

The Skill permits `--as bot` for viewing others' OKRs, but the visible instructions do not require prior user consent, a demonstrated business need, or first checking the narrower user-identity access. Cycle details may include objectives, notes, scores, weights, deadlines, and owner information.

Why this matters

If the bot has broader tenant permissions than the current user, the agent could obtain employee goals, scoring-related data, or internal notes the user could not normally see and expose them in the current conversation.

What this evidence establishes

The material allows bot-identity access to another person's OKRs, but explicitly requires corresponding permission, and viewing others' OKRs is within the stated purpose. The decisive authentication, authorization, and safety rules are delegated to an unavailable `lark-shared/SKILL.md`, so the evidence cannot establish whether consent or least-privilege checks are missing, or whether bot identity actually exposes more data. Users should request those shared rules and restrict the bot token to necessary read-only OKR access.

This assessment concerns the code and conditions shown, not proof that harm has occurred.
SKILL.md:15In the instructionsOpen original file
**身份**:OKR 操作默认使用 `--as user`(查看当前用户/上下级的 OKR 时)。也支持 `--as bot` 查看他人 OKR(需相应权限)。
Show 5 other places
references/lark-okr-cycle-detail.md:47In the instructionsOpen original file
      "update_time": "2025-01-15 12:00:00",      "owner": {        "owner_type": "user",        "user_id": "ou_xxx"      },      "cycle_id": "1234567890123456789",      "position": 0,      "score": 0.75,      "weight": 1.0,      "deadline": "2025-06-30 23:59:59",      "category_id": "cat_456",      "content": "{...}",      "notes": "{...}",      "key_results": [
references/lark-okr-entities.md:375In the instructionsOpen original file
|--------------------------------|------|--------------|| `okr:okr.content:readonly`     | 读    | 读取 OKR 内容    || `okr:okr.content:writeonly`    | 写    | 写入/删除 OKR 内容 || `okr:okr.period:readonly`      | 读    | 读取 OKR 周期    || `okr:okr.progress:readonly`    | 读    | 读取进展记录       |
SKILL.md:4In the instructionsOpen original file
version: 1.0.0description: "飞书 OKR:管理目标与关键结果。查看和编辑 OKR 周期、目标、关键结果、对齐关系、量化指标和进展记录。当用户需要查看或创建 OKR、管理目标和关键结果、查看对齐关系时使用。不负责:待办任务管理(lark-task)、日程/会议安排(lark-calendar)、绩效评估"metadata:
SKILL.md:13In the instructionsOpen original file
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),其中包含认证、权限处理****身份**:OKR 操作默认使用 `--as user`(查看当前用户/上下级的 OKR 时)。也支持 `--as bot` 查看他人 OKR(需相应权限)。
references/lark-okr-cycle-detail.md:31In the instructionsOpen original file
1. 使用 `lark-cli okr +cycle-list` 获取 OKR 周期 ID。2. 执行 `lark-cli okr +cycle-detail --cycle-id "123456"`。3. 报告结果:找到的目标数量、每个目标的 ID、分数、权重及其关键结果。
Could it delete files or keep running?Looks for broad file deletion, disk overwrites, and programs set to start automatically.Risks found: 1
High risk

Progress records can be permanently deleted without a mandatory confirmation flag

Source references: 5
What we found

The deletion guide says the operation is irreversible, but the real delete command lacks an equivalent to the `--yes` required for comment deletion. Its workflow only recommends reading the record first and then directly runs deletion; that recommendation is not a technical barrier.

Why this matters

If the agent selects the wrong progress ID, misunderstands the requested scope, or skips verification, progress text and history in Lark can be permanently removed.

The risk is supported. A real deletion requires only the progress ID; `--dry-run` is optional and there is no mandatory confirmation such as the comment command's `--yes`. If the agent selects the wrong ID or acts without explicit authorization for permanent deletion, the record could be irrecoverably lost. Reading the record first is only guidance, not a technical barrier. Users can ask for mandatory confirmation and restrict deletion to explicit requests.

references/lark-okr-progress-delete.md:5In the instructionsOpen original file
根据 ID 删除一条 OKR 进展记录。此操作为高风险操作,删除后不可恢复。
Show 4 other places
references/lark-okr-progress-delete.md:10In the instructionsOpen original file
```bash# 删除指定 ID 的进展记录lark-cli okr +progress-delete --progress-id 1234567890123456789# 预览 API 调用而不实际执行lark-cli okr +progress-delete --progress-id 1234567890123456789 --dry-run```
references/lark-okr-progress-delete.md:27In the instructionsOpen original file
1. 使用 `+progress-get` 确认要删除的进展记录 ID 和内容。2. 执行 `lark-cli okr +progress-delete --progress-id "1234567890123456789"`。3. 报告结果:已删除的进展记录 ID。> **注意**:此操作不可恢复,建议在删除前先用 `+progress-get` 确认记录内容。
references/lark-okr-comment-delete.md:23In the instructionsOpen original file
|--------------|--------------|--------|-------------------------------------------------------------|| --comment-id | 是           | —      | 要删除的评论 ID,int64 正整数。建议先由 +comment-get 核对。 || --yes        | 真实执行时是 | —      | 确认 high-risk-write 操作。--dry-run 时不需要。             || --dry-run    | 否           | —      | 预览 API 调用而不实际执行。                                 |
references/lark-okr-progress-delete.md:19In the instructionsOpen original file
| 参数              | 必填 | 默认值    | 说明                    ||-----------------|----|--------|-----------------------|| `--progress-id` | 是  | —      | 进展记录 ID(int64 类型,正整数) || `--dry-run`     | 否  | —      | 预览 API 调用而不实际执行。      || `--format`      | 否  | `json` | 输出格式。                 |
Could it bypass safety checks?Looks for skipped website security checks, excessive file access, or actions that skip your approval.No risks found
Could it mislead the AI or hide text?Checks the skill instructions for requests to ignore you, influence the report, or hide text in invisible characters.No risks found
Could it change links or payment recipients without asking?Looks for forced referral or payment changes combined with instructions to hide the change.Risks found: 2
Medium risk

A failed comment-text match silently expands the comment to the full Objective/KR

Source references: 3
What we found

For Objective/KR text-selection comments, the guide says an unmatched selected string falls back to selecting all content; it also recommends `--select-all` when the user does not specify a location. This changes the business context of the comment instead of returning an error.

Why this matters

Criticism, approval, or an action request intended for one sentence may appear to address the entire Objective or KR, misleading collaborators and broadening the comment's effect.

The risk is supported. For Objective/KR inline comments, an unmatched selection does not fail; it falls back to the entire text, and the guide also permits selecting all when no passage is specified. If the text changed, the selection was mistaken, or intent was ambiguous, the comment could attach to broader context than expected and mislead collaborators about what the feedback concerns. Users can ask for fail-closed matching and confirmation before full-text selection.

references/lark-okr-comment-create.md:34In the instructionsOpen original file
- 全局评论/周期评论/OKR评论: 指 OKR 周期的实体级评论,当用户要求创建全局评论,或对某个周期的 OKR 进行评论(不特指某个 Objective 或 KeyResult 时),可以创建周期实体级评论。- 划词评论: 指 Objective/KeyResult 下的划词评论。需要注意,Objective/KeyResult 下不能创建实体级评论(必须携带 selected-text 或 select-all)。若用户没有特别指定需评论的段落,使用 --select-all
Show 2 other places
references/lark-okr-comment-create.md:69In the instructionsOpen original file
4. 执行命令;真实写入前可以先使用 --dry-run 检查 URL、query 和 body。5. 在创建(而非回复) Objective/KeyResult 划词评论时,若用户未指定评论的具体位置,通常可以使用 select-all 而非自行指定 selected-text,除非用户需求中明确了具体的段落。   - 若需使用 selected-text 精确选择划词选区时,只可传入正文中真实存在的连续纯文本片段;不要包含或跨越 mention 占位符,否则无法命中具体内容。   - selected-text 会选择对应文本的首个命中。若 selected-text 未匹配到内容,会 fallback 至选择全文。
references/lark-okr-comment-create.md:68In the instructionsOpen original file
3. 准备 content:content 是业务必填,通常建议使用 simple 格式,需要精确控制 @用户的位置时,可以使用 richtext 格式,参考 [ContentBlock 格式](lark-okr-contentblock.md)4. 执行命令;真实写入前可以先使用 --dry-run 检查 URL、query 和 body。5. 在创建(而非回复) Objective/KeyResult 划词评论时,若用户未指定评论的具体位置,通常可以使用 select-all 而非自行指定 selected-text,除非用户需求中明确了具体的段落。   - 若需使用 selected-text 精确选择划词选区时,只可传入正文中真实存在的连续纯文本片段;不要包含或跨越 mention 占位符,否则无法命中具体内容。   - selected-text 会选择对应文本的首个命中。若 selected-text 未匹配到内容,会 fallback 至选择全文。
Medium risk

Solving or reopening one selection comment changes the entire thread

Source references: 4
What we found

The command accepts one comment ID, but if that comment has a `selection.id`, the status change applies to every comment under that selection. The guide asks the agent to inspect the scope but provides no mandatory confirmation flag.

Why this matters

When a user thinks they are closing or reopening one reply, the entire discussion thread may be marked solved or open, changing other participants' workflow state.

The risk is supported. The command accepts one comment ID, but if that comment belongs to an inline selection, solve/reopen changes every comment under the same `selection.id`, not just the named comment. The guide says to inspect the scope and confirm the action, but `--dry-run` is optional and there is no mandatory confirmation flag. A mistaken ID could close or reopen an entire discussion thread. Users can require an affected-comment preview and explicit reconfirmation for selection threads.

references/lark-okr-comment-solve-reopen.md:5In the instructionsOpen original file
解决/重新打开一条评论。实体级评论按单条评论处理;划词评论则是操作整个评论串。只支持 user 身份。
Show 3 other places
references/lark-okr-comment-solve-reopen.md:32In the instructionsOpen original file
1. 使用 [+comment-list](lark-okr-comment-list.md)、[+comment-detail](lark-okr-comment-detail.md) 或 [+comment-get](lark-okr-comment-get.md) 获取并确认 comment-id。2. 检查评论是否属于划词串:如果返回有 selection.id,solve/reopen 会影响同一 selection.id 下的全部评论。3. 根据用户动作选择 +comment-solve 或 +comment-reopen;先用 --dry-run 检查目标接口。4. 执行后检查 affected_comments,确认实体级评论或整条评论串的状态变化范围。
references/lark-okr-comment-solve-reopen.md:72In the instructionsOpen original file
- 划词评论按评论串解决/重开,但 [+comment-delete](lark-okr-comment-delete.md) 仍然只删除单条评论。- 解决不是删除,之后可以用 +comment-reopen 恢复;删除后不可恢复。- 该操作是写操作,执行前应确认 comment-id 和目标动作。
references/lark-okr-comment-solve-reopen.md:24In the instructionsOpen original file
|----------------|------|---------|---------------------------------------------------------------------------------------|| --comment-id   | 是   | —       | 评论 ID,int64 正整数。可从 +comment-list、+comment-detail 或 +comment-get 获取。     || --user-id-type | 否   | open_id | open_id、union_id、user_id 或 user_key。                                              || --style        | 否   | simple  | affected_comments 的正文风格:simple(SemiPlainContent)或 richtext(ContentBlock)。 || --dry-run      | 否   | —       | 预览 API 调用而不实际执行。                                                           || --format       | 否   | json    | 输出格式。                                                                            |

Inside this skill

5 instruction sections

This Skill uses the required `lark-cli` to read and modify Lark OKRs, normally as the current user; it also permits bot identity to view other people's OKRs when corresponding permissions exist.

View source
SKILL.md:7In the instructionsOpen original file
  requires:    bins: [ "lark-cli" ]  cliHelp: "lark-cli okr --help"---
SKILL.md:15In the instructionsOpen original file
**身份**:OKR 操作默认使用 `--as user`(查看当前用户/上下级的 OKR 时)。也支持 `--as bot` 查看他人 OKR(需相应权限)。

Its capabilities are not read-only: it can create and edit objectives/KRs, update scores and indicators, reorder and reweight items, manage alignments, and create, modify, or delete comments and progress records.

View source
SKILL.md:22In the instructionsOpen original file
| 查看自己/他人的 OKR          | 获取用户 ID -> `+cycle-list` -> `+cycle-detail` -> 按需查指标/进展记录                                                  | [`cycle-list`](references/lark-okr-cycle-list.md), [`cycle-detail`](references/lark-okr-cycle-detail.md), [`indicators`](references/lark-okr-indicators.md), [`progress-list`](references/lark-okr-progress-list.md) || 为自己写一组 OKR             | 优先用 `+batch-create` 创建 Objective/KR 骨架                                                                           | [`batch-create`](references/lark-okr-batch-create.md), [`contentblock`](references/lark-okr-contentblock.md)                                                                                                         || 只新增一条 O 或单条 KR       | 用 `+create`                                                                                                            | [`create`](references/lark-okr-create.md)                                                                                                                                                                            || 编辑内容/备注/截止时间       | 用 `+patch`                                                                                                             | [`patch`](references/lark-okr-patch.md)                                                                                                                                                                              || 修改 OKR 分数                | 只有用户明确说“分数”“评分”“打分”“score”时才用 `+patch --score`;分数不是进度/完成度                                     | [`patch`](references/lark-okr-patch.md)                                                                                                                                                                              || 调整顺序或权重               | 用 `+reorder` / `+weight`                                                                                               | [`reorder`](references/lark-okr-reorder.md), [`weight`](references/lark-okr-weight.md)                                                                                                                               || 更新数字进度/完成度          | 百分比或不带单位数字用 `+indicator-update`;需要改单位/目标值时查指标后用 `indicators patch`                            | [`indicator-update`](references/lark-okr-indicator-update.md), [`indicators`](references/lark-okr-indicators.md)                                                                                                     || 写文字进展                   | 用 `+progress-create`;如果文本和数字都有,百分比或默认单位可使用 `--progress-percent` 统一改,非百分比单位更新量化指标 | [`progress-create`](references/lark-okr-progress-create.md), [`progress-list`](references/lark-okr-progress-list.md), [`progress-update`](references/lark-okr-progress-update.md)                                    || 对齐目标                     | 直接按对齐关系工作流处理                                                                                                | [`alignments`](references/lark-okr-alignments.md)                                                                                                                                                                    || 查询/创建/修改/解决 OKR 评论 | 获取周期下全部评论聚合用 `+comment-detail`,查询单个 O/KR/进展或仅查询周期全局评论用 `+comment-list`;                | [`comment`](references/lark-okr-comment-list.md), [`comment-create`](references/lark-okr-comment-create.md), [`comment-solve-reopen`](references/lark-okr-comment-solve-reopen.md)                                   |
SKILL.md:88In the instructionsOpen original file
| [`+comment-get`](references/lark-okr-comment-get.md)             | 获取单条评论详情                                                                                              || [`+comment-create`](references/lark-okr-comment-create.md)       | 创建新评论或回复已有评论(仅支持 --as user)                                                                    || [`+comment-patch`](references/lark-okr-comment-patch.md)         | 修改评论内容(仅支持 --as user)                                                                                || [`+comment-delete`](references/lark-okr-comment-delete.md)       | 永久删除单条评论(仅支持 --as user)                                                                            || [`+comment-solve`](references/lark-okr-comment-solve-reopen.md)  | 解决评论或划词评论串(仅支持 --as user)                                                                        || [`+comment-reopen`](references/lark-okr-comment-solve-reopen.md) | 重新打开评论或划词评论串(仅支持 --as user)                                                                    |

When reading all comments for a cycle, the Skill traverses objectives, key results, and progress records and then reads comments for four object types; request count grows with cycle size, and results include comment text and commentator IDs.

View source
references/lark-okr-comment-detail.md:31In the instructionsOpen original file
1. 使用 +cycle-list 获取周期 ID;如果用户已经提供周期 ID,直接使用。2. 执行 +comment-detail --cycle-id "..."。shortcut 会依次获取周期下的 Objective、每个 Objective 下的 KeyResult、每个 Objective/KeyResult 下的 Progress,以及四类对象的评论。3. 评论接口自动处理分页;对象读取和评论读取使用有界并发。任一底层请求失败时整体返回错误,不返回静默不完整结果。4. 评论串按首条评论的 create_time 升序排列,串内评论也按 create_time 升序排列。
references/lark-okr-comment-detail.md:46In the instructionsOpen original file
        {          "id": "7000000000000000001",          "target": {"target_type": "objective", "target_id": "2345678901234567890"},          "commentator_id": "ou_xxx",          "status": "open",          "create_time": "2025-01-15 10:30:00",          "update_time": "2025-01-15 10:30:00",          "selection": {"id": "8000000000000000001", "selected_text": "提升核心接口稳定性"},          "content": {"text": "请补充指标", "mention": [], "docs": [], "images": []}        }
references/lark-okr-comment-detail.md:69In the instructionsOpen original file
- 这是聚合查询,接口调用次数取决于周期下的 Objective、KeyResult 和 Progress 数量。- +comment-detail 不接受 department-id-type,该接口参数由 shortcut 忽略。

Local image upload is restricted to relative paths inside the current working directory and explicitly rejects symlinks that point outside it.

View source
references/lark-okr-image-upload.md:104In the instructionsOpen original file
## 安全限制- `--file` 参数**必须使用相对路径**(如 `./photo.png` 或 `images/photo.png`),不支持绝对路径- 图片文件必须存在于当前工作目录或其子目录中- 不支持符号链接指向目录外的文件
Start here · InstructionsSKILL.md
lark-okr
Lines connect the instruction file to its sections, not an observed execution order. Select a section to read the source.

File reference map

References: 40
Files making referencesReferenced content
Lines show actual file references, not execution order. Select a node to highlight its connections and inspect the files and source locations. Dashed lines include files that still need locating.
Files and check records26 files

Coverage and gaps

  • Some results did not pass evidence validation or finish processing. This report does not represent a complete check.
Content covered in each file

These are the source ranges included in this check, not a guarantee that every issue has been resolved.

  • SKILL.mdFull text included
  • references/lark-okr-alignments.mdFull text included
  • references/lark-okr-batch-create.mdFull text included
  • references/lark-okr-comment-create.mdFull text included
  • references/lark-okr-comment-delete.mdFull text included
  • references/lark-okr-comment-detail.mdFull text included
  • references/lark-okr-comment-get.mdFull text included
  • references/lark-okr-comment-list.mdFull text included
  • references/lark-okr-comment-patch.mdFull text included
  • references/lark-okr-comment-solve-reopen.mdFull text included
  • references/lark-okr-contentblock.mdFull text included
  • references/lark-okr-create.mdFull text included
  • references/lark-okr-cycle-detail.mdFull text included
  • references/lark-okr-cycle-list.mdFull text included
  • references/lark-okr-entities.mdFull text included
  • references/lark-okr-image-upload.mdFull text included
  • references/lark-okr-indicator-update.mdFull text included
  • references/lark-okr-indicators.mdFull text included
  • references/lark-okr-patch.mdFull text included
  • references/lark-okr-progress-create.mdFull text included
  • references/lark-okr-progress-delete.mdFull text included
  • references/lark-okr-progress-get.mdFull text included
  • references/lark-okr-progress-list.mdFull text included
  • references/lark-okr-progress-update.mdFull text included
  • references/lark-okr-reorder.mdFull text included
  • references/lark-okr-weight.mdFull text included

This report is for the version above. We read the available code and instructions without running the skill or checking extra packages it installs. This is not a promise of safety: a different version or setup may behave differently.

  • SKILL.mdInstructions
  • references/lark-okr-alignments.mdSupporting file
  • references/lark-okr-batch-create.mdSupporting file
  • references/lark-okr-comment-create.mdSupporting file
  • references/lark-okr-comment-delete.mdSupporting file
  • references/lark-okr-comment-detail.mdSupporting file
  • references/lark-okr-comment-get.mdSupporting file
  • references/lark-okr-comment-list.mdSupporting file
  • references/lark-okr-comment-patch.mdSupporting file
  • references/lark-okr-comment-solve-reopen.mdSupporting file
  • references/lark-okr-contentblock.mdSupporting file
  • references/lark-okr-create.mdSupporting file
  • references/lark-okr-cycle-detail.mdSupporting file
  • references/lark-okr-cycle-list.mdSupporting file
  • references/lark-okr-entities.mdSupporting file
  • references/lark-okr-image-upload.mdSupporting file
  • references/lark-okr-indicator-update.mdSupporting file
  • references/lark-okr-indicators.mdSupporting file
  • references/lark-okr-patch.mdSupporting file
  • references/lark-okr-progress-create.mdSupporting file
  • references/lark-okr-progress-delete.mdSupporting file
  • references/lark-okr-progress-get.mdSupporting file
  • references/lark-okr-progress-list.mdSupporting file
  • references/lark-okr-progress-update.mdSupporting file
  • references/lark-okr-reorder.mdSupporting file
  • references/lark-okr-weight.mdSupporting file

Operations mentioned in code and instructions

Run commands
SKILL.md:36In the instructionsOpen original file
```bashlark-cli contact +search-user --query "张三" --has-chatted --as user
SKILL.md:42In the instructionsOpen original file
```bash# 查用户周期,再用周期 ID 查详情
references/lark-okr-alignments.md:21In the instructionsOpen original file
```bashlark-cli okr objective.alignments list --objective-id "<目标ID>" [flags]
Connect to websites
references/lark-okr-contentblock.md:52In the instructionsOpen original file
                "link": {                  "url": "https://example.com"                }
references/lark-okr-contentblock.md:60In the instructionsOpen original file
            "docs_link": {              "url": "https://larkoffice.com/docx/xxx",              "title": "Lark Document"
references/lark-okr-contentblock.md:79In the instructionsOpen original file
            "file_token": "file_xxx",            "src": "https://...",            "width": 800,
Lines read
3,373
File checksum (to compare versions)
81960b879c629e0c9bfa76404f8f195a952677ef680869a25c481cc475dc90fb