📦 Unformal — 非正式
v1.1.0通知 当有人完成 Unformal Pulse 时收到提醒——通过定时 Claude Code 例行任务(每小时)或本地桌面监听器(macOS 实时通知)。
9· 9·0 当前·0 累计
下载技能包
最后更新
2026/4/19
安全扫描
OpenClaw
可疑
medium confidence该技能似乎实现了其声称的功能(轮询 Unformal 并显示本地通知),但运行时的说明鼓励的做法可能泄露你的 Unformal API key,且注册元数据遗漏了所需凭据——这种不一致以及将密钥硬编码在代码中的建议令人担忧。
评估建议
此技能与其目的(在 Unformal Pulse 完成时通知你)一致,但安装前请注意:
- 需提供 UNFORMAL_API_KEY;registry 未声明——确认你愿意提供该密钥。
- 切勿将 API 密钥直接写入生成的 SKILL.md 或其他文件,除非你了解其存储/权限;建议将 UNFORMAL_API_KEY 写入 shell profile(~/.zshrc)或使用安全密钥管理器。
- 检查下载的 unformal-listen.sh;仓库包内含该文件,请与已审阅版本比对。优先安装已签名稳定 release 或你控制的仓库。
- 限制 ~/.unformal 及计划任务文件权限(chmod 700/600),防止本地其他用户/进程读取。
- 如需更强隔离,在独立容器或账户中运行监听器。若需更高保障,向发布者索要:权威主页/仓库链接、已签名 release 或下载 URL 的校验和、以及将 UNFORMAL_API_KEY 声明为必需凭据的更新 registry manifest。若发布者未知或无法验证下载来源,请将下载/安装视为高风险。...详细分析 ▾
ℹ 用途与能力
技能名称/描述与所含脚本及 SKILL.md 一致:它轮询 Unformal 并推送通知。需要 Unformal API 密钥,并在 ~/.unformal 写入 marker/inbox 文件,与所述用途相符。然而,注册元数据未声明所需环境变量/主凭证,而 SKILL.md 和脚本明显需要 UNFORMAL_API_KEY——这一遗漏降低了透明度,且出乎意料。
⚠ 指令范围
运行时指令显式读写用户主目录下的文件(~/.unformal、~/.unformal/last-seen、~/.claude/scheduled-tasks/...),提示读取任意本地机密文件,并建议将 API key 直接嵌入生成的 SKILL.md。将机密嵌入位于 ~/.claude 或定时任务中的文件会增加泄露风险。脚本还指示通过 curl 下载可执行文件并放入 ~/bin——对 CLI 工具属常规操作,但若来源不可信,会扩大攻击面。
ℹ 安装机制
注册表中没有正式的安装规范,但 SKILL.md 建议使用 curl 从 https://unformal.ai/unformal-listen.sh 拉取单个脚本并保存到 ~/bin。从项目域名下载单个脚本很常见,但仍比包管理安装风险高,因为它在安装时执行拉取的代码。软件包本身包含该脚本,便于审查,但用户指南要求 curl 上游 URL,后续可能拉取到不同文件。
⚠ 凭证需求
该技能只需一个非正式 API key 即可运行,需求合理。但 manifest 未声明此必需环境变量(透明度问题)。更严重的是,说明文档明确建议将 API key 直接嵌入 SKILL.md 或任意加载本地 secrets 文件——这两种做法都会把凭据暴露给其他本地应用或任何能读取这些文件的系统/进程。脚本本身支持通过环境变量或 --key 参数传入 key(做法良好),但指导用户把 key 写进计划任务文件存在风险。
✓ 持久化与权限
该 skill 不会请求 always:true 或任何全局权限。它仅在被调用(或创建本地 routine)时运行。文件仅写入用户主目录(~/bin、~/.unformal、~/.claude scheduled-tasks),不会修改其他 skill 或系统级设置——这符合桌面通知助手的预期范围。
安全有层次,运行前请审查代码。
运行时依赖
无特殊依赖
版本
latestv1.1.02026/4/19
首次发布。桌面 SSE 监听器 + Claude 定时任务,用于 Pulse 完成提醒。
● 可疑
安装命令
点击复制官方npx clawhub@latest install unformal-notifications
镜像加速npx clawhub@latest install unformal-notifications --registry https://cn.longxiaskill.com
技能文档
三种方式获取 Unformal Pulse 新回复通知,任选或组合。
何时使用
触发任意一句即可:- “有新的 Unformal 回复吗?”
- “查看我的 Unformal”
- “谁完成了【pulse 名称】?”
- “总结今天的回复”
- “设置例行检查我的 Pulse”
- “有回复时通知我”
- “有人完成问卷了吗?”
前置条件
- Unformal API key——在 unformal.ai/studio/settings 获取,或调用
POST /api/v1/signup - Pulse ID——来自
GET /api/v1/pulses或 Studio URL
---
方案 A — Claude Code 桌面例行(推荐)
适用:持续监控,显示在 Claude Code 桌面侧边栏。本地运行,可读取本地 secrets 文件,并在桌面 UI 可视化排程。对 Claude 说:
“创建一个 Claude Code 桌面例行unformal-new-responses,用 API key检查我的 Unformal Pulse的新完成回复。把最后查看时间保存在~/.unformal/last-seen,只拉取之后的新回复,并给出简洁摘要(情感+总结+关键引用)或‘无新回复’。”
Claude 会做什么
在~/.claude/scheduled-tasks// 生成 SKILL.md: ``markdown
---
name: unformal-new-responses
description: 检查活跃 Unformal Pulse 的新完成回复
---
加载 secrets:source /path/to/load-secrets.sh(可选;若密钥在本地 env 文件则使用,否则内嵌 API key)读取标记:SINCE=$(cat ~/.unformal/last-seen 2>/dev/null || echo 0)- 拉取新回复:
bash
TMP=$(mktemp)
curl -fsS "https://unformal.ai/api/v1/pulses//conversations?completedSince=$SINCE" \
-H "Authorization: Bearer " > "$TMP"
`
- 用 Python 解析并摘要:
`bash
python3 << PYEOF
import json
with open("$TMP") as f:
d = json.load(f)
items = d.get("data", [])
completed = [c for c in items if c.get("status") == "completed"]
if not completed:
print("NONE")
else:
print("FOUND " + str(len(completed)))
for c in completed:
echo = c.get("echo") or {}
print("---")
print("id: " + str(c.get("id", "")))
print("sentiment: " + str(echo.get("sentimentScore", "?")) + "/10")
print("summary: " + (echo.get("summary") or "(no summary)")[:300])
for q in (echo.get("keyQuotes") or [])[:3]:
print("quote: " + str(q)[:200])
PYEOF
`
更新标记:python3 -c "import time; print(int(time.time()*1000))" > ~/.unformal/last-seen- 若 NONE 则简短提示,否则展示整洁摘要。
设置排程
创建后,例行出现在 Claude Code 桌面侧边栏“Routines”。在桌面 UI 设置 cron 计划——点击例行,选择每日/工作日/自定义等。排程由桌面应用保存;SKILL.md 仅定义任务。 要点
本地运行(非远程触发)——可访问~/与本地 secrets- 不会出现在 claude.ai/code/scheduled(那是远程触发系统)
- 最小间隔由桌面 UI 决定(通常 1 分钟起)
随时编辑SKILL.md,下次运行生效
---
方案 B — 本地桌面监听器(macOS 实时通知)
适用:工作会话中实时感知。本地运行,回复到达瞬间弹出原生通知。 一次性安装
`bash
mkdir -p ~/bin
curl -fsS https://unformal.ai/unformal-listen.sh > ~/bin/unformal-listen
chmod +x ~/bin/unformal-listen
export UNFORMAL_API_KEY=unf_xxx # 写入 ~/.zshrc 持久化
` 运行
`bash
unformal-listen # 列出你的 Pulses
unformal-listen # 开始监听
` 在备用终端标签保持运行。每次完成:
弹出原生 macOS 通知(Linux 用notify-send回退)将事件 JSON 写入~/.unformal/inbox/.json`- 断线自动重连