Job Application Assistant logo

Job Application Assistant

Community
60777flowers
job-application-assistant

求职投递自动化助手。当用户需要投递简历、发送求职邮件、监控招聘公众号新文章、 或提到"投递"、"求职"、"实习"、"招聘"、"cover letter"、"申请信"时触发此skill。 英文触发词:job application, apply for a job, internship, resume, cover letter, job hunting, interview scheduling。 该skill整合了微信公众号RSS监控、JD智能分析、简历内容解析、多语言简历选择、自动化邮件发送等全流程能力。 本skill与运行平台无关:适用于 CodeBuddy、Claude Code、Cursor 等任何支持 Skill 机制的 AI Agent。

Overview

Publisher60777flowers
RepositoryAI-job-application-assistant-skill
Skill namejob-application-assistant
Stars
89
Forks
0
Bundled files
14
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 14 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by 60777flowers on GitHub. Read the source before you install it.

Installation

Install the Job Application Assistant AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/60777flowers/AI-job-application-assistant-skill/tree/main
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/60777flowers/AI-job-application-assistant-skill.git \
  .claude/skills/job-application-assistant
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Job Application Assistant in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Job Application Assistant on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Job Application Assistant is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

求职投递自动化助手

概述

本skill为求职者提供端到端的自动化求职投递流程,包括:

  1. 通过 we-mp-rss 监控微信公众号招聘文章,也可订阅任意标准 RSS/Atom 招聘源
  2. 自动提取JD关键信息(岗位、公司、要求、投递方式)
  3. 解析简历PDF全文,基于真实简历内容评估匹配度、生成Cover Letter
  4. 根据JD语言智能选择简历版本(中文/英文)和Cover Letter语言
  5. AI Agent将分析好的投递任务推送到Web管理后台,用户在浏览器中查看、编辑、一键发送
  6. 通过 SMTP 自动发送带附件的申请邮件(由Web后台触发)
  7. 通过IMAP自动检查收件箱中的求职回复(面试邀请等),结果在Web后台展示
  8. 记录投递历史,避免重复投递

适用平台:本skill与运行平台无关,所有脚本均为标准 Python,可独立运行。 适用于 CodeBuddy、Claude Code、Cursor 等任何支持 Skill 机制的 AI Agent; Web 管理后台亦可完全脱离 Agent 独立使用。

Web管理后台(核心交互界面)

本skill提供本地Web管理后台,是AI Agent与用户之间的桥梁:

  • AI Agent 负责获取JD、分析匹配度、生成Cover Letter,将结果通过API写入数据库
  • 用户 在浏览器中查看所有待发送任务,可编辑Cover Letter/邮箱/主题,确认后一键发送

启动Web后台

bash
# 首次需安装依赖
pip install -r requirements.txt

# 启动服务(--data-dir 指定简历、数据库、投递记录所在目录)
python scripts/web_server.py --port 5000 --data-dir "简历文件夹路径"

# 可选安全加固:开启API令牌鉴权(浏览器会提示输入令牌)
python scripts/web_server.py --port 5000 --data-dir "简历文件夹路径" --token "你的令牌"

启动后访问 http://127.0.0.1:5000

调试模式默认关闭;需要时加 --debug。请勿在对外暴露(--host 0.0.0.0)时开启调试或省略令牌。

Web后台功能

