with one click
autopku
AutoPku - 自动获取PKU课程通知、完成作业、撰写笔记
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
AutoPku - 自动获取PKU课程通知、完成作业、撰写笔记
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
| name | autopku |
| description | AutoPku - 自动获取PKU课程通知、完成作业、撰写笔记 |
自动处理北京大学课程相关任务:同步通知、完成作业、撰写笔记。
文件位置: .claude/settings.local.json(项目根目录)
{
"permissions": {
"allow": ["Skill(update-config)", "Bash(*)"],
"deny": ["Bash(rm:*)", "Bash(rm -rf:*)"],
"defaultMode": "bypassPermissions"
},
"env": {
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1",
"USER_TYPE": "ant"
}
}
本地配置仅在本项目目录生效,不会影响其他目录的 Claude Code 行为。
Kimi Code CLI 用户: 建议设置环境变量 KIMI_CODE_CLI=1 以启用 Kimi Agent Team 支持(或通过 which kimi 自动检测)。
文件位置: ~/.claude/settings.json
内容同上。全局配置会在所有目录生效,每次打开 Claude Code 都会显示 bypass 模式警告。除非你只在本机使用 AutoPku,否则不推荐。
| 配置项 | 说明 |
|---|---|
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS | 启用 Agent Team 并行处理功能 |
USER_TYPE | 用户类型标识(ant 为开发测试账号) |
permissions.allow | 允许使用的工具 |
permissions.deny | 禁止使用的工具(安全保护) |
defaultMode | 默认权限模式 |
直接告诉我要做什么:
| 用户意图示例 | 执行的任务 |
|---|---|
| "同步课程通知" / "看看有什么作业" | 同步所有课程通知和作业 |
| "完成量子力学的第五次作业" | 完成指定课程作业(解析→解答→渲染→询问→提交) |
| "给逻辑导论写笔记" | 从课件提取数学核心内容撰写笔记 |
| "写马原课程论文" / "生成论文" | 生成课程论文(大纲→正文→渲染→询问) |
| "给XX课做个汇报PPT" / "生成幻灯片" | 基于课件/笔记/论文生成汇报幻灯片(Typst PDF) |
执行时自动检测运行环境:
import os
import shutil
if os.environ.get("CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS"):
RUNTIME = "claude" # 使用 Agent() tool + SendMessage()
elif os.environ.get("CODEX") == "1":
RUNTIME = "codex" # 使用 native subagents
elif os.environ.get("KIMI_CODE_CLI") == "1" or os.environ.get("KIMI") == "1" or shutil.which("kimi"):
RUNTIME = "kimi" # 使用 Kimi Agent() + TaskList/TaskOutput
else:
RUNTIME = "serial" # 串行执行
根据用户意图,引用对应的 task skill:
用户: "同步课程通知"
↓
引用: sub-skills/tasks/sync-notices.md
↓
执行同步流程
用户: "完成作业"
↓
引用: sub-skills/tasks/do-homework.md
↓
执行作业流程(含用户确认)
用户: "写笔记"
↓
引用: sub-skills/tasks/write-notes.md
↓
执行笔记撰写流程
用户: "写论文" / "生成课程论文"
↓
引用: sub-skills/tasks/write-paper.md
↓
执行论文生成流程(大纲→正文→渲染→询问)
用户: "制作幻灯片" / "生成汇报PPT"
↓
引用: sub-skills/tasks/make-slides.md
↓
执行幻灯片生成流程(提取→大纲→生成→渲染→询问)
主 skill 根据 RUNTIME 创建 agents:
# Claude Code 环境
for config in agent_configs:
Agent({
"name": config["name"],
"prompt": config["task"],
"description": config.get("description", "")
})
# Kimi Code CLI 环境
for config in agent_configs:
Agent({
"description": config.get("description", ""),
"prompt": config["task"],
"subagent_type": config.get("subagent_type", "coder")
})
# Codex 环境
# 使用自然语言描述并行 subagent 任务
# 其他环境
# 串行执行
# 检查是否已安装
which pku3b 2>/dev/null || echo "NOT_FOUND"
# 未安装时执行(macOS Apple Silicon 示例)
cd /tmp
curl -LO "https://github.com/sshwy/pku3b/releases/download/0.11.0/pku3b-0.11.0-aarch64-apple-darwin.tar.gz"
tar -xzf pku3b-0.11.0-aarch64-apple-arm64.tar.gz
chmod +x pku3b-0.11.0-aarch64-apple-darwin/pku3b
ln -sf pku3b-0.11.0-aarch64-apple-darwin/pku3b pku3b
./pku3b --version
重要:
sshwy/pku3b (原 yang-er/pku3b 已失效)ann 和课表 ct 功能)expect脚本只在初始化执行一次。后续所有命令自动读取 cfg.toml 中的凭证。
步骤:
# 1. 检查是否已登录
/tmp/pku3b a ls 2>&1 || echo "NOT_LOGGED_IN"
如果已登录(正常返回作业列表),跳过步骤 2-4,直接进入任务。
如果返回 NOT_LOGGED_IN(凭证不存在或密码错误),执行步骤 2:
# 2. 使用 expect 脚本登录(TTY-safe)
cat > /tmp/pku3b_login.exp << 'EOF'
#!/usr/bin/expect -f
set timeout 30
spawn /tmp/pku3b init
expect "username:"
send "学号\r"
expect "password:"
send "密码\r"
expect eof
EOF
chmod +x /tmp/pku3b_login.exp
/tmp/pku3b_login.exp
# 3. 验证登录成功
/tmp/pku3b a ls
# 4. 立即覆写 expect 脚本,清除明文密码
echo "" > /tmp/pku3b_login.exp
踩坑: 直接管道输入会报错 "input device is not a TTY",必须使用 expect。
# 作业
/tmp/pku3b a ls --all-term # 所有学期作业(带ANSI颜色码)
/tmp/pku3b a download <ID> -d <dir> # 下载附件
/tmp/pku3b a submit <ID> <file> # 提交作业
# 公告 (v0.11.0+)
/tmp/pku3b ann ls # 列出公告
/tmp/pku3b ann show <ID> # 查看公告详情
# 课表 (v0.11.0+)
/tmp/pku3b ct -r # 获取课表 JSON
# 选课
/tmp/pku3b s -d major show # 主修课程(可能返回302,作为可选)
| Task | 文件 | 说明 |
|---|---|---|
| 同步通知 | tasks/sync-notices.md | 获取作业/公告,生成摘要,并行处理课程 |
| 完成作业 | tasks/do-homework.md | 解析PDF→解答→渲染→询问用户→提交 |
| 撰写笔记 | tasks/write-notes.md | 从课件提取数学核心,去除噪声 |
| 撰写论文 | tasks/write-paper.md | 从大纲到正文到编译,支持LaTeX/Word双模式 |
| 生成幻灯片 | tasks/make-slides.md | 基于pkusli模板生成Typst汇报幻灯片 |
| Tool | 文件 | 说明 |
|---|---|---|
| pku3b配置 | tools/pku3b-setup.md | 安装、登录、命令参考 |
| 数据解析 | tools/data-parser.md | ANSI颜色码处理、正则提取 |
| PDF读取 | tools/pdf-reader.md | PyMuPDF/pdfplumber 代码示例 |
| 图片处理 | tools/image-handler.md | 论文配图搜索、绘制与LaTeX插入 |
| Agent模板 | tools/agent-helpers.md | Coordinator/Parser/Solver/Writer/Submitter Prompts |
| 幻灯片渲染 | tools/slide-renderer.md | pkusli模板获取、main.typ组装、typst编译 |
| Runtime | 文件 | 说明 |
|---|---|---|
| 环境检测 | runtime/_detect.md | 自动检测 Claude/Codex/Kimi/Fallback |
| Agent 创建 | runtime/create-agent.md | 统一的跨平台 Agent 创建接口 |
| Claude Team | runtime/claude-team.md | Claude Code Agent Team 语法 |
| Codex Subagent | runtime/codex-subagent.md | Codex native subagent 语法 |
| Kimi Team | runtime/kimi-team.md | Kimi Code CLI Agent Team 语法 |
问题: 选课系统显示"未选上"但作业系统有记录(如"学术英语写作")。
解决: 从作业系统提取所有课程,对比选课系统,标注不一致状态。
| 情况 | 说明 | 示例 |
|---|---|---|
| 无附件 | 提交类作业无下载内容 | 操作系统(实验班) |
| 教学网无作业 | 使用Canvas/微信群 | 哲学导论、逻辑导论 |
| 体育课 | 通常无在线作业 | 太极拳 |
检查: grep "课程名" /tmp/pku_assignments_raw.txt | grep "附件"
--json 参数: pku3b 输出纯文本带ANSI颜色码,需正则解析pku3b a ls -a 不完整: 只显示有作业的课程,需用 pku3b s show 补全--all-term 返回所有历史学期: 需筛选当前学期完成作业前必须:
AskUserQuestion 让用户选择禁止: 自动选择最新作业、未经确认直接提交
test/
├── 通知摘要汇总.md
├── {course1}/
│ ├── 作业/ # 下载的附件
│ ├── 通知/ # 公告详情
│ ├── 资料/ # 课程资料
│ └── 通知摘要.md # 该课程摘要
└── {course2}/
└── ...
{course}/
├── 作业/
│ ├── Homework202605.pdf # 原题
│ ├── homework_parsed.json # 解析结果
│ ├── answers.json # 解答数据
│ ├── Homework202605_answer.md # Markdown答案
│ └── Homework202605_answer.pdf # PDF答案
└── 提交/ # 最终提交文件
└── Homework202605_answer.pdf
{course}/
└── slides/
├── main.typ # Typst 源文件
├── slides.pdf # 最终 PDF
├── outline.md # 幻灯片大纲
└── figures/ # 图片目录
└── ...
archive/archived-skill.md