[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HYAH05HGV7SVWSVR8PJRQD":3,"skill-same:01M6HYAH05HGV7SVWSVR8PJRQD":68},{"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":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":6,"ownerHtmlUrl":45,"ownerBlogUrl":46,"ownerDescription":6,"updatedAt":47,"install":48,"resources":61},"01M6HYAH05HGV7SVWSVR8PJRQD","write-special-chars-readback",null,"Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) using a Python heredoc script, with mandatory post-write verification via read_file and cleanup of \u002Ftmp helper scripts.","HKUDS\u002FAgentPilot","HKUDS","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F118165258?v=4","01M6HW8VRNZP64G0P4MVJW2KKQ","✨Data Intelligence Lab@HKU✨","01M6HW8VWZVHBRHYH3T330PFWV",7993,"MIT","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Flegacy\u002Fv1\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-readback\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"write","readback","write special chars readback","python","cleanup","verification","file","template","read","scripts","via","post","helper","with","script","for","2026-11-10 10:12:30",false,"---\nname: write-special-chars-readback\ndescription: Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) using a Python heredoc script, with mandatory post-write verification via read_file and cleanup of \u002Ftmp helper scripts.\n---\n\n# Write File Special Characters Workaround (Verified)\n\n## Problem\n\nThe `write_file` tool may fail with `[ERROR] unknown error` when file content\ncontains special characters such as:\n\n- Apostrophes \u002F single quotes (`'`)\n- Backticks (`` ` ``)\n- Template literals (`` `${variable}` ``) common in TypeScript\u002FJavaScript\n- Complex combinations of quotes and escape sequences\n\nThis is especially common when writing TypeScript, JavaScript, shell scripts,\nor any source file with string interpolation syntax.\n\n## Solution: Python Heredoc Workaround\n\nWrite a small Python script to `\u002Ftmp\u002F` that uses triple-quoted strings to\nembed the file content, then execute it with `python3`.\n\n### Step-by-Step\n\n1. **Compose a Python writer script** using triple-quoted strings (`\"\"\"...\"\"\"`).\n2. **Write the Python script itself to `\u002Ftmp\u002F`** — its content is plain enough\n   that `write_file` will succeed (no problematic characters in the wrapper).\n3. **Execute** the script with `run_shell`: `python3 \u002Ftmp\u002Fwrite_\u003Cname>.py`\n4. **Verify** the written file with `read_file` to confirm contents are correct.\n5. **Clean up** the `\u002Ftmp` helper script: `rm \u002Ftmp\u002Fwrite_\u003Cname>.py`\n\n### Escaping Rules Inside the Python Script\n\n| Character | How to handle |\n|-----------|--------------|\n| Backslash `\\` | Escape as `\\\\` |\n| Triple double-quote `\"\"\"` | Escape as `\\\"\\\"\\\"` or use `'''` strings instead |\n| Everything else (backticks, `$`, `'`, `{}`) | No escaping needed |\n\n### Template\n\n```python\n#!\u002Fusr\u002Fbin\u002Fenv python3\ncontent = \"\"\"\n\u003CYOUR FILE CONTENT HERE>\n\"\"\".lstrip(\"\\n\")\n\nwith open(\"\u002Fpath\u002Fto\u002Ftarget\u002Ffile.ts\", \"w\") as f:\n    f.write(content)\n\nprint(\"File written successfully.\")\n```\n\n### Concrete Example\n\nSuppose you need to write a TypeScript file with template literals and\napostrophes that causes `write_file` to fail:\n\n**Step 1 — Write the Python helper to `\u002Ftmp\u002F`:**\n\nUse `write_file` with path `\u002Ftmp\u002Fwrite_greeting.py` and content:\n\n```python\n#!\u002Fusr\u002Fbin\u002Fenv python3\ncontent = \"\"\"\nexport function greet(name: string): string {\n  const msg = `Hello, ${name}! It's a great day.`;\n  console.log(`Greeting: ${msg}`);\n  return msg;\n}\n\"\"\".lstrip(\"\\n\")\n\nwith open(\"\u002Fapp\u002Fsrc\u002Fgreeting.ts\", \"w\") as f:\n    f.write(content)\n\nprint(\"Written: \u002Fapp\u002Fsrc\u002Fgreeting.ts\")\n```\n\n**Step 2 — Execute the helper:**\n\n```bash\npython3 \u002Ftmp\u002Fwrite_greeting.py\n```\n\n**Step 3 — Verify with `read_file`:**\n\nUse `read_file` with path `\u002Fapp\u002Fsrc\u002Fgreeting.ts` to confirm the file content\nis exactly what was intended. This catches silent truncation or encoding\nissues that shell `cat` output might obscure.\n\n**Step 4 — Clean up the helper:**\n\n```bash\nrm \u002Ftmp\u002Fwrite_greeting.py\n```\n\nThis keeps `\u002Ftmp` tidy and prevents stale helper scripts from being confused\nwith current ones on subsequent runs.\n\n## Standard Post-Write Checklist\n\nAfter every use of this pattern, always complete **all three** of these steps:\n\n| Step | Action | Why |\n|------|---------|-----|\n| ✅ Execute | `python3 \u002Ftmp\u002Fwrite_\u003Cname>.py` | Writes the target file |\n| ✅ Verify | `read_file` on the target path | Confirms content integrity |\n| ✅ Clean up | `rm \u002Ftmp\u002Fwrite_\u003Cname>.py` | Prevents stale helper accumulation |\n\nSkipping verification risks silently shipping a truncated or malformed file.\nSkipping cleanup risks confusion when the same helper name is reused later.\n\n## When to Use This Pattern\n\n- `write_file` returns `[ERROR] unknown error` for a specific file.\n- The file contains TypeScript\u002FJavaScript template literals.\n- The file contains mixed quote styles or shell-like special characters.\n- Any time direct file writing fails and content cannot be easily sanitized.\n\n## Multiple Files\n\nFor writing several problematic files in one pass, consolidate them into a\nsingle Python script:\n\n```python\n#!\u002Fusr\u002Fbin\u002Fenv python3\nimport os\n\nfiles = {\n    \"\u002Fapp\u002Fsrc\u002Fcomponent.tsx\": \"\"\"\nimport React from 'react';\n\nconst App = () => (\n  \u003Cdiv className={`container`}>\n    \u003Ch1>It's working!\u003C\u002Fh1>\n  \u003C\u002Fdiv>\n);\n\nexport default App;\n\"\"\".lstrip(\"\\n\"),\n\n    \"\u002Fapp\u002Fsrc\u002Futils.ts\": \"\"\"\nexport const format = (val: number) => `Value: ${val.toFixed(2)}`;\n\"\"\".lstrip(\"\\n\"),\n}\n\nfor path, content in files.items():\n    os.makedirs(os.path.dirname(path), exist_ok=True)\n    with open(path, \"w\") as f:\n        f.write(content)\n    print(f\"Written: {path}\")\n```\n\nAfter running the multi-file script:\n\n1. Use `read_file` on **each** target path to verify all files were written\n   correctly.\n2. Then clean up: `rm \u002Ftmp\u002Fwrite_\u003Cname>.py`\n\n## Key Advantages\n\n- **No shell escaping required** — Python triple-quoted strings are literal.\n- **Handles all TypeScript syntax** — template literals, generics, JSX, etc.\n- **Atomic** — the target file is only created if the Python script succeeds.\n- **Debuggable** — the intermediate `.py` file can be inspected if needed.\n- **Cleanup (required):** `rm \u002Ftmp\u002Fwrite_*.py` after all files are written —\n  this is a mandatory step, not optional.\n- **Verified** — always follow up with `read_file` on the target file to\n  confirm content integrity before considering the task complete.\n","# Write File Special Characters Workaround (Verified)\n\n## Problem\n\nThe `write_file` tool may fail with `[ERROR] unknown error` when file content\ncontains special characters such as:\n\n- Apostrophes \u002F single quotes (`'`)\n- Backticks (`` ` ``)\n- Template literals (`` `${variable}` ``) common in TypeScript\u002FJavaScript\n- Complex combinations of quotes and escape sequences\n\nThis is especially common when writing TypeScript, JavaScript, shell scripts,\nor any source file with string interpolation syntax.\n\n## Solution: Python Heredoc Workaround\n\nWrite a small Python script to `\u002Ftmp\u002F` that uses triple-quoted strings to\nembed the file content, then execute it with `python3`.\n\n### Step-by-Step\n\n1. **Compose a Python writer script** using triple-quoted strings (`\"\"\"...\"\"\"`).\n2. **Write the Python script itself to `\u002Ftmp\u002F`** — its content is plain enough\n   that `write_file` will succeed (no problematic characters in the wrapper).\n3. **Execute** the script with `run_shell`: `python3 \u002Ftmp\u002Fwrite_\u003Cname>.py`\n4. **Verify** the written file with `read_file` to confirm contents are correct.\n5. **Clean up** the `\u002Ftmp` helper script: `rm \u002Ftmp\u002Fwrite_\u003Cname>.py`\n\n### Escaping Rules Inside the Python Script\n\n| Character | How to handle |\n|-----------|--------------|\n| Backslash `\\` | Escape as `\\\\` |\n| Triple double-quote `\"\"\"` | Escape as `\\\"\\\"\\\"` or use `'''` strings instead |\n| Everything else (backticks, `$`, `'`, `{}`) | No escaping needed |\n\n### Template\n\n```python\n#!\u002Fusr\u002Fbin\u002Fenv python3\ncontent = \"\"\"\n\u003CYOUR FILE CONTENT HERE>\n\"\"\".lstrip(\"\\n\")\n\nwith open(\"\u002Fpath\u002Fto\u002Ftarget\u002Ffile.ts\", \"w\") as f:\n    f.write(content)\n\nprint(\"File written successfully.\")\n```\n\n### Concrete Example\n\nSuppose you need to write a TypeScript file with template literals and\napostrophes that causes `write_file` to fail:\n\n**Step 1 — Write the Python helper to `\u002Ftmp\u002F`:**\n\nUse `write_file` with path `\u002Ftmp\u002Fwrite_greeting.py` and content:\n\n```python\n#!\u002Fusr\u002Fbin\u002Fenv python3\ncontent = \"\"\"\nexport function greet(name: string): string {\n  const msg = `Hello, ${name}! It's a great day.`;\n  console.log(`Greeting: ${msg}`);\n  return msg;\n}\n\"\"\".lstrip(\"\\n\")\n\nwith open(\"\u002Fapp\u002Fsrc\u002Fgreeting.ts\", \"w\") as f:\n    f.write(content)\n\nprint(\"Written: \u002Fapp\u002Fsrc\u002Fgreeting.ts\")\n```\n\n**Step 2 — Execute the helper:**\n\n```bash\npython3 \u002Ftmp\u002Fwrite_greeting.py\n```\n\n**Step 3 — Verify with `read_file`:**\n\nUse `read_file` with path `\u002Fapp\u002Fsrc\u002Fgreeting.ts` to confirm the file content\nis exactly what was intended. This catches silent truncation or encoding\nissues that shell `cat` output might obscure.\n\n**Step 4 — Clean up the helper:**\n\n```bash\nrm \u002Ftmp\u002Fwrite_greeting.py\n```\n\nThis keeps `\u002Ftmp` tidy and prevents stale helper scripts from being confused\nwith current ones on subsequent runs.\n\n## Standard Post-Write Checklist\n\nAfter every use of this pattern, always complete **all three** of these steps:\n\n| Step | Action | Why |\n|------|---------|-----|\n| ✅ Execute | `python3 \u002Ftmp\u002Fwrite_\u003Cname>.py` | Writes the target file |\n| ✅ Verify | `read_file` on the target path | Confirms content integrity |\n| ✅ Clean up | `rm \u002Ftmp\u002Fwrite_\u003Cname>.py` | Prevents stale helper accumulation |\n\nSkipping verification risks silently shipping a truncated or malformed file.\nSkipping cleanup risks confusion when the same helper name is reused later.\n\n## When to Use This Pattern\n\n- `write_file` returns `[ERROR] unknown error` for a specific file.\n- The file contains TypeScript\u002FJavaScript template literals.\n- The file contains mixed quote styles or shell-like special characters.\n- Any time direct file writing fails and content cannot be easily sanitized.\n\n## Multiple Files\n\nFor writing several problematic files in one pass, consolidate them into a\nsingle Python script:\n\n```python\n#!\u002Fusr\u002Fbin\u002Fenv python3\nimport os\n\nfiles = {\n    \"\u002Fapp\u002Fsrc\u002Fcomponent.tsx\": \"\"\"\nimport React from 'react';\n\nconst App = () => (\n  \u003Cdiv className={`container`}>\n    \u003Ch1>It's working!\u003C\u002Fh1>\n  \u003C\u002Fdiv>\n);\n\nexport default App;\n\"\"\".lstrip(\"\\n\"),\n\n    \"\u002Fapp\u002Fsrc\u002Futils.ts\": \"\"\"\nexport const format = (val: number) => `Value: ${val.toFixed(2)}`;\n\"\"\".lstrip(\"\\n\"),\n}\n\nfor path, content in files.items():\n    os.makedirs(os.path.dirname(path), exist_ok=True)\n    with open(path, \"w\") as f:\n        f.write(content)\n    print(f\"Written: {path}\")\n```\n\nAfter running the multi-file script:\n\n1. Use `read_file` on **each** target path to verify all files were written\n   correctly.\n2. Then clean up: `rm \u002Ftmp\u002Fwrite_\u003Cname>.py`\n\n## Key Advantages\n\n- **No shell escaping required** — Python triple-quoted strings are literal.\n- **Handles all TypeScript syntax** — template literals, generics, JSX, etc.\n- **Atomic** — the target file is only created if the Python script succeeds.\n- **Debuggable** — the intermediate `.py` file can be inspected if needed.\n- **Cleanup (required):** `rm \u002Ftmp\u002Fwrite_*.py` after all files are written —\n  this is a mandatory step, not optional.\n- **Verified** — always follow up with `read_file` on the target file to\n  confirm content integrity before considering the task complete.\n",{"name":5,"description":7},"main","6b84b0689ca0d9e7b1e4061188ff6b60758e0f8a","openspace\u002Flegacy\u002Fv1\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-readback",940,"https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot","https:\u002F\u002Fgithub.com\u002FHKUDS","https:\u002F\u002Fsites.google.com\u002Fview\u002Fchaoh","2026-11-06 23:04:01",{"source":8,"skillName":5,"commands":49,"prompt":59,"zipAvailable":60},[50,53,56],{"tool":51,"command":52},"npx","npx skills add HKUDS\u002FAgentPilot --skill write-special-chars-readback",{"tool":54,"command":55},"bunx","bunx skills add HKUDS\u002FAgentPilot --skill write-special-chars-readback",{"tool":57,"command":58},"pnpm","pnpm dlx skills add HKUDS\u002FAgentPilot --skill write-special-chars-readback","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Flegacy\u002Fv1\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-readback\u002FSKILL.md",true,[62],{"path":63,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":66,"sourceHtmlUrl":67},".skill_id","OTHER","其他",65,"https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Flegacy\u002Fv1\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-readback\u002F.skill_id",[69,88,107,132,155,173],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":35},"01M6HYB297NDABRERJRVG0K8R0","agentpilot","Set up AgentPilot and use its single entry to prepare missing inputs and run configured RSI experiments. Use when the user requests AgentPilot installation or work with AgentPilot.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fplugins\u002Fagentpilot\u002Fskills\u002Fagentpilot\u002FSKILL.md",[],[71,76,77,32,78,79,80,81,82,83,84,85,86,87],"run","requests","missing","installation","rsi","up","use","user","work","SET","prepare","experiments",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":35},"01M6HYAYWXTTE1J7DJM0MFNQ4H","remember","Review auto-memory entries and propose promotions to OPENSPACE.md, OPENSPACE.local.md, or retained auto-memory topics; detect duplicates, stale facts, conflicts, and ambiguous entries before making changes.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fopenspace\u002Fskills\u002Fremember\u002FSKILL.md",[],[90,95,96,97,98,99,100,101,102,103,104,105,106],"duplicates","auto","memory","review","stale","openspace","changes","facts","detect","entries","local","conflicts",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":118,"publishedAt":35},"01M6HYAVMPM4SBDV60R2B5HPV8","skill-discovery","Search reusable OpenSpace skills locally, and browse cloud packages step by step when a cloud skill may help. Reusing proven skills saves tokens, improves reliability, and extends your capabilities beyond built-in tools.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fopenspace\u002Fhost_skills\u002Fskill-discovery\u002FSKILL.md",[113],{"categoryNo":114,"categoryName":115,"taxonomyType":116,"taxonomyTypeDesc":117},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[119,120,121,122,123,100,124,125,126,127,128,129,130,131],"skill discovery","discovery","browse","capabilities","search","step by step","tokens","reusable","cloud","Tools","reliability","packages","help",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":139,"publishedAt":35},"01M6HYAR811B3RB0M50RBEDGN6","delegate-task","Delegate tasks to OpenSpace — a full-stack autonomous worker for coding, DevOps, web research, and desktop automation, backed by an extensive MCP tool and skill library. Skills auto-improve through use, reducing token consumption over time. A cloud community lets agents share and collectively evolve reusable skills.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fopenspace\u002Fhost_skills\u002Fdelegate-task\u002FSKILL.md",[138],{"categoryNo":114,"categoryName":115,"taxonomyType":116,"taxonomyTypeDesc":117},[140,141,142,143,82,100,34,144,145,146,126,96,147,148,149,150,151,152,153,154],"delegate","task","delegate task","desktop automation","worker","time","community","autonomous","tool","stack","improve","share","tasks","automation","MCP",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":161,"publishedAt":35},"01M6HYAM9FSGV6E52AYENDQXYH","write-special-chars-ts-check","Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) using a Python heredoc script, plus a reliable TypeScript type-checking step that filters output to only the newly-written files to avoid being misled by pre-existing errors.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Flegacy\u002Fv1\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-ts-check\u002FSKILL.md",[],[162,19,163,26,164,34,165,33,166,167,168,169,170,171,25,22,172],"write special chars ts check","check","type-checking","errors","output","type","files","filters","only","Existing","typescript",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":179,"publishedAt":35},"01M6HYAE5C4BBYW27ZEBX4YR7A","write-special-chars-heredoc","Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) by using a Python heredoc script executed via shell.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Flegacy\u002Fv1\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-heredoc\u002FSKILL.md",[],[180,19,34,33,29,26,181,25,22],"write special chars heredoc","shell"]