[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DB2D174BNQRZYY8PNZCZAT":3,"skill-same:01M6DB2D174BNQRZYY8PNZCZAT":62},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":14,"repositoryHtmlUrl":45,"repositoryHomepageUrl":6,"ownerHtmlUrl":46,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":47,"install":48,"resources":61},"01M6DB2D174BNQRZYY8PNZCZAT","bcsfe-save-roundtrip",null,"Use when pulling, editing, or pushing a Battle Cats (EN, rooted BlueStacks) SAVE_DATA file - the byte-exact PowerShell + HOME-key flush pull, the headless BCSFE-Python library edit, and the in-place cat-redirect push that preserves uid 10065 and the SELinux app_data_file context. Includes the MSYS path-conversion 0-byte-truncation gotcha, the force-stop-before-push rule, and Ototo cannon fields.","Prekzursil\u002Fagent-skills-toolchain","Prekzursil","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F54636077?v=4","01M6DACZ1PCQHD99SCR1YXG28B","Andrei Mihai Visalon","01M6DACZ670WZF535V3WYYSS4Z",0,"MIT","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fbcsfe-save-roundtrip\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"bcsfe save roundtrip","save","edit","cat","app","stop","conversion","en","use","context","python","editing","powershell","data","file","library","push","pull","2026-11-10 10:12:30",false,"---\nname: bcsfe-save-roundtrip\ndescription: Use when pulling, editing, or pushing a Battle Cats (EN, rooted BlueStacks) SAVE_DATA file - the byte-exact PowerShell + HOME-key flush pull, the headless BCSFE-Python library edit, and the in-place cat-redirect push that preserves uid 10065 and the SELinux app_data_file context. Includes the MSYS path-conversion 0-byte-truncation gotcha, the force-stop-before-push rule, and Ototo cannon fields.\nlicense: MIT\n---\n\n# BCSFE Save Round-Trip (Battle Cats EN, rooted BlueStacks)\n\n> Edit the **live** Battle Cats EN save end to end: pull byte-exact, edit\n> headlessly, push **in place** so uid + SELinux context survive. The non-obvious\n> parts (RAM flush, in-place `cat >`, MSYS path mangling) are what bite.\n\n## Environment\n\n- Package `jp.co.ponos.battlecatsen`; save at `\u002Fdata\u002Fdata\u002F\u003Cpkg>\u002Ffiles\u002FSAVE_DATA`\n  (~539 KB primary). Siblings: `SAVE_DATA.OLD` = BC's own rollback,\n  `BACKUP_SAVE_DATA` = cloud\u002Ftransfer, `SAVE_DATA4` = secondary slot.\n- adb = `C:\\ADB\\adb.exe`, device `127.0.0.1:5555`. App uid `u0_a65` = numeric\n  **10065**. BCSFE-Python 3.3.0 venv: `D:\\ReverseTools\\Android\\BCSFE-Python\\.venv`.\n- Serial changes across BlueStacks restarts (`emulator-5554` vs `127.0.0.1:5555`)\n  — `adb devices` first, then target `-s \u003Cserial>`.\n\n## PULL (byte-exact, no CRLF\u002FMSYS mangling)\n\nDo it in **PowerShell**, not git-bash (MSYS rewrites `\u002Fdata` & `\u002Fsdcard` args).\nBC holds the save in RAM, so **flush first**:\n\n```powershell\n& C:\\ADB\\adb.exe shell input keyevent KEYCODE_HOME   # backgrounding flushes to disk\nStart-Sleep -Seconds 3                                # mtime should now ~= device clock\n& C:\\ADB\\adb.exe shell \"su -c 'cp \u002Fdata\u002Fdata\u002Fjp.co.ponos.battlecatsen\u002Ffiles\u002FSAVE_DATA \u002Fsdcard\u002FSAVE_DATA && chmod 666 \u002Fsdcard\u002FSAVE_DATA'\"\n& C:\\ADB\\adb.exe pull \u002Fsdcard\u002FSAVE_DATA D:\\WSA\\saves\\SAVE_DATA\n```\n\n(Force-stop does **not** flush — only backgrounding does. Confirm freshness by\nmtime ≈ device clock.)\n\n## EDIT headlessly (no interactive menu)\n\n```python\nfrom bcsfe import core\nsf = core.SaveFile(core.Path(p).read())   # cc auto-detected as 'en'\n# ... mutate parsed objects (sf.catfood, sf.ototo.cannons, ...) ...\nsf.to_file(core.Path(out))                # re-serializes via to_data(), incl. checksum\n```\n\nFor a human, open the editor with `bcsfe -i \u003Cpath>` (`-i`\u002F`--input-path` skips\nthe load prompt).\n\n## PUSH safely (the non-obvious part)\n\n1. **`am force-stop \u003Cpkg>` FIRST** — else BC's autosave overwrites you.\n2. Back up on device: `cp SAVE_DATA SAVE_DATA.before-\u003Cts>`.\n3. `adb push` to `\u002Fsdcard`, then overwrite **in place** with `cat >`:\n\n```bash\nsu -c 'cat \u002Fsdcard\u002Fnew_save > \u002Fdata\u002Fdata\u002Fjp.co.ponos.battlecatsen\u002Ffiles\u002FSAVE_DATA; \\\n       chown 10065:10065 \u002Fdata\u002Fdata\u002Fjp.co.ponos.battlecatsen\u002Ffiles\u002FSAVE_DATA; \\\n       chmod 660 \u002Fdata\u002Fdata\u002Fjp.co.ponos.battlecatsen\u002Ffiles\u002FSAVE_DATA; \\\n       restorecon \u002Fdata\u002Fdata\u002Fjp.co.ponos.battlecatsen\u002Ffiles\u002FSAVE_DATA'\n```\n\nThe `cat >` **reuses the existing inode**, so owner + SELinux `app_data_file`\ncontext survive. A fresh `cp`\u002F`push` as root lands `root:root` with the wrong\ncontext and BC rejects\u002Fresets the save. Then **verify** `md5sum` device == local.\nUser reopens BC to load it.\n\n## MSYS PUSH GOTCHA (cost an empty-file wipe — also applies to event_0 pushes)\n\nIn git-bash, `adb push \u003Csrc> \u002Fsdcard\u002F\u003Cdst>` silently mangles the destination via\nMSYS path-conversion (`\u002Fsdcard\u002F...` → `C:\u002FProgram Files\u002FGit\u002Fsdcard\u002F...`) so the\npush **fails** — and the in-place step `cat \u002Fsdcard\u002F\u003Cdst> > \u003Cdevfile>` opens\n`\u003Cdevfile>` for write, **truncating it to 0 bytes BEFORE `cat` runs**, leaving the\ndevice file EMPTY (md5 `d41d8cd98f00b204e9800998ecf8427e`).\n\n**Fix:** `export MSYS_NO_PATHCONV=1` before any git-bash `adb push`\u002F`shell` with\n`\u002Fsdcard` or `\u002Fdata` args (or just do the push in PowerShell). **Always `md5sum`\nthe device file after the write** — that is what catches the empty\u002Fwrong-content\nstate.\n\n## Ototo cannon unlock (the \"no equip button\" fix)\n\n`sf.ototo.cannons` = `{cannon_id: Cannon(development, levels)}` plus\n`selected_parts` (a `[foundation, style, effect]` triple **per formation slot** =\nthe equip state). `cannon_id 0` = basic; 1–7 = Slow Beam \u002F Iron Wall \u002F Thunderbolt\n\u002F Waterblast \u002F Holy \u002F Breaker \u002F Curse-blast. `development`: 0 none \u002F 1 foundation \u002F\n2 style \u002F 3 effect(full).\n\nThe in-game Change\u002Fcustomize button **only appears once lines are developed past\ndefault** — set `development=3` and `levels >= 1` (effects need level ≥ 1; merely\nbuilding gives no effect). Editing the save does **not** auto-equip — the player\nstill picks the Foundation\u002FStyle\u002FEffect mix in the Ototo screen (Gamatoto → swipe\nleft); it binds per formation slot.\n\n> Live-game care: read-only discovery is safe; prefer reversible save-edits over\n> forcing unverified in-memory fields. On a \"broken\" state, kill all hooks +\n> restart BC first, then restore the `SAVE_DATA.before-*` backup.\n","# BCSFE Save Round-Trip (Battle Cats EN, rooted BlueStacks)\n\n> Edit the **live** Battle Cats EN save end to end: pull byte-exact, edit\n> headlessly, push **in place** so uid + SELinux context survive. The non-obvious\n> parts (RAM flush, in-place `cat >`, MSYS path mangling) are what bite.\n\n## Environment\n\n- Package `jp.co.ponos.battlecatsen`; save at `\u002Fdata\u002Fdata\u002F\u003Cpkg>\u002Ffiles\u002FSAVE_DATA`\n  (~539 KB primary). Siblings: `SAVE_DATA.OLD` = BC's own rollback,\n  `BACKUP_SAVE_DATA` = cloud\u002Ftransfer, `SAVE_DATA4` = secondary slot.\n- adb = `C:\\ADB\\adb.exe`, device `127.0.0.1:5555`. App uid `u0_a65` = numeric\n  **10065**. BCSFE-Python 3.3.0 venv: `D:\\ReverseTools\\Android\\BCSFE-Python\\.venv`.\n- Serial changes across BlueStacks restarts (`emulator-5554` vs `127.0.0.1:5555`)\n  — `adb devices` first, then target `-s \u003Cserial>`.\n\n## PULL (byte-exact, no CRLF\u002FMSYS mangling)\n\nDo it in **PowerShell**, not git-bash (MSYS rewrites `\u002Fdata` & `\u002Fsdcard` args).\nBC holds the save in RAM, so **flush first**:\n\n```powershell\n& C:\\ADB\\adb.exe shell input keyevent KEYCODE_HOME   # backgrounding flushes to disk\nStart-Sleep -Seconds 3                                # mtime should now ~= device clock\n& C:\\ADB\\adb.exe shell \"su -c 'cp \u002Fdata\u002Fdata\u002Fjp.co.ponos.battlecatsen\u002Ffiles\u002FSAVE_DATA \u002Fsdcard\u002FSAVE_DATA && chmod 666 \u002Fsdcard\u002FSAVE_DATA'\"\n& C:\\ADB\\adb.exe pull \u002Fsdcard\u002FSAVE_DATA D:\\WSA\\saves\\SAVE_DATA\n```\n\n(Force-stop does **not** flush — only backgrounding does. Confirm freshness by\nmtime ≈ device clock.)\n\n## EDIT headlessly (no interactive menu)\n\n```python\nfrom bcsfe import core\nsf = core.SaveFile(core.Path(p).read())   # cc auto-detected as 'en'\n# ... mutate parsed objects (sf.catfood, sf.ototo.cannons, ...) ...\nsf.to_file(core.Path(out))                # re-serializes via to_data(), incl. checksum\n```\n\nFor a human, open the editor with `bcsfe -i \u003Cpath>` (`-i`\u002F`--input-path` skips\nthe load prompt).\n\n## PUSH safely (the non-obvious part)\n\n1. **`am force-stop \u003Cpkg>` FIRST** — else BC's autosave overwrites you.\n2. Back up on device: `cp SAVE_DATA SAVE_DATA.before-\u003Cts>`.\n3. `adb push` to `\u002Fsdcard`, then overwrite **in place** with `cat >`:\n\n```bash\nsu -c 'cat \u002Fsdcard\u002Fnew_save > \u002Fdata\u002Fdata\u002Fjp.co.ponos.battlecatsen\u002Ffiles\u002FSAVE_DATA; \\\n       chown 10065:10065 \u002Fdata\u002Fdata\u002Fjp.co.ponos.battlecatsen\u002Ffiles\u002FSAVE_DATA; \\\n       chmod 660 \u002Fdata\u002Fdata\u002Fjp.co.ponos.battlecatsen\u002Ffiles\u002FSAVE_DATA; \\\n       restorecon \u002Fdata\u002Fdata\u002Fjp.co.ponos.battlecatsen\u002Ffiles\u002FSAVE_DATA'\n```\n\nThe `cat >` **reuses the existing inode**, so owner + SELinux `app_data_file`\ncontext survive. A fresh `cp`\u002F`push` as root lands `root:root` with the wrong\ncontext and BC rejects\u002Fresets the save. Then **verify** `md5sum` device == local.\nUser reopens BC to load it.\n\n## MSYS PUSH GOTCHA (cost an empty-file wipe — also applies to event_0 pushes)\n\nIn git-bash, `adb push \u003Csrc> \u002Fsdcard\u002F\u003Cdst>` silently mangles the destination via\nMSYS path-conversion (`\u002Fsdcard\u002F...` → `C:\u002FProgram Files\u002FGit\u002Fsdcard\u002F...`) so the\npush **fails** — and the in-place step `cat \u002Fsdcard\u002F\u003Cdst> > \u003Cdevfile>` opens\n`\u003Cdevfile>` for write, **truncating it to 0 bytes BEFORE `cat` runs**, leaving the\ndevice file EMPTY (md5 `d41d8cd98f00b204e9800998ecf8427e`).\n\n**Fix:** `export MSYS_NO_PATHCONV=1` before any git-bash `adb push`\u002F`shell` with\n`\u002Fsdcard` or `\u002Fdata` args (or just do the push in PowerShell). **Always `md5sum`\nthe device file after the write** — that is what catches the empty\u002Fwrong-content\nstate.\n\n## Ototo cannon unlock (the \"no equip button\" fix)\n\n`sf.ototo.cannons` = `{cannon_id: Cannon(development, levels)}` plus\n`selected_parts` (a `[foundation, style, effect]` triple **per formation slot** =\nthe equip state). `cannon_id 0` = basic; 1–7 = Slow Beam \u002F Iron Wall \u002F Thunderbolt\n\u002F Waterblast \u002F Holy \u002F Breaker \u002F Curse-blast. `development`: 0 none \u002F 1 foundation \u002F\n2 style \u002F 3 effect(full).\n\nThe in-game Change\u002Fcustomize button **only appears once lines are developed past\ndefault** — set `development=3` and `levels >= 1` (effects need level ≥ 1; merely\nbuilding gives no effect). Editing the save does **not** auto-equip — the player\nstill picks the Foundation\u002FStyle\u002FEffect mix in the Ototo screen (Gamatoto → swipe\nleft); it binds per formation slot.\n\n> Live-game care: read-only discovery is safe; prefer reversible save-edits over\n> forcing unverified in-memory fields. On a \"broken\" state, kill all hooks +\n> restart BC first, then restore the `SAVE_DATA.before-*` backup.\n",{"name":5,"license":15,"description":7},"main","a298c929b6cbd662e1fce54302ce520d5ceea1a5",".agents\u002Fskills\u002Fbcsfe-save-roundtrip","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain","https:\u002F\u002Fgithub.com\u002FPrekzursil","2026-11-02 14:30:57",{"source":8,"skillName":5,"commands":49,"prompt":59,"zipAvailable":60},[50,53,56],{"tool":51,"command":52},"npx","npx skills add Prekzursil\u002Fagent-skills-toolchain --skill bcsfe-save-roundtrip",{"tool":54,"command":55},"bunx","bunx skills add Prekzursil\u002Fagent-skills-toolchain --skill bcsfe-save-roundtrip",{"tool":57,"command":58},"pnpm","pnpm dlx skills add Prekzursil\u002Fagent-skills-toolchain --skill bcsfe-save-roundtrip","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fbcsfe-save-roundtrip\u002FSKILL.md",true,[],[63,82,113,140,154,170],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":69,"publishedAt":37},"01M6DF7D7478R55P46REYH4QAC","clarify-requirements","Resolve genuine pre-execution ambiguity by scanning repo context, generating 1-6 grounded options, and asking 1-3 focused questions via AskUserQuestion. NOT for mid-task use (injection risk); NOT when the goal is already unambiguous; use to disambiguate vague prompts before any file edits.","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Fworkspace-hooks\u002Fskills\u002Fclarify-requirements\u002FSKILL.md",[],[70,71,72,73,74,75,76,77,78,27,28,79,80,81,33],"clarify requirements","clarify","requirements","risk","options","task","prompts","goal","scanning","repo","injection","execution",{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":93,"publishedAt":37},"01M6DF79CA4BHJS66J8EZDBPWJ","openmm-md","Run FREE, open-source, Windows-native GPU molecular dynamics via the openmm-md MCP (OpenMM + CUDA on the local NVIDIA GPU). Use for protein \u002F protein-ligand MD when you want a free stack or are on Windows without a Schrodinger license. Covers the full workflow (prepare, solvate, minimize, equilibrate, production, analyze, mmgbsa) AND an honest decision guide vs Schrodinger Desmond, including how to run Desmond legitimately on Linux or a cloud GPU with a real license. This is a deliberately LESSER free alternative and does NOT replace the schrodinger MCP tools. Do NOT use it to pick a free tool when a validated FEP+, WaterMap, IFD-MD, or Prime MM-GBSA result is actually required.","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Fmcp\u002Fopenmm-md-mcp\u002Fskill\u002Fopenmm-md\u002FSKILL.md",[88],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[94,95,96,97,98,99,100,101,102,103,104,105,106,107,27,108,109,110,111,112],"openmm md","how","decision","pick","linux","analyze","tool","stack","open","NVIDIA","gpu","license","workflow","windows","free","molecular dynamics","local","do","MCP",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":125,"publishedAt":37},"01M6DF76C1MG85VEWP8VZCBNMN","visual-review","Take screenshots of web pages and UI using Playwright for visual review and iteration","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fvisual-review\u002FSKILL.md",[119,122],{"categoryNo":120,"categoryName":121,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":123,"categoryName":124,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000008","测试与质量",[126,127,128,129,130,131,132,133,134,135,95,136,137,138,139],"review","visual","visual review","pages","web","false","iteration","take","check","slides","ui","screenshot","playwright","screenshots",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":146,"publishedAt":37},"01M6DF73AQVCBZKEN0YXEX9FXP","status","Diagnostic status report — shows metaswarm installation state, project setup, and potential issues","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fstatus\u002FSKILL.md",[],[142,147,148,149,150,151,152,153],"setup","report","project","installation","project setup","issues","state",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":161,"publishedAt":37},"01M6DF6X6C2XB0P6GX76P7TTYV","start","Use when starting work on any task, when the user mentions metaswarm, or when the user wants to begin tracked development work","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fstart\u002FSKILL.md",[160],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},[156,162,75,163,164,165,27,166,167,168,169],"start issue","issue","ready","work on issue","user","work","work on","development",{"skillNo":171,"name":147,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":175,"publishedAt":37},"01M6DF6QMJ9AJKFKHHKRT005PQ","Interactive project setup — detects your project, configures metaswarm, writes project-local files","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fsetup\u002FSKILL.md",[],[147,149,110,176,151,177],"files","interactive"]