ai-tutor
無料AI 初学者导师。抓取 AI 大厂最新博客(Anthropic/OpenAI/Cursor),提炼成结构化深度精读笔记,直接存入 CherryStudio 笔记目录。笔记包含术语百科、核心原理解析(含关键图表)、学习重点、知识关联和行业简报。调用方式:/ai-tutor(默认 Anthropic),/ai-tutor openai,/ai-tutor cursor。
日本語の概要は準備中です。原文の説明を表示しています。
Discuss a community-edition product requirement with the user, draft a bilingual (Chinese + English) PRD for review, then — after explicit user approval — create the English-only issue on GitHub (<OWNER/REPO>). Use whenever the user wants to turn a requirement (from a Feishu doc, a meeting note, a customer ask, or a rough idea) into a GitHub issue. Triggers on phrases like "create requirement doc", "create a requirement", "put this requirement on GitHub", "create new feature issue", "draft an issue for...", or anytime the user describes a product feature/improvement they want tracked. The format is opinionated (Background / Goal / Spec / Verification / Related, NO implementation details, draft shown bilingually for human review, issue itself written in English only).
インストールする前に、エージェントに与えられる指示の中身を確認できます。
This skill helps a PM and an AI agent collaborate on a product requirement, draft it bilingually for review, and only then publish the English version as a GitHub issue. The issues are read by both human developers and Claude Code, so the body sticks to product logic plus concrete verification cases — never implementation details.
The skill is a conversation, not a one-shot generator. The flow is:
#xxxx) ground the requirement in actual pain.## Background
(1-3 sentences. The user pain. Why does this need to exist? Concrete scenarios beat abstractions — name the symptom users see. Must reflect verified product state, not guessed behavior.)
## Goal
(One sentence. The product outcome — what users will be able to do after this ships.)
## Spec
(3-6 bullets. The product-level logic, written as user-observable behavior — the *rules*. Each bullet is a behavior the product exhibits. NO file paths, NO data structures, NO library names, NO "use Redux", NO "modify X.ts".)
## Verification
(3-8 bullets. Concrete *instances* that prove the Spec works. Different from Spec — Spec is rules, Verification is specific cases. Focus on:
- Specific input → expected observable output (named values, not abstract "X → Y")
- Multi-step sequences (first do A, then B, expect C)
- Edge cases: empty / very long / concurrent / offline / multi-window
- Negative checks (after X, Y should NOT happen)
- Target screenshot description for UI work — describe what the user sees, not which component renders it
If a Verification bullet 1:1 mirrors a Spec bullet, delete it. Verification stays at the product/UX level too.)
## Related
(Linked GitHub issues that report the same pain or are tangential. Format as `#1234 #5678 ...`. PRs go on a separate line prefixed `PRs:`.)
Title format: [Feature]: <Title in Title Case>
When showing the user a draft, use this layout. English is the source of truth (it's what gets published); Chinese is the gloss for review.
**Title (英)**: [Feature]: ...
**Title (Chinese)**: ...
---
### Background / 背景 (Background)
**EN:**
> ...
**ZH:**
> ...
### Goal / 目标 (Goal)
**EN:**
> ...
**ZH:**
> ...
### Spec / 具体逻辑 (Spec)
**EN:**
> - bullet 1
> - bullet 2
**ZH:**
> - Item 1
> - Item 2
### Verification / 验证 (Verification)
**EN:**
> - case 1
**ZH:**
> - Case 1
### Related / 相关 (Related)
#1234 #5678
End every draft with: "Confirm this version goes to GitHub. Which sentence needs changing?" (or English equivalent if the user is using English).
If the user opens with a vague requirement, ask up to 3 clarifying questions before drafting. Useful questions:
gh issue list --search)If the user already gives enough detail — or if the requirement is concrete enough that you can pick a research keyword without asking — skip questions and go straight to step 2 (research). Don't gate research behind clarifying questions; partial research findings are often the best clarifying questions.
Do this every time, even when the requirement looks obvious. Three parallel searches, then synthesize before drafting. This phase is what prevents misframed Backgrounds — and surfaces related work the user didn't mention.
Cherry issues are bilingual, so search both languages:
gh search issues "<EN keyword>" --repo <OWNER/REPO> --state all --limit 20
gh search issues "<Chinese keyword>" --repo <OWNER/REPO> --state all --limit 20
Also check Project #3:
gh api graphql -f query='query{organization(login:"<OWNER>"){projectV2(number:3){items(first:50){nodes{content{__typename ... on Issue{number title state}}}}}}}'
For top candidates, read full content:
gh issue view <number> --repo <OWNER/REPO> --json title,body,state,comments
Look for: actual user pain (not just title), workarounds users mention (they reveal the real gap), and closed issues with similar titles (often contain the proposed-but-not-shipped solution).
If a strong duplicate exists, recommend reusing it: "Issue #N already covers this — I suggest updating its body rather than creating a duplicate. Proceed with reuse?" Only create new if the user explicitly chooses.
gh search prs "<keyword>" --repo <OWNER/REPO> --state all --limit 20
For any closed-but-not-merged PR that looks related, read it:
gh pr view <number> --repo <OWNER/REPO> --json title,body,state,closedAt,comments
The "why was this abandoned" answer is often the real constraint behind the new requirement. Merged PRs that touch the same area also matter — they tell you what already shipped, so Background doesn't claim "users can't do X" when X partially works.
If you have the product repo checked out locally, use the Grep tool. Otherwise:
gh search code "<keyword>" --repo <OWNER/REPO> --limit 20
Look for what's actually wired up in packages/aiCore/, the feature area's components, and any feature flags. The point is to know the current shape of the product before claiming what's missing.
After 2A+2B+2C, post a short brief to the user — do NOT skip straight to a draft:
Research findings before I draft:
- Related open issues: #1234 (same pain, 12 reactions), #5678 (adjacent — UI for X)
- Closed PR #9012 attempted this in 2024-08, abandoned because <reason from PR comments>
- Current state in code: feature is gated by <flag> and only handles <case>
Draft against this picture, or did I miss/misframe something?
If findings contradict the user's framing, flag it explicitly — don't paper over it:
"I read #13625 and the agent code — the real constraint is X, not Y as we discussed. Should I draft against that?"
Concrete failure mode this prevents: the OpenAI/Anthropic interop PRD almost shipped with a generic "endpoint format mismatch" framing until research revealed the real pain was Agent mode's hard dependency on Anthropic-format endpoints — a much sharper, more actionable framing.
Write English first (it's the source of truth), then mirror in Chinese for review.
Default examples / lexicon when concrete values are needed:
<PrimaryProvider> (not OpenRouter — product-first)gpt-5.5 at time of writing — not gpt-4o, which is too old to be a credible Agent example)Claude Sonnet (most recent generation)packages/aiCore/ for what's actively wired upStale or off-brand examples damage the document's credibility — readers calibrate trust on whether the PM/agent knows what shipped recently.
Keep these instincts in mind:
Run this checklist mentally on every draft:
src/, packages/, .ts, .tsx, useEffect, Redux, Drizzle.)<PrimaryProvider> as primary; model examples are the latest generation, not legacy.When the user revises one section, proactively check whether sibling sections need updating before re-showing the draft.
Trigger questions to ask the user when appropriate:
Don't blindly carry old sections forward when the framing shifts. The OpenAI/Anthropic interop PRD went through exactly this — Background was sharpened (Agent unlock as primary pain), and Goal/Spec/Verification all needed re-pivoting to match.
Loop until explicit confirmation ("confirm / OK / ship it / yes ship it"). Don't auto-create on a single "looks good" — wait for an unambiguous "build it" signal.
After the user has said "build it" but before gh issue create — do one last pass on the Related line. The list often grew across iterations, and an issue that seemed relevant at draft time may turn out tangential, already-fixed, or duplicated by another link on closer read.
For each #NNNN in Related (and any PRs on a PRs: line):
gh issue view <N> --repo <OWNER/REPO> --json title,state,body,closedAt,stateReason
Check four things:
closed with stateReason: COMPLETED, the pain it reports may already be fixed; either drop it or keep it with a note ("originally raised in #X, partially shipped, this requirement extends it").If any link is weak, or any look subsumable, surface it before submitting:
"Re-checked Related:
- #11420 still spot-on, keeping.
- #12057 is actually about exporting memory, not persistence — different feature. Drop from Related?
- #6388 and #11420 look fully covered by this PRD. Close them after we create the new issue, with a
Tracked in #NEWcomment? (Or keep them open if you want to preserve the discussion threads.)"
After the user confirms the final Related list and the subsume list, proceed to Step 7. Do not silently re-write Related or pre-commit to closing old issues without telling the user — they may have a reason for keeping a tangential link (e.g., a stakeholder asked for it) or for keeping an old thread open.
This step is fast (most lists are 2-4 items) and catches a common embarrassment: shipping an issue that lists #X as "Related" when #X was actually closed last week as fixed.
Once confirmed, write the English-only body to a temp file and create:
cat > /tmp/req-body.md << 'BODY_EOF'
## Background
...
BODY_EOF
gh issue create --repo <OWNER/REPO> \
--title "[Feature]: <title>" \
--body-file /tmp/req-body.md
If the user has already specified a milestone, add --milestone "v2.1.0".
After creation, immediately add the issue to Project #3 and set its fields. This is part of the skill's job — do not leave it as "manual TODO for the user".
PROJECT_ID="PVT_kwDOCzFCf84A1VHU"
STATUS_FIELD="PVTSSF_lADOCzFCf84A1VHUzgq0WB4"
FEATURE_TODO_OPTION="78aaad35"
PRIORITY_FIELD="PVTSSF_lADOCzFCf84A1VHUzgq0WFk"
# Priority option IDs: P0=55393b39, P1=c2301f11, P2=dcd3a7ad
ISSUE_NODE=$(gh api repos/<OWNER/REPO>/issues/<NUMBER> -q ".node_id")
ITEM_ID=$(gh api graphql -f query="mutation{addProjectV2ItemById(input:{projectId:"$PROJECT_ID",contentId:"$ISSUE_NODE"}){item{id}}}" -q ".data.addProjectV2ItemById.item.id")
gh api graphql -f query="mutation{
s:updateProjectV2ItemFieldValue(input:{projectId:"$PROJECT_ID",itemId:"$ITEM_ID",fieldId:"$STATUS_FIELD",value:{singleSelectOptionId:"$FEATURE_TODO_OPTION"}}){projectV2Item{id}}
p:updateProjectV2ItemFieldValue(input:{projectId:"$PROJECT_ID",itemId:"$ITEM_ID",fieldId:"$PRIORITY_FIELD",value:{singleSelectOptionId:"<PRIORITY_OPTION_ID>"}}){projectV2Item{id}}
}"
Then output the issue URL with a one-line confirmation: "Added to Project #3 with Status=Feature Todo, Priority=Px, Milestone=vX.Y.Z."
If the GraphQL call fails with a permissions error, ask the user to grant the current gh account Write access on Project #3, then retry. Do not silently fall back to "user does it manually" — that loses the workflow.
If Step 6 produced a confirmed subsume list — old issues whose pain is fully covered by the new PRD — close them now, after the new issue exists (so we can reference its number).
For each subsumed issue #OLD:
# 1. Comment on the old issue, pointing to the new one
gh issue comment <OLD> --repo <OWNER/REPO> --body "Tracked in #<NEW> — the new requirement fully covers the pain reported here. Closing as superseded; please follow #<NEW> for progress, and reopen this if you feel anything is missing."
# 2. Close it as not-planned (since it's superseded, not literally completed by code)
gh issue close <OLD> --repo <OWNER/REPO> --reason "not planned"
Notes:
--reason "not planned" — completed implies code shipped, which isn't true yet at this point. not planned (with a clear comment) reads correctly as "we're tracking this elsewhere now".Related line should still list these old issue numbers — the link in both directions makes it findable from either end.After this step, output a one-liner:
"Created #<NEW>, added to Project #3, closed #<OLD1> #<OLD2> as superseded."
gh issue edit <number> --repo <OWNER/REPO> \
--title "[Feature]: <new title>" \
--body-file /tmp/req-body.md \
--milestone "v2.1.0"
The original body content is overwritten — comments stay since --body only replaces the description.
User input (raw):
"我想加一个跨会话的 memory,让 AI 在不同对话间记住用户的偏好。现有 memory 只在单次会话内有效。优先级 P0,V2 之后马上做。相关 issue 我没有,你帮我看看。"
Research findings posted to user before drafting (Step 2D):
我搜了一下,先把背景同步给你:
- 相关 open issues: #6388 (现有 single-session Memory 的设计 issue)、#11420 (用户反馈:"AI 老是忘记我说过的事",47 reactions)、#12057 (要求 export memory 的 issue,作为参考)。
- PR 历史: #10832 在 2024-10 尝试过类似的 cross-session 持久化,被 close 了 — comments 里说当时 RAG pipeline 还不稳定,担心检索噪音污染回答。这个约束今天还存在吗值得留意。
- 代码现状: Memory 当前实现在
packages/memory/,只有 in-conversation context window,没有持久层;packages/aiCore/里已经接好了 vector store 抽象,可以复用。按这个画面起草,还是哪里我搞错了?
(用户确认后,进入起草。)
Bilingual draft shown to user:
**Title (英)**: [Feature]: Cross-session Memory
**Title (Chinese)**: Cross-session Memory
---
### Background / 背景 (Background)
**EN:**
> The product's existing Memory feature only retains information within a single conversation. Users who switch topics or start new sessions lose context they've shared (preferences, ongoing project details, recurring facts), forcing them to re-explain themselves repeatedly.
**ZH:**
> The product's existing Memory only retains information within a single session. When users switch topics or start new sessions, previously shared preferences, project details, and long-term facts are lost, forcing users to repeat themselves.
### Goal / 目标 (Goal)
**EN:**
> Users can persist memory across all conversations, so the AI naturally remembers preferences, facts, and context regardless of which topic the user is in.
**ZH:**
> Users can persist memory across all conversations, so the AI remembers preferences, facts, and context regardless of topic.
### Spec / 具体逻辑 (Spec)
**EN:**
> - Users can explicitly mark information to be remembered across sessions, surfaced in the conversation when the AI commits it to long-term memory.
> - In any new conversation, the AI automatically retrieves relevant cross-session memory and incorporates it into responses.
> - Users can view, edit, and delete cross-session memory entries from a dedicated settings panel.
> - Cross-session memory persists across app restarts.
**ZH:**
> - Users can explicitly mark information to remember across sessions, with the AI indicating in conversation when it commits to long-term memory.
> - In any new conversation, the AI automatically retrieves relevant cross-session memory and incorporates it into responses.
> - Users can view, edit, and delete cross-session memory entries from a dedicated settings panel.
> - Cross-session memory persists across app restarts.
### Verification / 验证 (Verification)
**EN:**
> - In conversation A, user says "I'm a data scientist, I mainly use Python." Start conversation B and ask "recommend me learning resources" — response should target data science / Python without re-asking the user's role.
> - User toggles cross-session memory off in settings → new conversations show no retrieved memory entries and behave like a clean session.
> - Conflicting statements: in conversation A say "I use Python", later say "I use Go" — subsequent conversations should reflect the most recent statement, not both.
**ZH:**
> - In conversation A, user says "I am a data scientist, mainly use Python". New conversation B asks "recommend learning resources" — response should target data science/Python without re-asking user role.
> - User toggles cross-session memory off in settings → new conversations show no retrieved memory entries and behave like a clean session.
> - Conflicting statements: conversation A says "I use Python", later says "I use Go" — subsequent conversations should reflect the most recent statement, not both.
### Related / 相关 (Related)
#6388 (existing single-session Memory)
gh calls.まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
AI 初学者导师。抓取 AI 大厂最新博客(Anthropic/OpenAI/Cursor),提炼成结构化深度精读笔记,直接存入 CherryStudio 笔记目录。笔记包含术语百科、核心原理解析(含关键图表)、学习重点、知识关联和行业简报。调用方式:/ai-tutor(默认 Anthropic),/ai-tutor openai,/ai-tutor cursor。
日本語の概要は準備中です。原文の説明を表示しています。
标书文档分析与评估。当用户上传招标文件(.pdf/.docx/.doc/.xlsx)或明确要求「分析标书」「评估投标」「检查合规性」「标书评分」「废标风险」「技术方案评估」时使用。支持解析、评分计算、合规检查、废标风险识别,自动生成 Markdown 报告。版本 3.0
日本語の概要は準備中です。原文の説明を表示しています。
投标书模板填充引擎。当用户明确要求「填模板」「写标书」「出标书」「生成投标文件」「标书填充」「套模板」「做标书」,或提供了脱敏 DOCX 模板需要填充时使用。扫描模板中的占位符和虚拟文本,提取招标信息、收集投标人数据、构建替换映射、执行填充,输出可直接提交的成品标书。覆盖商务标+技术标+报价书全部章节。
日本語の概要は準備中です。原文の説明を表示しています。
This skill should be used when the user asks to "优化简历", "resume optimization", "简历诊断", "tailor resume to JD", "改简历", "resume review", "简历优化助手", or when the user mentions "校招", "社招", "ATS", "JD匹配", "Word批注", shares a .docx resume path alongside a job description, or wants to match their resume to a specific job posting. Also triggers on "resume expert", "HR feedback", "interview prep with resume".
日本語の概要は準備中です。原文の説明を表示しています。
Full lifecycle expense reimbursement: single invoice intake and staging, batch aggregation to generate reimbursement drafts, approval workflow, ledger and dashboard. Trigger when user mentions reimbursement, expenses, invoices, travel reimbursement, approval workflow, or needs to organize / verify / approve expense records. Also applies when user needs to enter invoices, view reimbursement dashboards, ledgers, or compliance checks.
日本語の概要は準備中です。原文の説明を表示しています。
面试复盘 skill(求职者视角)。把一次已结束的面试,从「文字记录」沉淀成结构化复盘:逐题诊断 + 5 维评分 + 更优回答范本 + 下一场准备清单,最终产出一份飞书复盘文档。当用户说"面试复盘"、"复盘一下面试"、"刚面完 XX 帮我盘下"、"这场面试哪答崩了"、"面试问答记录帮我分析"时触发。区别于 resume-optimizer / cv-expert(面试前优化简历),本 skill 处理「面完之后」。
日本語の概要は準備中です。原文の説明を表示しています。