功能说明
待发送/已发送查看投递任务列表,编辑Cover Letter/邮箱/主题,一键发送;被拒绝的任务显示"已拒绝"
收件箱回复展示 inbox_replies.json 中的求职回复,面试邀请高亮
面试日历月视图日历展示面试/笔试安排,支持翻页、点击查看JD与邮件原文、编辑、手动新增;无日期事件(拒绝/加微信等)收进侧边栏;未读事件显示小红点;点"刷新面试"自动从收件箱提取
设置配置 LLM(DeepSeek/Kimi/Qwen/任意OpenAI兼容服务,含分析并发线程数)、用户背景信息、we-mp-rss凭据(密码可点击👁查看)、额外RSS订阅源
简历配置设置页"📄 简历配置"卡片:显示中英文简历的查找/解析状态(字符数),支持直接上传PDF到数据目录、查看解析预览、填写自定义路径
刷新文章一键拉取公众号+额外RSS最新文章,LLM自动分析JD+生成Cover Letter(含匹配理由/差距提示)+创建投递任务
公众号管理外链跳转到 we-mp-rss 管理后台 (http://localhost:8001),添加/管理公众号

刷新文章流程:用户点击"刷新文章" → 弹窗选择每个公众号的拉取数量 → 后端调用 fetch_rss_articles.py 拉取文章(公众号 + 额外RSS源)→ resume_parser.py 解析简历PDF全文 → 调用 jd_analyzer.py 多线程并行(默认10线程,见设置页"分析并发线程数")分析每篇文章(评估匹配度并给出理由/差距)→ 非招聘信息自动跳过 → 招聘信息创建投递任务(含基于简历真实经历的Cover Letter)→ 如果JD未提供邮箱则留空,等用户手动填写。 限流自动降级:若 LLM 服务商因并发过高返回限流(429),并发会自动减半(10→5→2→1)并退避重试,任务不会中断。

Web后台 API(供AI Agent调用)

鉴权说明:若服务启动时指定了 --token,所有 /api/* 请求需携带请求头 X-API-Token: <令牌>(前端收到401后会提示输入);未开启令牌时仅建议本机(127.0.0.1)使用。

方法路径说明
GET/api/jobs?status=pending获取待发送任务列表
POST/api/jobs创建单个投递任务
POST/api/jobs/batch批量创建投递任务
GET/api/jobs/<id>获取任务详情
PUT/api/jobs/<id>更新任务(编辑Cover Letter等)
POST/api/jobs/<id>/send发送该任务的邮件
POST/api/jobs/<id>/skip跳过该任务
DELETE/api/jobs/<id>删除任务
GET/api/stats获取统计数据(待发送/已发送/失败数量)
GET/api/replies获取收件箱回复
POST/api/articles/cancel取消正在进行的文章刷新
POST/api/llm/test测试 LLM API 连通性(设置页"测试AI连接"按钮)
POST/api/email/test测试邮箱 IMAP 登录(设置页"测试邮箱连接"按钮)
POST/api/interviews/refresh启动后台面试刷新(IMAP抓取已投递岗位的回复 → LLM提取面试事件)
POST/api/interviews/cancel取消正在进行的面试刷新
GET/api/interviews/progress查询面试刷新进度
GET/api/interviews?month=YYYY-MM获取当月事件 + 无日期事件 + 未读数
POST/api/interviews手动新增面试事件
PUT/api/interviews/<id>编辑面试事件(时间/类型/地点/备注等)
POST/api/interviews/<id>/read标记事件已读(消除小红点)
GET/api/interviews/unread_count获取未读事件数

创建投递任务的JSON格式

json
{
  "company": "BAI资本",
  "position": "投资实习生",
  "location": "上海",
  "jd_summary": "BAI资本招聘投资实习生...",
  "jd_detail": "岗位职责:\n1. 行业研究...\n2. 项目尽职调查...",
  "requirements": "1. 重点大学本科或以上...\n2. 对投资有热情...",
  "receiver_email": "internbai.sh@gmail.com",
  "subject": "张三+XX大学+XX大学+专业+年级+毕业时间",
  "cover_letter": "尊敬的BAI资本招聘团队:\n\n我是XX大学XX专业的硕士研究生...",
  "resume_version": "zh",
  "match_score": 5,
  "match_reason": "金融工程背景契合量化研究要求",
  "gap_list": "缺少二级市场实盘经验;英语需达商务沟通水平",
  "source_url": "https://mp.weixin.qq.com/s/xxx",
  "source_mp": "清北资源"
}

match_score 会被服务端钳制到 1-5;match_reason/gap_list 为可选字段,用于在详情页展示匹配理由与差距。

前置条件(需与用户确认)

部署此skill前,需要与用户确认以下信息:

1. 硬件与服务依赖

  • Docker Desktop(Windows/Mac)或 Docker Engine(Linux)
  • we-mp-rss 服务(Docker本地部署,用于微信公众号RSS订阅)
    • 部署方式:docker run -d --name we-mp-rss -p 8001:8001 ghcr.io/rachelos/we-mp-rss:latest
    • 管理后台:http://localhost:8001
    • 默认账号:admin / admin@123(请部署后修改)
    • 需用户微信扫码登录微信读书以启用公众号订阅

2. Gmail配置

需用户提供:

  • Gmail邮箱地址
  • Gmail应用专用密码(非登录密码)
    • 获取方式:Google账户 > 安全性 > 两步验证 > 应用密码
  • 保存为工作目录下的 gmail_config.txt,支持两种格式(推荐方式一):
    # 方式一:key=value
    email=your_email@gmail.com
    password=your_app_password
    
    # 方式二:中文标签(两种均可自动识别)
    邮箱地址: your_email@gmail.com
    应用密码: your_app_password

    Gmail 应用密码写成 "abcd efgh ijkl mnop" 分组格式也会自动去空格。

3. 简历文件

需确认:

  • 简历存放路径(工作目录或绝对路径)
  • 中文简历文件名(如 resume_zh.pdf)
  • 英文简历文件名(如 resume_en.pdf)

4. 用户求职偏好(需逐项确认)

  • 求职意向(哪些行业/岗位)
  • 工作地点偏好(优先顺序)
  • 可实习时间(每周几天,几个月以上)
  • 排除项(不投递的岗位类型)
  • 邮件主题命名规则(默认按招聘方要求)

核心配置

服务地址

Gmail SMTP/IMAP配置

  • SMTP服务器:smtp.gmail.com:587 (TLS)
  • IMAP服务器:imap.gmail.com:993 (SSL)
  • 配置文件:工作目录下 gmail_config.txt

简历文件

工作目录下存放中文和英文两个版本的简历:

  • resume_zh.pdf — 中文版
  • resume_en.pdf — 英文版

简历内容解析:resume_parser.py 会用 pypdf 提取简历全文(扫描版无文字层则自动跳过), 供 LLM 评估匹配度并生成基于真实经历的 Cover Letter。解析失败不影响主流程。

用户求职偏好(示例,需按用户实际填写)

  • 求职意向:科技企业、PE/VC、基金等
  • 工作地点偏好:深圳 > 上海 > 北京(示例)
  • 可实习时间:每周5天,3个月以上
  • 排除项:券商投行(IPO/FA/承做等)、纯咨询岗位
  • 邮件主题命名:按照招聘方要求命名
  • 简历附件:需重命名为与邮件主题一致
  • 语言选择规则:根据JD语言选择对应语言版本(中文JD→中文简历+中文申请信,英文JD→英文简历+英文Cover Letter)

工作流程

流程1:监控新招聘文章(定时触发)

  1. 获取公众号列表:调用 GET /api/v1/wx/mps(需Bearer token认证)
  2. 登录获取token:POST /api/v1/wx/auth/login,body为 username=admin&password=admin@123
  3. 遍历每个公众号:调用 GET /rss/{feed_id}?limit=10 获取最新文章RSS XML
  4. 解析RSS:提取每篇文章的 title、link(微信文章URL)、pubDate
  5. 去重:与 投递记录.csv 对比,跳过已处理的文章
  6. AI筛选:根据用户求职意向筛选,排除不投递的岗位类型
  7. 输出推荐列表:生成直观的表格,包含序号、公司、岗位、地点、匹配度、投递方式
  8. 保存汇总:将推荐列表保存为 daily_report_日期.md 到工作目录
推荐列表输出格式示例
## 今日招聘筛选结果

共获取 N 篇文章,筛选出 M 篇匹配岗位

| # | 公司 | 岗位 | 地点 | 匹配度 | 投递方式 |
|---|------|------|------|--------|----------|
| 1 | BAI资本 | 投资实习生 | 上海 | ⭐⭐⭐⭐⭐ | internbai.sh@gmail.com |
| 2 | 软银中国 | 投资实习生 | 上海 | ⭐⭐⭐⭐⭐ | sbcvc_recruit@126.com |
| 3 | CMC资本 | 股权投资实习生 | 上海/北京 | ⭐⭐⭐⭐⭐ | 需回复"极职Zenith"→"CMC" |

### 需要你手动获取邮箱的岗位:

1. **CMC资本**:打开微信 → 搜索公众号"极职Zenith" → 回复关键词"CMC" → 获取投递邮箱
2. **小米**:打开微信 → 搜索公众号"极职Zenith" → 回复关键词"小米" → 获取投递邮箱

获取到邮箱后,回复"投递+序号"(如"投递1,2"),将自动生成Cover Letter并发送邮件。

流程2:单篇文章投递(用户触发或定时触发)

  1. 提取JD:使用 web_fetch 工具抓取微信文章内容,提取:

    • 公司名称
    • 岗位名称
    • 岗位职责
    • 任职要求
    • 工作地点
    • 投递邮箱
    • 邮件命名要求
  2. 判断语言:JD为英文→使用英文简历和英文Cover Letter;JD为中文→使用中文简历和中文申请信

  3. 匹配评估:根据用户背景评估匹配度

  4. 生成Cover Letter:基于简历内容,撰写简洁的申请信,突出匹配点

  5. 推送到Web后台:调用 POST /api/jobs 将投递任务写入数据库(需确保web_server.py正在运行)

    ⚠️ 重要:必须使用 push_job.py 脚本推送,不要用 PowerShell 的 curl/Invoke-RestMethod(会有中文编码问题):

    bash
    # 方式1:JSON文件模式(推荐,Cover Letter较长时用此方式)
    # 先将任务数据写入临时JSON文件,再推送
    python scripts/push_job.py --json-file /tmp/job.json
    
    # 方式2:批量推送
    python scripts/push_job.py --batch --json-file /tmp/jobs.json
    
    # 方式3:参数模式(适合简单任务)
    python scripts/push_job.py --company "BAI资本" --position "投资实习生" --email "hr@bai.com" --subject "主题" --cover-letter "正文"
  6. 通知用户:告知用户已将投递任务推送到Web后台,请在浏览器中查看并确认发送

  7. 用户操作:用户在Web后台查看任务详情,可编辑Cover Letter/邮箱/主题,点击"一键发送"

  8. 邮件发送:Web后台调用 send_application_email.py 发送邮件,并自动记录到 投递记录.csv

批量推送:如果有多篇文章需要投递,可使用 POST /api/jobs/batch 一次性推送多个任务。

流程3:收件箱求职回复检查(定时触发)

  1. 运行IMAP检查脚本:执行 python scripts/check_inbox_replies.py --days 7 --output inbox_replies.json
    • 脚本通过IMAP连接Gmail
    • 搜索最近7天的邮件
    • 匹配已投递公司的回复邮箱
    • 搜索求职关键词(面试/offer/简历/感谢/申请/岗位/实习/interview等)
  2. 识别面试邀请:脚本自动判断是否包含面试关键词(面试/interview/一面/二面/终面/笔试等)
  3. 输出结果:
    • 结果保存为 inbox_replies.json,Web后台自动读取并在"收件箱回复"标签页展示
    • 面试邀请会以红色高亮标注,提醒用户尽快回复
  4. 更新投递记录:如收到回复,更新 投递记录.csv 中的状态列

流程4:投递记录查询

查询 投递记录.csv,展示已投递的公司、岗位、日期、状态。 字段:日期,公司,岗位,工作地点,投递邮箱,邮件主题,简历版本,状态

关键脚本

scripts/web_server.py

Web管理后台服务(Flask),是AI Agent与用户交互的核心界面。

  • AI Agent通过REST API将投递任务写入数据库
  • 用户在浏览器中查看、编辑、一键发送
  • 自动调用 send_application_email.py 发送邮件并记录到 投递记录.csv
  • 自动读取 inbox_replies.json 在前端展示收件箱回复

启动方式:python scripts/web_server.py --port 5000 --data-dir "简历文件夹路径" [--token 令牌] [--debug] 依赖:pip install -r requirements.txt

scripts/push_job.py

推送投递任务到Web管理后台。AI Agent生成Cover Letter后,通过此脚本将任务写入数据库。 必须使用此脚本而非curl/Invoke-RestMethod,避免PowerShell中文编码问题。 调用方式:python scripts/push_job.py --json-file job.json 或 python scripts/push_job.py --company "..." --position "..." ...

scripts/resume_parser.py

简历文本解析器(pypdf)。提取中英文简历PDF全文,供 LLM 评估匹配度、生成基于真实经历的 Cover Letter。 提供 extract_text(path) 与 load_resume_texts(data_dir);解析失败返回空串,不影响主流程。

scripts/llm_client.py

统一 LLM 客户端,支持 DeepSeek / Kimi(Moonshot) / Qwen(DashScope) / 自定义(OpenAI兼容)。 自定义供应商在设置页填写 API 地址(llm_base_url)+ 任意模型名,可对接 Ollama、vLLM、第三方网关等。 Web后台的"刷新文章"功能通过此模块调用 LLM 分析JD和生成Cover Letter。 API Key 在 Web后台设置页面配置,存储在 settings.json。

scripts/jd_analyzer.py

JD 分析器,使用 LLM 从微信公众号文章中提取 JD 信息并生成 Cover Letter。 流程:抓取文章HTML(平衡标签提取 js_content 正文)→ LLM判断是否招聘信息 → 提取公司/岗位/要求/邮箱 → 结合简历全文评估匹配度(返回 match_score/match_reason/gap_list)→ LLM生成Cover Letter。 如果文章中未提供投递邮箱,receiver_email 为空,等用户在Web后台手动填写。

scripts/send_application_email.py

通过 SMTP 发送带PDF附件的邮件。使用MIMEApplication处理附件,utf-8编码中文文件名。 失败时抛出携带真实原因的异常(Web后台会把原因透出到任务错误信息);端口465自动走SSL。 调用方式:python scripts/send_application_email.py --to email@example.com --subject "主题" --body "正文" --attach resume.pdf

scripts/fetch_rss_articles.py

从we-mp-rss获取所有订阅公众号的最新文章,并支持 --rss-url 拉取任意标准 RSS/Atom 源,输出JSON格式。 调用方式:python scripts/fetch_rss_articles.py --limit 10 --output articles.json [--rss-url https://rsshub.app/xxx] 注意:Windows下需先执行 $env:PYTHONIOENCODING="utf-8" 避免编码错误

scripts/check_inbox_replies.py

通过Gmail IMAP检查收件箱中的求职回复邮件。 调用方式:python scripts/check_inbox_replies.py --days 7 --output replies.json 另提供 fetch_job_replies() 供Web后台"刷新面试"调用:按已投递邮箱精确匹配发件人(关键词兜底),返回完整邮件正文。

scripts/interview_analyzer.py

面试事件分析器。使用 LLM 从求职回复邮件中提取结构化事件:事件类型(interview/written_test/rejection/other)、 日期(结合邮件发送日期推断相对日期)、时间、地点/链接、备注(如需加微信)。 识别到拒绝时Web后台会联动更新任务状态为"已拒绝"并追加到 投递记录.csv。

邮件发送故障排查

问题1:附件发送空白/损坏

  • 根因:使用 MIMEBase + encoders.encode_base64 处理PDF附件时编码不完整
  • 解决方案:必须使用 MIMEApplication 替代

问题2:中文文件名乱码

  • 解决方案:使用 ('utf-8', '', filename) 三元组编码文件名

问题3:附件路径错误

  • 解决方案:使用原始字符串 r"path",发送前验证文件存在且大小 > 0

问题4:PowerShell控制台编码错误

  • 解决方案:执行脚本前设置 $env:PYTHONIOENCODING="utf-8"

发送邮件前的检查清单

  1. 检查附件文件存在:os.path.exists(attachment_path)
  2. 检查附件大小 > 1000 bytes
  3. 检查附件是有效PDF(文件头为 %PDF)
  4. 验证收件人邮箱格式
  5. 首次使用先发送测试邮件给自己确认

注意事项

  1. we-mp-rss服务自动唤起:启动Web后台时会自动检查并启动 we-mp-rss 容器(容器名可在设置页"Docker容器名"配置,默认 we-mp-rss;Docker 未运行时仅告警不中断)。如启动后仍无文章,用 docker ps 检查容器状态、docker logs we-mp-rss --tail 50 查看日志
  2. Web管理后台必须运行:投递流程依赖Web后台,启动命令 python scripts/web_server.py --data-dir "简历文件夹路径"
  3. 微信读书登录可能过期:如RSS返回空,需在管理后台重新扫码登录
  4. 附件必须使用MIMEApplication:使用MIMEBase会导致附件损坏
  5. 投递前用户在Web后台确认:AI Agent推送任务后,由用户在浏览器中点击"一键发送"
  6. 记录所有投递:Web后台发送邮件后自动写入 投递记录.csv,避免重复投递
  7. IMAP检查是只读的:收件箱检查使用 BODY.PEEK[] + 只读模式,不会把HR邮件标记为已读
  8. 设置保存有回读验证:设置页保存后会从磁盘回读确认并在底部显示配置文件实际路径;若更换 --data-dir 启动,设置、数据库、CSV都会切换到新目录

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Job Application Assistant AI skill do?

求职投递自动化助手。当用户需要投递简历、发送求职邮件、监控招聘公众号新文章、 或提到"投递"、"求职"、"实习"、"招聘"、"cover letter"、"申请信"时触发此skill。 英文触发词:job application, apply for a job, internship, resume, cover letter, job hunting, interview scheduling。 该skill整合了微信公众号RSS监控、JD智能分析、简历内容解析、多语言简历选择、自动化邮件发送等全流程能力。 本skill与运行平台无关:适用于 CodeBuddy、Claude Code、Cursor 等任何支持 Skill 机制的 AI Agent。

Why use Job Application Assistant on TypingMind?

Because you install it once and use it with any model. Job Application Assistant is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Job Application Assistant in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/60777flowers/AI-job-application-assistant-skill/tree/main. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Job Application Assistant?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Job Application Assistant?

As many as you like. As long as a model supports skills, you can use Job Application Assistant with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Job Application Assistant AI skill free?

It is published on GitHub by 60777flowers. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