[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-minimax-run-monitor":3,"mdc-3412gf-key":34,"related-repo-minimax-run-monitor":1536,"related-org-minimax-run-monitor":1641},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"run-monitor","monitor long-running local tasks","当用户有耗时较长的本地任务需要后台执行，说\"后台跑一下\"\"这个任务要跑很久\"\"帮我盯着这个任务\"\"任务跑完了吗\"\"看看日志\"时使用。本技能定义长任务 Run 抽象（核心设计：不让人机等任务、轮询不耗 token）：run 目录 runs\u002F\u003Crun_id>\u002F{run.json, stdout.log, stderr.log}，run.json 记录 {id, cmd, cwd, pid, started, status, exit_code}；配套纯标准库脚本 run_task.py 提供 start（detached 后台启动，Windows\u002FPOSIX 跨平台）、status（pid 存活检查 + 退出码）、list、tail 四个子命令。同义触发场景：长任务、后台运行、任务监控、看进度、训练还没跑完、批处理脚本。",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"minimax","MiniMax","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fminimax.jpg","MiniMax-AI",[13,17,20],{"name":14,"slug":15,"type":16},"Logs","logs","tag",{"name":18,"slug":19,"type":16},"Monitoring","monitoring",{"name":21,"slug":22,"type":16},"Automation","automation",5,"https:\u002F\u002Fgithub.com\u002FMiniMax-AI\u002FMiniMax-Code-Plugins","2026-08-21T03:59:01.783838",null,2,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"Community registry and contribution toolkit for MiniMax Code plugins.","https:\u002F\u002Fgithub.com\u002FMiniMax-AI\u002FMiniMax-Code-Plugins\u002Ftree\u002FHEAD\u002Fplugins\u002FHylouis233\u002Fopenscience\u002Fskills\u002Frun-monitor","---\nname: run-monitor\ndescription: >-\n  当用户有耗时较长的本地任务需要后台执行，说\"后台跑一下\"\"这个任务要跑很久\"\"帮我盯着这个任务\"\"任务跑完了吗\"\"看看日志\"时使用。本技能定义长任务 Run 抽象（核心设计：不让人机等任务、轮询不耗 token）：run 目录 runs\u002F\u003Crun_id>\u002F{run.json, stdout.log, stderr.log}，run.json 记录 {id, cmd, cwd, pid, started, status, exit_code}；配套纯标准库脚本 run_task.py 提供 start（detached 后台启动，Windows\u002FPOSIX 跨平台）、status（pid 存活检查 + 退出码）、list、tail 四个子命令。同义触发场景：长任务、后台运行、任务监控、看进度、训练还没跑完、批处理脚本。\nargument-hint: '[start|status|list|tail] [任务名]'\nmetadata:\n  domains: [compute]\n  last_reviewed: '2026-08-19'\n---\n\n# run-monitor：长任务 Run 管理\n\n## 目的\n\n本地长任务（模型训练、大批量数据处理、长时间仿真）最容易犯两个错：让人机会话**空等**任务结束（浪费上下文与时间），或者反复\"看看好了没\"**轮询刷屏**（每次都把日志灌进对话）。本技能的 Run 抽象解决这两点：\n\n1. 任务以 detached 子进程后台运行，启动后立即交还控制权——**不让人机等任务**；\n2. 状态落在磁盘文件（run.json + 日志）里，查询时只读摘要——**轮询不耗 token**；\n3. 状态机只有三态：`running | exited | failed`，配合退出码，一眼可判。\n\n本技能配套纯标准库脚本 `scripts\u002Frun_task.py`（Windows\u002FPOSIX 跨平台），任何能跑 Python 3 的机器都能用。远程任务的管理见 remote-compute \u002F hpc-slurm，本技能只管本地进程。\n\n## 前置检查\n\n1. 确认当前目录是工作区根目录：run 目录固定为 `.\u002Fruns\u002F\u003Crun_id>\u002F`，换目录启动等于另一套记录。\n2. 确认任务本身可以在非交互 shell 里跑通（先手动试跑一条短命令验证命令行正确），不要拿没验证过的命令直接后台化。\n3. run_id 命名 kebab-case（字母数字与 `-_.`），同一时刻同名 run 只能有一个在 running。\n4. 评估任务时长：秒级任务直接同步跑完即可，不必后台化；分钟级以上的任务才值得 start——Run 抽象的收益是\"不等任务\"，短任务没有等待可省。\n5. 确认命令的产物路径写在命令本身里（如 `--out output\u002F...`）：后台任务脱离会话上下文，事后靠 run.json 的 cmd 字段追溯\"它当时往哪写\"，路径不明的命令先补参数再启动。\n\n## 与各 skill 的分工\n\n- python-analysis \u002F r-analysis：分析规程本身；耗时超阈值时把执行环节交给本技能后台化。\n- remote-compute \u002F hpc-slurm：远程与集群任务的提交、抓回与登记；本技能只管**本地**进程，runs\u002F 不出本机（用本地 Run 登记 Slurm 作业状态查询的模式见 hpc-slurm 第 6 节）。\n- provenance-record：Run 只管进程状态，产物来源登记统一走 record_run，两者互补不替代。\n\n## Run 目录与 run.json schema\n\n```text\nruns\u002F\n└── \u003Crun_id>\u002F\n    ├── run.json      # 状态文件（唯一事实来源）\n    ├── stdout.log    # 标准输出（每次 start 截断重写）\n    └── stderr.log    # 标准错误\n```\n\nrun.json 字段如下（`tags`、`note` 仅在 start 带 `--tag`\u002F`--note` 时写入）：\n\n| 字段 | 含义 |\n| --- | --- |\n| id | run 名（即目录名） |\n| cmd | 执行的命令行 |\n| cwd | 启动时的工作目录 |\n| pid | 后台进程 pid（用于存活检查） |\n| started | 启动时间，ISO 8601 带时区 |\n| status | `running` \u002F `exited`（退出码 0）\u002F `failed`（非零或被强杀） |\n| exit_code | 退出码；running 或异常死亡时为 null |\n| tags | 可选：`--tag` 重复给出的标签数组（如 `[\"slurm\", \"gpu01\"]`），`list` 输出含 TAGS 列 |\n| note | 可选：`--note` 给的自由文本备注 |\n\n## 1 · start：后台启动\n\n```bash\npython \u003C插件包路径>\u002Fskills\u002Frun-monitor\u002Fscripts\u002Frun_task.py \\\n  start --name cycle-fit --cmd \"python scripts\u002Fanalyze_cycle.py --seed 42\"\n```\n\n- 启动方式跨平台 detached：POSIX 用 `start_new_session=True`（脱离控制终端），Windows 用 `DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP`；stdout\u002Fstderr 重定向到日志文件。\n- 启动成功后立即返回 pid 与 run 目录，**会话继续干别的，不要原地 sleep 等待**。\n- 同名 run 仍在 running 时拒绝重复启动（防止双跑写乱产物）；已结束的同名 run 可被新 start 覆盖（日志随之重写）。\n- `--tag`（可重复）与 `--note` 把标签与备注写进 run.json：跨项目、跨机器筛选用 tag（如 `--tag slurm --tag gpu01`，登记远程作业的模式见 hpc-slurm 第 6 节），背景说明用 note。\n\n## 2 · status \u002F list \u002F tail：轻量查询\n\n```bash\npython \u003C插件包路径>\u002F...\u002Frun_task.py status --name cycle-fit   # 单个 run 的状态\npython \u003C插件包路径>\u002F...\u002Frun_task.py list                       # 全部 run 一览\npython \u003C插件包路径>\u002F...\u002Frun_task.py tail --name cycle-fit --lines 20\n```\n\n- status 的判定：run.json 已记录终态则直接采信；仍为 running 时做 pid 存活检查（POSIX `os.kill(pid, 0)`，Windows `OpenProcess` + `GetExitCodeProcess`），pid 已死但没落终态（被强杀）则判 `failed`。\n- 查询结果只把**摘要**带进对话；需要看日志细节时用 `tail --lines N` 取末尾 N 行，不要整份 cat 进对话（日志可能上万行）。\n- 建议的查看节奏：任务启动后先交还控制权，用户问起或自然节点（如下一步依赖其结果）时再 status 一次；不写忙等循环。\n\n## 3 · 任务结束后\n\n1. status 为 `exited`：确认产物符合预期，按产物性质归位（`output\u002F\u003Cskill>\u002F\u003Cslug>\u002F` 契约），然后 record_run 登记，note 写 run_id、cmd、时长；\n2. status 为 `failed`：tail stderr.log 定位原因，失败也要登记 provenance（paths 指向日志，note 写失败摘要）——失败的运行同样是研究历史；\n3. 任务产物已被后续步骤引用后，run 目录可以保留作为执行痕迹；清理 runs\u002F 是用户的决定，skill 不自动删。\n\n## 4 · 边界情形\n\n1. **pid 复用**：进程退出后 pid 可能被系统回收复用，status 的 pid 检查在极端情况下会碰到\"同名 pid 的无关进程\"。run.json 已落终态时永远以文件为准，只有\"running 且 pid 活着\"才采信存活检查，误判窗口可忽略。\n2. **机器重启 \u002F 终端关闭**：detached 进程不依赖启动它的终端，关窗不影响任务；机器重启后残留 run 的 status 会判 failed（见\"本技能不做什么\"），按失败流程处理。\n3. **同名覆盖**：已结束的 run 被同名 start 覆盖时，旧 stdout\u002Fstderr 日志随之重写；旧日志还有价值就先复制到产物目录再重启。\n4. **日志膨胀**：任务日志可能涨到 GB 级，tail 只读末尾不受影响；磁盘紧张时提醒用户归档旧 run 目录，skill 不做日志轮转。\n5. **并发上限**：run_task.py 不限制并发数；同时启动多个重型任务前提醒用户本机核数与内存，超售导致的 OOM 不属于本技能能兜住的范围。\n\n## 5 · 完整示例\n\n一次本地长任务的闭环（虚构示例）：\n\n```bash\n# 1. 启动（立即返回，会话不阻塞）\npython \u003C插件包路径>\u002Fskills\u002Frun-monitor\u002Fscripts\u002Frun_task.py \\\n  start --name cycle-fit --cmd \"python scripts\u002Fanalyze_cycle.py --seed 42\"\n#    → started run 'cycle-fit' (pid 37516) -> runs\u002Fcycle-fit\u002F\n\n# 2. 交还控制权；过一阵子在自然节点查询\npython \u003C插件包路径>\u002Fskills\u002Frun-monitor\u002Fscripts\u002Frun_task.py status --name cycle-fit\n#    → status: running（继续干别的，不写 sleep 循环）\n\n# 3. 再次查询：status: exited, exit_code: 0\npython \u003C插件包路径>\u002Fskills\u002Frun-monitor\u002Fscripts\u002Frun_task.py tail --name cycle-fit --lines 10\n\n# 4. 产物归位 + provenance 登记（record_run 的 note 写 run_id 与 cmd）\npython \u003C插件包路径>\u002Fskills\u002Fprovenance-record\u002Fscripts\u002Frecord_run.py \\\n  --path output\u002Fpython-analysis\u002F\u003Cslug>\u002Flatest\u002F \\\n  --tool \"run cycle-fit: python scripts\u002Fanalyze_cycle.py --seed 42\" \\\n  --note \"run-monitor 后台执行，runs\u002Fcycle-fit\u002F，exit 0\"\n```\n\n失败时第 3 步显示 `status: failed, exit_code: \u003Cn>`，第 4 步的登记照常进行，paths 指向 `runs\u002Fcycle-fit\u002Fstderr.log`，note 写失败摘要——失败同样是研究历史。\n\n## 输出模板\n\n```markdown\n## 后台任务已启动\n\n- run_id：\u003Cname>（pid \u003Cpid>）\n- 状态文件：runs\u002F\u003Cname>\u002Frun.json；日志：runs\u002F\u003Cname>\u002F{stdout,stderr}.log\n- 查询：run_task.py status --name \u003Cname>（结束时我再查，或随时问我）\n```\n\n```markdown\n## 任务 \u003Cname> 已结束（\u003Cstatus>，exit_code=\u003Cn>）\n\n- 关键输出：\u003Ctail 摘要，一两行>\n- 产物归位：\u003C路径>；provenance：已登记（note：…）\n```\n\n## 本技能不做什么\n\n- 不做进程调度与资源控制：没有优先级、没有 CPU\u002F内存限额、没有自动重启——它只是\"后台跑 + 记状态\"，不是作业调度器。\n- 不做跨机管理：runs\u002F 是本地目录，远程任务按 remote-compute \u002F hpc-slurm 的纪律抓回与登记。\n- 不杀进程：需要取消任务时向用户报告 pid 由用户处置，skill 不主动 kill（guardrail 第 8 条精神）。\n- 不持久化守护：机器重启后 run.json 里的 pid 失效，status 会把残留的 running 判为 failed，这是预期行为而非 bug。\n- 不替代 provenance：run.json 记\"进程状态\"，record_run 记\"产物来源\"，任务结束必须走 provenance 登记才算闭环。\n\n## 收尾与下一步\n\n- 任务 exited：归位产物 → record_run → 刷新 latest（如适用）→ 汇报用户。\n- 任务 failed：读日志 → 向用户报告失败摘要与建议 → 修复后可同名重新 start（旧日志被覆盖前如需要，先复制留存）。\n- 多个长任务并发时，用 `list` 一览全局；任务多到一个屏幕放不下时，说明该上集群了——转 hpc-slurm。\n",{"data":35,"body":41},{"name":4,"description":6,"argument-hint":36,"metadata":37},"[start|status|list|tail] [任务名]",{"domains":38,"last_reviewed":40},[39],"compute","2026-08-19",{"type":42,"children":43},"root",[44,53,59,80,122,135,140,192,198,224,230,242,279,473,479,571,637,643,786,849,855,894,900,953,959,964,1325,1346,1351,1417,1467,1472,1500,1505,1530],{"type":45,"tag":46,"props":47,"children":49},"element","h1",{"id":48},"run-monitor长任务-run-管理",[50],{"type":51,"value":52},"text","run-monitor：长任务 Run 管理",{"type":45,"tag":54,"props":55,"children":57},"h2",{"id":56},"目的",[58],{"type":51,"value":56},{"type":45,"tag":60,"props":61,"children":62},"p",{},[63,65,71,73,78],{"type":51,"value":64},"本地长任务（模型训练、大批量数据处理、长时间仿真）最容易犯两个错：让人机会话",{"type":45,"tag":66,"props":67,"children":68},"strong",{},[69],{"type":51,"value":70},"空等",{"type":51,"value":72},"任务结束（浪费上下文与时间），或者反复\"看看好了没\"",{"type":45,"tag":66,"props":74,"children":75},{},[76],{"type":51,"value":77},"轮询刷屏",{"type":51,"value":79},"（每次都把日志灌进对话）。本技能的 Run 抽象解决这两点：",{"type":45,"tag":81,"props":82,"children":83},"ol",{},[84,97,108],{"type":45,"tag":85,"props":86,"children":87},"li",{},[88,90,95],{"type":51,"value":89},"任务以 detached 子进程后台运行，启动后立即交还控制权——",{"type":45,"tag":66,"props":91,"children":92},{},[93],{"type":51,"value":94},"不让人机等任务",{"type":51,"value":96},"；",{"type":45,"tag":85,"props":98,"children":99},{},[100,102,107],{"type":51,"value":101},"状态落在磁盘文件（run.json + 日志）里，查询时只读摘要——",{"type":45,"tag":66,"props":103,"children":104},{},[105],{"type":51,"value":106},"轮询不耗 token",{"type":51,"value":96},{"type":45,"tag":85,"props":109,"children":110},{},[111,113,120],{"type":51,"value":112},"状态机只有三态：",{"type":45,"tag":114,"props":115,"children":117},"code",{"className":116},[],[118],{"type":51,"value":119},"running | exited | failed",{"type":51,"value":121},"，配合退出码，一眼可判。",{"type":45,"tag":60,"props":123,"children":124},{},[125,127,133],{"type":51,"value":126},"本技能配套纯标准库脚本 ",{"type":45,"tag":114,"props":128,"children":130},{"className":129},[],[131],{"type":51,"value":132},"scripts\u002Frun_task.py",{"type":51,"value":134},"（Windows\u002FPOSIX 跨平台），任何能跑 Python 3 的机器都能用。远程任务的管理见 remote-compute \u002F hpc-slurm，本技能只管本地进程。",{"type":45,"tag":54,"props":136,"children":138},{"id":137},"前置检查",[139],{"type":51,"value":137},{"type":45,"tag":81,"props":141,"children":142},{},[143,156,161,174,179],{"type":45,"tag":85,"props":144,"children":145},{},[146,148,154],{"type":51,"value":147},"确认当前目录是工作区根目录：run 目录固定为 ",{"type":45,"tag":114,"props":149,"children":151},{"className":150},[],[152],{"type":51,"value":153},".\u002Fruns\u002F\u003Crun_id>\u002F",{"type":51,"value":155},"，换目录启动等于另一套记录。",{"type":45,"tag":85,"props":157,"children":158},{},[159],{"type":51,"value":160},"确认任务本身可以在非交互 shell 里跑通（先手动试跑一条短命令验证命令行正确），不要拿没验证过的命令直接后台化。",{"type":45,"tag":85,"props":162,"children":163},{},[164,166,172],{"type":51,"value":165},"run_id 命名 kebab-case（字母数字与 ",{"type":45,"tag":114,"props":167,"children":169},{"className":168},[],[170],{"type":51,"value":171},"-_.",{"type":51,"value":173},"），同一时刻同名 run 只能有一个在 running。",{"type":45,"tag":85,"props":175,"children":176},{},[177],{"type":51,"value":178},"评估任务时长：秒级任务直接同步跑完即可，不必后台化；分钟级以上的任务才值得 start——Run 抽象的收益是\"不等任务\"，短任务没有等待可省。",{"type":45,"tag":85,"props":180,"children":181},{},[182,184,190],{"type":51,"value":183},"确认命令的产物路径写在命令本身里（如 ",{"type":45,"tag":114,"props":185,"children":187},{"className":186},[],[188],{"type":51,"value":189},"--out output\u002F...",{"type":51,"value":191},"）：后台任务脱离会话上下文，事后靠 run.json 的 cmd 字段追溯\"它当时往哪写\"，路径不明的命令先补参数再启动。",{"type":45,"tag":54,"props":193,"children":195},{"id":194},"与各-skill-的分工",[196],{"type":51,"value":197},"与各 skill 的分工",{"type":45,"tag":199,"props":200,"children":201},"ul",{},[202,207,219],{"type":45,"tag":85,"props":203,"children":204},{},[205],{"type":51,"value":206},"python-analysis \u002F r-analysis：分析规程本身；耗时超阈值时把执行环节交给本技能后台化。",{"type":45,"tag":85,"props":208,"children":209},{},[210,212,217],{"type":51,"value":211},"remote-compute \u002F hpc-slurm：远程与集群任务的提交、抓回与登记；本技能只管",{"type":45,"tag":66,"props":213,"children":214},{},[215],{"type":51,"value":216},"本地",{"type":51,"value":218},"进程，runs\u002F 不出本机（用本地 Run 登记 Slurm 作业状态查询的模式见 hpc-slurm 第 6 节）。",{"type":45,"tag":85,"props":220,"children":221},{},[222],{"type":51,"value":223},"provenance-record：Run 只管进程状态，产物来源登记统一走 record_run，两者互补不替代。",{"type":45,"tag":54,"props":225,"children":227},{"id":226},"run-目录与-runjson-schema",[228],{"type":51,"value":229},"Run 目录与 run.json schema",{"type":45,"tag":231,"props":232,"children":237},"pre",{"className":233,"code":235,"language":51,"meta":236},[234],"language-text","runs\u002F\n└── \u003Crun_id>\u002F\n    ├── run.json      # 状态文件（唯一事实来源）\n    ├── stdout.log    # 标准输出（每次 start 截断重写）\n    └── stderr.log    # 标准错误\n","",[238],{"type":45,"tag":114,"props":239,"children":240},{"__ignoreMap":236},[241],{"type":51,"value":235},{"type":45,"tag":60,"props":243,"children":244},{},[245,247,253,255,261,263,269,271,277],{"type":51,"value":246},"run.json 字段如下（",{"type":45,"tag":114,"props":248,"children":250},{"className":249},[],[251],{"type":51,"value":252},"tags",{"type":51,"value":254},"、",{"type":45,"tag":114,"props":256,"children":258},{"className":257},[],[259],{"type":51,"value":260},"note",{"type":51,"value":262}," 仅在 start 带 ",{"type":45,"tag":114,"props":264,"children":266},{"className":265},[],[267],{"type":51,"value":268},"--tag",{"type":51,"value":270},"\u002F",{"type":45,"tag":114,"props":272,"children":274},{"className":273},[],[275],{"type":51,"value":276},"--note",{"type":51,"value":278}," 时写入）：",{"type":45,"tag":280,"props":281,"children":282},"table",{},[283,302],{"type":45,"tag":284,"props":285,"children":286},"thead",{},[287],{"type":45,"tag":288,"props":289,"children":290},"tr",{},[291,297],{"type":45,"tag":292,"props":293,"children":294},"th",{},[295],{"type":51,"value":296},"字段",{"type":45,"tag":292,"props":298,"children":299},{},[300],{"type":51,"value":301},"含义",{"type":45,"tag":303,"props":304,"children":305},"tbody",{},[306,320,333,346,359,372,407,420,455],{"type":45,"tag":288,"props":307,"children":308},{},[309,315],{"type":45,"tag":310,"props":311,"children":312},"td",{},[313],{"type":51,"value":314},"id",{"type":45,"tag":310,"props":316,"children":317},{},[318],{"type":51,"value":319},"run 名（即目录名）",{"type":45,"tag":288,"props":321,"children":322},{},[323,328],{"type":45,"tag":310,"props":324,"children":325},{},[326],{"type":51,"value":327},"cmd",{"type":45,"tag":310,"props":329,"children":330},{},[331],{"type":51,"value":332},"执行的命令行",{"type":45,"tag":288,"props":334,"children":335},{},[336,341],{"type":45,"tag":310,"props":337,"children":338},{},[339],{"type":51,"value":340},"cwd",{"type":45,"tag":310,"props":342,"children":343},{},[344],{"type":51,"value":345},"启动时的工作目录",{"type":45,"tag":288,"props":347,"children":348},{},[349,354],{"type":45,"tag":310,"props":350,"children":351},{},[352],{"type":51,"value":353},"pid",{"type":45,"tag":310,"props":355,"children":356},{},[357],{"type":51,"value":358},"后台进程 pid（用于存活检查）",{"type":45,"tag":288,"props":360,"children":361},{},[362,367],{"type":45,"tag":310,"props":363,"children":364},{},[365],{"type":51,"value":366},"started",{"type":45,"tag":310,"props":368,"children":369},{},[370],{"type":51,"value":371},"启动时间，ISO 8601 带时区",{"type":45,"tag":288,"props":373,"children":374},{},[375,380],{"type":45,"tag":310,"props":376,"children":377},{},[378],{"type":51,"value":379},"status",{"type":45,"tag":310,"props":381,"children":382},{},[383,389,391,397,399,405],{"type":45,"tag":114,"props":384,"children":386},{"className":385},[],[387],{"type":51,"value":388},"running",{"type":51,"value":390}," \u002F ",{"type":45,"tag":114,"props":392,"children":394},{"className":393},[],[395],{"type":51,"value":396},"exited",{"type":51,"value":398},"（退出码 0）\u002F ",{"type":45,"tag":114,"props":400,"children":402},{"className":401},[],[403],{"type":51,"value":404},"failed",{"type":51,"value":406},"（非零或被强杀）",{"type":45,"tag":288,"props":408,"children":409},{},[410,415],{"type":45,"tag":310,"props":411,"children":412},{},[413],{"type":51,"value":414},"exit_code",{"type":45,"tag":310,"props":416,"children":417},{},[418],{"type":51,"value":419},"退出码；running 或异常死亡时为 null",{"type":45,"tag":288,"props":421,"children":422},{},[423,427],{"type":45,"tag":310,"props":424,"children":425},{},[426],{"type":51,"value":252},{"type":45,"tag":310,"props":428,"children":429},{},[430,432,437,439,445,447,453],{"type":51,"value":431},"可选：",{"type":45,"tag":114,"props":433,"children":435},{"className":434},[],[436],{"type":51,"value":268},{"type":51,"value":438}," 重复给出的标签数组（如 ",{"type":45,"tag":114,"props":440,"children":442},{"className":441},[],[443],{"type":51,"value":444},"[\"slurm\", \"gpu01\"]",{"type":51,"value":446},"），",{"type":45,"tag":114,"props":448,"children":450},{"className":449},[],[451],{"type":51,"value":452},"list",{"type":51,"value":454}," 输出含 TAGS 列",{"type":45,"tag":288,"props":456,"children":457},{},[458,462],{"type":45,"tag":310,"props":459,"children":460},{},[461],{"type":51,"value":260},{"type":45,"tag":310,"props":463,"children":464},{},[465,466,471],{"type":51,"value":431},{"type":45,"tag":114,"props":467,"children":469},{"className":468},[],[470],{"type":51,"value":276},{"type":51,"value":472}," 给的自由文本备注",{"type":45,"tag":54,"props":474,"children":476},{"id":475},"_1-start后台启动",[477],{"type":51,"value":478},"1 · start：后台启动",{"type":45,"tag":231,"props":480,"children":484},{"className":481,"code":482,"language":483,"meta":236,"style":236},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","python \u003C插件包路径>\u002Fskills\u002Frun-monitor\u002Fscripts\u002Frun_task.py \\\n  start --name cycle-fit --cmd \"python scripts\u002Fanalyze_cycle.py --seed 42\"\n","bash",[485],{"type":45,"tag":114,"props":486,"children":487},{"__ignoreMap":236},[488,533],{"type":45,"tag":489,"props":490,"children":493},"span",{"class":491,"line":492},"line",1,[494,500,506,512,518,523,528],{"type":45,"tag":489,"props":495,"children":497},{"style":496},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[498],{"type":51,"value":499},"python",{"type":45,"tag":489,"props":501,"children":503},{"style":502},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[504],{"type":51,"value":505}," \u003C",{"type":45,"tag":489,"props":507,"children":509},{"style":508},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[510],{"type":51,"value":511},"插件包路",{"type":45,"tag":489,"props":513,"children":515},{"style":514},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[516],{"type":51,"value":517},"径",{"type":45,"tag":489,"props":519,"children":520},{"style":502},[521],{"type":51,"value":522},">",{"type":45,"tag":489,"props":524,"children":525},{"style":508},[526],{"type":51,"value":527},"\u002Fskills\u002Frun-monitor\u002Fscripts\u002Frun_task.py",{"type":45,"tag":489,"props":529,"children":530},{"style":514},[531],{"type":51,"value":532}," \\\n",{"type":45,"tag":489,"props":534,"children":535},{"class":491,"line":27},[536,541,546,551,556,561,566],{"type":45,"tag":489,"props":537,"children":538},{"style":508},[539],{"type":51,"value":540},"  start",{"type":45,"tag":489,"props":542,"children":543},{"style":508},[544],{"type":51,"value":545}," --name",{"type":45,"tag":489,"props":547,"children":548},{"style":508},[549],{"type":51,"value":550}," cycle-fit",{"type":45,"tag":489,"props":552,"children":553},{"style":508},[554],{"type":51,"value":555}," --cmd",{"type":45,"tag":489,"props":557,"children":558},{"style":502},[559],{"type":51,"value":560}," \"",{"type":45,"tag":489,"props":562,"children":563},{"style":508},[564],{"type":51,"value":565},"python scripts\u002Fanalyze_cycle.py --seed 42",{"type":45,"tag":489,"props":567,"children":568},{"style":502},[569],{"type":51,"value":570},"\"\n",{"type":45,"tag":199,"props":572,"children":573},{},[574,595,607,612],{"type":45,"tag":85,"props":575,"children":576},{},[577,579,585,587,593],{"type":51,"value":578},"启动方式跨平台 detached：POSIX 用 ",{"type":45,"tag":114,"props":580,"children":582},{"className":581},[],[583],{"type":51,"value":584},"start_new_session=True",{"type":51,"value":586},"（脱离控制终端），Windows 用 ",{"type":45,"tag":114,"props":588,"children":590},{"className":589},[],[591],{"type":51,"value":592},"DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP",{"type":51,"value":594},"；stdout\u002Fstderr 重定向到日志文件。",{"type":45,"tag":85,"props":596,"children":597},{},[598,600,605],{"type":51,"value":599},"启动成功后立即返回 pid 与 run 目录，",{"type":45,"tag":66,"props":601,"children":602},{},[603],{"type":51,"value":604},"会话继续干别的，不要原地 sleep 等待",{"type":51,"value":606},"。",{"type":45,"tag":85,"props":608,"children":609},{},[610],{"type":51,"value":611},"同名 run 仍在 running 时拒绝重复启动（防止双跑写乱产物）；已结束的同名 run 可被新 start 覆盖（日志随之重写）。",{"type":45,"tag":85,"props":613,"children":614},{},[615,620,622,627,629,635],{"type":45,"tag":114,"props":616,"children":618},{"className":617},[],[619],{"type":51,"value":268},{"type":51,"value":621},"（可重复）与 ",{"type":45,"tag":114,"props":623,"children":625},{"className":624},[],[626],{"type":51,"value":276},{"type":51,"value":628}," 把标签与备注写进 run.json：跨项目、跨机器筛选用 tag（如 ",{"type":45,"tag":114,"props":630,"children":632},{"className":631},[],[633],{"type":51,"value":634},"--tag slurm --tag gpu01",{"type":51,"value":636},"，登记远程作业的模式见 hpc-slurm 第 6 节），背景说明用 note。",{"type":45,"tag":54,"props":638,"children":640},{"id":639},"_2-status-list-tail轻量查询",[641],{"type":51,"value":642},"2 · status \u002F list \u002F tail：轻量查询",{"type":45,"tag":231,"props":644,"children":646},{"className":481,"code":645,"language":483,"meta":236,"style":236},"python \u003C插件包路径>\u002F...\u002Frun_task.py status --name cycle-fit   # 单个 run 的状态\npython \u003C插件包路径>\u002F...\u002Frun_task.py list                       # 全部 run 一览\npython \u003C插件包路径>\u002F...\u002Frun_task.py tail --name cycle-fit --lines 20\n",[647],{"type":45,"tag":114,"props":648,"children":649},{"__ignoreMap":236},[650,697,734],{"type":45,"tag":489,"props":651,"children":652},{"class":491,"line":492},[653,657,661,665,669,673,678,683,687,691],{"type":45,"tag":489,"props":654,"children":655},{"style":496},[656],{"type":51,"value":499},{"type":45,"tag":489,"props":658,"children":659},{"style":502},[660],{"type":51,"value":505},{"type":45,"tag":489,"props":662,"children":663},{"style":508},[664],{"type":51,"value":511},{"type":45,"tag":489,"props":666,"children":667},{"style":514},[668],{"type":51,"value":517},{"type":45,"tag":489,"props":670,"children":671},{"style":502},[672],{"type":51,"value":522},{"type":45,"tag":489,"props":674,"children":675},{"style":508},[676],{"type":51,"value":677},"\u002F...\u002Frun_task.py",{"type":45,"tag":489,"props":679,"children":680},{"style":508},[681],{"type":51,"value":682}," status",{"type":45,"tag":489,"props":684,"children":685},{"style":508},[686],{"type":51,"value":545},{"type":45,"tag":489,"props":688,"children":689},{"style":508},[690],{"type":51,"value":550},{"type":45,"tag":489,"props":692,"children":694},{"style":693},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[695],{"type":51,"value":696},"   # 单个 run 的状态\n",{"type":45,"tag":489,"props":698,"children":699},{"class":491,"line":27},[700,704,708,712,716,720,724,729],{"type":45,"tag":489,"props":701,"children":702},{"style":496},[703],{"type":51,"value":499},{"type":45,"tag":489,"props":705,"children":706},{"style":502},[707],{"type":51,"value":505},{"type":45,"tag":489,"props":709,"children":710},{"style":508},[711],{"type":51,"value":511},{"type":45,"tag":489,"props":713,"children":714},{"style":514},[715],{"type":51,"value":517},{"type":45,"tag":489,"props":717,"children":718},{"style":502},[719],{"type":51,"value":522},{"type":45,"tag":489,"props":721,"children":722},{"style":508},[723],{"type":51,"value":677},{"type":45,"tag":489,"props":725,"children":726},{"style":508},[727],{"type":51,"value":728}," list",{"type":45,"tag":489,"props":730,"children":731},{"style":693},[732],{"type":51,"value":733},"                       # 全部 run 一览\n",{"type":45,"tag":489,"props":735,"children":737},{"class":491,"line":736},3,[738,742,746,750,754,758,762,767,771,775,780],{"type":45,"tag":489,"props":739,"children":740},{"style":496},[741],{"type":51,"value":499},{"type":45,"tag":489,"props":743,"children":744},{"style":502},[745],{"type":51,"value":505},{"type":45,"tag":489,"props":747,"children":748},{"style":508},[749],{"type":51,"value":511},{"type":45,"tag":489,"props":751,"children":752},{"style":514},[753],{"type":51,"value":517},{"type":45,"tag":489,"props":755,"children":756},{"style":502},[757],{"type":51,"value":522},{"type":45,"tag":489,"props":759,"children":760},{"style":508},[761],{"type":51,"value":677},{"type":45,"tag":489,"props":763,"children":764},{"style":508},[765],{"type":51,"value":766}," tail",{"type":45,"tag":489,"props":768,"children":769},{"style":508},[770],{"type":51,"value":545},{"type":45,"tag":489,"props":772,"children":773},{"style":508},[774],{"type":51,"value":550},{"type":45,"tag":489,"props":776,"children":777},{"style":508},[778],{"type":51,"value":779}," --lines",{"type":45,"tag":489,"props":781,"children":783},{"style":782},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[784],{"type":51,"value":785}," 20\n",{"type":45,"tag":199,"props":787,"children":788},{},[789,824,844],{"type":45,"tag":85,"props":790,"children":791},{},[792,794,800,802,808,810,816,818,823],{"type":51,"value":793},"status 的判定：run.json 已记录终态则直接采信；仍为 running 时做 pid 存活检查（POSIX ",{"type":45,"tag":114,"props":795,"children":797},{"className":796},[],[798],{"type":51,"value":799},"os.kill(pid, 0)",{"type":51,"value":801},"，Windows ",{"type":45,"tag":114,"props":803,"children":805},{"className":804},[],[806],{"type":51,"value":807},"OpenProcess",{"type":51,"value":809}," + ",{"type":45,"tag":114,"props":811,"children":813},{"className":812},[],[814],{"type":51,"value":815},"GetExitCodeProcess",{"type":51,"value":817},"），pid 已死但没落终态（被强杀）则判 ",{"type":45,"tag":114,"props":819,"children":821},{"className":820},[],[822],{"type":51,"value":404},{"type":51,"value":606},{"type":45,"tag":85,"props":825,"children":826},{},[827,829,834,836,842],{"type":51,"value":828},"查询结果只把",{"type":45,"tag":66,"props":830,"children":831},{},[832],{"type":51,"value":833},"摘要",{"type":51,"value":835},"带进对话；需要看日志细节时用 ",{"type":45,"tag":114,"props":837,"children":839},{"className":838},[],[840],{"type":51,"value":841},"tail --lines N",{"type":51,"value":843}," 取末尾 N 行，不要整份 cat 进对话（日志可能上万行）。",{"type":45,"tag":85,"props":845,"children":846},{},[847],{"type":51,"value":848},"建议的查看节奏：任务启动后先交还控制权，用户问起或自然节点（如下一步依赖其结果）时再 status 一次；不写忙等循环。",{"type":45,"tag":54,"props":850,"children":852},{"id":851},"_3-任务结束后",[853],{"type":51,"value":854},"3 · 任务结束后",{"type":45,"tag":81,"props":856,"children":857},{},[858,878,889],{"type":45,"tag":85,"props":859,"children":860},{},[861,863,868,870,876],{"type":51,"value":862},"status 为 ",{"type":45,"tag":114,"props":864,"children":866},{"className":865},[],[867],{"type":51,"value":396},{"type":51,"value":869},"：确认产物符合预期，按产物性质归位（",{"type":45,"tag":114,"props":871,"children":873},{"className":872},[],[874],{"type":51,"value":875},"output\u002F\u003Cskill>\u002F\u003Cslug>\u002F",{"type":51,"value":877}," 契约），然后 record_run 登记，note 写 run_id、cmd、时长；",{"type":45,"tag":85,"props":879,"children":880},{},[881,882,887],{"type":51,"value":862},{"type":45,"tag":114,"props":883,"children":885},{"className":884},[],[886],{"type":51,"value":404},{"type":51,"value":888},"：tail stderr.log 定位原因，失败也要登记 provenance（paths 指向日志，note 写失败摘要）——失败的运行同样是研究历史；",{"type":45,"tag":85,"props":890,"children":891},{},[892],{"type":51,"value":893},"任务产物已被后续步骤引用后，run 目录可以保留作为执行痕迹；清理 runs\u002F 是用户的决定，skill 不自动删。",{"type":45,"tag":54,"props":895,"children":897},{"id":896},"_4-边界情形",[898],{"type":51,"value":899},"4 · 边界情形",{"type":45,"tag":81,"props":901,"children":902},{},[903,913,923,933,943],{"type":45,"tag":85,"props":904,"children":905},{},[906,911],{"type":45,"tag":66,"props":907,"children":908},{},[909],{"type":51,"value":910},"pid 复用",{"type":51,"value":912},"：进程退出后 pid 可能被系统回收复用，status 的 pid 检查在极端情况下会碰到\"同名 pid 的无关进程\"。run.json 已落终态时永远以文件为准，只有\"running 且 pid 活着\"才采信存活检查，误判窗口可忽略。",{"type":45,"tag":85,"props":914,"children":915},{},[916,921],{"type":45,"tag":66,"props":917,"children":918},{},[919],{"type":51,"value":920},"机器重启 \u002F 终端关闭",{"type":51,"value":922},"：detached 进程不依赖启动它的终端，关窗不影响任务；机器重启后残留 run 的 status 会判 failed（见\"本技能不做什么\"），按失败流程处理。",{"type":45,"tag":85,"props":924,"children":925},{},[926,931],{"type":45,"tag":66,"props":927,"children":928},{},[929],{"type":51,"value":930},"同名覆盖",{"type":51,"value":932},"：已结束的 run 被同名 start 覆盖时，旧 stdout\u002Fstderr 日志随之重写；旧日志还有价值就先复制到产物目录再重启。",{"type":45,"tag":85,"props":934,"children":935},{},[936,941],{"type":45,"tag":66,"props":937,"children":938},{},[939],{"type":51,"value":940},"日志膨胀",{"type":51,"value":942},"：任务日志可能涨到 GB 级，tail 只读末尾不受影响；磁盘紧张时提醒用户归档旧 run 目录，skill 不做日志轮转。",{"type":45,"tag":85,"props":944,"children":945},{},[946,951],{"type":45,"tag":66,"props":947,"children":948},{},[949],{"type":51,"value":950},"并发上限",{"type":51,"value":952},"：run_task.py 不限制并发数；同时启动多个重型任务前提醒用户本机核数与内存，超售导致的 OOM 不属于本技能能兜住的范围。",{"type":45,"tag":54,"props":954,"children":956},{"id":955},"_5-完整示例",[957],{"type":51,"value":958},"5 · 完整示例",{"type":45,"tag":60,"props":960,"children":961},{},[962],{"type":51,"value":963},"一次本地长任务的闭环（虚构示例）：",{"type":45,"tag":231,"props":965,"children":967},{"className":481,"code":966,"language":483,"meta":236,"style":236},"# 1. 启动（立即返回，会话不阻塞）\npython \u003C插件包路径>\u002Fskills\u002Frun-monitor\u002Fscripts\u002Frun_task.py \\\n  start --name cycle-fit --cmd \"python scripts\u002Fanalyze_cycle.py --seed 42\"\n#    → started run 'cycle-fit' (pid 37516) -> runs\u002Fcycle-fit\u002F\n\n# 2. 交还控制权；过一阵子在自然节点查询\npython \u003C插件包路径>\u002Fskills\u002Frun-monitor\u002Fscripts\u002Frun_task.py status --name cycle-fit\n#    → status: running（继续干别的，不写 sleep 循环）\n\n# 3. 再次查询：status: exited, exit_code: 0\npython \u003C插件包路径>\u002Fskills\u002Frun-monitor\u002Fscripts\u002Frun_task.py tail --name cycle-fit --lines 10\n\n# 4. 产物归位 + provenance 登记（record_run 的 note 写 run_id 与 cmd）\npython \u003C插件包路径>\u002Fskills\u002Fprovenance-record\u002Fscripts\u002Frecord_run.py \\\n  --path output\u002Fpython-analysis\u002F\u003Cslug>\u002Flatest\u002F \\\n  --tool \"run cycle-fit: python scripts\u002Fanalyze_cycle.py --seed 42\" \\\n  --note \"run-monitor 后台执行，runs\u002Fcycle-fit\u002F，exit 0\"\n",[968],{"type":45,"tag":114,"props":969,"children":970},{"__ignoreMap":236},[971,979,1010,1041,1050,1059,1068,1109,1118,1126,1135,1184,1192,1201,1234,1276,1303],{"type":45,"tag":489,"props":972,"children":973},{"class":491,"line":492},[974],{"type":45,"tag":489,"props":975,"children":976},{"style":693},[977],{"type":51,"value":978},"# 1. 启动（立即返回，会话不阻塞）\n",{"type":45,"tag":489,"props":980,"children":981},{"class":491,"line":27},[982,986,990,994,998,1002,1006],{"type":45,"tag":489,"props":983,"children":984},{"style":496},[985],{"type":51,"value":499},{"type":45,"tag":489,"props":987,"children":988},{"style":502},[989],{"type":51,"value":505},{"type":45,"tag":489,"props":991,"children":992},{"style":508},[993],{"type":51,"value":511},{"type":45,"tag":489,"props":995,"children":996},{"style":514},[997],{"type":51,"value":517},{"type":45,"tag":489,"props":999,"children":1000},{"style":502},[1001],{"type":51,"value":522},{"type":45,"tag":489,"props":1003,"children":1004},{"style":508},[1005],{"type":51,"value":527},{"type":45,"tag":489,"props":1007,"children":1008},{"style":514},[1009],{"type":51,"value":532},{"type":45,"tag":489,"props":1011,"children":1012},{"class":491,"line":736},[1013,1017,1021,1025,1029,1033,1037],{"type":45,"tag":489,"props":1014,"children":1015},{"style":508},[1016],{"type":51,"value":540},{"type":45,"tag":489,"props":1018,"children":1019},{"style":508},[1020],{"type":51,"value":545},{"type":45,"tag":489,"props":1022,"children":1023},{"style":508},[1024],{"type":51,"value":550},{"type":45,"tag":489,"props":1026,"children":1027},{"style":508},[1028],{"type":51,"value":555},{"type":45,"tag":489,"props":1030,"children":1031},{"style":502},[1032],{"type":51,"value":560},{"type":45,"tag":489,"props":1034,"children":1035},{"style":508},[1036],{"type":51,"value":565},{"type":45,"tag":489,"props":1038,"children":1039},{"style":502},[1040],{"type":51,"value":570},{"type":45,"tag":489,"props":1042,"children":1044},{"class":491,"line":1043},4,[1045],{"type":45,"tag":489,"props":1046,"children":1047},{"style":693},[1048],{"type":51,"value":1049},"#    → started run 'cycle-fit' (pid 37516) -> runs\u002Fcycle-fit\u002F\n",{"type":45,"tag":489,"props":1051,"children":1052},{"class":491,"line":23},[1053],{"type":45,"tag":489,"props":1054,"children":1056},{"emptyLinePlaceholder":1055},true,[1057],{"type":51,"value":1058},"\n",{"type":45,"tag":489,"props":1060,"children":1062},{"class":491,"line":1061},6,[1063],{"type":45,"tag":489,"props":1064,"children":1065},{"style":693},[1066],{"type":51,"value":1067},"# 2. 交还控制权；过一阵子在自然节点查询\n",{"type":45,"tag":489,"props":1069,"children":1071},{"class":491,"line":1070},7,[1072,1076,1080,1084,1088,1092,1096,1100,1104],{"type":45,"tag":489,"props":1073,"children":1074},{"style":496},[1075],{"type":51,"value":499},{"type":45,"tag":489,"props":1077,"children":1078},{"style":502},[1079],{"type":51,"value":505},{"type":45,"tag":489,"props":1081,"children":1082},{"style":508},[1083],{"type":51,"value":511},{"type":45,"tag":489,"props":1085,"children":1086},{"style":514},[1087],{"type":51,"value":517},{"type":45,"tag":489,"props":1089,"children":1090},{"style":502},[1091],{"type":51,"value":522},{"type":45,"tag":489,"props":1093,"children":1094},{"style":508},[1095],{"type":51,"value":527},{"type":45,"tag":489,"props":1097,"children":1098},{"style":508},[1099],{"type":51,"value":682},{"type":45,"tag":489,"props":1101,"children":1102},{"style":508},[1103],{"type":51,"value":545},{"type":45,"tag":489,"props":1105,"children":1106},{"style":508},[1107],{"type":51,"value":1108}," cycle-fit\n",{"type":45,"tag":489,"props":1110,"children":1112},{"class":491,"line":1111},8,[1113],{"type":45,"tag":489,"props":1114,"children":1115},{"style":693},[1116],{"type":51,"value":1117},"#    → status: running（继续干别的，不写 sleep 循环）\n",{"type":45,"tag":489,"props":1119,"children":1121},{"class":491,"line":1120},9,[1122],{"type":45,"tag":489,"props":1123,"children":1124},{"emptyLinePlaceholder":1055},[1125],{"type":51,"value":1058},{"type":45,"tag":489,"props":1127,"children":1129},{"class":491,"line":1128},10,[1130],{"type":45,"tag":489,"props":1131,"children":1132},{"style":693},[1133],{"type":51,"value":1134},"# 3. 再次查询：status: exited, exit_code: 0\n",{"type":45,"tag":489,"props":1136,"children":1138},{"class":491,"line":1137},11,[1139,1143,1147,1151,1155,1159,1163,1167,1171,1175,1179],{"type":45,"tag":489,"props":1140,"children":1141},{"style":496},[1142],{"type":51,"value":499},{"type":45,"tag":489,"props":1144,"children":1145},{"style":502},[1146],{"type":51,"value":505},{"type":45,"tag":489,"props":1148,"children":1149},{"style":508},[1150],{"type":51,"value":511},{"type":45,"tag":489,"props":1152,"children":1153},{"style":514},[1154],{"type":51,"value":517},{"type":45,"tag":489,"props":1156,"children":1157},{"style":502},[1158],{"type":51,"value":522},{"type":45,"tag":489,"props":1160,"children":1161},{"style":508},[1162],{"type":51,"value":527},{"type":45,"tag":489,"props":1164,"children":1165},{"style":508},[1166],{"type":51,"value":766},{"type":45,"tag":489,"props":1168,"children":1169},{"style":508},[1170],{"type":51,"value":545},{"type":45,"tag":489,"props":1172,"children":1173},{"style":508},[1174],{"type":51,"value":550},{"type":45,"tag":489,"props":1176,"children":1177},{"style":508},[1178],{"type":51,"value":779},{"type":45,"tag":489,"props":1180,"children":1181},{"style":782},[1182],{"type":51,"value":1183}," 10\n",{"type":45,"tag":489,"props":1185,"children":1187},{"class":491,"line":1186},12,[1188],{"type":45,"tag":489,"props":1189,"children":1190},{"emptyLinePlaceholder":1055},[1191],{"type":51,"value":1058},{"type":45,"tag":489,"props":1193,"children":1195},{"class":491,"line":1194},13,[1196],{"type":45,"tag":489,"props":1197,"children":1198},{"style":693},[1199],{"type":51,"value":1200},"# 4. 产物归位 + provenance 登记（record_run 的 note 写 run_id 与 cmd）\n",{"type":45,"tag":489,"props":1202,"children":1204},{"class":491,"line":1203},14,[1205,1209,1213,1217,1221,1225,1230],{"type":45,"tag":489,"props":1206,"children":1207},{"style":496},[1208],{"type":51,"value":499},{"type":45,"tag":489,"props":1210,"children":1211},{"style":502},[1212],{"type":51,"value":505},{"type":45,"tag":489,"props":1214,"children":1215},{"style":508},[1216],{"type":51,"value":511},{"type":45,"tag":489,"props":1218,"children":1219},{"style":514},[1220],{"type":51,"value":517},{"type":45,"tag":489,"props":1222,"children":1223},{"style":502},[1224],{"type":51,"value":522},{"type":45,"tag":489,"props":1226,"children":1227},{"style":508},[1228],{"type":51,"value":1229},"\u002Fskills\u002Fprovenance-record\u002Fscripts\u002Frecord_run.py",{"type":45,"tag":489,"props":1231,"children":1232},{"style":514},[1233],{"type":51,"value":532},{"type":45,"tag":489,"props":1235,"children":1237},{"class":491,"line":1236},15,[1238,1243,1248,1253,1258,1263,1267,1272],{"type":45,"tag":489,"props":1239,"children":1240},{"style":508},[1241],{"type":51,"value":1242},"  --path",{"type":45,"tag":489,"props":1244,"children":1245},{"style":508},[1246],{"type":51,"value":1247}," output\u002Fpython-analysis\u002F",{"type":45,"tag":489,"props":1249,"children":1250},{"style":502},[1251],{"type":51,"value":1252},"\u003C",{"type":45,"tag":489,"props":1254,"children":1255},{"style":508},[1256],{"type":51,"value":1257},"slu",{"type":45,"tag":489,"props":1259,"children":1260},{"style":514},[1261],{"type":51,"value":1262},"g",{"type":45,"tag":489,"props":1264,"children":1265},{"style":502},[1266],{"type":51,"value":522},{"type":45,"tag":489,"props":1268,"children":1269},{"style":508},[1270],{"type":51,"value":1271},"\u002Flatest\u002F",{"type":45,"tag":489,"props":1273,"children":1274},{"style":514},[1275],{"type":51,"value":532},{"type":45,"tag":489,"props":1277,"children":1279},{"class":491,"line":1278},16,[1280,1285,1289,1294,1299],{"type":45,"tag":489,"props":1281,"children":1282},{"style":508},[1283],{"type":51,"value":1284},"  --tool",{"type":45,"tag":489,"props":1286,"children":1287},{"style":502},[1288],{"type":51,"value":560},{"type":45,"tag":489,"props":1290,"children":1291},{"style":508},[1292],{"type":51,"value":1293},"run cycle-fit: python scripts\u002Fanalyze_cycle.py --seed 42",{"type":45,"tag":489,"props":1295,"children":1296},{"style":502},[1297],{"type":51,"value":1298},"\"",{"type":45,"tag":489,"props":1300,"children":1301},{"style":514},[1302],{"type":51,"value":532},{"type":45,"tag":489,"props":1304,"children":1306},{"class":491,"line":1305},17,[1307,1312,1316,1321],{"type":45,"tag":489,"props":1308,"children":1309},{"style":508},[1310],{"type":51,"value":1311},"  --note",{"type":45,"tag":489,"props":1313,"children":1314},{"style":502},[1315],{"type":51,"value":560},{"type":45,"tag":489,"props":1317,"children":1318},{"style":508},[1319],{"type":51,"value":1320},"run-monitor 后台执行，runs\u002Fcycle-fit\u002F，exit 0",{"type":45,"tag":489,"props":1322,"children":1323},{"style":502},[1324],{"type":51,"value":570},{"type":45,"tag":60,"props":1326,"children":1327},{},[1328,1330,1336,1338,1344],{"type":51,"value":1329},"失败时第 3 步显示 ",{"type":45,"tag":114,"props":1331,"children":1333},{"className":1332},[],[1334],{"type":51,"value":1335},"status: failed, exit_code: \u003Cn>",{"type":51,"value":1337},"，第 4 步的登记照常进行，paths 指向 ",{"type":45,"tag":114,"props":1339,"children":1341},{"className":1340},[],[1342],{"type":51,"value":1343},"runs\u002Fcycle-fit\u002Fstderr.log",{"type":51,"value":1345},"，note 写失败摘要——失败同样是研究历史。",{"type":45,"tag":54,"props":1347,"children":1349},{"id":1348},"输出模板",[1350],{"type":51,"value":1348},{"type":45,"tag":231,"props":1352,"children":1356},{"className":1353,"code":1354,"language":1355,"meta":236,"style":236},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","## 后台任务已启动\n\n- run_id：\u003Cname>（pid \u003Cpid>）\n- 状态文件：runs\u002F\u003Cname>\u002Frun.json；日志：runs\u002F\u003Cname>\u002F{stdout,stderr}.log\n- 查询：run_task.py status --name \u003Cname>（结束时我再查，或随时问我）\n","markdown",[1357],{"type":45,"tag":114,"props":1358,"children":1359},{"__ignoreMap":236},[1360,1373,1380,1393,1405],{"type":45,"tag":489,"props":1361,"children":1362},{"class":491,"line":492},[1363,1368],{"type":45,"tag":489,"props":1364,"children":1365},{"style":502},[1366],{"type":51,"value":1367},"## ",{"type":45,"tag":489,"props":1369,"children":1370},{"style":496},[1371],{"type":51,"value":1372},"后台任务已启动\n",{"type":45,"tag":489,"props":1374,"children":1375},{"class":491,"line":27},[1376],{"type":45,"tag":489,"props":1377,"children":1378},{"emptyLinePlaceholder":1055},[1379],{"type":51,"value":1058},{"type":45,"tag":489,"props":1381,"children":1382},{"class":491,"line":736},[1383,1388],{"type":45,"tag":489,"props":1384,"children":1385},{"style":502},[1386],{"type":51,"value":1387},"-",{"type":45,"tag":489,"props":1389,"children":1390},{"style":514},[1391],{"type":51,"value":1392}," run_id：\u003Cname>（pid \u003Cpid>）\n",{"type":45,"tag":489,"props":1394,"children":1395},{"class":491,"line":1043},[1396,1400],{"type":45,"tag":489,"props":1397,"children":1398},{"style":502},[1399],{"type":51,"value":1387},{"type":45,"tag":489,"props":1401,"children":1402},{"style":514},[1403],{"type":51,"value":1404}," 状态文件：runs\u002F\u003Cname>\u002Frun.json；日志：runs\u002F\u003Cname>\u002F{stdout,stderr}.log\n",{"type":45,"tag":489,"props":1406,"children":1407},{"class":491,"line":23},[1408,1412],{"type":45,"tag":489,"props":1409,"children":1410},{"style":502},[1411],{"type":51,"value":1387},{"type":45,"tag":489,"props":1413,"children":1414},{"style":514},[1415],{"type":51,"value":1416}," 查询：run_task.py status --name \u003Cname>（结束时我再查，或随时问我）\n",{"type":45,"tag":231,"props":1418,"children":1420},{"className":1353,"code":1419,"language":1355,"meta":236,"style":236},"## 任务 \u003Cname> 已结束（\u003Cstatus>，exit_code=\u003Cn>）\n\n- 关键输出：\u003Ctail 摘要，一两行>\n- 产物归位：\u003C路径>；provenance：已登记（note：…）\n",[1421],{"type":45,"tag":114,"props":1422,"children":1423},{"__ignoreMap":236},[1424,1436,1443,1455],{"type":45,"tag":489,"props":1425,"children":1426},{"class":491,"line":492},[1427,1431],{"type":45,"tag":489,"props":1428,"children":1429},{"style":502},[1430],{"type":51,"value":1367},{"type":45,"tag":489,"props":1432,"children":1433},{"style":496},[1434],{"type":51,"value":1435},"任务 \u003Cname> 已结束（\u003Cstatus>，exit_code=\u003Cn>）\n",{"type":45,"tag":489,"props":1437,"children":1438},{"class":491,"line":27},[1439],{"type":45,"tag":489,"props":1440,"children":1441},{"emptyLinePlaceholder":1055},[1442],{"type":51,"value":1058},{"type":45,"tag":489,"props":1444,"children":1445},{"class":491,"line":736},[1446,1450],{"type":45,"tag":489,"props":1447,"children":1448},{"style":502},[1449],{"type":51,"value":1387},{"type":45,"tag":489,"props":1451,"children":1452},{"style":514},[1453],{"type":51,"value":1454}," 关键输出：\u003Ctail 摘要，一两行>\n",{"type":45,"tag":489,"props":1456,"children":1457},{"class":491,"line":1043},[1458,1462],{"type":45,"tag":489,"props":1459,"children":1460},{"style":502},[1461],{"type":51,"value":1387},{"type":45,"tag":489,"props":1463,"children":1464},{"style":514},[1465],{"type":51,"value":1466}," 产物归位：\u003C路径>；provenance：已登记（note：…）\n",{"type":45,"tag":54,"props":1468,"children":1470},{"id":1469},"本技能不做什么",[1471],{"type":51,"value":1469},{"type":45,"tag":199,"props":1473,"children":1474},{},[1475,1480,1485,1490,1495],{"type":45,"tag":85,"props":1476,"children":1477},{},[1478],{"type":51,"value":1479},"不做进程调度与资源控制：没有优先级、没有 CPU\u002F内存限额、没有自动重启——它只是\"后台跑 + 记状态\"，不是作业调度器。",{"type":45,"tag":85,"props":1481,"children":1482},{},[1483],{"type":51,"value":1484},"不做跨机管理：runs\u002F 是本地目录，远程任务按 remote-compute \u002F hpc-slurm 的纪律抓回与登记。",{"type":45,"tag":85,"props":1486,"children":1487},{},[1488],{"type":51,"value":1489},"不杀进程：需要取消任务时向用户报告 pid 由用户处置，skill 不主动 kill（guardrail 第 8 条精神）。",{"type":45,"tag":85,"props":1491,"children":1492},{},[1493],{"type":51,"value":1494},"不持久化守护：机器重启后 run.json 里的 pid 失效，status 会把残留的 running 判为 failed，这是预期行为而非 bug。",{"type":45,"tag":85,"props":1496,"children":1497},{},[1498],{"type":51,"value":1499},"不替代 provenance：run.json 记\"进程状态\"，record_run 记\"产物来源\"，任务结束必须走 provenance 登记才算闭环。",{"type":45,"tag":54,"props":1501,"children":1503},{"id":1502},"收尾与下一步",[1504],{"type":51,"value":1502},{"type":45,"tag":199,"props":1506,"children":1507},{},[1508,1513,1518],{"type":45,"tag":85,"props":1509,"children":1510},{},[1511],{"type":51,"value":1512},"任务 exited：归位产物 → record_run → 刷新 latest（如适用）→ 汇报用户。",{"type":45,"tag":85,"props":1514,"children":1515},{},[1516],{"type":51,"value":1517},"任务 failed：读日志 → 向用户报告失败摘要与建议 → 修复后可同名重新 start（旧日志被覆盖前如需要，先复制留存）。",{"type":45,"tag":85,"props":1519,"children":1520},{},[1521,1523,1528],{"type":51,"value":1522},"多个长任务并发时，用 ",{"type":45,"tag":114,"props":1524,"children":1526},{"className":1525},[],[1527],{"type":51,"value":452},{"type":51,"value":1529}," 一览全局；任务多到一个屏幕放不下时，说明该上集群了——转 hpc-slurm。",{"type":45,"tag":1531,"props":1532,"children":1533},"style",{},[1534],{"type":51,"value":1535},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1537,"total":1640},[1538,1554,1573,1585,1599,1614,1628],{"slug":1539,"name":1539,"fn":1540,"description":1541,"org":1542,"tags":1543,"stars":23,"repoUrl":24,"updatedAt":1553},"article2tasks","convert articles into Dida365 tasks","将技术周报（批量）或单篇文章整理为滴答清单待办事项，自动分类到已有清单并打标签，全程通过 MCP 写入，跨平台无需任何本地脚本。当用户提供周报内容、文章链接，或提及「周报」「文章汇总」「添加到滴答」时，使用此技能。",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1544,1547,1550],{"name":1545,"slug":1546,"type":16},"Content Creation","content-creation",{"name":1548,"slug":1549,"type":16},"MCP","mcp",{"name":1551,"slug":1552,"type":16},"Task Management","task-management","2026-08-18T03:49:38.751656",{"slug":1555,"name":1555,"fn":1556,"description":1557,"org":1558,"tags":1559,"stars":23,"repoUrl":24,"updatedAt":1572},"citation-verify","verify academic citation accuracy","当用户需要核验参考文献真实性、检查 BibTeX 条目是否有误、审查论文引用是否可靠、 排查 bibliography 中的错误条目、验证 DOI 与题录是否对得上、发现参考文献张冠李戴、 做投稿前引用体检或审稿引用抽查时使用。同义场景：参考文献核验、引用核查、 文献真伪鉴别、bib 文件检查、参考文献纠错、引用元数据比对、 \"帮我看看这些参考文献有没有问题\"\"这个 DOI 对得上吗\"\"有没有编造的引用\"。",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1560,1563,1566,1569],{"name":1561,"slug":1562,"type":16},"Code Analysis","code-analysis",{"name":1564,"slug":1565,"type":16},"Documentation","documentation",{"name":1567,"slug":1568,"type":16},"QA","qa",{"name":1570,"slug":1571,"type":16},"Research","research","2026-08-21T03:59:17.615117",{"slug":1574,"name":1574,"fn":1575,"description":1576,"org":1577,"tags":1578,"stars":23,"repoUrl":24,"updatedAt":1584},"claim-check","verify research claims against evidence","当需要检查论文草稿中的事实性论断是否有证据支撑、做引用-论断对齐审计、 找出没有出处的陈述、核对文内引用是否真能支撑所在句子时加载使用； 通常由 evidence-loop 或审稿类流程调用，不直接面向用户。同义场景： 论断支撑检查、claim 支撑审计、无支撑断言排查、证据覆盖检查、 引用与论断对齐、\"这段话有没有文献撑\"\"哪些说法没有引用\"。",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1579,1582,1583],{"name":1580,"slug":1581,"type":16},"Audit","audit",{"name":1561,"slug":1562,"type":16},{"name":1570,"slug":1571,"type":16},"2026-08-21T03:59:02.154691",{"slug":1586,"name":1586,"fn":1587,"description":1588,"org":1589,"tags":1590,"stars":23,"repoUrl":24,"updatedAt":1598},"cn-literature","search and organize Chinese academic literature","当用户需要检索或整理中文文献（CNKI 知网、万方、维普、超星）、把中文数据库 导出的题录文件解析成统一 PaperDocument、或把中文文献与英文检索结果合并去重 时使用。同义场景：中文文献检索、知网导出题录解析、万方检索、Refworks\u002FEndNote 格式转换、\"帮我把这份 CNKI 导出的 txt 整理成文献表\"\"中文核心期刊上关于 X 有哪些研究\"。",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1591,1594,1597],{"name":1592,"slug":1593,"type":16},"Data Cleaning","data-cleaning",{"name":1595,"slug":1596,"type":16},"Documents","documents",{"name":1570,"slug":1571,"type":16},"2026-08-21T03:59:12.24404",{"slug":1600,"name":1600,"fn":1601,"description":1602,"org":1603,"tags":1604,"stars":23,"repoUrl":24,"updatedAt":1613},"cold-start-interview","initialize research profiles via interviews","当用户首次使用科研工作台、研究画像仍为空白，或用户主动说\"先做个访谈\"\"重新设置我的研究信息\"\"初始化画像\"\"cold start\"\"重新 interview\"时使用。本技能通过结构化访谈收集用户的研究领域、常用数据源、算力环境、写作语言与目标期刊、引用格式、团队协作规范、伦理合规要求，并把回答以散文形式写回插件根目录 CLAUDE.md 的研究画像部分。支持 quick（2 分钟 5 问）、full（完整 15 问）、--redo（推翻重谈）、--check（只检查画像完整度不提问）四种模式，支持中断后续谈。同义触发场景：新用户引导、首次配置、研究背景调查、填研究档案、更新个人研究信息、check 画像。",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1605,1606,1609,1612],{"name":1564,"slug":1565,"type":16},{"name":1607,"slug":1608,"type":16},"Onboarding","onboarding",{"name":1610,"slug":1611,"type":16},"Productivity","productivity",{"name":1570,"slug":1571,"type":16},"2026-08-21T03:59:58.579998",{"slug":1615,"name":1615,"fn":1616,"description":1617,"org":1618,"tags":1619,"stars":23,"repoUrl":24,"updatedAt":1627},"customize","customize research guardrails and settings","当用户想修改研究画像或共享守则（guardrails）时使用：换了研究领域、换了目标期刊、换了引用格式、换了算力环境、合规要求变化、想调整某条 guardrail 的严格程度。同义触发场景：改一下画像、更新我的研究信息、修改 CLAUDE.md、调整设置、换引用格式、customize、个性化配置、改规则、重新配置工作台。本技能是画像与守则的唯一维护入口：读取 CLAUDE.md、与用户逐项确认修改点、写回文件、并明确告知哪些 skill 的行为会因此变化。",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1620,1623,1626],{"name":1621,"slug":1622,"type":16},"Best Practices","best-practices",{"name":1624,"slug":1625,"type":16},"Configuration","configuration",{"name":1570,"slug":1571,"type":16},"2026-08-21T03:59:35.867596",{"slug":1629,"name":1629,"fn":1630,"description":1631,"org":1632,"tags":1633,"stars":23,"repoUrl":24,"updatedAt":1639},"dida365","manage Dida365 tasks and habits","Manage 滴答清单 (Dida365 China) tasks, lists, habits, focus records and countdowns through the official Dida365 MCP server at mcp.dida365.com. Use when the user asks to check, plan, create, update, complete or review tasks and habits on dida365.com, or asks about focus history and countdowns.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1634,1635,1638],{"name":1548,"slug":1549,"type":16},{"name":1636,"slug":1637,"type":16},"Scheduling","scheduling",{"name":1551,"slug":1552,"type":16},"2026-08-18T03:49:37.126385",36,{"items":1642,"total":1841},[1643,1667,1683,1702,1717,1737,1755,1773,1788,1804,1821,1831],{"slug":1644,"name":1644,"fn":1645,"description":1646,"org":1647,"tags":1648,"stars":1664,"repoUrl":1665,"updatedAt":1666},"android-native-dev","develop Android native applications","Android native application development and UI design guide. Covers Material Design 3, Kotlin\u002FCompose development, project configuration, accessibility, and build troubleshooting. Read this before Android native application development.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1649,1652,1655,1658,1661],{"name":1650,"slug":1651,"type":16},"Accessibility","accessibility",{"name":1653,"slug":1654,"type":16},"Android","android",{"name":1656,"slug":1657,"type":16},"Kotlin","kotlin",{"name":1659,"slug":1660,"type":16},"Mobile","mobile",{"name":1662,"slug":1663,"type":16},"UI Components","ui-components",13030,"https:\u002F\u002Fgithub.com\u002FMiniMax-AI\u002Fskills","2026-07-13T06:16:54.247834",{"slug":1668,"name":1668,"fn":1669,"description":1670,"org":1671,"tags":1672,"stars":1664,"repoUrl":1665,"updatedAt":1682},"buddy-sings","generate singing performances for AI companions","Use when user wants their Claude Code pet (\u002Fbuddy) to sing a song. Triggers on any request that combines the concept of their Claude Code buddy, pet, or companion with singing or music. Supports multilingual triggers — match equivalent phrases in any language.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1673,1676,1679],{"name":1674,"slug":1675,"type":16},"Agents","agents",{"name":1677,"slug":1678,"type":16},"Audio","audio",{"name":1680,"slug":1681,"type":16},"Creative","creative","2026-07-13T06:16:35.130644",{"slug":1684,"name":1684,"fn":1685,"description":1686,"org":1687,"tags":1688,"stars":1664,"repoUrl":1665,"updatedAt":1701},"color-font-skill","select color palettes and font pairings","Choose presentation-ready color palettes and font pairings for PPT\u002Fdesign tasks. Use when users ask for visual theme choices, brand-safe palettes, or font recommendations. Triggers include: 配色, 色板, 字体, color palette, font, PPT配色, 字体搭配.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1689,1692,1695,1698],{"name":1690,"slug":1691,"type":16},"Design","design",{"name":1693,"slug":1694,"type":16},"Presentations","presentations",{"name":1696,"slug":1697,"type":16},"Themes","themes",{"name":1699,"slug":1700,"type":16},"Typography","typography","2026-07-13T06:17:02.785587",{"slug":1703,"name":1703,"fn":1704,"description":1705,"org":1706,"tags":1707,"stars":1664,"repoUrl":1665,"updatedAt":1716},"design-style-skill","select visual design systems for presentations","Select a consistent visual design system for PPT slides using radius\u002Fspacing style recipes. Use when users ask for overall style direction or component styling consistency. Includes Sharp\u002FSoft\u002FRounded\u002FPill recipes, component mappings, typography\u002Fspacing rules, and mixing guidance. Triggers: 风格, style, radius, spacing, 圆角, 间距, PPT风格, 视觉风格, design style, component style.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1708,1709,1712,1715],{"name":1690,"slug":1691,"type":16},{"name":1710,"slug":1711,"type":16},"Design System","design-system",{"name":1713,"slug":1714,"type":16},"PowerPoint","powerpoint",{"name":1693,"slug":1694,"type":16},"2026-07-13T06:17:10.398389",{"slug":1718,"name":1718,"fn":1719,"description":1720,"org":1721,"tags":1722,"stars":1664,"repoUrl":1665,"updatedAt":1736},"flutter-dev","build cross-platform apps with Flutter","Flutter cross-platform development guide covering widget patterns, Riverpod\u002FBloc state management, GoRouter navigation, performance optimization, and platform-specific implementations. Includes const optimization, responsive layouts, testing strategies, and DevTools profiling.\nUse when: building Flutter apps, implementing state management (Riverpod\u002FBloc), setting up GoRouter navigation, creating custom widgets, optimizing performance, writing widget tests, cross-platform development.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1723,1726,1729,1730,1733],{"name":1724,"slug":1725,"type":16},"Dart","dart",{"name":1727,"slug":1728,"type":16},"Flutter","flutter",{"name":1659,"slug":1660,"type":16},{"name":1731,"slug":1732,"type":16},"Performance","performance",{"name":1734,"slug":1735,"type":16},"State Management","state-management","2026-07-13T06:16:36.626679",{"slug":1738,"name":1738,"fn":1739,"description":1740,"org":1741,"tags":1742,"stars":1664,"repoUrl":1665,"updatedAt":1754},"frontend-dev","build visually striking frontend web pages","Full-stack frontend development combining premium UI design, cinematic animations,\nAI-generated media assets, persuasive copywriting, and visual art. Builds complete,\nvisually striking web pages with real media, advanced motion, and compelling copy.\nUse when: building landing pages, marketing sites, product pages, dashboards,\ngenerating media assets (image\u002Fvideo\u002Faudio\u002Fmusic), writing conversion copy,\ncreating generative art, or implementing cinematic scroll animations.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1743,1746,1747,1748,1751],{"name":1744,"slug":1745,"type":16},"Animation","animation",{"name":1680,"slug":1681,"type":16},{"name":1690,"slug":1691,"type":16},{"name":1749,"slug":1750,"type":16},"Frontend","frontend",{"name":1752,"slug":1753,"type":16},"Web Development","web-development","2026-07-13T06:16:39.108827",{"slug":1756,"name":1756,"fn":1757,"description":1758,"org":1759,"tags":1760,"stars":1664,"repoUrl":1665,"updatedAt":1772},"fullstack-dev","build full-stack web applications","Full-stack backend architecture and frontend-backend integration guide.\nTRIGGER when: building a full-stack app, creating REST API with frontend, scaffolding backend service,\nbuilding todo app, building CRUD app, building real-time app, building chat app,\nExpress + React, Next.js API, Node.js backend, Python backend, Go backend,\ndesigning service layers, implementing error handling, managing config\u002Fauth,\nsetting up API clients, implementing auth flows, handling file uploads,\nadding real-time features (SSE\u002FWebSocket), hardening for production.\nDO NOT TRIGGER when: pure frontend UI work, pure CSS\u002Fstyling, database schema only.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1761,1764,1765,1768,1771],{"name":1762,"slug":1763,"type":16},"Backend","backend",{"name":1749,"slug":1750,"type":16},{"name":1766,"slug":1767,"type":16},"Full-stack","full-stack",{"name":1769,"slug":1770,"type":16},"REST API","rest-api",{"name":1752,"slug":1753,"type":16},"2026-07-13T06:16:43.219005",{"slug":1774,"name":1774,"fn":1775,"description":1776,"org":1777,"tags":1778,"stars":1664,"repoUrl":1665,"updatedAt":1787},"gif-sticker-maker","create animated GIF stickers from photos","Convert photos (people, pets, objects, logos) into 4 animated GIF stickers with captions.\nUse when: user wants to create cartoon stickers, GIF expressions, emoji packs, animated avatars,\nor convert photos to Funko Pop \u002F Pop Mart blind box style animations.\nTriggers: sticker, GIF, cartoon, emoji, expression pack, avatar animation.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1779,1780,1781,1784],{"name":1744,"slug":1745,"type":16},{"name":1680,"slug":1681,"type":16},{"name":1782,"slug":1783,"type":16},"Images","images",{"name":1785,"slug":1786,"type":16},"Media","media","2026-07-13T06:16:51.74461",{"slug":1789,"name":1789,"fn":1790,"description":1791,"org":1792,"tags":1793,"stars":1664,"repoUrl":1665,"updatedAt":1803},"ios-application-dev","develop iOS applications with SwiftUI and UIKit","iOS application development guide covering UIKit, SnapKit, and SwiftUI. Includes touch targets, safe areas, navigation patterns, Dynamic Type, Dark Mode, accessibility, collection views, common UI components, and SwiftUI design guidelines. For detailed references on specific topics, see the reference files.\nUse when: developing iOS apps, implementing UI, reviewing iOS code, working with UIKit\u002FSnapKit\u002FSwiftUI layouts, building iPhone interfaces, Swift mobile development, Apple HIG compliance, iOS accessibility implementation.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1794,1795,1798,1799,1802],{"name":1650,"slug":1651,"type":16},{"name":1796,"slug":1797,"type":16},"iOS","ios",{"name":1659,"slug":1660,"type":16},{"name":1800,"slug":1801,"type":16},"SwiftUI","swiftui",{"name":1662,"slug":1663,"type":16},"2026-07-13T06:16:55.686092",{"slug":1805,"name":1805,"fn":1806,"description":1807,"org":1808,"tags":1809,"stars":1664,"repoUrl":1665,"updatedAt":1820},"minimax-docx","create and edit DOCX documents","Professional DOCX document creation, editing, and formatting using OpenXML SDK (.NET). Three pipelines: (A) create new documents from scratch, (B) fill\u002Fedit content in existing documents, (C) apply template formatting with XSD validation gate-check. MUST use this skill whenever the user wants to produce, modify, or format a Word document — including when they say \"write a report\", \"draft a proposal\", \"make a contract\", \"fill in this form\", \"reformat to match this template\", or any task whose final output is a .docx file. Even if the user doesn't mention \"docx\" explicitly, if the task implies a printable\u002Fformal document, use this skill.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1810,1811,1814,1817],{"name":1595,"slug":1596,"type":16},{"name":1812,"slug":1813,"type":16},"DOCX","docx",{"name":1815,"slug":1816,"type":16},"Office","office",{"name":1818,"slug":1819,"type":16},"Templates","templates","2026-07-13T06:16:40.461868",{"slug":1822,"name":1822,"fn":1823,"description":1824,"org":1825,"tags":1826,"stars":1664,"repoUrl":1665,"updatedAt":1830},"minimax-music-gen","generate music and audio tracks","Use when user wants to generate music, songs, or audio tracks. Triggers on any request involving music creation, song writing, lyrics generation, audio production, or covers. Also triggers when user provides lyrics and wants them turned into a song, or describes a mood\u002Fscene and wants background music. Supports multilingual triggers — match equivalent phrases in any language. Do NOT use for music playback of existing files, music theory questions, or music recommendation without generation.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1827,1828,1829],{"name":1677,"slug":1678,"type":16},{"name":1680,"slug":1681,"type":16},{"name":1785,"slug":1786,"type":16},"2026-07-13T06:16:50.381758",{"slug":1832,"name":1832,"fn":1833,"description":1834,"org":1835,"tags":1836,"stars":1664,"repoUrl":1665,"updatedAt":1840},"minimax-music-playlist","generate personalized music playlists","Generate personalized music playlists by analyzing the user's music taste and generation feedback history. Triggers on any request involving playlist generation, music taste profiling, or personalized music recommendations. Supports multilingual triggers — match equivalent phrases in any language.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1837,1838,1839],{"name":1677,"slug":1678,"type":16},{"name":1680,"slug":1681,"type":16},{"name":1785,"slug":1786,"type":16},"2026-07-13T06:16:57.002997",84]