一键导入
pdf-decrypt
自动猜密码解 PDF(银行账单 / 投资报告 / 信用卡对账单等)。读 ~/.personal_env 的 PDF_ID_* 身份变量,按发行方密码规则生成候选并用 qpdf 试解。当用户提供加密 PDF 且未提供密码("读不了" / "解密一下" / "这个 PDF 加密了")时触发。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
自动猜密码解 PDF(银行账单 / 投资报告 / 信用卡对账单等)。读 ~/.personal_env 的 PDF_ID_* 身份变量,按发行方密码规则生成候选并用 qpdf 试解。当用户提供加密 PDF 且未提供密码("读不了" / "解密一下" / "这个 PDF 加密了")时触发。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | pdf-decrypt |
| description | 自动猜密码解 PDF(银行账单 / 投资报告 / 信用卡对账单等)。读 ~/.personal_env 的 PDF_ID_* 身份变量,按发行方密码规则生成候选并用 qpdf 试解。当用户提供加密 PDF 且未提供密码("读不了" / "解密一下" / "这个 PDF 加密了")时触发。 |
依赖:
qpdf(brew install qpdf,已装 v12+) 身份配置:~/.personal_env的PDF_ID_*变量(首次用先 setup) 命中日志:~/.cache/pdf-decrypt/hits.tsv(rule + id 类型,不存密码明文)
用户给一个加密 PDF(路径 / 拖文件)且未提供密码 → 第一动作就跑本 skill,不要让用户手输密码。典型 trigger:
脚本先 qpdf --show-encryption 分类,按类型走不同路径:
| 类型 | 特征 | 处理 |
|---|---|---|
none | 完全未加密 | 退出,不动文件 |
permissions-only | user password 为空,仅权限位限制(禁打印/复制/编辑) | qpdf --decrypt 一发去权限,不需要密码 |
user-password | 真加密,必须正确密码才能开 | 走"猜密码"流程(候选规则 × 证件号) |
--force-guess 强制即使 permissions-only 也走猜密码(一般用不到)。
# 默认(全规则跑)
python3 ~/.claude/skills/pdf-decrypt/scripts/decrypt.py /path/to/file.pdf
# 只用某个发行方规则
python3 ~/.claude/skills/pdf-decrypt/scripts/decrypt.py file.pdf --issuer hsbc-hk
# 直接指定密码
python3 ~/.claude/skills/pdf-decrypt/scripts/decrypt.py file.pdf --password 289CJ6NG
# 只列候选不试(debug 用)
python3 ~/.claude/skills/pdf-decrypt/scripts/decrypt.py file.pdf --dry-run
# 列出所有支持的规则
python3 ~/.claude/skills/pdf-decrypt/scripts/decrypt.py --list
# 命中后明文打印密码(默认遮罩)
python3 ~/.claude/skills/pdf-decrypt/scripts/decrypt.py file.pdf --show
输出:<file>-decrypted.pdf(同目录)。命中规则 + ID 类型写日志 ~/.cache/pdf-decrypt/hits.tsv,密码不入日志。
在 ~/.personal_env 加(不要进 git):
export PDF_ID_BIRTH_DATE="1989-12-13" # YYYY-MM-DD
export PDF_ID_SURNAME_PY="ZENG" # 姓拼音大写
export PDF_ID_GIVEN_PY="TIANLI" # 名拼音大写
export PDF_ID_HKID="" # 香港身份证(不含括号校验位)
export PDF_ID_PASSPORT_HK="CJ6664388" # 港澳通行证
export PDF_ID_PASSPORT_INTL="" # 国际护照
export PDF_ID_CN_ID="" # 大陆身份证
所有字段都可留空 —— 脚本会跳过不能算的规则。证件号至少填 1 个,否则规则库大半失效。
| Rule ID | 描述 | 用到字段 |
|---|---|---|
hsbc-hk | HSBC HK 投资 / WPL / 信用卡:月末位 + 年末2位 + 证件首3位 + 姓末2字母大写 | birth_date, surname_py, 任一证件 |
dob-yyyymmdd | 生日 YYYYMMDD | birth_date |
dob-ddmmyyyy | 生日 DDMMYYYY(英式 / 部分港行) | birth_date |
dob-mmddyy | 生日 MMDDYY(部分美行) | birth_date |
id-full | 证件号原文 | 任一证件 |
id-last4 | 证件号末 4 位 | 任一证件 |
id-last6 | 证件号末 6 位 | 任一证件 |
surname-dob | 姓 + DDMMYYYY | surname_py, birth_date |
每条规则会跨所有非空证件号产生候选;总候选数 ≈ 规则数 × 证件数(去重)。一般 < 30 个,全跑 < 5 秒。
在 scripts/decrypt.py 加函数:
def rule_citibank_hk(i: Identity, id_value: str) -> str | None:
"""Citi HK:MMDDYY + ID 末 4 位"""
if not (i.birth_month and i.birth_day and i.birth_year_last2 and len(id_value) >= 4):
return None
return i.birth_month + i.birth_day + i.birth_year_last2 + id_value[-4:]
注册到 RULES 字典即可。每个新规则带:
citi-hk)(Identity, id_value: str) -> str | None(不能算时返回 None)新规则上线前先用 --issuer <new-rule> 验证至少一份历史 PDF 能解开。
1. 用户给加密 PDF 路径(无密码)
2. CC 跑:python3 ~/.claude/skills/pdf-decrypt/scripts/decrypt.py <path>
3. 输出 <path>-decrypted.pdf
4. CC 用 Read 读解密后 PDF,回答用户问题
不要:
全规则都失败:报告候选数 + 让用户给密码(--password),或问规则细节加进规则库。
源码:~/Dev/tools/cc-configs/skills/pdf-decrypt/
分发:~/.claude/skills/pdf-decrypt/(symlink,install.sh 自动建)
并行 agent team 处理多目标任务,每个 agent goal-loop 自闭环;产出 HTML 报告给用户看。用户说 "dispatch / 派 agent / agent team 做 / 多并行 / 一次性处理 N 个 / 全部一次性 / 不留尾巴 / 目标驱动并发 / P1=N 直接" 等触发。
管理钉钉产品能力(AI表格/日历/通讯录/群聊与机器人/待办/审批/考勤/日志/DING消息/开放平台文档/钉钉文档/钉钉云盘/AI听记/邮箱/在线电子表格/知识库等)。当用户需要操作表格数据、管理日程会议、查询通讯录、管理群聊、机器人发消息、创建待办、提交审批、查看考勤、提交日报周报(钉钉日志模版)、读写钉钉文档、上传下载云盘文件、查询听记纪要、收发邮件、读写在线电子表格(axls)、管理钉钉知识库时使用。
作图默认方法 — 自包含 HTML/SVG 所见即所得预览(多样式)→ 用户批准 → 导出 SVG+PNG+PDF 多格式 + 带下载/复制按钮的 HTML。任何"作图/可视化/改样式/好看点/热图/出图/preview"触发;尤其投稿级、需反复调样式、用户给旧图截图要复刻的场景。
一条命令出 session 现状 + ROI 全景 HTML(包装 cc_sessions.py index + regen_dev_roi.py,输出规范 /debrief 风 HTML,含 vault nav + KPI clickable + per-project 表)。用户说「列会话 / session 现状 / 会话 ROI / sessions / /sessions / 看下 session / 清理候选」时触发
文件清理族 — downloads 子命令把 ~/Downloads 顶层 entry 按规则派送到 ~/Dev / personal-vault;zip 子命令把 ~/Dev 下 raw 归档(.zip/.rar/.7z)外挪到 ~/zip/<Dev 镜像>,原位置留 _ZIP-INDEX.md 指针。触发:整理下载目录 / Downloads 太乱 / 下载里的东西归一下 / zip 外挪 / 归档外挪 / Dev 太臃肿 / 把压缩包挪走 / raw 归档清理。
把一批散落的 retro/会话记录按主题线合并成少数 HTML 知识节点(起因→迭代→现状),原文归档到 _archive,织入 wiki 知识网。用户说"4月所有会话讲了啥+修到哪""合并/整合 retro 不要思维负担""摘要这些 retro/会话"时触发。