Not in the top 1,000 by GitHub stars
beautfulmt/PM-K12--skills
产品经理从需求调研分析到 PRD、交互原型、功能验收与数据分析的完整工作流 Skill
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 9ffaeec62a55
No earlier version was observed for comparison.
Heat
5.3- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
How it works
edu-pm-workflow
When your agent uses it
Product management workflow for producing PRDs, interactive HTML prototypes, flowcharts, acceptance checklists, demand analysis, and data reports. Use when the user describes a product requirement, asks for PRD/prototype/flowchart/checklist/data-analysis output, or wants to continue this PM workflow.
What it loads into context
Frontmatter
75 tokensAlways available to the agent
SKILL.md
4,393 tokensWhen the skill is activated
Reference documents
67,784 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- First Decision
- Workflow Routing
- PRD Workflow Rules
- Optional Pencil Path
- Output Structure
- Customization
Scripts executed separately
assets/scripts/install_launcher.shassets/scripts/pm_bootstrap.pyassets/scripts/pm_launchagent.pyassets/scripts/pm_runtime.pyassets/scripts/prototype-export-client.jsassets/scripts/prototype_launcher.pyassets/scripts/prototype_server.pyassets/scripts/start_service.pyassets/scripts/validate_prd.pyassets/scripts/启动原型导出服务.batassets/scripts/启动原型导出服务.commandscripts/init.batscripts/init.shscripts/initialize.py
Files
.gitattributesasset811 bytes.gitignoreasset29 bytesREADME.mddoc14,362 bytesSKILL.mdcore18,559 bytesSKILL.mdcore18,559 bytesSKILL.mdcore18,559 bytesSKILL.mdcore18,559 bytesSKILL.mdcore18,559 bytesSKILL.mdcore18,559 bytesassets/config/mcp.json.exampleasset189 bytesassets/scripts/install_launcher.shruns2,417 bytesassets/scripts/pm_bootstrap.pyruns21,249 bytesassets/scripts/pm_launchagent.pyruns7,866 bytesassets/scripts/pm_runtime.pyruns7,707 bytesassets/scripts/prototype-export-client.jsruns12,260 bytesassets/scripts/prototype_launcher.pyruns7,118 bytesassets/scripts/prototype_server.pyruns55,437 bytesassets/scripts/start_service.pyruns3,510 bytesassets/scripts/validate_prd.pyruns11,240 bytesassets/scripts/启动原型导出服务.batruns1,714 bytesassets/scripts/启动原型导出服务.commandruns1,111 bytesassets/templates/pencil-draw-prompt.mddoc4,535 bytesassets/templates/prd-content.htmlasset7,224 bytesassets/templates/关键点.mddoc42,669 bytesassets/workflows/edu-pm-acceptance.mddoc3,232 bytesassets/workflows/edu-pm-data-analysis.mddoc3,222 bytesassets/workflows/edu-pm-demand.mddoc3,109 bytesassets/workflows/edu-pm-prd.mddoc159,670 bytesscripts/init.batruns1,382 bytesscripts/init.shruns1,162 bytesscripts/initialize.pyruns14,048 bytesscripts/known_hashes.jsonasset6,659 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubSkills included
- edu-pm-workflow
Repository facts
- License
- No license detected
- Created
- Apr 12, 2026
- Last pushed
- Sep 13, 2026
- Forks
- 31
- Open issues
- 0
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 6, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 5 notes
SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- No dangerous shell commands
- 70 network referencesin 14 files: assets/scripts/pm_bootstrap.py:234 assets/scripts/pm_runtime.py:60 assets/scripts/prototype-export-client.js:76 and 11 more
- No hidden or obfuscated text
- No instruction overrides
- 14 executable scriptsin 14 files: assets/scripts/install_launcher.sh:1 assets/scripts/pm_bootstrap.py:1 assets/scripts/pm_launchagent.py:1 and 11 more
- 12 references to secretsin 4 files: assets/scripts/pm_bootstrap.py:31 assets/scripts/prototype_server.py:43 assets/scripts/start_service.py:20 and 1 more
- No requests to vote in Hot
Show all 96 signals by file
README.md
- Network accessline 57
没装 Python 的话,入口脚本会停在窗口里告诉你去 <https://www.python.org/downloads/> 装 3.9+(Windows 安装时务必勾选 **Add python.exe to PATH**)。
SKILL.md
- Network accessline 74
- **Business flowcharts must NOT use Mermaid's default theme** (§4.1). `theme:'default'` produces saturated blocks with white text that clash with the light PRD shell. Use `theme:'base'` with the fixed `themeVariables` block (near-white nod - Network accessline 75
- **Zero text overlap is a hard gate for both diagrams, not a best effort** (§4.3 ②, §4.6 ③④). Fix order when the audit fails: enlarge the canvas → widen gaps → reroute/add rails → split into two canvases. Never fix overlap by shrinking typ - Network accessline 76
- **Anything the PRD does over `http://` must survive an insecure context.** On the intranet `navigator.clipboard`, `ClipboardItem` and `showSaveFilePicker` do not exist: copy paths need an `execCommand` fallback and save degrades to downlo
assets/scripts/install_launcher.sh
- Executable scriptline 1
#!/bin/bash - Network accessline 29
done if [ -z "$PY" ]; then echo "❌ 没找到 python3,请先安装 Python 3.9+(https://www.python.org/downloads/)" - Network accessline 30
if [ -z "$PY" ]; then echo "❌ 没找到 python3,请先安装 Python 3.9+(https://www.python.org/downloads/)" exit 1 - Network accessline 31
echo "❌ 没找到 python3,请先安装 Python 3.9+(https://www.python.org/downloads/)"
assets/scripts/pm_bootstrap.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 31
[Credential-related source omitted] - Access to secretsline 55
[Credential-related source omitted] - Access to secretsline 59
[Credential-related source omitted] - Access to secretsline 140
[Credential-related source omitted] - Network accessline 234
raise RuntimeError( "找不到可用的 Python 3.9+。\n" " macOS:从 https://www.python.org/downloads/ 安装,或执行 brew install python\n" - Network accessline 235
"找不到可用的 Python 3.9+。\n" " macOS:从 https://www.python.org/downloads/ 安装,或执行 brew install python\n" " Windows:在应用商店或 https://www.python.org/downloads/ 安装," - Network accessline 236
" macOS:从 https://www.python.org/downloads/ 安装,或执行 brew install python\n" - Network accessline 237
" Windows:在应用商店或 https://www.python.org/downloads/ 安装," - Network accessline 256
raise RuntimeError( "安装 playwright 失败。若公司网络需要代理,请先设置后重试:\n" " macOS:export HTTPS_PROXY=http://代理地址:端口\n" - Network accessline 257
"安装 playwright 失败。若公司网络需要代理,请先设置后重试:\n" " macOS:export HTTPS_PROXY=http://代理地址:端口\n" " Windows:set HTTPS_PROXY=http://代理地址:端口") - Network accessline 258
" macOS:export HTTPS_PROXY=http://代理地址:端口\n" - Network accessline 259
" Windows:set HTTPS_PROXY=http://代理地址:端口") - Network accessline 299
import socket for _ in range(attempts): with socket.socket() as probe: - Network accessline 300
for _ in range(attempts): with socket.socket() as probe: probe.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - Network accessline 301
with socket.socket() as probe: - Network accessline 327
raise RuntimeError("已有服务的读写模式与本次请求不一致,请先停止它") if verbose: print(f" ✅ 当前项目服务已在运行:http://127.0.0.1:{config['port']}") - Network accessline 328
if verbose: print(f" ✅ 当前项目服务已在运行:http://127.0.0.1:{config['port']}") return "already-running", config - Network accessline 329
print(f" ✅ 当前项目服务已在运行:http://127.0.0.1:{config['port']}") - Network accessline 415
for key, label in (("port", "服务端口"), ("launcher_port", "启动器端口")): port = int(config[key]) with socket.socket() as probe: - Network accessline 416
port = int(config[key]) with socket.socket() as probe: probe.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - Network accessline 417
with socket.socket() as probe: - Access to secretsline 472
[Credential-related source omitted]
assets/scripts/pm_launchagent.py
- Executable scriptline 1
#!/usr/bin/env python3
assets/scripts/pm_runtime.py
- Executable scriptline 1
Executable file - Network accessline 60
[Credential-related source omitted] - Network accessline 61
[Credential-related source omitted] - Network accessline 62
"server": "http://127.0.0.1:" + str(config["port"]), - Network accessline 63
"launcher": "http://127.0.0.1:" + str(config["launcher_port"]), - Network accessline 157
try: with local_opener().open(f"http://127.0.0.1:{port}/api/health", timeout=timeout) as response: - Network accessline 158
with local_opener().open(f"http://127.0.0.1:{port}/api/health", timeout=timeout) as response: - Network accessline 169
None, "null", "http://127.0.0.1", - Network accessline 170
"null", "http://127.0.0.1", "http://localhost", - Network accessline 171
"http://127.0.0.1", - Network accessline 172
"http://localhost", - Network accessline 173
"http://127.0.0.1:" + str(port), - Network accessline 174
"http://localhost:" + str(port), - Network accessline 181
if origin in ("http://127.0.0.1", "http://localhost"):
assets/scripts/prototype-export-client.js
- Executable scriptline 1
Executable file - Network accessline 76
const timer = setTimeout(() => controller.abort(), 120000); try { const response = await fetch(url, { - Network accessline 77
try { const response = await fetch(url, { method: payload === undefined ? 'GET' : 'POST', - Network accessline 78
const response = await fetch(url, { - Network accessline 97
async function health() { const response = await fetch(server + '/api/health', { - Network accessline 98
const response = await fetch(server + '/api/health', {
assets/scripts/prototype_launcher.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 34
[Credential-related source omitted] - Network accessline 58
origin = self.headers.get("Origin") return origin_allowed(origin, config["launcher_port"]) or origin in ( f"http://127.0.0.1:{config['port']}", f"http://localhost:{config['port']}") - Network accessline 60
f"http://127.0.0.1:{config['port']}", f"http://localhost:{config['port']}") - Network accessline 135
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM, fileno=os.dup(fd))
assets/scripts/prototype_server.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 43
[Credential-related source omitted] - Access to secretsline 49
[Credential-related source omitted] - Access to secretsline 50
[Credential-related source omitted] - Network accessline 56
SERVER_URL = f"http://127.0.0.1:{PORT}" - Network accessline 1298
CONFIG = reroll_ports(PROJECT_DIR, CONFIG) PORT = int(CONFIG["port"]) SERVER_URL = f"http://127.0.0.1:{PORT}" - Network accessline 1300
SERVER_URL = f"http://127.0.0.1:{PORT}" - Access to secretsline 1325
[Credential-related source omitted] - Network accessline 1344
pass except _AlreadyRunning as error: print(f" ✅ 本项目的导出服务已在运行:http://127.0.0.1:{error}") - Network accessline 1346
print(f" ✅ 本项目的导出服务已在运行:http://127.0.0.1:{error}")
assets/scripts/start_service.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 20
[Credential-related source omitted] - Network accessline 66
open_browser=args.open_browser, allow_download=not args.no_download) if args.background and result == "launched": print(f"✅ 服务已在后台启动:http://127.0.0.1:{config['port']}") - Network accessline 67
if args.background and result == "launched": print(f"✅ 服务已在后台启动:http://127.0.0.1:{config['port']}") return result if isinstance(result, int) else 0 - Network accessline 68
print(f"✅ 服务已在后台启动:http://127.0.0.1:{config['port']}") - Access to secretsline 80
[Credential-related source omitted]
assets/scripts/validate_prd.py
- Executable scriptline 1
#!/usr/bin/env python3
assets/scripts/启动原型导出服务.bat
- Executable scriptline 1
Executable file - Network accessline 41
echo Python 3.9 or newer was not found. echo. echo 1. Install it from https://www.python.org/downloads/ - Network accessline 42
echo. echo 1. Install it from https://www.python.org/downloads/ echo 2. During setup, CHECK the box "Add python.exe to PATH" - Network accessline 43
echo 1. Install it from https://www.python.org/downloads/
assets/scripts/启动原型导出服务.command
- Executable scriptline 1
#!/bin/bash - Network accessline 25
echo "" echo "请安装 Python 3.9 以上版本,二选一:" echo " 1. 打开 https://www.python.org/downloads/ 下载安装包" - Network accessline 26
echo "请安装 Python 3.9 以上版本,二选一:" echo " 1. 打开 https://www.python.org/downloads/ 下载安装包" echo " 2. 已装 Homebrew 的话,在终端执行:brew install python" - Network accessline 27
echo " 1. 打开 https://www.python.org/downloads/ 下载安装包"
assets/workflows/edu-pm-prd.md
- Network accessline 1088
PRD HTML 会被推到公司内网供多人浏览。内网是 `http://` 非 localhost,属**不安全上下文**——`navigator.clipboard`、`ClipboardItem`、`showSaveFilePicker` 一律不存在。不要按"我本机点着好使"就当功能可用。 - Network accessline 1090
| 能力 | 作者本机(`file://`) | 内网访客(`http://` 非 localhost) | - Network accessline 1617
if(window.exportPrototypeViaServer){ try{ await window.exportPrototypeViaServer(btn); return; }catch(e){ console.warn('服务导出失败,降级',e); } } try{ const {toBlob}=await import('https://cdn.jsdelivr.net/npm/html-to-image@1.11.11/+esm'); - Network accessline 1618
try{ const {toBlob}=await import('https://cdn.jsdelivr.net/npm/html-to-image@1.11.11/+esm'); const node=document.querySelector('.chart-container'), s=2; - Network accessline 1619
const {toBlob}=await import('https://cdn.jsdelivr.net/npm/html-to-image@1.11.11/+esm');
scripts/init.bat
- Executable scriptline 1
Executable file - Network accessline 39
echo Python 3.9 or newer was not found. echo. echo 1. Install it from https://www.python.org/downloads/ - Network accessline 40
echo. echo 1. Install it from https://www.python.org/downloads/ echo 2. During setup, CHECK the box "Add python.exe to PATH" - Network accessline 41
echo 1. Install it from https://www.python.org/downloads/
scripts/init.sh
- Executable scriptline 1
#!/bin/bash - Network accessline 23
echo "" >&2 echo "请二选一安装后重试:" >&2 echo " 1. 打开 https://www.python.org/downloads/ 下载安装包" >&2 - Network accessline 24
echo "请二选一安装后重试:" >&2 echo " 1. 打开 https://www.python.org/downloads/ 下载安装包" >&2 echo " 2. 已装 Homebrew 的话,执行:brew install python" >&2 - Network accessline 25
echo " 1. 打开 https://www.python.org/downloads/ 下载安装包" >&2
scripts/initialize.py
- Executable scriptline 1
#!/usr/bin/env python3
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Signal confidence: 96 facts
- Network access in prose of documentationREADME.md:57Low confidence
- Network access in prose of the SKILL.mdSKILL.md:74Low confidence
- Network access in prose of the SKILL.mdSKILL.md:75Low confidence
- Network access in prose of the SKILL.mdSKILL.md:76Low confidence
- Executable script in code of a file that runsassets/scripts/install_launcher.sh:1High confidence
- Network access in code of a file that runsassets/scripts/install_launcher.sh:29High confidence
- Network access in code of a file that runsassets/scripts/install_launcher.sh:30High confidence
- Network access in code of a file that runsassets/scripts/install_launcher.sh:31High confidence
- Executable script in code of a file that runsassets/scripts/pm_bootstrap.py:1High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueassets/scripts/pm_bootstrap.py:31Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueassets/scripts/pm_bootstrap.py:55Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueassets/scripts/pm_bootstrap.py:59Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueassets/scripts/pm_bootstrap.py:140Low confidence
- Network access in code of a file that runsassets/scripts/pm_bootstrap.py:234High confidence
- Network access in code of a file that runsassets/scripts/pm_bootstrap.py:235High confidence
- Network access in code of a file that runsassets/scripts/pm_bootstrap.py:236High confidence
- Network access in code of a file that runsassets/scripts/pm_bootstrap.py:237High confidence
- Network access in code of a file that runsassets/scripts/pm_bootstrap.py:256High confidence
- Network access in code of a file that runsassets/scripts/pm_bootstrap.py:257High confidence
- Network access in code of a file that runsassets/scripts/pm_bootstrap.py:258High confidence
- Network access in code of a file that runsassets/scripts/pm_bootstrap.py:259High confidence
- Network access in code of a file that runsassets/scripts/pm_bootstrap.py:299High confidence
- Network access in code of a file that runsassets/scripts/pm_bootstrap.py:300High confidence
- Network access in code of a file that runsassets/scripts/pm_bootstrap.py:301High confidence
- Network access in code of a file that runsassets/scripts/pm_bootstrap.py:327High confidence
- Network access in code of a file that runsassets/scripts/pm_bootstrap.py:328High confidence
- Network access in code of a file that runsassets/scripts/pm_bootstrap.py:329High confidence
- Network access in code of a file that runsassets/scripts/pm_bootstrap.py:415High confidence
- Network access in code of a file that runsassets/scripts/pm_bootstrap.py:416High confidence
- Network access in code of a file that runsassets/scripts/pm_bootstrap.py:417High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueassets/scripts/pm_bootstrap.py:472Low confidence
- Executable script in code of a file that runsassets/scripts/pm_launchagent.py:1High confidence
- Executable script in prose of a file that runsassets/scripts/pm_runtime.py:1Low confidence
- Network access in code of a file that runsassets/scripts/pm_runtime.py:60High confidence
- Network access in code of a file that runsassets/scripts/pm_runtime.py:61High confidence
- Network access in code of a file that runsassets/scripts/pm_runtime.py:62High confidence
- Network access in code of a file that runsassets/scripts/pm_runtime.py:63High confidence
- Network access in code of a file that runsassets/scripts/pm_runtime.py:157High confidence
- Network access in code of a file that runsassets/scripts/pm_runtime.py:158High confidence
- Network access in code of a file that runsassets/scripts/pm_runtime.py:169High confidence
- Network access in code of a file that runsassets/scripts/pm_runtime.py:170High confidence
- Network access in code of a file that runsassets/scripts/pm_runtime.py:171High confidence
- Network access in code of a file that runsassets/scripts/pm_runtime.py:172High confidence
- Network access in code of a file that runsassets/scripts/pm_runtime.py:173High confidence
- Network access in code of a file that runsassets/scripts/pm_runtime.py:174High confidence
- Network access in code of a file that runsassets/scripts/pm_runtime.py:181High confidence
- Executable script in a comment of a file that runsassets/scripts/prototype-export-client.js:1Low confidence
- Network access in code of a file that runsassets/scripts/prototype-export-client.js:76High confidence
- Network access in code of a file that runsassets/scripts/prototype-export-client.js:77High confidence
- Network access in code of a file that runsassets/scripts/prototype-export-client.js:78High confidence
and 46 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Frontmatter field user-invocable in SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.