文章总结: 本文介绍AIAgent系统中的Skill模块,将其定义为整合提示词逻辑、工具调用和任务流程的高级能力封装机制。通过PDF处理技能实例展示渐进式披露的三层架构设计(元数据层、指令层、资源层),并详细说明目录结构规范。文档包含大量可操作的Python代码示例,涵盖PDF文本提取、表格处理、页面旋转等实用功能,体现Skill模块如何将复杂任务转化为可复用的自动化工作流。 综合评分: 82 文章分类: AI安全,安全工具,安全开发,解决方案,安全运营
writer = PdfWriter()
for page in reader.pages: writer.add_page(page)</p>
<p>with open(“encrypted.pdf”, “wb”) as output: writer.write(output)“`</p>
<p>| 任务 | **工具 | 命令/代码 ||——|———–|————–|| 合并 PDF | pypdf | <code>writer.add_page(page)</code> || 拆分 PDF | pypdf | 每个文件一页 || 提取文本 | pdfplumber | <code>page.extract_text()</code> || 提取表格 | pdfplumber | <code>page.extract_tables()</code> || 创建 PDF | reportlab | Canvas 或 Platypus || 命令行合并 | qpdf | <code>qpdf --empty --pages ...</code> || OCR 扫描的 PDF | pytesseract | 先转换为图像 || 填写 PDF 表单 | pdf-lib 或 pypdf (见 FORMS.md) | 见 FORMS.md |</p>
<p><ul>
<li>有关高级 pypdfium2 用法,请参阅 REFERENCE.md- 有关 JavaScript 库(pdf-lib),请参阅 REFERENCE.md- 如果需要填写 PDF 表单,请遵循 FORMS.md 中的说明- 有关故障排除指南,请参阅 REFERENCE.md</li>
</ul>
<pre><code>作用逻辑如下(以code Review)为例:</p>
<p><img src=)
LAYER 3:主动探索(资源层)
第三层是关联文件/扩展资源,通常存放在技能目录中的其他文件夹(例如:references/、examples/、templates/),第三层与前面两层不同,它不会自动加载,而是由模型在需要时主动探索,例如:当模型在执行任务时发现需要更详细的API文档、示例代码、模板文件时就可以导航到这些关联文件中获取信息
扩展资源示例:
skill/ ├─ SKILL.md ├─ references/ │ ├─ apidocs.md │ ├─ styleguide.md ├─ templates/ │ ├─ reviewtemplate.md │ └─ reporttemplate.md └─ examples/ ├─ example1.md └─ example2.md
作用逻辑示例:

安装方式
本地安装
在本地安装好Claude Code后,我们可以通过一下三种方式来安装Skills:
方式1:自然语言安装
我们可以找到需要安装的SKILL的GIthub项目地址,随后在Claude Code中输入命令让其安装即可,例如:
帮我安装skill,项目地址是:https://github.com/anthropics/skills/tree/main/skills/pdf

方式二:人工手动安装
Claude Code专门有一个文件夹用来管理所有的Skill文件,我们可以找到需要安装的SKILL的GIthub项目地址,随后下载SKILL包并解压到指定的目录下面即可使用,简易示例如下:
Step 1:下载SKILL到本地
https://skillsmp.com/zh/skills/unix2dos-skills-news-tracker-skill-md


Step 2:将SKILLs解压后放到对应的目录(skill需要新建)

Step 3:随后让Claude Code来列出Skills

备注:需要注意SKILL在不同操作系统中存放的路径各不相同
| 存储类型 | Windows路径 | Linux /macOS路径 | Skill 示例路径 | 使用范围 |
|---|---|---|---|---|
| 全局Skill(个人级) | C:Users用户名.claudeskills |
~/.claude/skills/ |
~/.claude/skills/
|
当前用户的所有项目都可以使用 |
| 项目Skill(项目级) | 项目路径.claudeskills |
./.claude/skills/ |
.claude/skills/
|
只对当前项目生效 |
| 插件Skill(插件级) |
|
|
|
仅在插件启用的环境中生效 |
方式三:插件市场安装
Claude Code支持插件市场功能,我们可以像应用商店一样浏览和安装Skills,例如:
 备注说明:上面我们使用的是Claude Code的插件机制安装的Skill,而不是直接手动下载Skill到全局或项目目录,所以会将Skill安装到.claudepluginsmarketplacesanthropic-agent-skills目录中去,例如:   同时插件市场还提供了npx的安装方式,例如:
npx skills add unix2dos/skills
 随后我们选择对应的SKill进行安装:
npx skills add unix2dos/skills
  云端安装 Coze是字节跳出的AI Agent平台,也支持Skills功能,我们可以再其功能界面选择"扣子编程->技能-附件"中来上传对应的SKill技能包并应用   # 手动创建 手动创建SKILL主要包括以下五个步骤:  目录创建 首先我们需要再本地创建一个SKILL工作目录  SKILL编写 A、目录初始化 首先我们需要对SKILL目录结构按需进行初始化
B、核心文件编写 SKILL.md核心文件编写设计要点: * 前置信息:SKILL名称描述 * 技能介绍:SKILL简短介绍 * 触发机制:SKILL何时使用 * 执行流程:SKILL执行流程 * 输出约束:SKILL输出格式 * 异常处理:SKILL异常处理 编写格式示例:
—name: cve-detail description: xxxx // SKILL简要描述—
Step 1:xxxStep 2:xxx
# 工具创建 工具地址: https://github.com/anthropics/skills/tree/main/skills/skill-creator 工具介绍:Skill Creator是Anthropic官方提供的一个元技能(Meta Skill),它主要用于创建、优化、评估和测试其他Skills 使用方法: Step 1:安装skill
npx skills add https://github.com/anthropics/skills –skill skill-creator
 Step 2:创建Skill 随后我们要从一个产品经理的视角触发,将Claude Code当成你的研发同事,告诉他你想要需要做一个什么样子的SKILL?这个SKILL的工作流程是怎么样的?输出是怎么样的?越详细越好
我是SDL安全团队的一员,我们团队日常工作的一环就是对新纰漏的安全漏洞进行应急响应,在应急过程中我们需要快速定位对应的安全漏洞的信息(包括:影响产品、影响版本、利用条件、漏洞代码、是否有公开POC、修复方案),我们希望可以将这个过程通过SKILL来实现自动化,请结合一下的需求描述细节设计一个SKILL: 主要目的:根据用户输入的”CVE/CNVD/CNNVD/GHSA ID”漏洞编号快速定位对应的安全漏洞信息(包括:影响产品、影响版本、利用条件、漏洞代码、是否有公开POC、修复方案)触发条件:用户输入”关键词(情报分析) + CVE/CNVD/CNNVD漏洞编号”执行流程:Step 1: 校验CVE/CNVD/CNNVD漏洞编号Step 2: 根据CVE/CNVD/CNNVD漏洞编号快速定位,可以从官方漏洞情报源快速获取,例如:CVE官方情报查询、CNVD官方情报查询、CNNVD官方情报查询(需要你自行扩展)Step 3: 获取漏洞代码、漏洞POC信息(如有)、漏洞修复方案Step 4: 输出漏洞情报分析报告,格式如下: 漏洞编号:CVE、CNVD、CNNVD编号GHSA ID:GHSA ID编号产品名称:组件名称/软件名称语言生态:JAVA/GO….漏洞描述:漏洞信息描述漏洞类型:RCE/SQLI/XSS等CVSS评分:CVSS评分影响版本:产品受影响版本修复版本:产品漏洞修复版本 官方公告:产品官方针对此漏洞的说明信息 POC/EXP:是否存在:漏洞POC/EXP存在/不存在POC代码:POC/EXP代码工程地址 或者 POC/EXP代码信息 参考信息逐一列举上述信息获取的来源,需要给出对应的地址
 在创建的期间SKILL-create也会根据当前你的这些描述来提出几个关键的问题 和你交互式访谈,一起来完成这个设计,是不是很想一个合作小伙伴   随后又开始勤勤恳恳的working了,在工作之中可能需要交互式的去授予一些权限(按需授予哦)   生成结果如下:  SKILL.md
—name: vulnerability-intelligencedescription: 根据CVE/CNVD/CNNVD/GHSA漏洞编号快速获取安全漏洞情报分析报告。当用户需要分析安全漏洞、查询漏洞详情、获取漏洞POC或修复方案时使用此技能。特别适用于SDL安全团队应急响应、漏洞分析、安全研究等场景。当用户提到”漏洞分析”、”情报分析”、”CVE详情”、”CNVD查询”等关键词时触发此技能。—
本技能用于根据安全漏洞编号(CVE、CNVD、CNNVD、GHSA)快速获取详细的漏洞情报分析报告。技能会自动从多个官方漏洞情报源获取信息,并生成标准格式的分析报告,包含漏洞描述、影响版本、POC信息、修复方案等关键信息。
用户应提供漏洞编号,可以包含以下任意格式:- CVE编号:CVE-2024-12345– CNVD编号:CNVD-2024-12345– CNNVD编号:CNNVD-2024-12345– GHSA编号:GHSA-xxxx-xxxx-xxxx 用户可以在编号前添加关键词如”漏洞分析”、”情报分析”、”CVE详情”、”CNVD查询”,例如:- “漏洞分析 CNVD-2024-12345”- “情报分析 GHSA-xxxx-xxxx-xxxx”- “CVE详情 CVE-2025-xxxx”- “CNVD查询 CNVD-2024-12345”
CVE编号查询源:1. NVD (National Vulnerability Database): https://nvd.nist.gov/vuln/detail/CVE-{id}2. MITRE CVE: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-{id}3. CVE Details: https://www.cvedetails.com/cve/CVE-{id}/
CNVD编号查询源:1. CNVD官网: https://www.cnvd.org.cn/flaw/show/{id}2. CNNVD官网: https://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD={id}
GHSA编号查询源:1. GitHub Advisory Database: https://github.com/advisories/{id}2. OSV.dev: https://osv.dev/vulnerability/{id}
报告模板(必须严格遵循)“`漏洞编号:[CVE/CNVD/CNNVD编号]GHSA ID:[GHSA ID编号]产品名称:[组件名称/软件名称]语言生态:[JAVA/GO/Python等]漏洞描述:[漏洞信息描述]漏洞类型:[RCE/SQLI/XSS等]CVSS评分:[CVSS评分]影响版本:[产品受影响版本]修复版本:[产品漏洞修复版本]
官方公告:[产品官方针对此漏洞的说明信息] POC/EXP:是否存在:[漏洞POC/EXP存在/不存在]POC代码:[POC/EXP代码工程地址 或者 POC/EXP代码信息] 参考信息:1. [来源1名称]: [URL]2. [来源2名称]: [URL]…“`
关键要求:1. 格式严格性:必须使用上述完全相同的标题和顺序2. 信息完整性:尽可能填写所有字段,如果某些信息无法获取,标记为”[信息缺失]”3. 中文输出:所有内容使用中文描述4. 参考信息格式:每个参考源使用数字编号列表,格式为 [来源名称]: [URL]5. POC信息:如果存在公开POC,提供链接或代码片段;如果不存在,明确说明”不存在”6. CVSS评分:如果存在多个CVSS版本,优先使用CVSS 3.x评分7. 版本信息:尽可能准确地提供受影响版本和修复版本范围
bash# 示例:查询CVE信息WebFetch({ url: "https://nvd.nist.gov/vuln/detail/CVE-2024-12345", prompt: "提取CVE漏洞的以下信息用于漏洞分析报告:1. 标题/产品名称 2. 详细描述 3. CVSS评分 4. 漏洞类型 5. 受影响版本范围 6. 修复版本 7. 官方公告链接 8. POC信息(如有)"})
1. 信息收集:从多个源收集漏洞信息2. 信息验证:对比不同源的信息,选择最权威的数据3. 模板填充:将信息填入报告模板,保持原有格式不变4. 格式检查:确保报告完全符合模板结构5. 信息标注:如果某些信息无法获取,使用”[信息缺失]”标注6. 来源记录:为每个信息点记录来源URL 绝对禁止:– 更改模板的标题、顺序或结构- 添加额外的章节或子标题- 使用不同的格式(如Markdown标题、项目符号列表)- 省略模板中的任何字段(除非确实无法获取信息)
1. 信息验证:对于关键信息(如CVSS评分、影响版本),尽量从多个源验证2. 中文支持:CNVD/CNNVD信息优先使用中文源,确保报告为中文3. POC处理:如果存在公开POC,提供链接但不要直接执行或提供完整攻击代码4. 安全边界:仅用于安全研究和应急响应,不得用于非法用途5. 信息时效性:注明信息获取时间,提醒用户漏洞信息可能更新
官方公告:Apache官方已发布安全公告,建议用户立即升级到2.16.0或更高版本。 POC/EXP:是否存在:存在POC代码:https://github.com/tangxiaofeng7/CVE-2021-44228-Apache-Log4j-Rce 参考信息:1. NVD: https://nvd.nist.gov/vuln/detail/CVE-2021-442282. MITRE CVE: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-442283. Apache安全公告: https://logging.apache.org/log4j/2.x/security.html4. GitHub Advisory: https://github.com/advisories/GHSA-jfh8-c2jp-5v3q“` 注意:这是一个符合模板格式的正确示例。所有字段都按照模板顺序排列,没有额外的格式或结构变化。
1. 查询失败:如果一个源查询失败,尝试其他备用源2. 信息不全:标记缺失信息,并说明哪些源未提供该信息3. 格式错误:如果漏洞编号格式不正确,提示用户并提供正确格式示例4. 网络问题:如果所有源都不可用,建议用户手动查询并提供查询链接
– 2024-04-13: 初始版本创建,支持CVE/CNVD/CNNVD/GHSA漏洞查询
scripts/validate_vuln_id.py
import reimport sysfrom typing import Dict, Optional, Tuple class VulnerabilityIDValidator: “””漏洞编号验证器””” # 正则表达式模式 PATTERNS = { ‘CVE’: r’^CVE-d{4}-d{4,}\(’, # CVE-YYYY-NNNN+ ‘CNVD’: r’^CNVD-d{4}-d{5,}\)’, # CNVD-YYYY-NNNNN+ ‘CNNVD’: r’^CNNVD-d{4}-d{6,}\(’, # CNNVD-YYYY-NNNNNN+ ‘GHSA’: r’^GHSA-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}\)’, # GHSA-xxxx-xxxx-xxxx } @classmethod def validate(cls, vulnid: str) -> Tuple[bool, Optional[str], Optional[str]]: “”” 验证漏洞编号格式 Args: vulnid: 漏洞编号字符串 Returns: Tuple[是否有效, 编号类型, 错误信息] “”” vulnid = vulnid.strip().upper() # 检查每种格式 for vulntype, pattern in cls.PATTERNS.items(): if re.match(pattern, vulnid): return True, vulntype, None # 如果没有匹配的格式 errormsg = ( f”无效的漏洞编号格式: {vulnid} ” f”支持的格式: ” f” – CVE: CVE-YYYY-NNNN+ (例如: CVE-2021-44228) ” f” – CNVD: CNVD-YYYY-NNNNN+ (例如: CNVD-2021-12345) ” f” – CNNVD: CNNVD-YYYY-NNNNNN+ (例如: CNNVD-2021-) ” f” – GHSA: GHSA-xxxx-xxxx-xxxx (例如: GHSA-jfh8-c2jp-5v3q)” ) return False, None, errormsg @classmethod def extractfromtext(cls, text: str) -> Optional[str]: “”” 从文本中提取漏洞编号 Args: text: 包含漏洞编号的文本 Returns: 提取到的漏洞编号,如果没有找到则返回None “”” # 尝试匹配所有模式 allpatterns = ‘|’.join(cls.PATTERNS.values()) match = re.search(allpatterns, text.upper()) if match: return match.group(0) return None @classmethod def getqueryurls(cls, vulnid: str, vulntype: str) -> Dict[str, str]: “”” 根据漏洞编号和类型获取查询URL Args: vulnid: 漏洞编号 vulntype: 编号类型 Returns: 字典:{源名称: URL} “”” urls = {} if vulntype == ‘CVE’: urls = { ‘NVD’: f’https://nvd.nist.gov/vuln/detail/{vulnid}’, ‘MITRE CVE’: f’https://cve.mitre.org/cgi-bin/cvename.cgi?name={vulnid}’, ‘CVE Details’: f’https://www.cvedetails.com/cve/{vulnid}/’ } elif vulntype == ‘CNVD’: # 提取CNVD编号中的数字部分 cnvdnum = vulnid.replace(‘CNVD-‘, ”) urls = { ‘CNVD官网’: f’https://www.cnvd.org.cn/flaw/show/{cnvdnum}’, ‘CNNVD官网’: f’https://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD={vulnid}’ } elif vulntype == ‘CNNVD’: urls = { ‘CNNVD官网’: f’https://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD={vulnid}’ } elif vulntype == ‘GHSA’: urls = { ‘GitHub Advisory Database’: f’https://github.com/advisories/{vulnid}’, ‘OSV.dev’: f’https://osv.dev/vulnerability/{vulnid}’ } return urls @classmethod def generatereporttemplate(cls, vulnid: str, vulntype: str) -> str: “”” 生成报告模板 Args: vulnid: 漏洞编号 vulntype: 编号类型 Returns: 报告模板字符串 “”” template = f”””漏洞编号:{vuln_id}GHSA ID:[GHSA ID编号]产品名称:[组件名称/软件名称]语言生态:[JAVA/GO/Python等]漏洞描述:[漏洞信息描述]漏洞类型:[RCE/SQLI/XSS等]CVSS评分:[CVSS评分]影响版本:[产品受影响版本]修复版本:[产品漏洞修复版本] 官方公告:[产品官方针对此漏洞的说明信息] POC/EXP:是否存在:[漏洞POC/EXP存在/不存在]POC代码:[POC/EXP代码工程地址 或者 POC/EXP代码信息] 参考信息:1. [来源1名称]: [URL]2. [来源2名称]: [URL]…””” return template
def main(): “””命令行入口””” if len(sys.argv) < 2: print(“用法: python validatevulnid.py <漏洞编号> “) print(“示例: python validate vulnid.py CVE-2021-44228″) sys.exit(1) vuln id = sys.argv[1] isvalid, vuln type, errormsg = VulnerabilityIDValidator.validate(vuln id) if isvalid: print(f”✓ 有效的{vuln type}编号: {vulnid}”) print(“ 查询URL:”) urls = VulnerabilityIDValidator.get queryurls(vuln id, vulntype) for source, url in urls.items(): print(f” {source}: {url}”) else: print(f”✗ {error_msg}”) sys.exit(1) 漏洞编号>
if name == “main“: main()
随后我们将生成的SKILL放到.claude中并使用Claude来进行漏洞情报分析

随后我们打开CMD并调用Claude Code来查看目前有那些SKILL,确保我们的SKILL又被正确加载进去

随后进行漏洞情报分析,效果的话勉勉强强,还有很多优化的地方,这里仅是一个示例而已,大家后续有兴趣可以自己尝试一下看看
漏洞分析 CVE-2026-39363 “`

文末小结
本篇文章我们主要介绍了SKILL的目录结构以及其渐进式纰漏设计,随后我们介绍了关于如何手动和借助工具(现有的SKILL创建工具来创建SKILL),在SKILL的设计过程中我们可以将自己当做是产品经理来告诉模型我这个SKILL要解决什么问题,它的工作流程是怎么样子的,它中间需要工具如何去找,它最终输出的结果需要满足什么样子的格式或者条件,后续我们将继续分享关于SKILL在企业应用安全建设方面的一些比较好的设计和落地经验,敬请期待~
推 荐 阅 读




横向移动之RDP&Desktop Session Hija

免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:七芒星实验室 Al1ex
Al1ex《会用Skill的人,已经把AI用成自动化系统了》
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/269216.html