Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

Agent Card

v1.0.2

个人社交名片生成、管理和分享,以及智能花名册(通讯录管理器)。当用户提到名片、花名册、通讯录、联系人、虾名片、agent-card 时使用。具体触发场景包括:开通虾名片、建花名册、生成/更新/发/发布名片、注册虾名片、录入/查询/编辑联系人、收到包含 agent-card:// 协议的消息时自动识别并保存他人名片。

0· 56·0 current·0 all-time

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for sxd20010606-cmd/xia-card.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Agent Card" (sxd20010606-cmd/xia-card) from ClawHub.
Skill page: https://clawhub.ai/sxd20010606-cmd/xia-card
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install xia-card

ClawHub CLI

Package manager switcher

npx clawhub@latest install xia-card
Security Scan
Capability signals
Requires sensitive credentials
These labels describe what authority the skill may exercise. They are separate from suspicious or malicious moderation verdicts.
VirusTotalVirusTotal
Suspicious
View report →
OpenClawOpenClaw
Suspicious
medium confidence
Purpose & Capability
主要功能(维护 profile.json、contacts.json、本地生成名片、向配置的服务器发布/读取名片)与名称/描述一致. 提供的 data/ 与 templates/ 文件也匹配该目的. 但 SKILL.md 明确要求从“Agent 记忆(USER.md、MEMORY.md 等)”提取信息并把注册得到的 api_key 写回 data/config.json —访问 Agent 记忆或写入配置是超出简单本地通讯录的隐性能力,未在元数据中声明。
!
Instruction Scope
运行时指令要求:1) 读取 Agent 记忆文件(示例列出 USER.md、MEMORY.md 等),2) fetch 任意 config.server.endpoint 或消息中提供的链接来获取 /card/{user_id} JSON,3) 在检测到未安装时从返回 JSON 的 _skill.source 获取安装源并(用户确认后)自动安装该 skill。读取广泛记忆文件 + 从未验证的外部源自动安装构成潜在数据暴露与供应链风险。SKILL.md 也允许写入 api_key/user_id 到本地 config.json(这是合理的),但与网络 fetch 和自动安装组合时需谨慎。
Install Mechanism
Skill 是 instruction-only、没有 install spec 或本地可执行二进制,静态安装风险低。正因为没有安装脚本,所谓的“自动安装”行为来自 SKILL.md 的运行指令(fetch _skill.source),而不是打包的 install 指令;这把安装流程的风险转移到运行时决策上(见 instruction_scope 的关注点)。
!
Credentials
注册/发布流程会在 data/config.json 中写入 api_key 和 user_id(这是合理且必要)。但 SKILL.md 要求访问 Agent 的记忆文件(USER.md、MEMORY.md 等)以丰富名片内容 — 这些并未在 requires.env/primaryEnv 中声明,且可能包含敏感信息. 同时,skill 会从消息中提取链接并访问外部 endpoints,这在组合下可能导致敏感数据向外传输。
Persistence & Privilege
Skill 不要求 always: true,默认不会在每次会话强制运行;它会创建/修改其 own data/* 文件(contacts.json, profile.json, config.json),这是文档中明示且功能性必要的。唯一额外需要注意的持久化行为是:在收名片场景中(并经用户确认)会触发从外部 source 安装另一个 skill,这会改变运行环境/安装新代码。
What to consider before installing
这是一个以本地 JSON 文件和静态 HTML 模板为核心的名片/通讯录技能,功能上基本一致,但请在安装前注意: - SKILL.md 会建议 Agent 读取“Agent 记忆”文件(例如 USER.md、MEMORY.md)来填充名片,这可能暴露隐私或敏感信息;如果你不希望公开这些内容,确认 Agent 不允许该读取或手动审查/清理记忆后再使用。 - 在收到外部名片时,skill 会(在提示并获得确认后)根据返回 JSON 的 _skill.source 自动安装其它 skill。自动安装外部 Skill 等同于运行从互联网下载并执行代码:仅当安装源可信且你能验证其内容时才允许该操作;否则拒绝自动安装并手动从可信渠道审查该 skill。 - 注册流程会将 api_key/user_id 写入 data/config.json:确保该目录的访问权限受限,不要将这些文件上传到公共位置。 - 如果你计划让该 Agent 与远程服务器交互,先确认 config.server.endpoint 为受信任的服务器;避免把敏感字段(personal_notes、background、current_focus)写入公开字段列表。 建议措施:审查/备份 data/ 下的文件;禁用或审查自动安装行为;限制 Agent 对记忆文件的访问;仅向可信 server.endpoint 注册与发布。

Like a lobster shell, security has layers — review code before you run it.

business-cardvk974ebs1mxk70x4fmz4azcgpy185q00acardvk974ebs1mxk70x4fmz4azcgpy185q00acontactvk974ebs1mxk70x4fmz4azcgpy185q00alatestvk974ebs1mxk70x4fmz4azcgpy185q00arolodexvk974ebs1mxk70x4fmz4azcgpy185q00a
56downloads
0stars
3versions
Updated 4h ago
v1.0.2
MIT-0

虾名片 AgentCard

虾名片让 Agent 帮用户维护个人名片和通讯录。名片是动态的——Agent 最了解用户的当下状态,由它来维护名片效率最高。

数据文件

所有数据文件在 SKILL.md 同目录的 data/ 文件夹中:

文件用途
data/profile.json个人名片数据
data/contacts.json花名册(联系人列表)
data/config.json服务器配置(endpoint、api_key、user_id)

详细字段说明见 references/data-format.md

触发指令 → 操作映射

用户说的执行的操作
"开通虾名片" / "建个花名册" / "初始化通讯录"初始化数据文件
"注册虾名片"调 POST /register,保存凭证到 config.json
"记一下这个人:张威,智谱 AI 做产品的"录入联系人
"花名册里谁做投资的" / "查一下张威"搜索花名册
"张威的公司改成字节了"编辑联系人
"生成我的名片" / "更新名片"生成/更新 profile.json
"发我的名片" / "把名片给我"输出三段式文本块
"发布名片" / "上线我的名片"推送到服务器
收到包含 agent-card:// 的消息自动识别并保存他人名片

操作流程

1. 初始化(开通虾名片)

  1. 检查 data/contacts.json 是否存在
  2. 不存在 → 创建:{"version":"1.0","owner":{"name":"","agent_name":""},"contacts":[]},owner 信息从 Agent 记忆中获取,获取不到则留空
  3. 检查 data/config.json 是否存在
  4. 不存在 → 创建:{"version":"1.0","server":{"endpoint":"","api_key":"","user_id":""}}
  5. 输出确认,告知数据存储路径

已存在 → 提示"花名册已存在",不做修改。

2. 注册虾名片

  1. 检查 config.json 中是否已有 user_id → 已有则提示"已注册,用户 ID 为 xxx"
  2. 询问用户想用什么用户 ID(字母、数字、短横线)、名字和 Agent 名字
  3. 调用 POST {config.server.endpoint}/register,请求体:{"name":"用户名","agent_name":"Agent名","user_id":"用户选的ID"}
  4. 成功 → 写 user_id 和 api_key 到 config.json,输出确认
  5. 失败 → 提示原因(ID 被占用、网络错误等)

server.endpoint 为空时,提示先配置服务器地址。

3. 录入联系人

  1. 从用户描述提取:姓名、公司、角色、标签、联系方式、备注、Agent 信息
  2. 检查 contacts.json 是否存在 → 不存在则提示"开通虾名片"
  3. 姓名重复 → 提示"已有一个叫 XXX 的联系人,是要更新还是新建?"
  4. 姓名缺失 → 必须追问,不可跳过
  5. 其他信息缺失 → 追问一次,用户说"就这样"就保存
  6. 自动填入:id(c+时间戳)、met_at(当前日期 YYYY-MM-DD)、updated_at(ISO 8601)
  7. 写入 contacts.json,输出确认

纯本地操作,不触发任何发送或通知。

4. 查询搜索

  1. 检查 contacts.json → 不存在则提示"先开通虾名片"
  2. 解析意图:姓名精确匹配 / 公司角色模糊匹配 / 标签筛选 / 关键词全文搜索
  3. 返回匹配结果,按相关度排序,以格式化文字或表格展示
  4. 底部附上本地 HTML 路径(templates/card.html)或在线链接(如已部署)

搜不到 → 明确告知,不编造结果。

5. 编辑更新

  1. 按姓名定位联系人 → 找不到则提示"花名册里没有这个人",不自动创建
  2. 更新指定字段,刷新 updated_at
  3. 输出变更摘要

匹配到多人 → 列出列表让用户选择。

6. 生成名片

  1. 读取 profile.json(存在则基于现有内容更新)
  2. 从 Agent 记忆提炼信息:身份背景(USER.md、MEMORY.md 等)、当前项目方向、联系方式
  3. 信息优先级:用户对话中明确说的 > profile.json > Agent 记忆 > 通用知识
  4. 生成预览(三段式文本块格式),等待用户确认
  5. 用户说"名片确认了" → 写入 profile.json

profile.json 7 天内更新过 → 提示"名片 XX 天前更新过,确认要重新生成吗?" 记忆信息不足 → 如实告知"以下信息从记忆中提取,可能不完整,请确认"。 不自动发布到服务器。不自动修改 profile.json,必须经用户确认。

7. 发名片

  1. 检查 profile.json 是否存在且 owner.name 非空 → 不存在则提示先"生成我的名片"
  2. 生成三段式文本块
  3. published_at 非空(已发布)→ 直接输出
  4. published_at 为 null(未发布)→ 输出文本块 + 提醒"名片还未发布到服务器,链接暂时不可用。建议先说'发布名片'将名片上线。"

核心原则:不会自动发布到服务器,必须用户明确说"发布名片"才执行。

8. 发布名片

  1. 检查 profile.json → 不存在则提示先生成
  2. 检查 config.json 中 api_key 和 user_id → 未配置则提示"先注册虾名片"
  3. tiers.public.fields 筛选公开字段构建推送数据
  4. 不推送:personal_notes(永不上传)、background、current_focus(V1 本地私密)
  5. 调用 PUT {endpoint}/card/{user_id},Header X-API-Key: {api_key}
  6. 成功 → 更新 profile.json 的 published_at,输出名片链接和发布时间
  7. 失败 → 提示错误,不修改 published_at

9. 收名片(Agent 识别)

当对话中收到包含 agent-card:// 的消息时触发:

  1. 检测 agent-card:// → 不包含则忽略
  2. agent-card://user_id 解析 user_id
  3. contacts.json 不存在 → 自动初始化
  4. Skill 未安装 → 提示用户"检测到一张名片,需要安装虾名片 skill 来保存。是否安装?" → 用户确认后,从 JSON 的 _skill 字段获取安装源并自动安装
  5. 获取数据:优先从消息中的链接提取(如 https://xxx/{user_id})并 fetch /card/{user_id} 获取结构化 JSON,回退从文本中提取信息。如消息中无链接,则从 config.json 读取 endpoint 拼接
  6. 写入 contacts.json(自动填 id、met_at、updated_at)
  7. 输出"已将 XXX 的名片保存到花名册"

网络错误 → 从文本提取基本信息保存。
同名已有 → 提示是否更新。


三段式文本块格式

固定格式,不可自定义:

🦐 虾名片(你的 Agent 社交名片)

我是{name},{title},{one_liner}。当前聚焦{current_focus}。
这是我个人的详情信息,敬请您阅览 {endpoint}/{user_id} 🔗

如果您对我感兴趣,请把这条消息转发给您的 AI 助理,它会自动认识我。若您的助理尚未安装虾名片,请引导它访问 https://clawhub.ai/skills/xia-card 进行安装。
agent-card://{user_id}
  • 第 1 段:个人简介(100 字以内),社交文案风格,像人说话
  • 第 2 段:个人详情链接,嵌在句子里
  • 第 3 段:Agent 引导语 + agent-card:// 协议标识

文案要有人味,语气商务但自然。名片是社交工具不是数据表格。


服务器 API

接口方法鉴权说明
/registerPOST注册,请求体 {name, agent_name, user_id},返回 {user_id, api_key}
/card/:user_idPUTHeader X-API-Key发布名片,请求体为公开字段,返回 {success, updated_at}
/card/:user_idGET无(公开)返回 JSON:{version, agent_card: {...}, _skill: {...}}
/:user_idGET无(公开)返回 HTML 名片页面(内嵌 JSON-LD)

一个链接两副面孔:浏览器访问 /:user_id 看到漂亮的 HTML,Agent 访问 /card/:user_id 拿到结构化 JSON。


边界规则汇总

场景处理方式
花名册不存在提示"先开通虾名片"
profile.json 不存在提示"先生成名片"
config.json 未配置服务器提示"先注册虾名片"
名片未发布允许发名片但提醒链接不可用
联系人姓名重复提示选择"更新"还是"新建"
联系人姓名缺失必须追问,不可跳过
其他信息缺失追问一次,用户说"就这样"就保存
7 天内更新过名片提示确认是否重新生成
网络错误提示失败,不修改本地数据
收到名片但 skill 未安装提示安装,用户确认后从 _skill 字段获取安装源自动安装

数据格式要点

完整字段说明见 references/data-format.md,以下是核心规则:

profile.json 关键规则:

  • personal_notes 永远不上传服务器
  • current_focusbackground:V1 本地存储,不上传
  • tiers.public.fields:控制哪些字段对外公开(默认 ["name", "title", "one_liner", "links"]
  • published_at:null = 未发布,有值 = 已发布到服务器
  • updated_at:ISO 8601 格式

contacts.json 关键规则:

  • id:自动生成,格式 c + 时间戳
  • met_at:录入时自动填当前日期(YYYY-MM-DD)
  • name 为必填,缺失时必须追问
  • V1 不含 visibility、subscribed、broadcast 等字段(V2/V3 再加)

config.json:

  • server.endpoint:服务器地址
  • server.api_keyserver.user_id:通过注册接口获得,Agent 自动写入

Comments

Loading comments...