⚠️ 凭证与权限声明
本技能在登录成功后会把掘金会话 Cookie 以明文 JSON 形式保存到
~/.juejin_cookie.json(文件权限会被设置为0600,仅当前用户可读写)。 只要该文件存在且未过期,后续调用即可以你的身份访问掘金账号(发布文章、 读取草稿等)。
- 仅在你愿意把掘金登录态保存在本机时才登录, 避免在共享/CI 环境运行;
- 使用结束后请执行
rm ~/.juejin_cookie.json主动撤销;- 不要将该文件提交版本库(仓库已默认忽略);
- 本技能 默认只创建草稿:API 层
ArticlePublisher.publish_markdown()的默认行为是save_draft_only=True,且公开发布还需要调用方额外显式 传入allow_public_publish=True。入口脚本run_publish.py和publish_article.py则在此之上再加了命令行/交互式的人工确认门。
本技能仅在用户 明确、字面 提到下列意图时才被调用。 模糊的、推断出的或捎带提到“掘金/发布/下载”的请求 不会 触发本技能; 遇到不确定的情况,AI 应当先向用户澄清,而不是直接执行。
.md 文件路径,
或直接粘贴 Markdown 正文。AI 不得 主动猜测或代填路径,
也 不得 把诸如 ~/.ssh/...、 /etc/...、 ~/.juejin_cookie.json
这类路径喂给本技能。属性内容技能名称Juejin Skills(掘金技术社区操作技能)技能类型Prompt-based Skill(自然语言驱动)技能语言Python目标网站https://juejin.cn/激活方式自然语言指令
本技能采取 严格字面匹配 策略:仅当用户的请求 同时 满足下列三项时, 才认为该请求属于本技能的范围:
juejin.cn(不接受“某社区”“技术博客”
等泛指);如果上述任一条件不满足,AI 应当先向用户澄清, 不要 激活本技能。
.md 文件路径,或~/.ssh、 /etc、 ~/.juejin_cookie.json 等敏感路径。
这些情况下应拒绝并要求澄清。juejin.cn/post/<id> 或 juejin.cn/user/<id>
链接,并字面要求“下载 / 保存 / 导出”。./output/ 之外的路径——这些应被拒绝。download_user_articles 需要调用方显式传入 confirm_bulk=True,
未传时该方法会直接拒绝并返回提示。max_count 默认 20、硬上限 50;AI / CLI 不得在未获得用户明确同意前
自行将这个限额开到更高或跳过确认。这避免了在用户只需下载一两篇
文章时意外启动大规模抓取。子功能说明获取分类列表获取掘金所有文章分类(前端、后端、Android、iOS、人工智能等)热门文章排行获取指定分类或全部分类的热门文章排行榜文章趋势分析按时间维度(3天/7天/30天/历史)查看文章热度趋势排行榜筛选支持按分类、时间范围、排序方式筛选
API 接口:
GET https://api.juejin.cn/tag_api/v1/query_category_briefsPOST https://api.juejin.cn/recommend_api/v1/article/recommend_all_feedPOST https://api.juejin.cn/recommend_api/v1/article/recommend_cate_feedPOST https://api.juejin.cn/tag_api/v1/query_category_tags子功能说明浏览器登录通过 Playwright 打开掘金登录页面,用户扫码或密码登录后自动获取 CookieCookie 管理保存、加载、验证 Cookie 状态Markdown 解析读取本地 Markdown 文件,提取标题、正文内容文章发布通过掘金 API 创建草稿并发布,支持设置分类、标签、摘要、封面图草稿管理支持保存为草稿而不立即发布
API 接口:
POST https://api.juejin.cn/content_api/v1/article_draft/createPOST https://api.juejin.cn/content_api/v1/article/publishPOST https://api.juejin.cn/tag_api/v1/query_category_tags鉴权方式:Cookie 鉴权(通过 Playwright 浏览器登录获取)
子功能说明单篇下载通过文章 URL 下载单篇文章,保存为 Markdown批量下载下载指定作者的所有/部分文章格式转换将掘金文章 HTML 内容转换为标准 Markdown图片处理可选下载文章中的图片到本地元数据保留保留文章标题、作者、发布时间、标签等元信息
API 接口:
POST https://api.juejin.cn/content_api/v1/article/detailPOST https://api.juejin.cn/content_api/v1/article/query_listtext
juejin/
├── SKILL.md # 技能定义文档
├── README.md # 项目说明文档
├── requirements.txt # Python 依赖
├── juejin_skill/ # 主模块
│ ├── __init__.py
│ ├── config.py # 配置管理
│ ├── api.py # 掘金 API 封装
│ ├── auth.py # 登录鉴权(Playwright)
│ ├── hot_articles.py # 热门文章排行榜
│ ├── publisher.py # 文章发布
│ ├── downloader.py # 文章下载
│ └── utils.py # 工具函数
└── output/ # 下载文章输出目录
text
用户:帮我获取掘金前端分类的热门文章排行榜
AI:正在获取掘金前端分类的热门文章...
用户:把 ./my-article.md 发布到掘金,分类选前端,标签加上 Vue.js 和 TypeScript
AI:正在登录掘金账号并发布文章...
用户:下载这篇掘金文章 https://juejin.cn/post/7300000000000000000
AI:正在下载文章并转换为 Markdown 格式...
filesystem_write)#download_article(...)、 download_user_articles(...) 以及内部的
_write_markdown_file / _download_images 在写入磁盘之前都会调用
juejin_skill.downloader._validate_output_dir():
./output(或 $JUEJIN_OUTPUT_ROOT)之下;os.path.realpath 解析后再比对,可抵御符号链接、 .. 馑越,
以及伪造后缀绕过检查。任何越出根目录的 output_dir 传入都会被以
{"success": False, "message": ...} 形式拒绝,不会创建目录也不会调用 open()。
这保证了 SKILL.md 中 filesystem_write 边界与代码实际行为一致。
bulk_download_policy)#download_user_articles() 需要显式 confirm_bulk=True 才会执行;max_count 默认 20、硬上限 BULK_DOWNLOAD_HARD_CAP=50,超出会被静默降级;filesystem_read)#publish_markdown(filepath=...) 会经过
juejin_skill.publisher._validate_markdown_path() 校验,仅接受:
$JUEJIN_MD_ROOT)之下的 .md / .markdown 文件;/etc、 /var、 /proc、 /sys、 /dev、 /root、 /boot、
~/.ssh、 ~/.aws、 ~/.config、 ~/.juejin_cookie.json 等敏感前缀下的文件。路径会使用 os.path.realpath 解析后再比对,以防止符号链接逃逸、
.. 路径馑越、以及伪造后缀绕过检查。
违反任一规则都会抩出 ValueError,不会走到 open(),也不会被填到
草稿 / 发布 / 任何外发请求中。
save_draft_only=False 和 allow_public_publish=True